{"version":3,"file":"static/js/ajs-destination.a6816232.chunk.js","mappings":"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","sources":["node_modules/@segment/analytics-next/src/lib/is-plan-event-enabled.ts","node_modules/@segment/analytics-next/src/plugins/ajs-destination/loader.ts","node_modules/@segment/analytics-next/src/plugins/ajs-destination/utils.ts","node_modules/@segment/analytics-next/src/plugins/ajs-destination/index.ts"],"sourcesContent":["import { PlanEvent, TrackPlan } from '../core/events/interfaces'\n\n/**\n * Determines whether a track event is allowed to be sent based on the\n * user's tracking plan.\n * If the user does not have a tracking plan or the event is allowed based\n * on the tracking plan configuration, returns true.\n */\nexport function isPlanEventEnabled(\n plan: TrackPlan | undefined,\n planEvent: PlanEvent | undefined\n): boolean {\n // Always prioritize the event's `enabled` status\n if (typeof planEvent?.enabled === 'boolean') {\n return planEvent.enabled\n }\n\n // Assume absence of a tracking plan means events are enabled\n return plan?.__default?.enabled ?? true\n}\n","import { Analytics } from '../../core/analytics'\nimport { LegacyIntegrationConfiguration } from '../../browser'\nimport { getNextIntegrationsURL } from '../../lib/parse-cdn'\nimport { Context } from '../../core/context'\nimport { User } from '../../core/user'\nimport { loadScript, unloadScript } from '../../lib/load-script'\nimport {\n LegacyIntegration,\n ClassicIntegrationBuilder,\n ClassicIntegrationSource,\n} from './types'\n\nfunction normalizeName(name: string): string {\n return name.toLowerCase().replace('.', '').replace(/\\s+/g, '-')\n}\n\nfunction obfuscatePathName(pathName: string, obfuscate = false): string | void {\n return obfuscate ? btoa(pathName).replace(/=/g, '') : undefined\n}\n\nexport function resolveIntegrationNameFromSource(\n integrationSource: ClassicIntegrationSource\n) {\n return (\n 'Integration' in integrationSource\n ? integrationSource.Integration\n : integrationSource\n ).prototype.name\n}\n\nfunction recordLoadMetrics(fullPath: string, ctx: Context, name: string): void {\n try {\n const [metric] =\n window?.performance?.getEntriesByName(fullPath, 'resource') ?? []\n // we assume everything that took under 100ms is cached\n metric &&\n ctx.stats.gauge('legacy_destination_time', Math.round(metric.duration), [\n name,\n ...(metric.duration < 100 ? ['cached'] : []),\n ])\n } catch (_) {\n // not available\n }\n}\n\nexport function buildIntegration(\n integrationSource: ClassicIntegrationSource,\n integrationSettings: { [key: string]: any },\n analyticsInstance: Analytics\n): LegacyIntegration {\n let integrationCtr: ClassicIntegrationBuilder\n // GA and Appcues use a different interface to instantiating integrations\n if ('Integration' in integrationSource) {\n const analyticsStub = {\n user: (): User => analyticsInstance.user(),\n addIntegration: (): void => {},\n }\n\n integrationSource(analyticsStub)\n integrationCtr = integrationSource.Integration\n } else {\n integrationCtr = integrationSource\n }\n\n const integration = new integrationCtr(integrationSettings)\n integration.analytics = analyticsInstance\n return integration\n}\n\nexport async function loadIntegration(\n ctx: Context,\n name: string,\n version: string,\n obfuscate?: boolean\n): Promise {\n const pathName = normalizeName(name)\n const obfuscatedPathName = obfuscatePathName(pathName, obfuscate)\n const path = getNextIntegrationsURL()\n\n const fullPath = `${path}/integrations/${\n obfuscatedPathName ?? pathName\n }/${version}/${obfuscatedPathName ?? pathName}.dynamic.js.gz`\n\n try {\n await loadScript(fullPath)\n recordLoadMetrics(fullPath, ctx, name)\n } catch (err) {\n ctx.stats.gauge('legacy_destination_time', -1, [`plugin:${name}`, `failed`])\n throw err\n }\n\n // @ts-ignore\n const deps: string[] = window[`${pathName}Deps`]\n await Promise.all(deps.map((dep) => loadScript(path + dep + '.gz')))\n\n // @ts-ignore\n window[`${pathName}Loader`]()\n\n return window[\n // @ts-ignore\n `${pathName}Integration`\n ] as ClassicIntegrationSource\n}\n\nexport async function unloadIntegration(\n name: string,\n version: string,\n obfuscate?: boolean\n): Promise {\n const path = getNextIntegrationsURL()\n const pathName = normalizeName(name)\n const obfuscatedPathName = obfuscatePathName(name, obfuscate)\n\n const fullPath = `${path}/integrations/${\n obfuscatedPathName ?? pathName\n }/${version}/${obfuscatedPathName ?? pathName}.dynamic.js.gz`\n\n return unloadScript(fullPath)\n}\n\nexport function resolveVersion(\n settings?: LegacyIntegrationConfiguration\n): string {\n return (\n settings?.versionSettings?.override ??\n settings?.versionSettings?.version ??\n 'latest'\n )\n}\n","import { Integrations } from '@segment/analytics-core'\nimport { LegacyIntegrationConfiguration } from '../..'\n\nexport const isInstallableIntegration = (\n name: string,\n integrationSettings: LegacyIntegrationConfiguration\n) => {\n const { type, bundlingStatus, versionSettings } = integrationSettings\n // We use `!== 'unbundled'` (versus `=== 'bundled'`) to be inclusive of\n // destinations without a defined value for `bundlingStatus`\n const deviceMode =\n bundlingStatus !== 'unbundled' &&\n (type === 'browser' || versionSettings?.componentTypes?.includes('browser'))\n\n // checking for iterable is a quick fix we need in place to prevent\n // errors showing Iterable as a failed destiantion. Ideally, we should\n // fix the Iterable metadata instead, but that's a longer process.\n return !name.startsWith('Segment') && name !== 'Iterable' && deviceMode\n}\n\nexport const isDisabledIntegration = (\n integrationName: string,\n globalIntegrations: Integrations\n) => {\n const allDisableAndNotDefined =\n globalIntegrations.All === false &&\n globalIntegrations[integrationName] === undefined\n\n return (\n globalIntegrations[integrationName] === false || allDisableAndNotDefined\n )\n}\n","import { Integrations, JSONObject } from '../../core/events'\nimport { Alias, Facade, Group, Identify, Page, Track } from '@segment/facade'\nimport { Analytics, InitOptions } from '../../core/analytics'\nimport { LegacySettings } from '../../browser'\nimport { isOffline, isOnline } from '../../core/connection'\nimport { Context, ContextCancelation } from '../../core/context'\nimport { isServer } from '../../core/environment'\nimport { DestinationPlugin, Plugin } from '../../core/plugin'\nimport { attempt } from '@segment/analytics-core'\nimport { isPlanEventEnabled } from '../../lib/is-plan-event-enabled'\nimport { mergedOptions } from '../../lib/merged-options'\nimport { pWhile } from '../../lib/p-while'\nimport { PriorityQueue } from '../../lib/priority-queue'\nimport { PersistedPriorityQueue } from '../../lib/priority-queue/persisted'\nimport {\n applyDestinationMiddleware,\n DestinationMiddlewareFunction,\n} from '../middleware'\nimport {\n buildIntegration,\n loadIntegration,\n resolveIntegrationNameFromSource,\n resolveVersion,\n unloadIntegration,\n} from './loader'\nimport { LegacyIntegration, ClassicIntegrationSource } from './types'\nimport { isPlainObject } from '@segment/analytics-core'\nimport {\n isDisabledIntegration as shouldSkipIntegration,\n isInstallableIntegration,\n} from './utils'\n\nexport type ClassType = new (...args: unknown[]) => T\n\nasync function flushQueue(\n xt: Plugin,\n queue: PriorityQueue\n): Promise> {\n const failedQueue: Context[] = []\n\n if (isOffline()) {\n return queue\n }\n\n await pWhile(\n () => queue.length > 0 && isOnline(),\n async () => {\n const ctx = queue.pop()\n if (!ctx) {\n return\n }\n\n const result = await attempt(ctx, xt)\n const success = result instanceof Context\n if (!success) {\n failedQueue.push(ctx)\n }\n }\n )\n\n // re-add failed tasks\n failedQueue.map((failed) => queue.pushWithBackoff(failed))\n return queue\n}\n\nexport class LegacyDestination implements DestinationPlugin {\n name: string\n version: string\n settings: JSONObject\n options: InitOptions = {}\n type: Plugin['type'] = 'destination'\n middleware: DestinationMiddlewareFunction[] = []\n\n private _ready = false\n private _initialized = false\n private onReady: Promise | undefined\n private onInitialize: Promise | undefined\n private disableAutoISOConversion: boolean\n\n integrationSource?: ClassicIntegrationSource\n integration: LegacyIntegration | undefined\n\n buffer: PriorityQueue\n flushing = false\n\n constructor(\n name: string,\n version: string,\n writeKey: string,\n settings: JSONObject = {},\n options: InitOptions,\n integrationSource?: ClassicIntegrationSource\n ) {\n this.name = name\n this.version = version\n this.settings = { ...settings }\n this.disableAutoISOConversion = options.disableAutoISOConversion || false\n this.integrationSource = integrationSource\n\n // AJS-Renderer sets an extraneous `type` setting that clobbers\n // existing type defaults. We need to remove it if it's present\n if (this.settings['type'] && this.settings['type'] === 'browser') {\n delete this.settings['type']\n }\n\n this.options = options\n this.buffer = options.disableClientPersistence\n ? new PriorityQueue(4, [])\n : new PersistedPriorityQueue(4, `${writeKey}:dest-${name}`)\n\n this.scheduleFlush()\n }\n\n isLoaded(): boolean {\n return this._ready\n }\n\n ready(): Promise {\n return this.onReady ?? Promise.resolve()\n }\n\n async load(ctx: Context, analyticsInstance: Analytics): Promise {\n if (this._ready || this.onReady !== undefined) {\n return\n }\n\n const integrationSource =\n this.integrationSource ??\n (await loadIntegration(\n ctx,\n this.name,\n this.version,\n this.options.obfuscate\n ))\n\n this.integration = buildIntegration(\n integrationSource,\n this.settings,\n analyticsInstance\n )\n\n this.onReady = new Promise((resolve) => {\n const onReadyFn = (): void => {\n this._ready = true\n resolve(true)\n }\n\n this.integration!.once('ready', onReadyFn)\n })\n\n this.onInitialize = new Promise((resolve) => {\n const onInit = (): void => {\n this._initialized = true\n resolve(true)\n }\n\n this.integration!.on('initialize', onInit)\n })\n\n try {\n ctx.stats.increment('analytics_js.integration.invoke', 1, [\n `method:initialize`,\n `integration_name:${this.name}`,\n ])\n\n this.integration.initialize()\n } catch (error) {\n ctx.stats.increment('analytics_js.integration.invoke.error', 1, [\n `method:initialize`,\n `integration_name:${this.name}`,\n ])\n\n throw error\n }\n }\n\n unload(_ctx: Context, _analyticsInstance: Analytics): Promise {\n return unloadIntegration(this.name, this.version, this.options.obfuscate)\n }\n\n addMiddleware(...fn: DestinationMiddlewareFunction[]): void {\n this.middleware = this.middleware.concat(...fn)\n }\n\n shouldBuffer(ctx: Context): boolean {\n return (\n // page events can't be buffered because of destinations that automatically add page views\n ctx.event.type !== 'page' &&\n (isOffline() || this._ready === false || this._initialized === false)\n )\n }\n\n private async send(\n ctx: Context,\n clz: ClassType,\n eventType: 'track' | 'identify' | 'page' | 'alias' | 'group'\n ): Promise {\n if (this.shouldBuffer(ctx)) {\n this.buffer.push(ctx)\n this.scheduleFlush()\n return ctx\n }\n\n const plan = this.options?.plan?.track\n const ev = ctx.event.event\n\n if (plan && ev && this.name !== 'Segment.io') {\n // events are always sent to segment (legacy behavior)\n const planEvent = plan[ev]\n if (!isPlanEventEnabled(plan, planEvent)) {\n ctx.updateEvent('integrations', {\n ...ctx.event.integrations,\n All: false,\n 'Segment.io': true,\n })\n ctx.cancel(\n new ContextCancelation({\n retry: false,\n reason: `Event ${ev} disabled for integration ${this.name} in tracking plan`,\n type: 'Dropped by plan',\n })\n )\n return ctx\n } else {\n ctx.updateEvent('integrations', {\n ...ctx.event.integrations,\n ...planEvent?.integrations,\n })\n }\n\n if (planEvent?.enabled && planEvent?.integrations![this.name] === false) {\n ctx.cancel(\n new ContextCancelation({\n retry: false,\n reason: `Event ${ev} disabled for integration ${this.name} in tracking plan`,\n type: 'Dropped by plan',\n })\n )\n return ctx\n }\n }\n\n const afterMiddleware = await applyDestinationMiddleware(\n this.name,\n ctx.event,\n this.middleware\n )\n\n if (afterMiddleware === null) {\n return ctx\n }\n\n const event = new clz(afterMiddleware, {\n traverse: !this.disableAutoISOConversion,\n })\n\n ctx.stats.increment('analytics_js.integration.invoke', 1, [\n `method:${eventType}`,\n `integration_name:${this.name}`,\n ])\n\n try {\n if (this.integration) {\n await this.integration.invoke.call(this.integration, eventType, event)\n }\n } catch (err) {\n ctx.stats.increment('analytics_js.integration.invoke.error', 1, [\n `method:${eventType}`,\n `integration_name:${this.name}`,\n ])\n throw err\n }\n\n return ctx\n }\n\n async track(ctx: Context): Promise {\n return this.send(ctx, Track as ClassType, 'track')\n }\n\n async page(ctx: Context): Promise {\n if (this.integration?._assumesPageview && !this._initialized) {\n this.integration.initialize()\n }\n\n return this.onInitialize!.then(() => {\n return this.send(ctx, Page as ClassType, 'page')\n })\n }\n\n async identify(ctx: Context): Promise {\n return this.send(ctx, Identify as ClassType, 'identify')\n }\n\n async alias(ctx: Context): Promise {\n return this.send(ctx, Alias as ClassType, 'alias')\n }\n\n async group(ctx: Context): Promise {\n return this.send(ctx, Group as ClassType, 'group')\n }\n\n private scheduleFlush(): void {\n if (this.flushing) {\n return\n }\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n setTimeout(async () => {\n this.flushing = true\n this.buffer = await flushQueue(this, this.buffer)\n this.flushing = false\n\n if (this.buffer.todo > 0) {\n this.scheduleFlush()\n }\n }, Math.random() * 5000)\n }\n}\n\nexport function ajsDestinations(\n writeKey: string,\n settings: LegacySettings,\n globalIntegrations: Integrations = {},\n options: InitOptions = {},\n routingMiddleware?: DestinationMiddlewareFunction,\n legacyIntegrationSources?: ClassicIntegrationSource[]\n): LegacyDestination[] {\n if (isServer()) {\n return []\n }\n\n if (settings.plan) {\n options = options ?? {}\n options.plan = settings.plan\n }\n\n const routingRules = settings.middlewareSettings?.routingRules ?? []\n const remoteIntegrationsConfig = settings.integrations\n const localIntegrationsConfig = options.integrations\n // merged remote CDN settings with user provided options\n const integrationOptions = mergedOptions(settings, options ?? {}) as Record<\n string,\n JSONObject\n >\n\n const adhocIntegrationSources = legacyIntegrationSources?.reduce(\n (acc, integrationSource) => ({\n ...acc,\n [resolveIntegrationNameFromSource(integrationSource)]: integrationSource,\n }),\n {} as Record\n )\n\n const installableIntegrations = new Set([\n // Remotely configured installable integrations\n ...Object.keys(remoteIntegrationsConfig).filter((name) =>\n isInstallableIntegration(name, remoteIntegrationsConfig[name])\n ),\n\n // Directly provided integration sources are only installable if settings for them are available\n ...Object.keys(adhocIntegrationSources || {}).filter(\n (name) =>\n isPlainObject(remoteIntegrationsConfig[name]) ||\n isPlainObject(localIntegrationsConfig?.[name])\n ),\n ])\n\n return Array.from(installableIntegrations)\n .filter((name) => !shouldSkipIntegration(name, globalIntegrations))\n .map((name) => {\n const integrationSettings = remoteIntegrationsConfig[name]\n const version = resolveVersion(integrationSettings)\n const destination = new LegacyDestination(\n name,\n version,\n writeKey,\n integrationOptions[name],\n options,\n adhocIntegrationSources?.[name]\n )\n\n const routing = routingRules.filter(\n (rule) => rule.destinationName === name\n )\n if (routing.length > 0 && routingMiddleware) {\n destination.addMiddleware(routingMiddleware)\n }\n\n return destination\n })\n}\n"],"names":["isPlanEventEnabled","plan","planEvent","enabled","__default","normalizeName","name","toLowerCase","replace","obfuscatePathName","pathName","obfuscate","btoa","undefined","loadIntegration","ctx","version","obfuscatedPathName","path","getNextIntegrationsURL","fullPath","loadScript","metric","window","performance","getEntriesByName","stats","gauge","Math","round","duration","_","recordLoadMetrics","deps","Promise","all","map","dep","isInstallableIntegration","integrationSettings","type","bundlingStatus","versionSettings","deviceMode","componentTypes","includes","startsWith","isDisabledIntegration","integrationName","globalIntegrations","allDisableAndNotDefined","All","flushQueue","xt","queue","failedQueue","isOffline","pWhile","length","isOnline","pop","attempt","result","Context","push","failed","pushWithBackoff","writeKey","settings","options","integrationSource","middleware","_ready","_initialized","flushing","this","disableAutoISOConversion","buffer","disableClientPersistence","PriorityQueue","PersistedPriorityQueue","scheduleFlush","isLoaded","ready","onReady","resolve","load","analyticsInstance","integration","integrationCtr","user","addIntegration","Integration","analytics","buildIntegration","once","onInitialize","on","increment","initialize","error","unload","_ctx","_analyticsInstance","unloadScript","unloadIntegration","addMiddleware","concat","fn","shouldBuffer","event","send","clz","eventType","track","ev","updateEvent","integrations","cancel","ContextCancelation","retry","reason","applyDestinationMiddleware","afterMiddleware","traverse","invoke","call","Track","page","_assumesPageview","then","Page","identify","Identify","alias","Alias","group","Group","setTimeout","todo","random","ajsDestinations","routingMiddleware","legacyIntegrationSources","isServer","routingRules","middlewareSettings","remoteIntegrationsConfig","localIntegrationsConfig","integrationOptions","mergedOptions","adhocIntegrationSources","reduce","acc","prototype","resolveIntegrationNameFromSource","installableIntegrations","Set","Object","keys","filter","isPlainObject","Array","from","override","resolveVersion","destination","LegacyDestination","rule","destinationName"],"sourceRoot":""}