@amplitude/analytics-browser 2.34.0 → 2.34.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +1 -1
  2. package/lib/cjs/attribution/helpers.d.ts +1 -0
  3. package/lib/cjs/attribution/helpers.d.ts.map +1 -1
  4. package/lib/cjs/attribution/helpers.js.map +1 -1
  5. package/lib/cjs/attribution/web-attribution.d.ts.map +1 -1
  6. package/lib/cjs/attribution/web-attribution.js +7 -2
  7. package/lib/cjs/attribution/web-attribution.js.map +1 -1
  8. package/lib/cjs/browser-client.d.ts +1 -1
  9. package/lib/cjs/browser-client.d.ts.map +1 -1
  10. package/lib/cjs/browser-client.js +92 -25
  11. package/lib/cjs/browser-client.js.map +1 -1
  12. package/lib/cjs/config.d.ts +5 -2
  13. package/lib/cjs/config.d.ts.map +1 -1
  14. package/lib/cjs/config.js +24 -3
  15. package/lib/cjs/config.js.map +1 -1
  16. package/lib/cjs/plugins/form-interaction-tracking.d.ts.map +1 -1
  17. package/lib/cjs/plugins/form-interaction-tracking.js +5 -0
  18. package/lib/cjs/plugins/form-interaction-tracking.js.map +1 -1
  19. package/lib/cjs/types.d.ts +1 -1
  20. package/lib/cjs/types.d.ts.map +1 -1
  21. package/lib/cjs/types.js.map +1 -1
  22. package/lib/cjs/version.d.ts +1 -1
  23. package/lib/cjs/version.js +1 -1
  24. package/lib/cjs/version.js.map +1 -1
  25. package/lib/esm/attribution/helpers.d.ts +1 -0
  26. package/lib/esm/attribution/helpers.d.ts.map +1 -1
  27. package/lib/esm/attribution/helpers.js.map +1 -1
  28. package/lib/esm/attribution/web-attribution.d.ts.map +1 -1
  29. package/lib/esm/attribution/web-attribution.js +7 -2
  30. package/lib/esm/attribution/web-attribution.js.map +1 -1
  31. package/lib/esm/browser-client.d.ts +1 -1
  32. package/lib/esm/browser-client.d.ts.map +1 -1
  33. package/lib/esm/browser-client.js +92 -25
  34. package/lib/esm/browser-client.js.map +1 -1
  35. package/lib/esm/config.d.ts +5 -2
  36. package/lib/esm/config.d.ts.map +1 -1
  37. package/lib/esm/config.js +24 -3
  38. package/lib/esm/config.js.map +1 -1
  39. package/lib/esm/plugins/form-interaction-tracking.d.ts.map +1 -1
  40. package/lib/esm/plugins/form-interaction-tracking.js +5 -0
  41. package/lib/esm/plugins/form-interaction-tracking.js.map +1 -1
  42. package/lib/esm/types.d.ts +1 -1
  43. package/lib/esm/types.d.ts.map +1 -1
  44. package/lib/esm/types.js.map +1 -1
  45. package/lib/esm/version.d.ts +1 -1
  46. package/lib/esm/version.js +1 -1
  47. package/lib/esm/version.js.map +1 -1
  48. package/lib/scripts/amplitude-bookmarklet-snippet-min.js +1 -1
  49. package/lib/scripts/amplitude-bookmarklet.html +1 -1
  50. package/lib/scripts/amplitude-gtm-min.js +1 -1
  51. package/lib/scripts/amplitude-gtm-min.js.gz +0 -0
  52. package/lib/scripts/amplitude-gtm-min.js.map +1 -1
  53. package/lib/scripts/amplitude-gtm-snippet-min.js +1 -1
  54. package/lib/scripts/amplitude-min.js +1 -1
  55. package/lib/scripts/amplitude-min.js.gz +0 -0
  56. package/lib/scripts/amplitude-min.js.map +1 -1
  57. package/lib/scripts/amplitude-min.umd.js +1 -1
  58. package/lib/scripts/amplitude-min.umd.js.gz +0 -0
  59. package/lib/scripts/amplitude-snippet-instructions.html +1 -1
  60. package/lib/scripts/amplitude-snippet-min.js +1 -1
  61. package/lib/scripts/attribution/helpers.d.ts +1 -0
  62. package/lib/scripts/attribution/helpers.d.ts.map +1 -1
  63. package/lib/scripts/attribution/web-attribution.d.ts.map +1 -1
  64. package/lib/scripts/browser-client.d.ts +1 -1
  65. package/lib/scripts/browser-client.d.ts.map +1 -1
  66. package/lib/scripts/config.d.ts +5 -2
  67. package/lib/scripts/config.d.ts.map +1 -1
  68. package/lib/scripts/plugins/form-interaction-tracking.d.ts.map +1 -1
  69. package/lib/scripts/types.d.ts +1 -1
  70. package/lib/scripts/types.d.ts.map +1 -1
  71. package/lib/scripts/version.d.ts +1 -1
  72. package/package.json +7 -7
package/lib/cjs/config.js CHANGED
@@ -13,7 +13,7 @@ var version_1 = require("./version");
13
13
  // Exported for testing purposes only. Do not expose to public interface.
14
14
  var BrowserConfig = /** @class */ (function (_super) {
15
15
  tslib_1.__extends(BrowserConfig, _super);
16
- function BrowserConfig(apiKey, appVersion, cookieStorage, cookieOptions, defaultTracking, autocapture, deviceId, flushIntervalMillis, flushMaxRetries, flushQueueSize, identityStorage, ingestionMetadata, instanceName, lastEventId, lastEventTime, loggerProvider, logLevel, minIdLength, offline, optOut, partnerId, plan, serverUrl, serverZone, sessionId, sessionTimeout, storageProvider, trackingOptions, transport, useBatch, fetchRemoteConfig, userId, pageCounter, debugLogsEnabled, networkTrackingOptions, identify, enableDiagnostics, diagnosticsSampleRate, diagnosticsClient, remoteConfig) {
16
+ function BrowserConfig(apiKey, appVersion, cookieStorage, cookieOptions, defaultTracking, autocapture, deviceId, flushIntervalMillis, flushMaxRetries, flushQueueSize, identityStorage, ingestionMetadata, instanceName, lastEventId, lastEventTime, loggerProvider, logLevel, minIdLength, offline, optOut, partnerId, plan, serverUrl, serverZone, sessionId, deferredSessionId, sessionTimeout, storageProvider, trackingOptions, transport, useBatch, fetchRemoteConfig, userId, pageCounter, debugLogsEnabled, networkTrackingOptions, identify, enableDiagnostics, diagnosticsSampleRate, diagnosticsClient, remoteConfig) {
17
17
  if (cookieStorage === void 0) { cookieStorage = new analytics_core_1.MemoryStorage(); }
18
18
  if (cookieOptions === void 0) { cookieOptions = {
19
19
  domain: '',
@@ -85,6 +85,7 @@ var BrowserConfig = /** @class */ (function (_super) {
85
85
  _this.lastEventId = lastEventId;
86
86
  _this.lastEventTime = lastEventTime;
87
87
  _this.optOut = optOut;
88
+ _this.deferredSessionId = deferredSessionId;
88
89
  _this.sessionId = sessionId;
89
90
  _this.pageCounter = pageCounter;
90
91
  _this.userId = userId;
@@ -151,6 +152,24 @@ var BrowserConfig = /** @class */ (function (_super) {
151
152
  set: function (sessionId) {
152
153
  if (this._sessionId !== sessionId) {
153
154
  this._sessionId = sessionId;
155
+ // Clear deferredSessionId when sessionId is set to prevent stale values
156
+ // from overriding legitimate sessionIds on subsequent page loads
157
+ if (sessionId !== undefined && this._deferredSessionId !== undefined) {
158
+ this._deferredSessionId = undefined;
159
+ }
160
+ this.updateStorage();
161
+ }
162
+ },
163
+ enumerable: false,
164
+ configurable: true
165
+ });
166
+ Object.defineProperty(BrowserConfig.prototype, "deferredSessionId", {
167
+ get: function () {
168
+ return this._deferredSessionId;
169
+ },
170
+ set: function (deferredSessionId) {
171
+ if (this._deferredSessionId !== deferredSessionId && deferredSessionId !== this.sessionId) {
172
+ this._deferredSessionId = deferredSessionId;
154
173
  this.updateStorage();
155
174
  }
156
175
  },
@@ -224,6 +243,7 @@ var BrowserConfig = /** @class */ (function (_super) {
224
243
  deviceId: this._deviceId,
225
244
  userId: this._userId,
226
245
  sessionId: this._sessionId,
246
+ deferredSessionId: this._deferredSessionId,
227
247
  optOut: this._optOut,
228
248
  lastEventTime: this._lastEventTime,
229
249
  lastEventId: this._lastEventId,
@@ -242,7 +262,7 @@ exports.BrowserConfig = BrowserConfig;
242
262
  var useBrowserConfig = function (apiKey, options, amplitudeInstance, diagnosticsClient, earlyConfig) {
243
263
  if (options === void 0) { options = {}; }
244
264
  return tslib_1.__awaiter(void 0, void 0, void 0, function () {
245
- var identityStorage, cookieOptions, _a, _b, cookieConfig, cookieStorage, legacyCookies, previousCookies, queryParams, ampTimestamp, isWithinTimeLimit, deviceId, lastEventId, lastEventTime, optOut, sessionId, userId, trackingOptions, pageCounter, debugLogsEnabled, browserConfig;
265
+ var identityStorage, cookieOptions, _a, _b, cookieConfig, cookieStorage, legacyCookies, previousCookies, queryParams, ampTimestamp, isWithinTimeLimit, deviceId, lastEventId, lastEventTime, optOut, sessionId, deferredSessionId, userId, trackingOptions, pageCounter, debugLogsEnabled, browserConfig;
246
266
  var _c;
247
267
  var _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6;
248
268
  return tslib_1.__generator(this, function (_7) {
@@ -294,6 +314,7 @@ var useBrowserConfig = function (apiKey, options, amplitudeInstance, diagnostics
294
314
  lastEventTime = (_p = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.lastEventTime) !== null && _p !== void 0 ? _p : legacyCookies.lastEventTime;
295
315
  optOut = (_r = (_q = options.optOut) !== null && _q !== void 0 ? _q : previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.optOut) !== null && _r !== void 0 ? _r : legacyCookies.optOut;
296
316
  sessionId = (_s = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.sessionId) !== null && _s !== void 0 ? _s : legacyCookies.sessionId;
317
+ deferredSessionId = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.deferredSessionId;
297
318
  userId = (_u = (_t = options.userId) !== null && _t !== void 0 ? _t : previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.userId) !== null && _u !== void 0 ? _u : legacyCookies.userId;
298
319
  amplitudeInstance.previousSessionDeviceId = (_v = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.deviceId) !== null && _v !== void 0 ? _v : legacyCookies.deviceId;
299
320
  amplitudeInstance.previousSessionUserId = (_w = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.userId) !== null && _w !== void 0 ? _w : legacyCookies.userId;
@@ -312,7 +333,7 @@ var useBrowserConfig = function (apiKey, options, amplitudeInstance, diagnostics
312
333
  // Use earlyConfig.loggerProvider to ensure consistent logger across DiagnosticsClient/RemoteConfigClient/BrowserConfig
313
334
  (_3 = earlyConfig === null || earlyConfig === void 0 ? void 0 : earlyConfig.loggerProvider) !== null && _3 !== void 0 ? _3 : options.loggerProvider, options.logLevel, options.minIdLength, options.offline, optOut, options.partnerId, options.plan, options.serverUrl,
314
335
  // Use earlyConfig.serverZone to ensure consistent serverZone
315
- (_4 = earlyConfig === null || earlyConfig === void 0 ? void 0 : earlyConfig.serverZone) !== null && _4 !== void 0 ? _4 : options.serverZone, sessionId, options.sessionTimeout, options.storageProvider, trackingOptions, options.transport, options.useBatch, options.fetchRemoteConfig, userId, pageCounter, debugLogsEnabled, options.networkTrackingOptions, options.identify,
336
+ (_4 = earlyConfig === null || earlyConfig === void 0 ? void 0 : earlyConfig.serverZone) !== null && _4 !== void 0 ? _4 : options.serverZone, sessionId, deferredSessionId, options.sessionTimeout, options.storageProvider, trackingOptions, options.transport, options.useBatch, options.fetchRemoteConfig, userId, pageCounter, debugLogsEnabled, options.networkTrackingOptions, options.identify,
316
337
  // Use earlyConfig values (already has remote config applied), otherwise fall back to options
317
338
  (_5 = earlyConfig === null || earlyConfig === void 0 ? void 0 : earlyConfig.enableDiagnostics) !== null && _5 !== void 0 ? _5 : options.enableDiagnostics, (_6 = earlyConfig === null || earlyConfig === void 0 ? void 0 : earlyConfig.diagnosticsSampleRate) !== null && _6 !== void 0 ? _6 : amplitudeInstance._diagnosticsSampleRate, diagnosticsClient, options.remoteConfig);
318
339
  return [4 /*yield*/, browserConfig.storageProvider.isEnabled()];
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Config,\n Logger,\n ILogger,\n LogLevel,\n Event,\n Storage,\n IngestionMetadata,\n ServerZoneType,\n OfflineDisabled,\n Plan,\n IdentityStorageType,\n TransportTypeOrOptions,\n MemoryStorage,\n UUID,\n CookieStorage,\n getCookieName,\n FetchTransport,\n getQueryParams,\n UserSession,\n BrowserOptions,\n BrowserConfig as IBrowserConfig,\n DefaultTrackingOptions,\n TrackingOptions,\n AutocaptureOptions,\n CookieOptions,\n RemoteConfigOptions,\n NetworkTrackingOptions,\n IIdentify,\n IDiagnosticsClient,\n isDomainEqual,\n CookieStorageConfig,\n decodeCookieValue,\n} from '@amplitude/analytics-core';\n\nimport { LocalStorage } from './storage/local-storage';\nimport { SessionStorage } from './storage/session-storage';\nimport { XHRTransport } from './transports/xhr';\nimport { SendBeaconTransport } from './transports/send-beacon';\nimport { parseLegacyCookies } from './cookie-migration';\nimport { DEFAULT_IDENTITY_STORAGE, DEFAULT_SERVER_ZONE } from './constants';\nimport { AmplitudeBrowser } from './browser-client';\nimport { VERSION } from './version';\n\n// Exported for testing purposes only. Do not expose to public interface.\nexport class BrowserConfig extends Config implements IBrowserConfig {\n public readonly version = VERSION;\n protected _cookieStorage: Storage<UserSession>;\n protected _deviceId?: string;\n protected _lastEventId?: number;\n protected _lastEventTime?: number;\n protected _optOut = false;\n protected _sessionId?: number;\n protected _userId?: string;\n protected _pageCounter?: number;\n protected _debugLogsEnabled?: boolean;\n constructor(\n public apiKey: string,\n public appVersion?: string,\n cookieStorage: Storage<UserSession> = new MemoryStorage(),\n public cookieOptions: CookieOptions = {\n domain: '',\n expiration: 365,\n sameSite: 'Lax' as const,\n secure: false,\n upgrade: true,\n },\n public defaultTracking?: boolean | DefaultTrackingOptions,\n public autocapture?: boolean | AutocaptureOptions,\n deviceId?: string,\n public flushIntervalMillis: number = 1000,\n public flushMaxRetries: number = 5,\n public flushQueueSize: number = 30,\n public identityStorage: IdentityStorageType = DEFAULT_IDENTITY_STORAGE,\n public ingestionMetadata?: IngestionMetadata,\n public instanceName?: string,\n lastEventId?: number,\n lastEventTime?: number,\n public loggerProvider: ILogger = new Logger(),\n public logLevel: LogLevel = LogLevel.Warn,\n public minIdLength?: number,\n public offline: boolean | typeof OfflineDisabled = false,\n optOut = false,\n public partnerId?: string,\n public plan?: Plan,\n public serverUrl: string = '',\n public serverZone: ServerZoneType = DEFAULT_SERVER_ZONE,\n sessionId?: number,\n public sessionTimeout: number = 30 * 60 * 1000,\n public storageProvider: Storage<Event[]> = new LocalStorage({ loggerProvider }),\n public trackingOptions: Required<TrackingOptions> = {\n ipAddress: true,\n language: true,\n platform: true,\n },\n public transport: TransportTypeOrOptions = 'fetch',\n public useBatch: boolean = false,\n public fetchRemoteConfig: boolean = true,\n userId?: string,\n pageCounter?: number,\n debugLogsEnabled?: boolean,\n public networkTrackingOptions?: NetworkTrackingOptions,\n public identify?: IIdentify,\n public enableDiagnostics: boolean = true,\n public diagnosticsSampleRate: number = 0,\n public diagnosticsClient?: IDiagnosticsClient,\n public remoteConfig?: RemoteConfigOptions,\n ) {\n super({ apiKey, storageProvider, transportProvider: createTransport(transport) });\n this._cookieStorage = cookieStorage;\n this.deviceId = deviceId;\n this.lastEventId = lastEventId;\n this.lastEventTime = lastEventTime;\n this.optOut = optOut;\n this.sessionId = sessionId;\n this.pageCounter = pageCounter;\n this.userId = userId;\n this.debugLogsEnabled = debugLogsEnabled;\n this.loggerProvider.enable(debugLogsEnabled ? LogLevel.Debug : this.logLevel);\n this.networkTrackingOptions = networkTrackingOptions;\n this.identify = identify;\n this.enableDiagnostics = enableDiagnostics;\n this.diagnosticsSampleRate = diagnosticsSampleRate;\n this.diagnosticsClient = diagnosticsClient;\n\n // Note: The canonical logic for determining fetchRemoteConfig is in shouldFetchRemoteConfig().\n // This logic is duplicated here to maintain the BrowserConfig constructor contract and ensure\n // the config object has the correct fetchRemoteConfig value set on its properties.\n // The value passed to this constructor should already be computed via shouldFetchRemoteConfig().\n const _fetchRemoteConfig = remoteConfig?.fetchRemoteConfig ?? fetchRemoteConfig;\n this.remoteConfig = this.remoteConfig || {};\n this.remoteConfig.fetchRemoteConfig = _fetchRemoteConfig;\n this.fetchRemoteConfig = _fetchRemoteConfig;\n }\n\n get cookieStorage() {\n return this._cookieStorage;\n }\n\n set cookieStorage(cookieStorage: Storage<UserSession>) {\n if (this._cookieStorage !== cookieStorage) {\n this._cookieStorage = cookieStorage;\n this.updateStorage();\n }\n }\n\n get deviceId() {\n return this._deviceId;\n }\n\n set deviceId(deviceId: string | undefined) {\n if (this._deviceId !== deviceId) {\n this._deviceId = deviceId;\n this.updateStorage();\n }\n }\n\n get userId() {\n return this._userId;\n }\n\n set userId(userId: string | undefined) {\n if (this._userId !== userId) {\n this._userId = userId;\n this.updateStorage();\n }\n }\n\n get sessionId() {\n return this._sessionId;\n }\n\n set sessionId(sessionId: number | undefined) {\n if (this._sessionId !== sessionId) {\n this._sessionId = sessionId;\n this.updateStorage();\n }\n }\n\n get optOut() {\n return this._optOut;\n }\n\n set optOut(optOut: boolean) {\n if (this._optOut !== optOut) {\n this._optOut = optOut;\n this.updateStorage();\n }\n }\n\n get lastEventTime() {\n return this._lastEventTime;\n }\n\n set lastEventTime(lastEventTime: number | undefined) {\n if (this._lastEventTime !== lastEventTime) {\n this._lastEventTime = lastEventTime;\n this.updateStorage();\n }\n }\n\n get lastEventId() {\n return this._lastEventId;\n }\n\n set lastEventId(lastEventId: number | undefined) {\n if (this._lastEventId !== lastEventId) {\n this._lastEventId = lastEventId;\n this.updateStorage();\n }\n }\n\n get pageCounter() {\n return this._pageCounter;\n }\n\n set pageCounter(pageCounter: number | undefined) {\n if (this._pageCounter !== pageCounter) {\n this._pageCounter = pageCounter;\n this.updateStorage();\n }\n }\n\n set debugLogsEnabled(debugLogsEnabled: boolean | undefined) {\n if (this._debugLogsEnabled !== debugLogsEnabled) {\n this._debugLogsEnabled = debugLogsEnabled;\n this.updateStorage();\n }\n }\n\n private updateStorage() {\n const cache = {\n deviceId: this._deviceId,\n userId: this._userId,\n sessionId: this._sessionId,\n optOut: this._optOut,\n lastEventTime: this._lastEventTime,\n lastEventId: this._lastEventId,\n pageCounter: this._pageCounter,\n debugLogsEnabled: this._debugLogsEnabled,\n cookieDomain: undefined as string | undefined,\n };\n\n if (this.cookieStorage instanceof CookieStorage) {\n cache.cookieDomain = this.cookieStorage.options.domain;\n }\n\n void this.cookieStorage.set(getCookieName(this.apiKey), cache);\n }\n}\n\n/**\n * Early-initialized configuration values that are determined before useBrowserConfig is called.\n * These are created early to support DiagnosticsClient and RemoteConfigClient initialization.\n */\nexport interface EarlyConfig {\n /** Logger instance - shared across DiagnosticsClient, RemoteConfigClient, and BrowserConfig */\n loggerProvider: ILogger;\n /** Server zone for API endpoints */\n serverZone: ServerZoneType;\n /** Whether diagnostics is enabled (may come from remote config) */\n enableDiagnostics: boolean;\n /** Diagnostics sample rate (may come from remote config) */\n diagnosticsSampleRate: number;\n}\n\nexport const useBrowserConfig = async (\n apiKey: string,\n options: BrowserOptions = {},\n amplitudeInstance: AmplitudeBrowser,\n diagnosticsClient?: IDiagnosticsClient,\n earlyConfig?: EarlyConfig,\n): Promise<IBrowserConfig> => {\n // Step 1: Create identity storage instance\n const identityStorage = options.identityStorage || DEFAULT_IDENTITY_STORAGE;\n const cookieOptions = {\n domain:\n identityStorage !== DEFAULT_IDENTITY_STORAGE ? '' : options.cookieOptions?.domain ?? (await getTopLevelDomain()),\n expiration: 365,\n sameSite: 'Lax' as const,\n secure: false,\n upgrade: true,\n ...options.cookieOptions,\n };\n\n const cookieConfig: CookieStorageConfig = {\n // if more than one cookie with the same key exists,\n // look for the cookie that has the domain attribute set to cookieOptions.domain\n duplicateResolverFn: (value: string): boolean => {\n const decodedValue = decodeCookieValue(value);\n if (!decodedValue) {\n return false;\n }\n const parsed = JSON.parse(decodedValue) as UserSession;\n return isDomainEqual(parsed.cookieDomain, cookieOptions.domain);\n },\n diagnosticsClient: diagnosticsClient,\n };\n const cookieStorage = createCookieStorage<UserSession>(options.identityStorage, cookieOptions, cookieConfig);\n\n // Step 1: Parse cookies using identity storage instance\n const legacyCookies = await parseLegacyCookies(apiKey, cookieStorage, options.cookieOptions?.upgrade ?? true);\n const previousCookies = await cookieStorage.get(getCookieName(apiKey));\n const queryParams = getQueryParams();\n\n // Check if ampTimestamp is present and valid\n const ampTimestamp = queryParams.ampTimestamp ? Number(queryParams.ampTimestamp) : undefined;\n const isWithinTimeLimit = ampTimestamp ? Date.now() < ampTimestamp : true;\n\n // Step 3: Reconcile user identity\n const deviceId =\n options.deviceId ??\n (isWithinTimeLimit ? queryParams.ampDeviceId ?? queryParams.deviceId : undefined) ??\n previousCookies?.deviceId ??\n legacyCookies.deviceId ??\n UUID();\n const lastEventId = previousCookies?.lastEventId ?? legacyCookies.lastEventId;\n const lastEventTime = previousCookies?.lastEventTime ?? legacyCookies.lastEventTime;\n const optOut = options.optOut ?? previousCookies?.optOut ?? legacyCookies.optOut;\n const sessionId = previousCookies?.sessionId ?? legacyCookies.sessionId;\n const userId = options.userId ?? previousCookies?.userId ?? legacyCookies.userId;\n amplitudeInstance.previousSessionDeviceId = previousCookies?.deviceId ?? legacyCookies.deviceId;\n amplitudeInstance.previousSessionUserId = previousCookies?.userId ?? legacyCookies.userId;\n\n const trackingOptions = {\n ipAddress: options.trackingOptions?.ipAddress ?? true,\n language: options.trackingOptions?.language ?? true,\n platform: options.trackingOptions?.platform ?? true,\n };\n const pageCounter = previousCookies?.pageCounter;\n const debugLogsEnabled = previousCookies?.debugLogsEnabled;\n\n // Override default tracking options if autocapture is set\n if (options.autocapture !== undefined) {\n options.defaultTracking = options.autocapture;\n }\n\n const browserConfig = new BrowserConfig(\n apiKey,\n options.appVersion,\n cookieStorage,\n cookieOptions,\n options.defaultTracking,\n options.autocapture,\n deviceId,\n options.flushIntervalMillis,\n options.flushMaxRetries,\n options.flushQueueSize,\n identityStorage,\n options.ingestionMetadata,\n options.instanceName,\n lastEventId,\n lastEventTime,\n // Use earlyConfig.loggerProvider to ensure consistent logger across DiagnosticsClient/RemoteConfigClient/BrowserConfig\n earlyConfig?.loggerProvider ?? options.loggerProvider,\n options.logLevel,\n options.minIdLength,\n options.offline,\n optOut,\n options.partnerId,\n options.plan,\n options.serverUrl,\n // Use earlyConfig.serverZone to ensure consistent serverZone\n earlyConfig?.serverZone ?? options.serverZone,\n sessionId,\n options.sessionTimeout,\n options.storageProvider,\n trackingOptions,\n options.transport,\n options.useBatch,\n options.fetchRemoteConfig,\n userId,\n pageCounter,\n debugLogsEnabled,\n options.networkTrackingOptions,\n options.identify,\n // Use earlyConfig values (already has remote config applied), otherwise fall back to options\n earlyConfig?.enableDiagnostics ?? options.enableDiagnostics,\n earlyConfig?.diagnosticsSampleRate ?? amplitudeInstance._diagnosticsSampleRate,\n diagnosticsClient,\n options.remoteConfig,\n );\n\n if (!(await browserConfig.storageProvider.isEnabled())) {\n browserConfig.loggerProvider.warn(\n `Storage provider ${browserConfig.storageProvider.constructor.name} is not enabled. Falling back to MemoryStorage.`,\n );\n browserConfig.storageProvider = new MemoryStorage();\n }\n\n return browserConfig;\n};\n\nexport const createCookieStorage = <T>(\n identityStorage: IdentityStorageType = DEFAULT_IDENTITY_STORAGE,\n cookieOptions: CookieOptions = {},\n cookieConfig?: CookieStorageConfig,\n) => {\n switch (identityStorage) {\n case 'localStorage':\n return new LocalStorage<T>();\n case 'sessionStorage':\n return new SessionStorage<T>();\n case 'none':\n return new MemoryStorage<T>();\n case 'cookie':\n default:\n return new CookieStorage<T>(\n {\n ...cookieOptions,\n expirationDays: cookieOptions.expiration,\n },\n cookieConfig,\n );\n }\n};\n\n/**\n * Determines whether to fetch remote config based on options.\n * Extracted to allow early determination before useBrowserConfig is called.\n */\nexport const shouldFetchRemoteConfig = (options: BrowserOptions = {}): boolean => {\n if (options.remoteConfig?.fetchRemoteConfig === true) {\n // set to true if remoteConfig explicitly set to true\n return true;\n } else if (options.remoteConfig?.fetchRemoteConfig === false || options.fetchRemoteConfig === false) {\n // set to false if either are set to false explicitly\n return false;\n } else {\n // default to true if both undefined\n return true;\n }\n};\n\nexport const createTransport = (transport?: TransportTypeOrOptions) => {\n const type = typeof transport === 'object' ? transport.type : transport;\n const headers = typeof transport === 'object' ? transport.headers : undefined;\n\n if (type === 'xhr') {\n return new XHRTransport(headers);\n }\n if (type === 'beacon') {\n // SendBeacon does not support custom headers\n return new SendBeaconTransport();\n }\n return new FetchTransport(headers);\n};\n\nexport const getTopLevelDomain = async (url?: string) => {\n if (\n !(await new CookieStorage<number>().isEnabled()) ||\n (!url && (typeof location === 'undefined' || !location.hostname))\n ) {\n return '';\n }\n\n const host = url ?? location.hostname;\n const parts = host.split('.');\n const levels = [];\n const cookieKeyUniqueId = UUID();\n const storageKey = `AMP_TLDTEST_${cookieKeyUniqueId.substring(0, 8)}`;\n\n for (let i = parts.length - 2; i >= 0; --i) {\n levels.push(parts.slice(i).join('.'));\n }\n for (let i = 0; i < levels.length; i++) {\n const domain = levels[i];\n const options = {\n domain: '.' + domain,\n expirationDays: 0.003, // expire in ~5 minutes\n };\n const storage = new CookieStorage<number>(options);\n await storage.set(storageKey, 1);\n const value = await storage.get(storageKey);\n if (value) {\n await storage.remove(storageKey);\n return '.' + domain;\n }\n }\n\n return '';\n};\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Config,\n Logger,\n ILogger,\n LogLevel,\n Event,\n Storage,\n IngestionMetadata,\n ServerZoneType,\n OfflineDisabled,\n Plan,\n IdentityStorageType,\n TransportTypeOrOptions,\n MemoryStorage,\n UUID,\n CookieStorage,\n getCookieName,\n FetchTransport,\n getQueryParams,\n UserSession,\n BrowserOptions,\n BrowserConfig as IBrowserConfig,\n DefaultTrackingOptions,\n TrackingOptions,\n AutocaptureOptions,\n CookieOptions,\n RemoteConfigOptions,\n NetworkTrackingOptions,\n IIdentify,\n IDiagnosticsClient,\n isDomainEqual,\n CookieStorageConfig,\n decodeCookieValue,\n} from '@amplitude/analytics-core';\n\nimport { LocalStorage } from './storage/local-storage';\nimport { SessionStorage } from './storage/session-storage';\nimport { XHRTransport } from './transports/xhr';\nimport { SendBeaconTransport } from './transports/send-beacon';\nimport { parseLegacyCookies } from './cookie-migration';\nimport { DEFAULT_IDENTITY_STORAGE, DEFAULT_SERVER_ZONE } from './constants';\nimport { AmplitudeBrowser } from './browser-client';\nimport { VERSION } from './version';\n\n// Exported for testing purposes only. Do not expose to public interface.\nexport class BrowserConfig extends Config implements IBrowserConfig {\n public readonly version = VERSION;\n protected _cookieStorage: Storage<UserSession>;\n protected _deviceId?: string;\n protected _lastEventId?: number;\n protected _lastEventTime?: number;\n protected _optOut = false;\n protected _sessionId?: number;\n protected _deferredSessionId?: number;\n protected _userId?: string;\n protected _pageCounter?: number;\n protected _debugLogsEnabled?: boolean;\n constructor(\n public apiKey: string,\n public appVersion?: string,\n cookieStorage: Storage<UserSession> = new MemoryStorage(),\n public cookieOptions: CookieOptions = {\n domain: '',\n expiration: 365,\n sameSite: 'Lax' as const,\n secure: false,\n upgrade: true,\n },\n public defaultTracking?: boolean | DefaultTrackingOptions,\n public autocapture?: boolean | AutocaptureOptions,\n deviceId?: string,\n public flushIntervalMillis: number = 1000,\n public flushMaxRetries: number = 5,\n public flushQueueSize: number = 30,\n public identityStorage: IdentityStorageType = DEFAULT_IDENTITY_STORAGE,\n public ingestionMetadata?: IngestionMetadata,\n public instanceName?: string,\n lastEventId?: number,\n lastEventTime?: number,\n public loggerProvider: ILogger = new Logger(),\n public logLevel: LogLevel = LogLevel.Warn,\n public minIdLength?: number,\n public offline: boolean | typeof OfflineDisabled = false,\n optOut = false,\n public partnerId?: string,\n public plan?: Plan,\n public serverUrl: string = '',\n public serverZone: ServerZoneType = DEFAULT_SERVER_ZONE,\n sessionId?: number,\n deferredSessionId?: number,\n public sessionTimeout: number = 30 * 60 * 1000,\n public storageProvider: Storage<Event[]> = new LocalStorage({ loggerProvider }),\n public trackingOptions: Required<TrackingOptions> = {\n ipAddress: true,\n language: true,\n platform: true,\n },\n public transport: TransportTypeOrOptions = 'fetch',\n public useBatch: boolean = false,\n public fetchRemoteConfig: boolean = true,\n userId?: string,\n pageCounter?: number,\n debugLogsEnabled?: boolean,\n public networkTrackingOptions?: NetworkTrackingOptions,\n public identify?: IIdentify,\n public enableDiagnostics: boolean = true,\n public diagnosticsSampleRate: number = 0,\n public diagnosticsClient?: IDiagnosticsClient,\n public remoteConfig?: RemoteConfigOptions,\n ) {\n super({ apiKey, storageProvider, transportProvider: createTransport(transport) });\n this._cookieStorage = cookieStorage;\n this.deviceId = deviceId;\n this.lastEventId = lastEventId;\n this.lastEventTime = lastEventTime;\n this.optOut = optOut;\n this.deferredSessionId = deferredSessionId;\n this.sessionId = sessionId;\n this.pageCounter = pageCounter;\n this.userId = userId;\n this.debugLogsEnabled = debugLogsEnabled;\n this.loggerProvider.enable(debugLogsEnabled ? LogLevel.Debug : this.logLevel);\n this.networkTrackingOptions = networkTrackingOptions;\n this.identify = identify;\n this.enableDiagnostics = enableDiagnostics;\n this.diagnosticsSampleRate = diagnosticsSampleRate;\n this.diagnosticsClient = diagnosticsClient;\n\n // Note: The canonical logic for determining fetchRemoteConfig is in shouldFetchRemoteConfig().\n // This logic is duplicated here to maintain the BrowserConfig constructor contract and ensure\n // the config object has the correct fetchRemoteConfig value set on its properties.\n // The value passed to this constructor should already be computed via shouldFetchRemoteConfig().\n const _fetchRemoteConfig = remoteConfig?.fetchRemoteConfig ?? fetchRemoteConfig;\n this.remoteConfig = this.remoteConfig || {};\n this.remoteConfig.fetchRemoteConfig = _fetchRemoteConfig;\n this.fetchRemoteConfig = _fetchRemoteConfig;\n }\n\n get cookieStorage() {\n return this._cookieStorage;\n }\n\n set cookieStorage(cookieStorage: Storage<UserSession>) {\n if (this._cookieStorage !== cookieStorage) {\n this._cookieStorage = cookieStorage;\n this.updateStorage();\n }\n }\n\n get deviceId() {\n return this._deviceId;\n }\n\n set deviceId(deviceId: string | undefined) {\n if (this._deviceId !== deviceId) {\n this._deviceId = deviceId;\n this.updateStorage();\n }\n }\n\n get userId() {\n return this._userId;\n }\n\n set userId(userId: string | undefined) {\n if (this._userId !== userId) {\n this._userId = userId;\n this.updateStorage();\n }\n }\n\n get sessionId() {\n return this._sessionId;\n }\n\n set sessionId(sessionId: number | undefined) {\n if (this._sessionId !== sessionId) {\n this._sessionId = sessionId;\n // Clear deferredSessionId when sessionId is set to prevent stale values\n // from overriding legitimate sessionIds on subsequent page loads\n if (sessionId !== undefined && this._deferredSessionId !== undefined) {\n this._deferredSessionId = undefined;\n }\n this.updateStorage();\n }\n }\n\n get deferredSessionId() {\n return this._deferredSessionId;\n }\n\n set deferredSessionId(deferredSessionId: number | undefined) {\n if (this._deferredSessionId !== deferredSessionId && deferredSessionId !== this.sessionId) {\n this._deferredSessionId = deferredSessionId;\n this.updateStorage();\n }\n }\n\n get optOut() {\n return this._optOut;\n }\n\n set optOut(optOut: boolean) {\n if (this._optOut !== optOut) {\n this._optOut = optOut;\n this.updateStorage();\n }\n }\n\n get lastEventTime() {\n return this._lastEventTime;\n }\n\n set lastEventTime(lastEventTime: number | undefined) {\n if (this._lastEventTime !== lastEventTime) {\n this._lastEventTime = lastEventTime;\n this.updateStorage();\n }\n }\n\n get lastEventId() {\n return this._lastEventId;\n }\n\n set lastEventId(lastEventId: number | undefined) {\n if (this._lastEventId !== lastEventId) {\n this._lastEventId = lastEventId;\n this.updateStorage();\n }\n }\n\n get pageCounter() {\n return this._pageCounter;\n }\n\n set pageCounter(pageCounter: number | undefined) {\n if (this._pageCounter !== pageCounter) {\n this._pageCounter = pageCounter;\n this.updateStorage();\n }\n }\n\n set debugLogsEnabled(debugLogsEnabled: boolean | undefined) {\n if (this._debugLogsEnabled !== debugLogsEnabled) {\n this._debugLogsEnabled = debugLogsEnabled;\n this.updateStorage();\n }\n }\n\n private updateStorage() {\n const cache = {\n deviceId: this._deviceId,\n userId: this._userId,\n sessionId: this._sessionId,\n deferredSessionId: this._deferredSessionId,\n optOut: this._optOut,\n lastEventTime: this._lastEventTime,\n lastEventId: this._lastEventId,\n pageCounter: this._pageCounter,\n debugLogsEnabled: this._debugLogsEnabled,\n cookieDomain: undefined as string | undefined,\n };\n\n if (this.cookieStorage instanceof CookieStorage) {\n cache.cookieDomain = this.cookieStorage.options.domain;\n }\n\n void this.cookieStorage.set(getCookieName(this.apiKey), cache);\n }\n}\n\n/**\n * Early-initialized configuration values that are determined before useBrowserConfig is called.\n * These are created early to support DiagnosticsClient and RemoteConfigClient initialization.\n */\nexport interface EarlyConfig {\n /** Logger instance - shared across DiagnosticsClient, RemoteConfigClient, and BrowserConfig */\n loggerProvider: ILogger;\n /** Server zone for API endpoints */\n serverZone: ServerZoneType;\n /** Whether diagnostics is enabled (may come from remote config) */\n enableDiagnostics: boolean;\n /** Diagnostics sample rate (may come from remote config) */\n diagnosticsSampleRate: number;\n}\n\nexport const useBrowserConfig = async (\n apiKey: string,\n options: BrowserOptions = {},\n amplitudeInstance: AmplitudeBrowser,\n diagnosticsClient?: IDiagnosticsClient,\n earlyConfig?: EarlyConfig,\n): Promise<IBrowserConfig> => {\n // Step 1: Create identity storage instance\n const identityStorage = options.identityStorage || DEFAULT_IDENTITY_STORAGE;\n const cookieOptions = {\n domain:\n identityStorage !== DEFAULT_IDENTITY_STORAGE ? '' : options.cookieOptions?.domain ?? (await getTopLevelDomain()),\n expiration: 365,\n sameSite: 'Lax' as const,\n secure: false,\n upgrade: true,\n ...options.cookieOptions,\n };\n\n const cookieConfig: CookieStorageConfig = {\n // if more than one cookie with the same key exists,\n // look for the cookie that has the domain attribute set to cookieOptions.domain\n duplicateResolverFn: (value: string): boolean => {\n const decodedValue = decodeCookieValue(value);\n if (!decodedValue) {\n return false;\n }\n const parsed = JSON.parse(decodedValue) as UserSession;\n return isDomainEqual(parsed.cookieDomain, cookieOptions.domain);\n },\n diagnosticsClient: diagnosticsClient,\n };\n const cookieStorage = createCookieStorage<UserSession>(options.identityStorage, cookieOptions, cookieConfig);\n\n // Step 1: Parse cookies using identity storage instance\n const legacyCookies = await parseLegacyCookies(apiKey, cookieStorage, options.cookieOptions?.upgrade ?? true);\n const previousCookies = await cookieStorage.get(getCookieName(apiKey));\n const queryParams = getQueryParams();\n\n // Check if ampTimestamp is present and valid\n const ampTimestamp = queryParams.ampTimestamp ? Number(queryParams.ampTimestamp) : undefined;\n const isWithinTimeLimit = ampTimestamp ? Date.now() < ampTimestamp : true;\n\n // Step 3: Reconcile user identity\n const deviceId =\n options.deviceId ??\n (isWithinTimeLimit ? queryParams.ampDeviceId ?? queryParams.deviceId : undefined) ??\n previousCookies?.deviceId ??\n legacyCookies.deviceId ??\n UUID();\n const lastEventId = previousCookies?.lastEventId ?? legacyCookies.lastEventId;\n const lastEventTime = previousCookies?.lastEventTime ?? legacyCookies.lastEventTime;\n const optOut = options.optOut ?? previousCookies?.optOut ?? legacyCookies.optOut;\n const sessionId = previousCookies?.sessionId ?? legacyCookies.sessionId;\n const deferredSessionId = previousCookies?.deferredSessionId;\n const userId = options.userId ?? previousCookies?.userId ?? legacyCookies.userId;\n amplitudeInstance.previousSessionDeviceId = previousCookies?.deviceId ?? legacyCookies.deviceId;\n amplitudeInstance.previousSessionUserId = previousCookies?.userId ?? legacyCookies.userId;\n\n const trackingOptions = {\n ipAddress: options.trackingOptions?.ipAddress ?? true,\n language: options.trackingOptions?.language ?? true,\n platform: options.trackingOptions?.platform ?? true,\n };\n const pageCounter = previousCookies?.pageCounter;\n const debugLogsEnabled = previousCookies?.debugLogsEnabled;\n\n // Override default tracking options if autocapture is set\n if (options.autocapture !== undefined) {\n options.defaultTracking = options.autocapture;\n }\n\n const browserConfig = new BrowserConfig(\n apiKey,\n options.appVersion,\n cookieStorage,\n cookieOptions,\n options.defaultTracking,\n options.autocapture,\n deviceId,\n options.flushIntervalMillis,\n options.flushMaxRetries,\n options.flushQueueSize,\n identityStorage,\n options.ingestionMetadata,\n options.instanceName,\n lastEventId,\n lastEventTime,\n // Use earlyConfig.loggerProvider to ensure consistent logger across DiagnosticsClient/RemoteConfigClient/BrowserConfig\n earlyConfig?.loggerProvider ?? options.loggerProvider,\n options.logLevel,\n options.minIdLength,\n options.offline,\n optOut,\n options.partnerId,\n options.plan,\n options.serverUrl,\n // Use earlyConfig.serverZone to ensure consistent serverZone\n earlyConfig?.serverZone ?? options.serverZone,\n sessionId,\n deferredSessionId,\n options.sessionTimeout,\n options.storageProvider,\n trackingOptions,\n options.transport,\n options.useBatch,\n options.fetchRemoteConfig,\n userId,\n pageCounter,\n debugLogsEnabled,\n options.networkTrackingOptions,\n options.identify,\n // Use earlyConfig values (already has remote config applied), otherwise fall back to options\n earlyConfig?.enableDiagnostics ?? options.enableDiagnostics,\n earlyConfig?.diagnosticsSampleRate ?? amplitudeInstance._diagnosticsSampleRate,\n diagnosticsClient,\n options.remoteConfig,\n );\n\n if (!(await browserConfig.storageProvider.isEnabled())) {\n browserConfig.loggerProvider.warn(\n `Storage provider ${browserConfig.storageProvider.constructor.name} is not enabled. Falling back to MemoryStorage.`,\n );\n browserConfig.storageProvider = new MemoryStorage();\n }\n\n return browserConfig;\n};\n\nexport const createCookieStorage = <T>(\n identityStorage: IdentityStorageType = DEFAULT_IDENTITY_STORAGE,\n cookieOptions: CookieOptions = {},\n cookieConfig?: CookieStorageConfig,\n) => {\n switch (identityStorage) {\n case 'localStorage':\n return new LocalStorage<T>();\n case 'sessionStorage':\n return new SessionStorage<T>();\n case 'none':\n return new MemoryStorage<T>();\n case 'cookie':\n default:\n return new CookieStorage<T>(\n {\n ...cookieOptions,\n expirationDays: cookieOptions.expiration,\n },\n cookieConfig,\n );\n }\n};\n\n/**\n * Determines whether to fetch remote config based on options.\n * Extracted to allow early determination before useBrowserConfig is called.\n */\nexport const shouldFetchRemoteConfig = (options: BrowserOptions = {}): boolean => {\n if (options.remoteConfig?.fetchRemoteConfig === true) {\n // set to true if remoteConfig explicitly set to true\n return true;\n } else if (options.remoteConfig?.fetchRemoteConfig === false || options.fetchRemoteConfig === false) {\n // set to false if either are set to false explicitly\n return false;\n } else {\n // default to true if both undefined\n return true;\n }\n};\n\nexport const createTransport = (transport?: TransportTypeOrOptions) => {\n const type = typeof transport === 'object' ? transport.type : transport;\n const headers = typeof transport === 'object' ? transport.headers : undefined;\n\n if (type === 'xhr') {\n return new XHRTransport(headers);\n }\n if (type === 'beacon') {\n // SendBeacon does not support custom headers\n return new SendBeaconTransport();\n }\n return new FetchTransport(headers);\n};\n\nexport const getTopLevelDomain = async (url?: string) => {\n if (\n !(await new CookieStorage<number>().isEnabled()) ||\n (!url && (typeof location === 'undefined' || !location.hostname))\n ) {\n return '';\n }\n\n const host = url ?? location.hostname;\n const parts = host.split('.');\n const levels = [];\n const cookieKeyUniqueId = UUID();\n const storageKey = `AMP_TLDTEST_${cookieKeyUniqueId.substring(0, 8)}`;\n\n for (let i = parts.length - 2; i >= 0; --i) {\n levels.push(parts.slice(i).join('.'));\n }\n for (let i = 0; i < levels.length; i++) {\n const domain = levels[i];\n const options = {\n domain: '.' + domain,\n expirationDays: 0.003, // expire in ~5 minutes\n };\n const storage = new CookieStorage<number>(options);\n await storage.set(storageKey, 1);\n const value = await storage.get(storageKey);\n if (value) {\n await storage.remove(storageKey);\n return '.' + domain;\n }\n }\n\n return '';\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"form-interaction-tracking.d.ts","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,gBAAgB,EAGjB,MAAM,2BAA2B,CAAC;AASnC,eAAO,MAAM,uBAAuB,QAAO,gBA6J1C,CAAC;AAEF,eAAO,MAAM,iBAAiB,uDAU7B,CAAC;AAGF,eAAO,MAAM,iBAAiB,SAAU,eAAe,KAAG,MAAM,GAAG,IASlE,CAAC"}
1
+ {"version":3,"file":"form-interaction-tracking.d.ts","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,gBAAgB,EAGjB,MAAM,2BAA2B,CAAC;AASnC,eAAO,MAAM,uBAAuB,QAAO,gBAmK1C,CAAC;AAEF,eAAO,MAAM,iBAAiB,uDAU7B,CAAC;AAGF,eAAO,MAAM,iBAAiB,SAAU,eAAe,KAAG,MAAM,GAAG,IASlE,CAAC"}
@@ -42,7 +42,12 @@ var formInteractionTracking = function () {
42
42
  if (typeof document === 'undefined') {
43
43
  return;
44
44
  }
45
+ var addedFormNodes = new WeakSet();
45
46
  var addFormInteractionListener = function (form) {
47
+ if (addedFormNodes.has(form)) {
48
+ return;
49
+ }
50
+ addedFormNodes.add(form);
46
51
  var hasFormChanged = false;
47
52
  addEventListener(form, 'change', function () {
48
53
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"form-interaction-tracking.js","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DEFAULT_FORM_START_EVENT,\n DEFAULT_FORM_SUBMIT_EVENT,\n FORM_ID,\n FORM_NAME,\n FORM_DESTINATION,\n} from '../constants';\nimport { BrowserConfig } from '../config';\nimport {\n getGlobalScope,\n Event as AmplitudeEvent,\n EnrichmentPlugin,\n BrowserClient,\n FormInteractionsOptions,\n} from '@amplitude/analytics-core';\nimport { getFormInteractionsConfig } from '../default-tracking';\n\ninterface EventListener {\n element: Element;\n type: 'change' | 'submit';\n handler: (event: Event) => void;\n}\n\nexport const formInteractionTracking = (): EnrichmentPlugin => {\n let observer: MutationObserver | undefined;\n let eventListeners: EventListener[] = [];\n\n const addEventListener = (element: Element, type: 'change' | 'submit', handler: (event: Event) => void) => {\n element.addEventListener(type, handler);\n eventListeners.push({\n element,\n type,\n handler,\n });\n };\n\n const removeClickListeners = () => {\n eventListeners.forEach(({ element, type, handler }) => {\n /* istanbul ignore next */\n element?.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n\n let formInteractionsConfig: FormInteractionsOptions | undefined;\n\n const name = '@amplitude/plugin-form-interaction-tracking-browser';\n const type = 'enrichment';\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\n formInteractionsConfig = getFormInteractionsConfig(config);\n\n const initializeFormTracking = () => {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn(\n 'Form interaction tracking requires a later version of @amplitude/analytics-browser. Form interaction events are not tracked.',\n );\n return;\n }\n\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n const addFormInteractionListener = (form: HTMLFormElement) => {\n let hasFormChanged = false;\n\n addEventListener(form, 'change', () => {\n const formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n }\n hasFormChanged = true;\n });\n\n addEventListener(form, 'submit', (event: Event) => {\n const formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n }\n hasFormChanged = true;\n\n // Check if shouldTrackSubmit callback is provided and use it to determine whether to track form_submit\n if (formInteractionsConfig?.shouldTrackSubmit !== undefined) {\n if (\n typeof formInteractionsConfig.shouldTrackSubmit === 'function' &&\n typeof SubmitEvent !== 'undefined' &&\n event instanceof SubmitEvent\n ) {\n try {\n const shouldTrack = formInteractionsConfig.shouldTrackSubmit(event);\n if (!shouldTrack) {\n return;\n }\n } catch (e) {\n config.loggerProvider.warn('shouldTrackSubmit callback threw an error, proceeding with tracking.');\n }\n } else {\n config.loggerProvider.warn(\n 'shouldTrackSubmit is ignored because it is not a function or event is not a SubmitEvent.',\n );\n }\n }\n\n amplitude.track(DEFAULT_FORM_SUBMIT_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n hasFormChanged = false;\n });\n };\n\n // Adds listener to existing anchor tags\n const forms = Array.from(document.getElementsByTagName('form'));\n forms.forEach(addFormInteractionListener);\n\n // Adds listener to anchor tags added after initial load\n /* istanbul ignore else */\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeName === 'FORM') {\n addFormInteractionListener(node as HTMLFormElement);\n }\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n Array.from(node.querySelectorAll('form') as HTMLFormElement[]).map(addFormInteractionListener);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n }\n };\n\n // If the document is already loaded, initialize immediately.\n if (document.readyState === 'complete') {\n initializeFormTracking();\n } else {\n // Otherwise, wait for the load event.\n // The form interaction plugin observes changes in the dom. For this to work correctly, the observer can only be setup\n // after the body is built. When Amplitude gets initialized in a script tag, the body tag is still unavailable. So register this\n // only after the window is loaded\n const window = getGlobalScope();\n /* istanbul ignore else*/\n if (window) {\n window.addEventListener('load', initializeFormTracking);\n } else {\n config.loggerProvider.debug('Form interaction tracking is not installed because global is undefined.');\n }\n }\n };\n const execute = async (event: AmplitudeEvent) => event;\n const teardown = async () => {\n observer?.disconnect();\n removeClickListeners();\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n\nexport const stringOrUndefined = <T>(name: T): T extends string ? string : undefined => {\n /* istanbul ignore if */\n if (typeof name !== 'string') {\n // We found instances where the value of `name` is an Element and not a string.\n // Elements may have circular references and would throw an error when passed to `JSON.stringify(...)`.\n // If a non-string value is seen, assume there is no value.\n return undefined as T extends string ? string : undefined;\n }\n\n return name as T extends string ? string : undefined;\n};\n\n// Extracts the form action attribute, and normalizes it to a valid URL to preserve the previous behavior of accessing the action property directly.\nexport const extractFormAction = (form: HTMLFormElement): string | null => {\n let formDestination = form.getAttribute('action');\n try {\n // eslint-disable-next-line no-restricted-globals\n formDestination = new URL(encodeURI(formDestination ?? ''), window.location.href).href;\n } catch {\n //\n }\n return formDestination;\n};\n"]}
1
+ {"version":3,"file":"form-interaction-tracking.js","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":";;;;AAAA,0CAMsB;AAEtB,4DAMmC;AACnC,wDAAgE;AAQzD,IAAM,uBAAuB,GAAG;IACrC,IAAI,QAAsC,CAAC;IAC3C,IAAI,cAAc,GAAoB,EAAE,CAAC;IAEzC,IAAM,gBAAgB,GAAG,UAAC,OAAgB,EAAE,IAAyB,EAAE,OAA+B;QACpG,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,cAAc,CAAC,IAAI,CAAC;YAClB,OAAO,SAAA;YACP,IAAI,MAAA;YACJ,OAAO,SAAA;SACR,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,IAAM,oBAAoB,GAAG;QAC3B,cAAc,CAAC,OAAO,CAAC,UAAC,EAA0B;gBAAxB,OAAO,aAAA,EAAE,IAAI,UAAA,EAAE,OAAO,aAAA;YAC9C,0BAA0B;YAC1B,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QACH,cAAc,GAAG,EAAE,CAAC;IACtB,CAAC,CAAC;IAEF,IAAI,sBAA2D,CAAC;IAEhE,IAAM,IAAI,GAAG,qDAAqD,CAAC;IACnE,IAAM,IAAI,GAAG,YAAY,CAAC;IAC1B,IAAM,KAAK,GAAG,UAAO,MAAqB,EAAE,SAAwB;;;YAClE,sBAAsB,GAAG,IAAA,4CAAyB,EAAC,MAAM,CAAC,CAAC;YAErD,sBAAsB,GAAG;gBAC7B,wBAAwB;gBACxB,IAAI,CAAC,SAAS,EAAE;oBACd,qEAAqE;oBACrE,MAAM,CAAC,cAAc,CAAC,IAAI,CACxB,8HAA8H,CAC/H,CAAC;oBACF,OAAO;iBACR;gBAED,wBAAwB;gBACxB,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;oBACnC,OAAO;iBACR;gBAED,IAAM,cAAc,GAAG,IAAI,OAAO,EAAQ,CAAC;gBAC3C,IAAM,0BAA0B,GAAG,UAAC,IAAqB;oBACvD,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;wBAC5B,OAAO;qBACR;oBACD,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAEzB,IAAI,cAAc,GAAG,KAAK,CAAC;oBAE3B,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE;;wBAC/B,IAAM,eAAe,GAAG,IAAA,yBAAiB,EAAC,IAAI,CAAC,CAAC;wBAChD,IAAI,CAAC,cAAc,EAAE;4BACnB,SAAS,CAAC,KAAK,CAAC,oCAAwB;gCACtC,GAAC,mBAAO,IAAG,IAAA,yBAAiB,EAAC,IAAI,CAAC,EAAE,CAAC;gCACrC,GAAC,qBAAS,IAAG,IAAA,yBAAiB,EAAC,IAAI,CAAC,IAAI,CAAC;gCACzC,GAAC,4BAAgB,IAAG,eAAe;oCACnC,CAAC;yBACJ;wBACD,cAAc,GAAG,IAAI,CAAC;oBACxB,CAAC,CAAC,CAAC;oBAEH,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAC,KAAY;;wBAC5C,IAAM,eAAe,GAAG,IAAA,yBAAiB,EAAC,IAAI,CAAC,CAAC;wBAChD,IAAI,CAAC,cAAc,EAAE;4BACnB,SAAS,CAAC,KAAK,CAAC,oCAAwB;gCACtC,GAAC,mBAAO,IAAG,IAAA,yBAAiB,EAAC,IAAI,CAAC,EAAE,CAAC;gCACrC,GAAC,qBAAS,IAAG,IAAA,yBAAiB,EAAC,IAAI,CAAC,IAAI,CAAC;gCACzC,GAAC,4BAAgB,IAAG,eAAe;oCACnC,CAAC;yBACJ;wBACD,cAAc,GAAG,IAAI,CAAC;wBAEtB,uGAAuG;wBACvG,IAAI,CAAA,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,iBAAiB,MAAK,SAAS,EAAE;4BAC3D,IACE,OAAO,sBAAsB,CAAC,iBAAiB,KAAK,UAAU;gCAC9D,OAAO,WAAW,KAAK,WAAW;gCAClC,KAAK,YAAY,WAAW,EAC5B;gCACA,IAAI;oCACF,IAAM,WAAW,GAAG,sBAAsB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;oCACpE,IAAI,CAAC,WAAW,EAAE;wCAChB,OAAO;qCACR;iCACF;gCAAC,OAAO,CAAC,EAAE;oCACV,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;iCACpG;6BACF;iCAAM;gCACL,MAAM,CAAC,cAAc,CAAC,IAAI,CACxB,0FAA0F,CAC3F,CAAC;6BACH;yBACF;wBAED,SAAS,CAAC,KAAK,CAAC,qCAAyB;4BACvC,GAAC,mBAAO,IAAG,IAAA,yBAAiB,EAAC,IAAI,CAAC,EAAE,CAAC;4BACrC,GAAC,qBAAS,IAAG,IAAA,yBAAiB,EAAC,IAAI,CAAC,IAAI,CAAC;4BACzC,GAAC,4BAAgB,IAAG,eAAe;gCACnC,CAAC;wBACH,cAAc,GAAG,KAAK,CAAC;oBACzB,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC;gBAEF,wCAAwC;gBACxC,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;gBAChE,KAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;gBAE1C,wDAAwD;gBACxD,0BAA0B;gBAC1B,IAAI,OAAO,gBAAgB,KAAK,WAAW,EAAE;oBAC3C,QAAQ,GAAG,IAAI,gBAAgB,CAAC,UAAC,SAAS;wBACxC,SAAS,CAAC,OAAO,CAAC,UAAC,QAAQ;4BACzB,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,IAAI;gCAC/B,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE;oCAC5B,0BAA0B,CAAC,IAAuB,CAAC,CAAC;iCACrD;gCACD,IAAI,kBAAkB,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,gBAAgB,KAAK,UAAU,EAAE;oCAC7E,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAsB,CAAC,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;iCAChG;4BACH,CAAC,CAAC,CAAC;wBACL,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;oBAEH,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;wBAC9B,OAAO,EAAE,IAAI;wBACb,SAAS,EAAE,IAAI;qBAChB,CAAC,CAAC;iBACJ;YACH,CAAC,CAAC;YAEF,6DAA6D;YAC7D,IAAI,QAAQ,CAAC,UAAU,KAAK,UAAU,EAAE;gBACtC,sBAAsB,EAAE,CAAC;aAC1B;iBAAM;gBAKC,WAAS,IAAA,+BAAc,GAAE,CAAC;gBAChC,yBAAyB;gBACzB,IAAI,QAAM,EAAE;oBACV,QAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;iBACzD;qBAAM;oBACL,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;iBACxG;aACF;;;SACF,CAAC;IACF,IAAM,OAAO,GAAG,UAAO,KAAqB;QAAK,sBAAA,KAAK,EAAA;aAAA,CAAC;IACvD,IAAM,QAAQ,GAAG;;YACf,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,EAAE,CAAC;YACvB,oBAAoB,EAAE,CAAC;;;SACxB,CAAC;IAEF,OAAO;QACL,IAAI,MAAA;QACJ,IAAI,MAAA;QACJ,KAAK,OAAA;QACL,OAAO,SAAA;QACP,QAAQ,UAAA;KACT,CAAC;AACJ,CAAC,CAAC;AAnKW,QAAA,uBAAuB,2BAmKlC;AAEK,IAAM,iBAAiB,GAAG,UAAI,IAAO;IAC1C,wBAAwB;IACxB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC5B,+EAA+E;QAC/E,uGAAuG;QACvG,2DAA2D;QAC3D,OAAO,SAAkD,CAAC;KAC3D;IAED,OAAO,IAA6C,CAAC;AACvD,CAAC,CAAC;AAVW,QAAA,iBAAiB,qBAU5B;AAEF,oJAAoJ;AAC7I,IAAM,iBAAiB,GAAG,UAAC,IAAqB;IACrD,IAAI,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI;QACF,iDAAiD;QACjD,eAAe,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;KACxF;IAAC,WAAM;QACN,EAAE;KACH;IACD,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC;AATW,QAAA,iBAAiB,qBAS5B","sourcesContent":["import {\n DEFAULT_FORM_START_EVENT,\n DEFAULT_FORM_SUBMIT_EVENT,\n FORM_ID,\n FORM_NAME,\n FORM_DESTINATION,\n} from '../constants';\nimport { BrowserConfig } from '../config';\nimport {\n getGlobalScope,\n Event as AmplitudeEvent,\n EnrichmentPlugin,\n BrowserClient,\n FormInteractionsOptions,\n} from '@amplitude/analytics-core';\nimport { getFormInteractionsConfig } from '../default-tracking';\n\ninterface EventListener {\n element: Element;\n type: 'change' | 'submit';\n handler: (event: Event) => void;\n}\n\nexport const formInteractionTracking = (): EnrichmentPlugin => {\n let observer: MutationObserver | undefined;\n let eventListeners: EventListener[] = [];\n\n const addEventListener = (element: Element, type: 'change' | 'submit', handler: (event: Event) => void) => {\n element.addEventListener(type, handler);\n eventListeners.push({\n element,\n type,\n handler,\n });\n };\n\n const removeClickListeners = () => {\n eventListeners.forEach(({ element, type, handler }) => {\n /* istanbul ignore next */\n element?.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n\n let formInteractionsConfig: FormInteractionsOptions | undefined;\n\n const name = '@amplitude/plugin-form-interaction-tracking-browser';\n const type = 'enrichment';\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\n formInteractionsConfig = getFormInteractionsConfig(config);\n\n const initializeFormTracking = () => {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn(\n 'Form interaction tracking requires a later version of @amplitude/analytics-browser. Form interaction events are not tracked.',\n );\n return;\n }\n\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n const addedFormNodes = new WeakSet<Node>();\n const addFormInteractionListener = (form: HTMLFormElement) => {\n if (addedFormNodes.has(form)) {\n return;\n }\n addedFormNodes.add(form);\n\n let hasFormChanged = false;\n\n addEventListener(form, 'change', () => {\n const formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n }\n hasFormChanged = true;\n });\n\n addEventListener(form, 'submit', (event: Event) => {\n const formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n }\n hasFormChanged = true;\n\n // Check if shouldTrackSubmit callback is provided and use it to determine whether to track form_submit\n if (formInteractionsConfig?.shouldTrackSubmit !== undefined) {\n if (\n typeof formInteractionsConfig.shouldTrackSubmit === 'function' &&\n typeof SubmitEvent !== 'undefined' &&\n event instanceof SubmitEvent\n ) {\n try {\n const shouldTrack = formInteractionsConfig.shouldTrackSubmit(event);\n if (!shouldTrack) {\n return;\n }\n } catch (e) {\n config.loggerProvider.warn('shouldTrackSubmit callback threw an error, proceeding with tracking.');\n }\n } else {\n config.loggerProvider.warn(\n 'shouldTrackSubmit is ignored because it is not a function or event is not a SubmitEvent.',\n );\n }\n }\n\n amplitude.track(DEFAULT_FORM_SUBMIT_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n hasFormChanged = false;\n });\n };\n\n // Adds listener to existing anchor tags\n const forms = Array.from(document.getElementsByTagName('form'));\n forms.forEach(addFormInteractionListener);\n\n // Adds listener to anchor tags added after initial load\n /* istanbul ignore else */\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeName === 'FORM') {\n addFormInteractionListener(node as HTMLFormElement);\n }\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n Array.from(node.querySelectorAll('form') as HTMLFormElement[]).map(addFormInteractionListener);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n }\n };\n\n // If the document is already loaded, initialize immediately.\n if (document.readyState === 'complete') {\n initializeFormTracking();\n } else {\n // Otherwise, wait for the load event.\n // The form interaction plugin observes changes in the dom. For this to work correctly, the observer can only be setup\n // after the body is built. When Amplitude gets initialized in a script tag, the body tag is still unavailable. So register this\n // only after the window is loaded\n const window = getGlobalScope();\n /* istanbul ignore else*/\n if (window) {\n window.addEventListener('load', initializeFormTracking);\n } else {\n config.loggerProvider.debug('Form interaction tracking is not installed because global is undefined.');\n }\n }\n };\n const execute = async (event: AmplitudeEvent) => event;\n const teardown = async () => {\n observer?.disconnect();\n removeClickListeners();\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n\nexport const stringOrUndefined = <T>(name: T): T extends string ? string : undefined => {\n /* istanbul ignore if */\n if (typeof name !== 'string') {\n // We found instances where the value of `name` is an Element and not a string.\n // Elements may have circular references and would throw an error when passed to `JSON.stringify(...)`.\n // If a non-string value is seen, assume there is no value.\n return undefined as T extends string ? string : undefined;\n }\n\n return name as T extends string ? string : undefined;\n};\n\n// Extracts the form action attribute, and normalizes it to a valid URL to preserve the previous behavior of accessing the action property directly.\nexport const extractFormAction = (form: HTMLFormElement): string | null => {\n let formDestination = form.getAttribute('action');\n try {\n // eslint-disable-next-line no-restricted-globals\n formDestination = new URL(encodeURI(formDestination ?? ''), window.location.href).href;\n } catch {\n //\n }\n return formDestination;\n};\n"]}
@@ -1,2 +1,2 @@
1
- export { AmplitudeReturn, BaseEvent, EventOptions, BrowserClient, AttributionOptions, AutocaptureOptions, BrowserOptions, BrowserConfig, IConfig, Event, IdentifyEvent, GroupIdentifyEvent, IdentifyOperation, SpecialEventType, IIdentify, IRevenue, RevenueProperty, ILogger, LogLevel, Plugin, BeforePlugin, EnrichmentPlugin, DestinationPlugin, Result, ServerZoneType, ServerZone, IdentityStorageType, Storage, TransportType, OfflineDisabled, Messenger, ElementInteractionsOptions, ActionType, DEFAULT_CSS_SELECTOR_ALLOWLIST, DEFAULT_DATA_ATTRIBUTE_PREFIX, DEFAULT_ACTION_CLICK_ALLOWLIST, Campaign, ClickIdParameters, ReferrerParameters, UTMParameters, } from '@amplitude/analytics-core';
1
+ export { AmplitudeReturn, BaseEvent, EventOptions, BrowserClient, AttributionOptions, AutocaptureOptions, BrowserOptions, BrowserConfig, IConfig, Event, IdentifyEvent, GroupIdentifyEvent, IdentifyOperation, SpecialEventType, IIdentify, IRevenue, RevenueProperty, ILogger, LogLevel, Plugin, BeforePlugin, EnrichmentPlugin, DestinationPlugin, Result, ServerZoneType, ServerZone, IdentityStorageType, Storage, TransportType, OfflineDisabled, Messenger, ElementInteractionsOptions, ActionType, DEFAULT_CSS_SELECTOR_ALLOWLIST, DEFAULT_DATA_ATTRIBUTE_PREFIX, DEFAULT_ACTION_CLICK_ALLOWLIST, Campaign, ClickIdParameters, ReferrerParameters, UTMParameters, ValidPropertyType, } from '@amplitude/analytics-core';
2
2
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,SAAS,EACT,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,OAAO,EACP,KAAK,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,eAAe,EACf,OAAO,EACP,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,MAAM,EACN,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,OAAO,EACP,aAAa,EACb,eAAe,EACf,SAAS,EACT,0BAA0B,EAC1B,UAAU,EACV,8BAA8B,EAC9B,6BAA6B,EAC7B,8BAA8B,EAC9B,QAAQ,EACR,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,GACd,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,SAAS,EACT,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,OAAO,EACP,KAAK,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,eAAe,EACf,OAAO,EACP,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,MAAM,EACN,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,OAAO,EACP,aAAa,EACb,eAAe,EACf,SAAS,EACT,0BAA0B,EAC1B,UAAU,EACV,8BAA8B,EAC9B,6BAA6B,EAC7B,8BAA8B,EAC9B,QAAQ,EACR,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,GAClB,MAAM,2BAA2B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;AAAA,sDAAsD;AACtD,4DAyCmC;AA5BjC,mHAAA,iBAAiB,OAAA;AACjB,kHAAA,gBAAgB,OAAA;AAGhB,iHAAA,eAAe,OAAA;AAEf,0GAAA,QAAQ,OAAA;AAOR,4GAAA,UAAU,OAAA;AAIV,iHAAA,eAAe,OAAA;AAIf,gIAAA,8BAA8B,OAAA;AAC9B,+HAAA,6BAA6B,OAAA;AAC7B,gIAAA,8BAA8B,OAAA","sourcesContent":["/* eslint-disable @typescript-eslint/unbound-method */\nexport {\n AmplitudeReturn,\n BaseEvent,\n EventOptions,\n BrowserClient,\n AttributionOptions,\n AutocaptureOptions,\n BrowserOptions,\n BrowserConfig,\n IConfig,\n Event,\n IdentifyEvent,\n GroupIdentifyEvent,\n IdentifyOperation,\n SpecialEventType,\n IIdentify,\n IRevenue,\n RevenueProperty,\n ILogger,\n LogLevel,\n Plugin,\n BeforePlugin,\n EnrichmentPlugin,\n DestinationPlugin,\n Result,\n ServerZoneType,\n ServerZone,\n IdentityStorageType,\n Storage,\n TransportType,\n OfflineDisabled,\n Messenger,\n ElementInteractionsOptions,\n ActionType,\n DEFAULT_CSS_SELECTOR_ALLOWLIST,\n DEFAULT_DATA_ATTRIBUTE_PREFIX,\n DEFAULT_ACTION_CLICK_ALLOWLIST,\n Campaign,\n ClickIdParameters,\n ReferrerParameters,\n UTMParameters,\n} from '@amplitude/analytics-core';\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;AAAA,sDAAsD;AACtD,4DA0CmC;AA7BjC,mHAAA,iBAAiB,OAAA;AACjB,kHAAA,gBAAgB,OAAA;AAGhB,iHAAA,eAAe,OAAA;AAEf,0GAAA,QAAQ,OAAA;AAOR,4GAAA,UAAU,OAAA;AAIV,iHAAA,eAAe,OAAA;AAIf,gIAAA,8BAA8B,OAAA;AAC9B,+HAAA,6BAA6B,OAAA;AAC7B,gIAAA,8BAA8B,OAAA","sourcesContent":["/* eslint-disable @typescript-eslint/unbound-method */\nexport {\n AmplitudeReturn,\n BaseEvent,\n EventOptions,\n BrowserClient,\n AttributionOptions,\n AutocaptureOptions,\n BrowserOptions,\n BrowserConfig,\n IConfig,\n Event,\n IdentifyEvent,\n GroupIdentifyEvent,\n IdentifyOperation,\n SpecialEventType,\n IIdentify,\n IRevenue,\n RevenueProperty,\n ILogger,\n LogLevel,\n Plugin,\n BeforePlugin,\n EnrichmentPlugin,\n DestinationPlugin,\n Result,\n ServerZoneType,\n ServerZone,\n IdentityStorageType,\n Storage,\n TransportType,\n OfflineDisabled,\n Messenger,\n ElementInteractionsOptions,\n ActionType,\n DEFAULT_CSS_SELECTOR_ALLOWLIST,\n DEFAULT_DATA_ATTRIBUTE_PREFIX,\n DEFAULT_ACTION_CLICK_ALLOWLIST,\n Campaign,\n ClickIdParameters,\n ReferrerParameters,\n UTMParameters,\n ValidPropertyType,\n} from '@amplitude/analytics-core';\n"]}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "2.34.0";
1
+ export declare const VERSION = "2.34.1";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
- exports.VERSION = '2.34.0';
4
+ exports.VERSION = '2.34.1';
5
5
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["export const VERSION = '2.34.0';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["export const VERSION = '2.34.1';\n"]}
@@ -3,6 +3,7 @@ export interface Options {
3
3
  excludeReferrers?: (string | RegExp)[];
4
4
  initialEmptyValue?: string;
5
5
  resetSessionOnNewCampaign?: boolean;
6
+ optOut?: boolean;
6
7
  }
7
8
  export declare const isNewCampaign: (current: Campaign, previous: Campaign | undefined, options: Options, logger: ILogger, isNewSession?: boolean) => boolean;
8
9
  export declare const isExcludedReferrer: (excludeReferrers?: (string | RegExp)[], referringDomain?: string) => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/attribution/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,OAAO,EAAE,QAAQ,EAAiB,MAAM,2BAA2B,CAAC;AAE5G,MAAM,WAAW,OAAO;IACtB,gBAAgB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACvC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAiBD,eAAO,MAAM,aAAa,YACf,QAAQ,YACP,QAAQ,GAAG,SAAS,WACrB,OAAO,UACR,OAAO,oCA+BhB,CAAC;AAEF,eAAO,MAAM,kBAAkB,sBAAsB,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,sCAIvE,CAAC;AAEF,eAAO,MAAM,mBAAmB,aAAc,QAAQ,WAAW,OAAO,sDAgBvE,CAAC;AAEF,eAAO,MAAM,2BAA2B,iBAAkB,MAAM,GAAG,SAAS,aAS3E,CAAC"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/attribution/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,OAAO,EAAE,QAAQ,EAAiB,MAAM,2BAA2B,CAAC;AAE5G,MAAM,WAAW,OAAO;IACtB,gBAAgB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACvC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAiBD,eAAO,MAAM,aAAa,YACf,QAAQ,YACP,QAAQ,GAAG,SAAS,WACrB,OAAO,UACR,OAAO,oCA+BhB,CAAC;AAEF,eAAO,MAAM,kBAAkB,sBAAsB,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,sCAIvE,CAAC;AAEF,eAAO,MAAM,mBAAmB,aAAc,QAAQ,WAAW,OAAO,sDAgBvE,CAAC;AAEF,eAAO,MAAM,2BAA2B,iBAAkB,MAAM,GAAG,SAAS,aAS3E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/attribution/helpers.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAqB,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAQ5G,IAAM,sBAAsB,GAAG,UAAC,MAAc;IAC5C,IAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEhC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;QACrB,OAAO,MAAM,CAAC;KACf;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,kIAAkI;AAClI,IAAM,eAAe,GAAG,UAAC,OAAiB;IACxC,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,UAAC,KAAK,IAAK,OAAA,CAAC,KAAK,EAAN,CAAM,CAAC,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,aAAa,GAAG,UAC3B,OAAiB,EACjB,QAA8B,EAC9B,OAAgB,EAChB,MAAe,EACf,YAAmB;IAAnB,6BAAA,EAAA,mBAAmB;IAEX,IAAA,QAAQ,GAA2C,OAAO,SAAlD,EAAE,gBAAgB,GAAyB,OAAO,iBAAhC,EAAK,eAAe,UAAK,OAAO,EAA5D,gCAAkD,CAAF,CAAa;IACnE,IAAM,KAA+F,QAAQ,IAAI,EAAE,EAAjG,kBAAkB,cAAA,EAAoB,mBAAmB,sBAAA,EAAK,gBAAgB,cAA1F,gCAA4F,CAAiB,CAAC;IAEpH,IAAI,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAAE;QAC1E,4EAA4E;QAC5E,MAAM,CAAC,KAAK,CAAC,6CAAsC,OAAO,CAAC,gBAAgB,sCAAmC,CAAC,CAAC;QAChH,OAAO,KAAK,CAAC;KACd;IAED,8FAA8F;IAC9F,IAAI,CAAC,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,IAAI,QAAQ,EAAE;QACzD,MAAM,CAAC,KAAK,CAAC,kFAAkF,CAAC,CAAC;QACjG,OAAO,KAAK,CAAC;KACd;IAED,IAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5F,IAAM,YAAY,GAChB,sBAAsB,CAAC,gBAAgB,IAAI,EAAE,CAAC,KAAK,sBAAsB,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;IAEvG,IAAM,MAAM,GAAG,CAAC,QAAQ,IAAI,cAAc,IAAI,YAAY,CAAC;IAE3D,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;KACvF;SAAM;QACL,MAAM,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;KAC1E;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,kBAAkB,GAAG,UAAC,gBAA0C,EAAE,eAAoB;IAAhE,iCAAA,EAAA,qBAA0C;IAAE,gCAAA,EAAA,oBAAoB;IACjG,OAAO,gBAAgB,CAAC,IAAI,CAAC,UAAC,KAAK;QACjC,OAAA,KAAK,YAAY,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,eAAe;IAAjF,CAAiF,CAClF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,mBAAmB,GAAG,UAAC,QAAkB,EAAE,OAAgB;IACtE,IAAM,kBAAkB,yBAGnB,aAAa,GACb,QAAQ,CACZ,CAAC;IACF,IAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,UAAC,QAAQ,EAAE,EAAY;;YAAZ,KAAA,aAAY,EAAX,GAAG,QAAA,EAAE,KAAK,QAAA;QACpF,QAAQ,CAAC,OAAO,CAAC,kBAAW,GAAG,CAAE,EAAE,MAAA,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,OAAO,CAAC,iBAAiB,mCAAI,OAAO,CAAC,CAAC;QAClF,IAAI,KAAK,EAAE;YACT,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SACjC;QACD,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC,EAAE,IAAI,QAAQ,EAAE,CAAC,CAAC;IAEnB,OAAO,mBAAmB,CAAC,aAAa,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,2BAA2B,GAAG,UAAC,YAAgC;IAC1E,IAAI,MAAM,GAAG,YAAY,CAAC;IAC1B,IAAI,MAAM,EAAE;QACV,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC1B,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SAC9B;QACD,OAAO,CAAC,IAAI,MAAM,CAAC,UAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,MAAG,CAAC,CAAC,CAAC;KACvD;IACD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC","sourcesContent":["import { createIdentifyEvent, Identify, ILogger, Campaign, BASE_CAMPAIGN } from '@amplitude/analytics-core';\n\nexport interface Options {\n excludeReferrers?: (string | RegExp)[];\n initialEmptyValue?: string;\n resetSessionOnNewCampaign?: boolean;\n}\n\nconst domainWithoutSubdomain = (domain: string) => {\n const parts = domain.split('.');\n\n if (parts.length <= 2) {\n return domain;\n }\n\n return parts.slice(parts.length - 2, parts.length).join('.');\n};\n\n//Direct traffic mean no external referral, no UTMs, no click-ids, and no other customer identified marketing campaign url params.\nconst isDirectTraffic = (current: Campaign) => {\n return Object.values(current).every((value) => !value);\n};\n\nexport const isNewCampaign = (\n current: Campaign,\n previous: Campaign | undefined,\n options: Options,\n logger: ILogger,\n isNewSession = true,\n) => {\n const { referrer, referring_domain, ...currentCampaign } = current;\n const { referrer: _previous_referrer, referring_domain: prevReferringDomain, ...previousCampaign } = previous || {};\n\n if (isExcludedReferrer(options.excludeReferrers, current.referring_domain)) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n logger.debug(`This is not a new campaign because ${current.referring_domain} is in the exclude referrer list.`);\n return false;\n }\n\n //In the same session, direct traffic should not override or unset any persisting query params\n if (!isNewSession && isDirectTraffic(current) && previous) {\n logger.debug('This is not a new campaign because this is a direct traffic in the same session.');\n return false;\n }\n\n const hasNewCampaign = JSON.stringify(currentCampaign) !== JSON.stringify(previousCampaign);\n const hasNewDomain =\n domainWithoutSubdomain(referring_domain || '') !== domainWithoutSubdomain(prevReferringDomain || '');\n\n const result = !previous || hasNewCampaign || hasNewDomain;\n\n if (!result) {\n logger.debug(\"This is not a new campaign because it's the same as the previous one.\");\n } else {\n logger.debug(`This is a new campaign. An $identify event will be sent.`);\n }\n\n return result;\n};\n\nexport const isExcludedReferrer = (excludeReferrers: (string | RegExp)[] = [], referringDomain = '') => {\n return excludeReferrers.some((value) =>\n value instanceof RegExp ? value.test(referringDomain) : value === referringDomain,\n );\n};\n\nexport const createCampaignEvent = (campaign: Campaign, options: Options) => {\n const campaignParameters: Campaign = {\n // This object definition allows undefined keys to be iterated on\n // in .reduce() to build indentify object\n ...BASE_CAMPAIGN,\n ...campaign,\n };\n const identifyEvent = Object.entries(campaignParameters).reduce((identify, [key, value]) => {\n identify.setOnce(`initial_${key}`, value ?? options.initialEmptyValue ?? 'EMPTY');\n if (value) {\n return identify.set(key, value);\n }\n return identify.unset(key);\n }, new Identify());\n\n return createIdentifyEvent(identifyEvent);\n};\n\nexport const getDefaultExcludedReferrers = (cookieDomain: string | undefined) => {\n let domain = cookieDomain;\n if (domain) {\n if (domain.startsWith('.')) {\n domain = domain.substring(1);\n }\n return [new RegExp(`${domain.replace('.', '\\\\.')}$`)];\n }\n return [];\n};\n"]}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/attribution/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { createIdentifyEvent, Identify, ILogger, Campaign, BASE_CAMPAIGN } from '@amplitude/analytics-core';\n\nexport interface Options {\n excludeReferrers?: (string | RegExp)[];\n initialEmptyValue?: string;\n resetSessionOnNewCampaign?: boolean;\n optOut?: boolean;\n}\n\nconst domainWithoutSubdomain = (domain: string) => {\n const parts = domain.split('.');\n\n if (parts.length <= 2) {\n return domain;\n }\n\n return parts.slice(parts.length - 2, parts.length).join('.');\n};\n\n//Direct traffic mean no external referral, no UTMs, no click-ids, and no other customer identified marketing campaign url params.\nconst isDirectTraffic = (current: Campaign) => {\n return Object.values(current).every((value) => !value);\n};\n\nexport const isNewCampaign = (\n current: Campaign,\n previous: Campaign | undefined,\n options: Options,\n logger: ILogger,\n isNewSession = true,\n) => {\n const { referrer, referring_domain, ...currentCampaign } = current;\n const { referrer: _previous_referrer, referring_domain: prevReferringDomain, ...previousCampaign } = previous || {};\n\n if (isExcludedReferrer(options.excludeReferrers, current.referring_domain)) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n logger.debug(`This is not a new campaign because ${current.referring_domain} is in the exclude referrer list.`);\n return false;\n }\n\n //In the same session, direct traffic should not override or unset any persisting query params\n if (!isNewSession && isDirectTraffic(current) && previous) {\n logger.debug('This is not a new campaign because this is a direct traffic in the same session.');\n return false;\n }\n\n const hasNewCampaign = JSON.stringify(currentCampaign) !== JSON.stringify(previousCampaign);\n const hasNewDomain =\n domainWithoutSubdomain(referring_domain || '') !== domainWithoutSubdomain(prevReferringDomain || '');\n\n const result = !previous || hasNewCampaign || hasNewDomain;\n\n if (!result) {\n logger.debug(\"This is not a new campaign because it's the same as the previous one.\");\n } else {\n logger.debug(`This is a new campaign. An $identify event will be sent.`);\n }\n\n return result;\n};\n\nexport const isExcludedReferrer = (excludeReferrers: (string | RegExp)[] = [], referringDomain = '') => {\n return excludeReferrers.some((value) =>\n value instanceof RegExp ? value.test(referringDomain) : value === referringDomain,\n );\n};\n\nexport const createCampaignEvent = (campaign: Campaign, options: Options) => {\n const campaignParameters: Campaign = {\n // This object definition allows undefined keys to be iterated on\n // in .reduce() to build indentify object\n ...BASE_CAMPAIGN,\n ...campaign,\n };\n const identifyEvent = Object.entries(campaignParameters).reduce((identify, [key, value]) => {\n identify.setOnce(`initial_${key}`, value ?? options.initialEmptyValue ?? 'EMPTY');\n if (value) {\n return identify.set(key, value);\n }\n return identify.unset(key);\n }, new Identify());\n\n return createIdentifyEvent(identifyEvent);\n};\n\nexport const getDefaultExcludedReferrers = (cookieDomain: string | undefined) => {\n let domain = cookieDomain;\n if (domain) {\n if (domain.startsWith('.')) {\n domain = domain.substring(1);\n }\n return [new RegExp(`${domain.replace('.', '\\\\.')}$`)];\n }\n return [];\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"web-attribution.d.ts","sourceRoot":"","sources":["../../../src/attribution/web-attribution.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,OAAO,EACP,OAAO,EAGP,QAAQ,EAGT,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,OAAO,EAAmE,MAAM,WAAW,CAAC;AAErG,qBAAa,cAAc;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,QAAQ,CAAC;IAC5B,eAAe,EAAE,QAAQ,CAAC;IAC1B,sBAAsB,UAAS;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;gBAEJ,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa;IAiB7C,IAAI;IAUJ,aAAa;IAQnB;;;;OAIG;IACH,qBAAqB,CAAC,QAAQ,CAAC,EAAE,MAAM;IAUvC,+BAA+B;CAGhC"}
1
+ {"version":3,"file":"web-attribution.d.ts","sourceRoot":"","sources":["../../../src/attribution/web-attribution.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,OAAO,EACP,OAAO,EAGP,QAAQ,EAGT,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,OAAO,EAAmE,MAAM,WAAW,CAAC;AAErG,qBAAa,cAAc;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,QAAQ,CAAC;IAC5B,eAAe,EAAE,QAAQ,CAAC;IAC1B,sBAAsB,UAAS;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;gBAEJ,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa;IAkB7C,IAAI;IAeJ,aAAa;IAQnB;;;;OAIG;IACH,qBAAqB,CAAC,QAAQ,CAAC,EAAE,MAAM;IAUvC,+BAA+B;CAGhC"}
@@ -5,7 +5,7 @@ var WebAttribution = /** @class */ (function () {
5
5
  function WebAttribution(options, config) {
6
6
  var _a;
7
7
  this.shouldTrackNewCampaign = false;
8
- this.options = __assign({ initialEmptyValue: 'EMPTY', resetSessionOnNewCampaign: false, excludeReferrers: getDefaultExcludedReferrers((_a = config.cookieOptions) === null || _a === void 0 ? void 0 : _a.domain) }, options);
8
+ this.options = __assign({ initialEmptyValue: 'EMPTY', resetSessionOnNewCampaign: false, excludeReferrers: getDefaultExcludedReferrers((_a = config.cookieOptions) === null || _a === void 0 ? void 0 : _a.domain), optOut: config.optOut }, options);
9
9
  this.storage = config.cookieStorage;
10
10
  this.storageKey = getStorageKey(config.apiKey, 'MKTG');
11
11
  this.webExpStorageKey = getStorageKey(config.apiKey, 'MKTG_ORIGINAL');
@@ -21,7 +21,12 @@ var WebAttribution = /** @class */ (function () {
21
21
  var _a;
22
22
  return __generator(this, function (_b) {
23
23
  switch (_b.label) {
24
- case 0: return [4 /*yield*/, this.fetchCampaign()];
24
+ case 0:
25
+ // skip attribution if optOut is true
26
+ if (this.options.optOut) {
27
+ return [2 /*return*/];
28
+ }
29
+ return [4 /*yield*/, this.fetchCampaign()];
25
30
  case 1:
26
31
  _a = __read.apply(void 0, [_b.sent(), 2]), this.currentCampaign = _a[0], this.previousCampaign = _a[1];
27
32
  isEventInNewSession = !this.lastEventTime ? true : isNewSession(this.sessionTimeout, this.lastEventTime);
@@ -1 +1 @@
1
- {"version":3,"file":"web-attribution.js","sourceRoot":"","sources":["../../../src/attribution/web-attribution.ts"],"names":[],"mappings":";AAAA,OAAO,EAIL,aAAa,EACb,YAAY,EAEZ,aAAa,EACb,cAAc,GACf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAW,2BAA2B,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAErG;IAYE,wBAAY,OAAgB,EAAE,MAAqB;;QALnD,2BAAsB,GAAG,KAAK,CAAC;QAM7B,IAAI,CAAC,OAAO,cACV,iBAAiB,EAAE,OAAO,EAC1B,yBAAyB,EAAE,KAAK,EAChC,gBAAgB,EAAE,2BAA2B,CAAC,MAAA,MAAM,CAAC,aAAa,0CAAE,MAAM,CAAC,IACxE,OAAO,CACX,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,aAA6C,CAAC;QACpE,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACtE,IAAI,CAAC,eAAe,GAAG,aAAa,CAAC;QACrC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC5C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;QACpC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACpE,CAAC;IAEK,6BAAI,GAAV;;;;;;4BACkD,qBAAM,IAAI,CAAC,aAAa,EAAE,EAAA;;wBAA1E,KAAA,sBAAgD,SAA0B,KAAA,EAAzE,IAAI,CAAC,eAAe,QAAA,EAAE,IAAI,CAAC,gBAAgB,QAAA,CAA+B;wBACrE,mBAAmB,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;6BAE3G,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAA1G,wBAA0G;wBAC5G,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;wBACnC,qBAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,EAAA;;wBAA7D,SAA6D,CAAC;;;;;;KAEjE;IAEK,sCAAa,GAAnB;;;;;4BAC2B,qBAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAA;;wBAAhE,gBAAgB,GAAG,SAA6C;6BAClE,gBAAgB,EAAhB,wBAAgB;wBAClB,qBAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAA;;wBAAhD,SAAgD,CAAC;;4BAE5C,qBAAM,OAAO,CAAC,GAAG,CAAC,CAAC,gBAAgB,IAAI,IAAI,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAA;4BAA/G,sBAAO,SAAwG,EAAC;;;;KACjH;IAED;;;;OAIG;IACH,8CAAqB,GAArB,UAAsB,QAAiB;QACrC,sCAAsC;QACtC,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;QACpC,IAAM,aAAa,GAAG,mBAAmB,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9E,IAAI,QAAQ,EAAE;YACZ,aAAa,CAAC,QAAQ,GAAG,QAAQ,CAAC;SACnC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,wDAA+B,GAA/B;QACE,OAAO,IAAI,CAAC,sBAAsB,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC;IACjF,CAAC;IACH,qBAAC;AAAD,CAAC,AAjED,IAiEC","sourcesContent":["import {\n BrowserConfig,\n ILogger,\n Storage,\n getStorageKey,\n isNewSession,\n Campaign,\n BASE_CAMPAIGN,\n CampaignParser,\n} from '@amplitude/analytics-core';\nimport { Options, getDefaultExcludedReferrers, createCampaignEvent, isNewCampaign } from './helpers';\n\nexport class WebAttribution {\n options: Options;\n storage: Storage<Campaign>;\n storageKey: string;\n webExpStorageKey: string;\n previousCampaign?: Campaign;\n currentCampaign: Campaign;\n shouldTrackNewCampaign = false;\n sessionTimeout: number;\n lastEventTime?: number;\n logger: ILogger;\n\n constructor(options: Options, config: BrowserConfig) {\n this.options = {\n initialEmptyValue: 'EMPTY',\n resetSessionOnNewCampaign: false,\n excludeReferrers: getDefaultExcludedReferrers(config.cookieOptions?.domain),\n ...options,\n };\n this.storage = config.cookieStorage as unknown as Storage<Campaign>;\n this.storageKey = getStorageKey(config.apiKey, 'MKTG');\n this.webExpStorageKey = getStorageKey(config.apiKey, 'MKTG_ORIGINAL');\n this.currentCampaign = BASE_CAMPAIGN;\n this.sessionTimeout = config.sessionTimeout;\n this.lastEventTime = config.lastEventTime;\n this.logger = config.loggerProvider;\n config.loggerProvider.log('Installing web attribution tracking.');\n }\n\n async init() {\n [this.currentCampaign, this.previousCampaign] = await this.fetchCampaign();\n const isEventInNewSession = !this.lastEventTime ? true : isNewSession(this.sessionTimeout, this.lastEventTime);\n\n if (isNewCampaign(this.currentCampaign, this.previousCampaign, this.options, this.logger, isEventInNewSession)) {\n this.shouldTrackNewCampaign = true;\n await this.storage.set(this.storageKey, this.currentCampaign);\n }\n }\n\n async fetchCampaign() {\n const originalCampaign = await this.storage.get(this.webExpStorageKey);\n if (originalCampaign) {\n await this.storage.remove(this.webExpStorageKey);\n }\n return await Promise.all([originalCampaign || new CampaignParser().parse(), this.storage.get(this.storageKey)]);\n }\n\n /**\n * This can be called when enable web attribution and either\n * 1. set a new session\n * 2. has new campaign and enable resetSessionOnNewCampaign\n */\n generateCampaignEvent(event_id?: number) {\n // Mark this campaign has been tracked\n this.shouldTrackNewCampaign = false;\n const campaignEvent = createCampaignEvent(this.currentCampaign, this.options);\n if (event_id) {\n campaignEvent.event_id = event_id;\n }\n return campaignEvent;\n }\n\n shouldSetSessionIdOnNewCampaign() {\n return this.shouldTrackNewCampaign && !!this.options.resetSessionOnNewCampaign;\n }\n}\n"]}
1
+ {"version":3,"file":"web-attribution.js","sourceRoot":"","sources":["../../../src/attribution/web-attribution.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BrowserConfig,\n ILogger,\n Storage,\n getStorageKey,\n isNewSession,\n Campaign,\n BASE_CAMPAIGN,\n CampaignParser,\n} from '@amplitude/analytics-core';\nimport { Options, getDefaultExcludedReferrers, createCampaignEvent, isNewCampaign } from './helpers';\n\nexport class WebAttribution {\n options: Options;\n storage: Storage<Campaign>;\n storageKey: string;\n webExpStorageKey: string;\n previousCampaign?: Campaign;\n currentCampaign: Campaign;\n shouldTrackNewCampaign = false;\n sessionTimeout: number;\n lastEventTime?: number;\n logger: ILogger;\n\n constructor(options: Options, config: BrowserConfig) {\n this.options = {\n initialEmptyValue: 'EMPTY',\n resetSessionOnNewCampaign: false,\n excludeReferrers: getDefaultExcludedReferrers(config.cookieOptions?.domain),\n optOut: config.optOut,\n ...options,\n };\n this.storage = config.cookieStorage as unknown as Storage<Campaign>;\n this.storageKey = getStorageKey(config.apiKey, 'MKTG');\n this.webExpStorageKey = getStorageKey(config.apiKey, 'MKTG_ORIGINAL');\n this.currentCampaign = BASE_CAMPAIGN;\n this.sessionTimeout = config.sessionTimeout;\n this.lastEventTime = config.lastEventTime;\n this.logger = config.loggerProvider;\n config.loggerProvider.log('Installing web attribution tracking.');\n }\n\n async init() {\n // skip attribution if optOut is true\n if (this.options.optOut) {\n return;\n }\n\n [this.currentCampaign, this.previousCampaign] = await this.fetchCampaign();\n const isEventInNewSession = !this.lastEventTime ? true : isNewSession(this.sessionTimeout, this.lastEventTime);\n\n if (isNewCampaign(this.currentCampaign, this.previousCampaign, this.options, this.logger, isEventInNewSession)) {\n this.shouldTrackNewCampaign = true;\n await this.storage.set(this.storageKey, this.currentCampaign);\n }\n }\n\n async fetchCampaign() {\n const originalCampaign = await this.storage.get(this.webExpStorageKey);\n if (originalCampaign) {\n await this.storage.remove(this.webExpStorageKey);\n }\n return await Promise.all([originalCampaign || new CampaignParser().parse(), this.storage.get(this.storageKey)]);\n }\n\n /**\n * This can be called when enable web attribution and either\n * 1. set a new session\n * 2. has new campaign and enable resetSessionOnNewCampaign\n */\n generateCampaignEvent(event_id?: number) {\n // Mark this campaign has been tracked\n this.shouldTrackNewCampaign = false;\n const campaignEvent = createCampaignEvent(this.currentCampaign, this.options);\n if (event_id) {\n campaignEvent.event_id = event_id;\n }\n return campaignEvent;\n }\n\n shouldSetSessionIdOnNewCampaign() {\n return this.shouldTrackNewCampaign && !!this.options.resetSessionOnNewCampaign;\n }\n}\n"]}
@@ -31,7 +31,7 @@ export declare class AmplitudeBrowser extends AmplitudeCore implements BrowserCl
31
31
  };
32
32
  getOptOut(): boolean | undefined;
33
33
  getSessionId(): number | undefined;
34
- setSessionId(sessionId: number): import("@amplitude/analytics-core").AmplitudeReturn<void> | import("@amplitude/analytics-core").AmplitudeReturn<Result[]>;
34
+ setSessionId(sessionId: number | undefined): import("@amplitude/analytics-core").AmplitudeReturn<void> | import("@amplitude/analytics-core").AmplitudeReturn<Result[]>;
35
35
  extendSession(): void;
36
36
  setTransport(transport: TransportTypeOrOptions): void;
37
37
  identify(identify: IIdentify, eventOptions?: EventOptions): import("@amplitude/analytics-core").AmplitudeReturn<Result>;
@@ -1 +1 @@
1
- {"version":3,"file":"browser-client.d.ts","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAYb,KAAK,EACL,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,sBAAsB,EAEtB,MAAM,EACN,cAAc,EACd,aAAa,EACb,aAAa,EAEb,eAAe,EAQhB,MAAM,2BAA2B,CAAC;AA+BnC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAK/D;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,aAAc,YAAW,aAAa,EAAE,eAAe;IAG3F,MAAM,EAAE,aAAa,CAAC;IACtB,uBAAuB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,cAAc,EAAE,cAAc,GAAG,SAAS,CAAC;IAC3C,cAAc,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,SAAS,CAAC;IAInD,sBAAsB,SAAK;IAE3B,IAAI,CAAC,MAAM,SAAK,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,YAAY,CAAC,EAAE,cAAc;cAiB1E,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;IAuOlE,SAAS;IAIT,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAcpC,WAAW;IAIX,WAAW,CAAC,QAAQ,EAAE,MAAM;IAc5B,KAAK;IAML,WAAW;;;;;;;IAQX,SAAS,IAAI,OAAO,GAAG,SAAS;IAIhC,YAAY;IAIZ,YAAY,CAAC,SAAS,EAAE,MAAM;IAkE9B,aAAa;IAQb,YAAY,CAAC,SAAS,EAAE,sBAAsB;IAQ9C,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,YAAY;IAezD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,YAAY;IAS/G,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,YAAY;IAStD,OAAO,CAAC,0BAA0B;IAe5B,OAAO,CAAC,KAAK,EAAE,KAAK;IA+B1B,OAAO,CAAC,iBAAiB;IAazB;;;;;;;OAOG;IACH,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;CAUpD"}
1
+ {"version":3,"file":"browser-client.d.ts","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAYb,KAAK,EACL,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,sBAAsB,EAEtB,MAAM,EACN,cAAc,EACd,aAAa,EACb,aAAa,EAEb,eAAe,EAQhB,MAAM,2BAA2B,CAAC;AA+BnC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAO/D;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,aAAc,YAAW,aAAa,EAAE,eAAe;IAG3F,MAAM,EAAE,aAAa,CAAC;IACtB,uBAAuB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,cAAc,EAAE,cAAc,GAAG,SAAS,CAAC;IAC3C,cAAc,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,SAAS,CAAC;IAInD,sBAAsB,SAAK;IAE3B,IAAI,CAAC,MAAM,SAAK,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,YAAY,CAAC,EAAE,cAAc;cAiB1E,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;IA6QlE,SAAS;IAIT,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAcpC,WAAW;IAIX,WAAW,CAAC,QAAQ,EAAE,MAAM;IAc5B,KAAK;IAML,WAAW;;;;;;;IAQX,SAAS,IAAI,OAAO,GAAG,SAAS;IAIhC,YAAY;IAIZ,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;IA8E1C,aAAa;IAQb,YAAY,CAAC,SAAS,EAAE,sBAAsB;IAQ9C,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,YAAY;IAezD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,YAAY;IAS/G,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,YAAY;IAStD,OAAO,CAAC,0BAA0B;IAe5B,OAAO,CAAC,KAAK,EAAE,KAAK;IA+B1B,OAAO,CAAC,iBAAiB;IAazB;;;;;;;OAOG;IACH,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;CAUpD"}