{"version":3,"file":"experience.mjs","names":[],"sources":["../src/experience.ts"],"sourcesContent":["import { IsoCountryCode } from '@transcend-io/privacy-types';\n// main\nimport { applyEnum } from '@transcend-io/type-utils';\n\nimport {\n  DEFAULT_EXPERIENCE_PURPOSE_SCOPES,\n  DEFAULT_EXPERIENCE_PURPOSE_OPT_OUTS,\n  REGIME_DISPLAY_PRIORITY,\n  REGIME_TIMEZONES,\n} from './constants.js';\nimport type { PrivacyRegime } from './core.js';\nimport { BrowserLanguage, OnConsentExpiry, RegionsOperator } from './enums/index.js';\n// local\nimport { PrivacyRegimeEnum } from './enums/privacyRegime.js';\nimport { Purpose } from './enums/purpose.js';\nimport { InitialViewState } from './enums/viewState.js';\nimport { DEFAULT_VIEW_STATE_BY_PRIVACY_REGIME } from './ui.js';\n\nexport interface Region {\n  /** A country's ISO code */\n  country: IsoCountryCode;\n  /** A country subdivision ISO code */\n  countrySubDivision?: string;\n}\n\nexport interface ExperiencePurposeInput {\n  /** name of the purpose */\n  purpose: Purpose;\n  /** opt out by default */\n  defaultOptOut: boolean;\n}\n\nexport interface ExperienceInput {\n  /** The regime determining the default experience */\n  name: PrivacyRegime;\n  /** The display name of the experience */\n  displayName: string;\n  /** A list of regions to be included/not included in this experience */\n  regions: Region[];\n  /** A list of browser languages that this experience applies to */\n  browserLanguages: string[];\n  /** A list of browser time zones that this experience applies to */\n  browserTimeZones: string[];\n  /** Whether the listed regions are included or excluded from the experience */\n  operator: RegionsOperator;\n  /** If data subject linked to multiple experiences, display priority for experiences. Lower number, higher priority. */\n  displayPriority: number;\n  /** The view state to display on transcend.showConsentManager() */\n  viewState: InitialViewState;\n  /** experience purposes to be added */\n  experiencePurposeInputs: ExperiencePurposeInput[];\n  /** Time in months after which a user's opt-in consent should expire */\n  consentExpiry: number;\n  /** Behavior to exhibit when the user's consent has expired */\n  onConsentExpiry: OnConsentExpiry;\n}\n\n// default to []\n// Don't put this into constants or you will regret it (per the constants.ts warning)\nexport const REGIME_REGIONS: Record<PrivacyRegime, Region[]> = {\n  CPRA: [{ country: 'US', countrySubDivision: 'US-CA' }],\n  GDPR: [\n    { country: 'EU' },\n    { country: 'GB' },\n    { country: 'NO' },\n    { country: 'IS' },\n    { country: 'LI' },\n  ],\n  LGPD: [{ country: 'BR' }],\n  CDPA: [{ country: 'US', countrySubDivision: 'US-VA' }],\n  CPA: [{ country: 'US', countrySubDivision: 'US-CO' }],\n  UCPA: [{ country: 'US', countrySubDivision: 'US-UT' }],\n  NEVADA_SB220: [{ country: 'US', countrySubDivision: 'US-NV' }],\n  nFADP: [{ country: 'CH' }],\n  US_DNSS: [\n    { country: 'US', countrySubDivision: 'US-CA' },\n    { country: 'US', countrySubDivision: 'US-VA' },\n    { country: 'US', countrySubDivision: 'US-CO' },\n    { country: 'US', countrySubDivision: 'US-NV' },\n    { country: 'US', countrySubDivision: 'US-TX' },\n    { country: 'US', countrySubDivision: 'US-CT' },\n    { country: 'US', countrySubDivision: 'US-OR' },\n    { country: 'US', countrySubDivision: 'US-MT' },\n    { country: 'US', countrySubDivision: 'US-UT' },\n    { country: 'US', countrySubDivision: 'US-IA' },\n    { country: 'US', countrySubDivision: 'US-DE' },\n    { country: 'US', countrySubDivision: 'US-NH' },\n    { country: 'US', countrySubDivision: 'US-NE' },\n    { country: 'US', countrySubDivision: 'US-NJ' },\n  ],\n};\n\n// default to []\n// Don't put this into constants or you will regret it (per the constants.ts warning)\nexport const REGIME_LANGUAGES: Record<PrivacyRegime, string[]> = {\n  GDPR: [\n    BrowserLanguage['Bulgarian (Bulgaria)'],\n    BrowserLanguage['Croatian (Croatia)'],\n    BrowserLanguage['Czech (Czech Republic)'],\n    BrowserLanguage['Danish (Denmark)'],\n    BrowserLanguage['Dutch (Belgium)'],\n    BrowserLanguage['Dutch (Netherlands)'],\n    BrowserLanguage['English (Ireland)'],\n    BrowserLanguage['Estonian (Estonia)'],\n    BrowserLanguage['Finnish (Finland)'],\n    BrowserLanguage['French (Belgium)'],\n    BrowserLanguage['French (France)'],\n    BrowserLanguage['French (Luxembourg)'],\n    BrowserLanguage['German (Austria)'],\n    BrowserLanguage['German (Germany)'],\n    BrowserLanguage['German (Liechtenstein)'],\n    BrowserLanguage['German (Luxembourg)'],\n    BrowserLanguage['Greek (Greece)'],\n    BrowserLanguage['Hungarian (Hungary)'],\n    BrowserLanguage['Icelandic (Iceland)'],\n    BrowserLanguage['Irish (Ireland)'],\n    BrowserLanguage['Italian (Italy)'],\n    BrowserLanguage['Latvian (Latvia)'],\n    BrowserLanguage['Lithuanian (Lithuania)'],\n    BrowserLanguage['Maltese (Malta)'],\n    BrowserLanguage['Norwegian (Norway)'],\n    BrowserLanguage['Norwegian Bokmål (Norway)'],\n    BrowserLanguage['Norwegian Nynorsk (Norway)'],\n    BrowserLanguage['Polish (Poland)'],\n    BrowserLanguage['Portuguese (Portugal)'],\n    BrowserLanguage['Romanian (Romania)'],\n    BrowserLanguage['Slovak (Slovakia)'],\n    BrowserLanguage['Slovenian (Slovenia)'],\n    BrowserLanguage['Spanish (Espa\\u00f1a)'],\n    BrowserLanguage['Swedish (Finland)'],\n    BrowserLanguage['Swedish (Finland)'],\n    BrowserLanguage['Swedish (Sweden)'],\n  ],\n  LGPD: [BrowserLanguage['Portuguese (Brazil)']],\n  nFADP: [\n    BrowserLanguage['German (Switzerland)'],\n    BrowserLanguage['French (Switzerland)'],\n    BrowserLanguage['Italian (Switzerland)'],\n    BrowserLanguage['English (Switzerland)'],\n    BrowserLanguage['Portuguese (Switzerland)'],\n    BrowserLanguage['Swiss German (Switzerland)'],\n  ],\n};\n\n// default to 0\nexport const REGIME_CONSENT_EXPIRY: Record<PrivacyRegime, number> = {\n  GDPR: 12,\n};\n\n// default to prompt\nexport const REGIME_ON_CONSENT_EXPIRY: Record<PrivacyRegime, OnConsentExpiry> = {\n  GDPR: OnConsentExpiry.ResetOptIns,\n};\n\n/**\n * construct default experience for regime\n * @param regime - regime\n * @returns ExperienceInput\n */\nexport function defaultExperience(regime: PrivacyRegime): ExperienceInput {\n  const isUnknown = regime === 'Unknown';\n  const regimeEnum = PrivacyRegimeEnum[regime as keyof typeof PrivacyRegimeEnum];\n  return {\n    name: regime,\n    displayName: regime,\n    regions: REGIME_REGIONS[regime] ?? [],\n    operator: isUnknown ? RegionsOperator.NotIn : RegionsOperator.In,\n    displayPriority: REGIME_DISPLAY_PRIORITY[regime] ?? 20,\n    viewState: DEFAULT_VIEW_STATE_BY_PRIVACY_REGIME[regimeEnum] ?? InitialViewState.Hidden,\n    browserLanguages: REGIME_LANGUAGES[regime] ?? [],\n    browserTimeZones: REGIME_TIMEZONES[regime] ?? [],\n    experiencePurposeInputs: DEFAULT_EXPERIENCE_PURPOSE_SCOPES[regime].map((purpose: Purpose) => ({\n      purpose,\n      defaultOptOut: DEFAULT_EXPERIENCE_PURPOSE_OPT_OUTS[regime]?.includes(purpose) ?? false,\n    })),\n    consentExpiry: REGIME_CONSENT_EXPIRY[regime] ?? 0,\n    onConsentExpiry: REGIME_ON_CONSENT_EXPIRY[regime] ?? OnConsentExpiry.Prompt,\n  };\n}\n\nexport const DEFAULT_EXPERIENCES = applyEnum(PrivacyRegimeEnum, defaultExperience);\n"],"mappings":"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"}