@amplitude/analytics-browser 2.38.2-SR-3115-rc2.0 → 2.39.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 (58) hide show
  1. package/README.md +1 -1
  2. package/lib/cjs/config/joined-config.d.ts.map +1 -1
  3. package/lib/cjs/config/joined-config.js +5 -1
  4. package/lib/cjs/config/joined-config.js.map +1 -1
  5. package/lib/cjs/config.d.ts +1 -1
  6. package/lib/cjs/config.d.ts.map +1 -1
  7. package/lib/cjs/index.d.ts +1 -0
  8. package/lib/cjs/index.d.ts.map +1 -1
  9. package/lib/cjs/index.js +5 -1
  10. package/lib/cjs/index.js.map +1 -1
  11. package/lib/cjs/version.d.ts +1 -1
  12. package/lib/cjs/version.d.ts.map +1 -1
  13. package/lib/cjs/version.js +1 -1
  14. package/lib/cjs/version.js.map +1 -1
  15. package/lib/cjs/video-capture/video-capture.d.ts +72 -0
  16. package/lib/cjs/video-capture/video-capture.d.ts.map +1 -0
  17. package/lib/cjs/video-capture/video-capture.js +152 -0
  18. package/lib/cjs/video-capture/video-capture.js.map +1 -0
  19. package/lib/esm/config/joined-config.d.ts.map +1 -1
  20. package/lib/esm/config/joined-config.js +5 -1
  21. package/lib/esm/config/joined-config.js.map +1 -1
  22. package/lib/esm/config.d.ts +1 -1
  23. package/lib/esm/config.d.ts.map +1 -1
  24. package/lib/esm/index.d.ts +1 -0
  25. package/lib/esm/index.d.ts.map +1 -1
  26. package/lib/esm/index.js +3 -0
  27. package/lib/esm/index.js.map +1 -1
  28. package/lib/esm/version.d.ts +1 -1
  29. package/lib/esm/version.d.ts.map +1 -1
  30. package/lib/esm/version.js +1 -1
  31. package/lib/esm/version.js.map +1 -1
  32. package/lib/esm/video-capture/video-capture.d.ts +72 -0
  33. package/lib/esm/video-capture/video-capture.d.ts.map +1 -0
  34. package/lib/esm/video-capture/video-capture.js +148 -0
  35. package/lib/esm/video-capture/video-capture.js.map +1 -0
  36. package/lib/scripts/amplitude-bookmarklet-snippet-min.js +1 -1
  37. package/lib/scripts/amplitude-bookmarklet.html +1 -1
  38. package/lib/scripts/amplitude-gtm-min.js +1 -1
  39. package/lib/scripts/amplitude-gtm-min.js.gz +0 -0
  40. package/lib/scripts/amplitude-gtm-min.js.map +1 -1
  41. package/lib/scripts/amplitude-gtm-snippet-min.js +1 -1
  42. package/lib/scripts/amplitude-min.js +1 -1
  43. package/lib/scripts/amplitude-min.js.gz +0 -0
  44. package/lib/scripts/amplitude-min.js.map +1 -1
  45. package/lib/scripts/amplitude-min.umd.js +1 -1
  46. package/lib/scripts/amplitude-min.umd.js.gz +0 -0
  47. package/lib/scripts/amplitude-snippet-instructions.html +1 -1
  48. package/lib/scripts/amplitude-snippet-min.js +1 -1
  49. package/lib/scripts/config/joined-config.d.ts.map +1 -1
  50. package/lib/scripts/config.d.ts +1 -1
  51. package/lib/scripts/config.d.ts.map +1 -1
  52. package/lib/scripts/index.d.ts +1 -0
  53. package/lib/scripts/index.d.ts.map +1 -1
  54. package/lib/scripts/version.d.ts +1 -1
  55. package/lib/scripts/version.d.ts.map +1 -1
  56. package/lib/scripts/video-capture/video-capture.d.ts +72 -0
  57. package/lib/scripts/video-capture/video-capture.d.ts.map +1 -0
  58. package/package.json +10 -8
package/README.md CHANGED
@@ -53,7 +53,7 @@ This SDK is also available through CDN. Copy the script loader below and paste b
53
53
  <!-- README_SNIPPET_BLOCK -->
54
54
  ```html
55
55
  <script type="text/javascript">
56
- !function(){"use strict";!function(e,t){var r=e.amplitude||{_q:[],_iq:{}};if(r.invoked)e.console&&console.error&&console.error("Amplitude snippet has been loaded.");else{var n=function(e,t){e.prototype[t]=function(){return this._q.push({name:t,args:Array.prototype.slice.call(arguments,0)}),this}},s=function(e,t,r){return function(n){e._q.push({name:t,args:Array.prototype.slice.call(r,0),resolve:n})}},o=function(e,t,r){e[t]=function(){if(r)return{promise:new Promise(s(e,t,Array.prototype.slice.call(arguments)))};!function(e,t,r){e._q.push({name:t,args:Array.prototype.slice.call(r,0)})}(e,t,Array.prototype.slice.call(arguments))}},i=function(e){for(var t=0;t<y.length;t++)o(e,y[t],!1);for(var r=0;r<g.length;r++)o(e,g[r],!0)};r.invoked=!0;var c=t.createElement("script");c.type="text/javascript",c.integrity="sha384-OWS4dEYjTOJvBt1U+WAZRyh+xGZ92vKChP78d9lMLgQrcB+lV+1rxBmO5/g3OEQk",c.crossOrigin="anonymous",c.async=!0,c.src="https://cdn.amplitude.com/libs/analytics-browser-2.38.2-SR-3115-rc2.0-min.js.gz",c.onload=function(){e.amplitude.runQueuedFunctions||console.log("[Amplitude] Error: could not load SDK")};var a=t.getElementsByTagName("script")[0];a.parentNode.insertBefore(c,a);for(var u=function(){return this._q=[],this},l=["add","append","clearAll","prepend","set","setOnce","unset","preInsert","postInsert","remove","getUserProperties"],p=0;p<l.length;p++)n(u,l[p]);r.Identify=u;for(var d=function(){return this._q=[],this},v=["getEventProperties","setProductId","setQuantity","setPrice","setRevenue","setRevenueType","setReceipt","setReceiptSig","setCurrency","setEventProperties"],f=0;f<v.length;f++)n(d,v[f]);r.Revenue=d;var y=["getDeviceId","setDeviceId","getSessionId","setSessionId","getUserId","setUserId","setOptOut","setTransport","reset","extendSession"],g=["init","add","remove","track","logEvent","identify","groupIdentify","setGroup","revenue","flush"];i(r),r.createInstance=function(e){return r._iq[e]={_q:[]},i(r._iq[e]),r._iq[e]},e.amplitude=r}}(window,document)}();
56
+ !function(){"use strict";!function(e,t){var r=e.amplitude||{_q:[],_iq:{}};if(r.invoked)e.console&&console.error&&console.error("Amplitude snippet has been loaded.");else{var n=function(e,t){e.prototype[t]=function(){return this._q.push({name:t,args:Array.prototype.slice.call(arguments,0)}),this}},s=function(e,t,r){return function(n){e._q.push({name:t,args:Array.prototype.slice.call(r,0),resolve:n})}},o=function(e,t,r){e[t]=function(){if(r)return{promise:new Promise(s(e,t,Array.prototype.slice.call(arguments)))};!function(e,t,r){e._q.push({name:t,args:Array.prototype.slice.call(r,0)})}(e,t,Array.prototype.slice.call(arguments))}},i=function(e){for(var t=0;t<g.length;t++)o(e,g[t],!1);for(var r=0;r<y.length;r++)o(e,y[r],!0)};r.invoked=!0;var c=t.createElement("script");c.type="text/javascript",c.integrity="sha384-pcq953YEN4bF3txMZUHnUeQuNlbdiSMWYVvh320Tgw9e2frrJO7kA/9gT1HVuReD",c.crossOrigin="anonymous",c.async=!0,c.src="https://cdn.amplitude.com/libs/analytics-browser-2.39.1-min.js.gz",c.onload=function(){e.amplitude.runQueuedFunctions||console.log("[Amplitude] Error: could not load SDK")};var a=t.getElementsByTagName("script")[0];a.parentNode.insertBefore(c,a);for(var u=function(){return this._q=[],this},p=["add","append","clearAll","prepend","set","setOnce","unset","preInsert","postInsert","remove","getUserProperties"],l=0;l<p.length;l++)n(u,p[l]);r.Identify=u;for(var d=function(){return this._q=[],this},f=["getEventProperties","setProductId","setQuantity","setPrice","setRevenue","setRevenueType","setReceipt","setReceiptSig","setCurrency","setEventProperties"],v=0;v<f.length;v++)n(d,f[v]);r.Revenue=d;var g=["getDeviceId","setDeviceId","getSessionId","setSessionId","getUserId","setUserId","setOptOut","setTransport","reset","extendSession"],y=["init","add","remove","track","logEvent","identify","groupIdentify","setGroup","revenue","flush"];i(r),r.createInstance=function(e){return r._iq[e]={_q:[]},i(r._iq[e]),r._iq[e]},e.amplitude=r}}(window,document)}();
57
57
 
58
58
  amplitude.init("<YOUR_API_KEY>");
59
59
  </script>
@@ -1 +1 @@
1
- {"version":3,"file":"joined-config.d.ts","sourceRoot":"","sources":["../../../src/config/joined-config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,0BAA0B,EAC/B,aAAa,EAEb,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,8BAA+B,SAAQ,kBAAkB;IACxE,mBAAmB,CAAC,EAAE,OAAO,GAAG,sCAAsC,CAAC;IACvE,eAAe,CAAC,EAAE,OAAO,GAAG,kCAAkC,CAAC;CAChE;AACD,MAAM,WAAW,sCAAuC,SAAQ,0BAA0B;IACxF;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,8BAA+B,SAAQ,kBAAkB;IACxE;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,kCAAmC,SAAQ,sBAAsB;IAChF;;OAEG;IACH,YAAY,CAAC,EAAE,8BAA8B,EAAE,CAAC;CACjD;AAQD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QA+GxE;AAgBD;;;;;;GAMG;AACH,wBAAgB,mCAAmC,CACjD,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,aAAa,EAAE,aAAa,GAC3B,IAAI,CAyGN"}
1
+ {"version":3,"file":"joined-config.d.ts","sourceRoot":"","sources":["../../../src/config/joined-config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,0BAA0B,EAC/B,aAAa,EAEb,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,8BAA+B,SAAQ,kBAAkB;IACxE,mBAAmB,CAAC,EAAE,OAAO,GAAG,sCAAsC,CAAC;IACvE,eAAe,CAAC,EAAE,OAAO,GAAG,kCAAkC,CAAC;CAChE;AACD,MAAM,WAAW,sCAAuC,SAAQ,0BAA0B;IACxF;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,8BAA+B,SAAQ,kBAAkB;IACxE;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,kCAAmC,SAAQ,sBAAsB;IAChF;;OAEG;IACH,YAAY,CAAC,EAAE,8BAA8B,EAAE,CAAC;CACjD;AAQD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QA+GxE;AAgBD;;;;;;GAMG;AACH,wBAAgB,mCAAmC,CACjD,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,aAAa,EAAE,aAAa,GAC3B,IAAI,CA6GN"}
@@ -275,7 +275,11 @@ function updateBrowserConfigWithRemoteConfig(remoteConfig, browserConfig) {
275
275
  browserConfig.defaultTracking = browserConfig.autocapture;
276
276
  }
277
277
  if ('customEnrichment' in typedRemoteConfig && typedRemoteConfig.customEnrichment !== null) {
278
- browserConfig.customEnrichment = typedRemoteConfig.customEnrichment;
278
+ // Respect a locally-explicit false: if the user disabled custom enrichment at init time,
279
+ // remote config must not re-enable it.
280
+ if (browserConfig.customEnrichment !== false) {
281
+ browserConfig.customEnrichment = typedRemoteConfig.customEnrichment;
282
+ }
279
283
  }
280
284
  browserConfig.loggerProvider.debug('Browser config after remote config update:', JSON.stringify(browserConfig));
281
285
  }
@@ -1 +1 @@
1
- {"version":3,"file":"joined-config.js","sourceRoot":"","sources":["../../../src/config/joined-config.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AutocaptureOptions,\n type ElementInteractionsOptions,\n BrowserConfig,\n CustomEnrichmentOptions,\n RemoteConfig,\n NetworkTrackingOptions,\n NetworkCaptureRule,\n SAFE_HEADERS,\n} from '@amplitude/analytics-core';\n\nexport interface AutocaptureOptionsRemoteConfig extends AutocaptureOptions {\n elementInteractions?: boolean | ElementInteractionsOptionsRemoteConfig;\n networkTracking?: boolean | NetworkTrackingOptionsRemoteConfig;\n}\nexport interface ElementInteractionsOptionsRemoteConfig extends ElementInteractionsOptions {\n /**\n * Related to pageUrlAllowlist but holds regex strings which will be initialized and appended to pageUrlAllowlist\n */\n pageUrlAllowlistRegex?: string[];\n}\n\nexport interface NetworkCaptureRuleRemoteConfig extends NetworkCaptureRule {\n /**\n * Related to urls but holds regex strings which will be initialized and appended to urls\n */\n urlsRegex?: string[];\n}\n\nexport interface NetworkTrackingOptionsRemoteConfig extends NetworkTrackingOptions {\n /**\n * Related to pageUrlAllowlist but holds regex strings which will be initialized and appended to pageUrlAllowlist\n */\n captureRules?: NetworkCaptureRuleRemoteConfig[];\n}\n\n// Type alias for the remote config structure we expect (this is what comes from the filtered browserSDK config)\ntype RemoteConfigBrowserSDK = {\n autocapture?: AutocaptureOptionsRemoteConfig | boolean;\n customEnrichment?: CustomEnrichmentOptions | boolean;\n};\n\n/**\n * Performs a deep transformation of a remote config object so that\n * it matches the expected schema of the local config.\n *\n * Specifically, it normalizes nested `enabled` flags into concise union types.\n *\n * ### Transformation Rules:\n * - If an object has `enabled: true`, it is replaced by the same object without the `enabled` field.\n * - If it has only `enabled: true`, it is replaced with `true`.\n * - If it has `enabled: false`, it is replaced with `false` regardless of other fields.\n *\n * ### Examples:\n * Input: { prop: { enabled: true, hello: 'world' }}\n * Output: { prop: { hello: 'world' } }\n *\n * Input: { prop: { enabled: true }}\n * Output: { prop: true }\n *\n * Input: { prop: { enabled: false, hello: 'world' }}\n * Output: { prop: false }\n *\n * Input: { prop: { hello: 'world' }}\n * Output: { prop: { hello: 'world' } } // No change\n *\n * @param config Remote config object to be transformed\n * @returns Transformed config object compatible with local schema\n */\nexport function translateRemoteConfigToLocal(config?: Record<string, any>) {\n // Disabling type checking rules because remote config comes from a remote source\n // and this function needs to handle any unexpected values\n /* eslint-disable @typescript-eslint/no-unsafe-member-access,\n @typescript-eslint/no-unsafe-assignment,\n @typescript-eslint/no-unsafe-argument\n */\n if (typeof config !== 'object' || config === null) {\n return;\n }\n\n // translations are not applied on array properties\n if (Array.isArray(config)) {\n return;\n }\n\n const propertyNames = Object.keys(config);\n for (const propertyName of propertyNames) {\n try {\n const value = config[propertyName];\n // transform objects with { enabled } property to boolean | object\n if (typeof value?.enabled === 'boolean') {\n if (value.enabled) {\n // if enabled is true, set the value to the rest of the object\n // or true if the object has no other properties\n delete value.enabled;\n if (Object.keys(value).length === 0) {\n (config as any)[propertyName] = true;\n }\n } else {\n // If enabled is false, set the value to false\n (config as any)[propertyName] = false;\n }\n }\n\n // recursively translate properties of the value\n translateRemoteConfigToLocal(value as Record<string, any>);\n } catch (e) {\n // a failure here means that an accessor threw an error\n // so don't translate it\n // TODO(diagnostics): add a diagnostic event for this\n }\n }\n\n // translate remote responseHeaders and requestHeaders to local responseHeaders and requestHeaders\n try {\n if (config.autocapture?.networkTracking?.captureRules?.length) {\n for (const rule of config.autocapture.networkTracking.captureRules) {\n for (const header of ['responseHeaders', 'requestHeaders']) {\n const { captureSafeHeaders, allowlist } = rule[header] ?? {};\n if (!captureSafeHeaders && !allowlist) {\n continue;\n }\n // if allowlist is not an array, remote config contract is violated, remove it\n if (allowlist !== undefined && !Array.isArray(allowlist)) {\n delete rule[header];\n continue;\n }\n rule[header] = [...(captureSafeHeaders ? SAFE_HEADERS : []), ...(allowlist ?? [])];\n }\n }\n }\n } catch (e) {\n /* istanbul ignore next */\n // surprise exception, so don't translate it\n }\n\n // translate frustrationInteractions pluralization\n const frustrationInteractions = config.autocapture?.frustrationInteractions;\n if (frustrationInteractions) {\n if (frustrationInteractions.rageClick) {\n frustrationInteractions.rageClicks = frustrationInteractions.rageClick;\n delete frustrationInteractions.rageClick;\n }\n if (frustrationInteractions.deadClick) {\n frustrationInteractions.deadClicks = frustrationInteractions.deadClick;\n delete frustrationInteractions.deadClick;\n }\n }\n\n // normalize viewportContentUpdated inside elementInteractions\n try {\n const elementInteractions = config.autocapture?.elementInteractions;\n if (elementInteractions && typeof elementInteractions === 'object') {\n // { enabled: true } (no other fields) collapses to `true`; convert back to {} for the SDK.\n if (elementInteractions.viewportContentUpdated === true) {\n elementInteractions.viewportContentUpdated = {};\n }\n // { enabled: false, ... } collapses to `false`; convert back to { enabled: false } for the SDK.\n if (elementInteractions.viewportContentUpdated === false) {\n elementInteractions.viewportContentUpdated = { enabled: false };\n }\n // Migrate deprecated top-level exposureDuration to viewportContentUpdated.exposureDuration\n if (elementInteractions.exposureDuration !== undefined) {\n const viewportContentUpdated = elementInteractions.viewportContentUpdated;\n if (viewportContentUpdated === undefined) {\n elementInteractions.viewportContentUpdated = { exposureDuration: elementInteractions.exposureDuration };\n } else if (\n typeof viewportContentUpdated === 'object' &&\n viewportContentUpdated.exposureDuration === undefined &&\n viewportContentUpdated.enabled !== false\n ) {\n viewportContentUpdated.exposureDuration = elementInteractions.exposureDuration;\n }\n delete elementInteractions.exposureDuration;\n }\n }\n } catch (e) {\n /* istanbul ignore next */\n // surprise exception, so don't translate it\n }\n}\n\nfunction mergeUrls(urlsExact: (string | RegExp)[], urlsRegex: string[] | undefined, browserConfig: BrowserConfig) {\n // Convert string patterns to RegExp objects, warn on invalid patterns and skip them\n const regexList = [];\n for (const pattern of urlsRegex ?? []) {\n try {\n regexList.push(new RegExp(pattern));\n } catch (regexError) {\n browserConfig.loggerProvider.warn(`Invalid regex pattern: ${pattern}`, regexError);\n }\n }\n\n return urlsExact.concat(regexList);\n}\n\n/**\n * Updates the browser config in place by applying remote configuration settings.\n * Primarily merges autocapture settings from the remote config into the browser config.\n *\n * @param remoteConfig - The remote configuration to apply, or null if none available\n * @param browserConfig - The browser config object to update (modified in place)\n */\nexport function updateBrowserConfigWithRemoteConfig(\n remoteConfig: RemoteConfig | null,\n browserConfig: BrowserConfig,\n): void {\n if (!remoteConfig) {\n return;\n }\n\n // translate remote config to local compatible format\n translateRemoteConfigToLocal(remoteConfig);\n\n try {\n browserConfig.loggerProvider.debug(\n 'Update browser config with remote configuration:',\n JSON.stringify(remoteConfig),\n );\n\n // type cast error will be thrown if remoteConfig is not a valid RemoteConfigBrowserSDK\n // and it will be caught by the try-catch block\n const typedRemoteConfig = remoteConfig as RemoteConfigBrowserSDK;\n\n // merge remoteConfig.autocapture and browserConfig.autocapture\n // if a field is in remoteConfig.autocapture, use that value\n // if a field is not in remoteConfig.autocapture, use the value from browserConfig.autocapture\n if (typedRemoteConfig && 'autocapture' in typedRemoteConfig) {\n if (typeof typedRemoteConfig.autocapture === 'boolean') {\n browserConfig.autocapture = typedRemoteConfig.autocapture;\n }\n\n if (typeof typedRemoteConfig.autocapture === 'object' && typedRemoteConfig.autocapture !== null) {\n const transformedAutocaptureRemoteConfig = { ...typedRemoteConfig.autocapture };\n\n if (browserConfig.autocapture === undefined) {\n browserConfig.autocapture = typedRemoteConfig.autocapture;\n }\n\n // Handle Element Interactions config initialization\n if (\n typeof typedRemoteConfig.autocapture.elementInteractions === 'object' &&\n typedRemoteConfig.autocapture.elementInteractions !== null &&\n typedRemoteConfig.autocapture.elementInteractions.pageUrlAllowlistRegex?.length\n ) {\n transformedAutocaptureRemoteConfig.elementInteractions = {\n ...typedRemoteConfig.autocapture.elementInteractions,\n };\n const transformedRcElementInteractions = transformedAutocaptureRemoteConfig.elementInteractions;\n\n // combine exact allow list and regex allow list into just 'pageUrlAllowlist'\n const exactAllowList = transformedRcElementInteractions.pageUrlAllowlist ?? [];\n const urlsRegex = typedRemoteConfig.autocapture.elementInteractions.pageUrlAllowlistRegex;\n transformedRcElementInteractions.pageUrlAllowlist = mergeUrls(exactAllowList, urlsRegex, browserConfig);\n\n // clean up the regex allow list\n delete transformedRcElementInteractions.pageUrlAllowlistRegex;\n }\n\n // Handle Network Tracking config initialization\n if (\n typeof typedRemoteConfig.autocapture.networkTracking === 'object' &&\n typedRemoteConfig.autocapture.networkTracking !== null &&\n typedRemoteConfig.autocapture.networkTracking.captureRules?.length\n ) {\n transformedAutocaptureRemoteConfig.networkTracking = {\n ...typedRemoteConfig.autocapture.networkTracking,\n };\n const transformedRcNetworkTracking = transformedAutocaptureRemoteConfig.networkTracking;\n /* istanbul ignore next */\n const captureRules = transformedRcNetworkTracking.captureRules ?? [];\n for (const rule of captureRules) {\n rule.urls = mergeUrls(rule.urls ?? [], rule.urlsRegex, browserConfig);\n delete rule.urlsRegex;\n }\n }\n\n if (typeof browserConfig.autocapture === 'boolean') {\n browserConfig.autocapture = {\n attribution: browserConfig.autocapture,\n fileDownloads: browserConfig.autocapture,\n formInteractions: browserConfig.autocapture,\n pageViews: browserConfig.autocapture,\n sessions: browserConfig.autocapture,\n elementInteractions: browserConfig.autocapture,\n webVitals: browserConfig.autocapture,\n frustrationInteractions: browserConfig.autocapture,\n ...transformedAutocaptureRemoteConfig,\n };\n }\n\n if (typeof browserConfig.autocapture === 'object') {\n browserConfig.autocapture = {\n ...browserConfig.autocapture,\n ...transformedAutocaptureRemoteConfig,\n };\n }\n }\n\n // Override default tracking options if autocapture is updated by remote config\n browserConfig.defaultTracking = browserConfig.autocapture;\n }\n\n if ('customEnrichment' in typedRemoteConfig && typedRemoteConfig.customEnrichment !== null) {\n browserConfig.customEnrichment = typedRemoteConfig.customEnrichment;\n }\n\n browserConfig.loggerProvider.debug('Browser config after remote config update:', JSON.stringify(browserConfig));\n } catch (e) {\n browserConfig.loggerProvider.error('Failed to apply remote configuration because of error: ', e);\n }\n}\n"]}
1
+ {"version":3,"file":"joined-config.js","sourceRoot":"","sources":["../../../src/config/joined-config.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AutocaptureOptions,\n type ElementInteractionsOptions,\n BrowserConfig,\n CustomEnrichmentOptions,\n RemoteConfig,\n NetworkTrackingOptions,\n NetworkCaptureRule,\n SAFE_HEADERS,\n} from '@amplitude/analytics-core';\n\nexport interface AutocaptureOptionsRemoteConfig extends AutocaptureOptions {\n elementInteractions?: boolean | ElementInteractionsOptionsRemoteConfig;\n networkTracking?: boolean | NetworkTrackingOptionsRemoteConfig;\n}\nexport interface ElementInteractionsOptionsRemoteConfig extends ElementInteractionsOptions {\n /**\n * Related to pageUrlAllowlist but holds regex strings which will be initialized and appended to pageUrlAllowlist\n */\n pageUrlAllowlistRegex?: string[];\n}\n\nexport interface NetworkCaptureRuleRemoteConfig extends NetworkCaptureRule {\n /**\n * Related to urls but holds regex strings which will be initialized and appended to urls\n */\n urlsRegex?: string[];\n}\n\nexport interface NetworkTrackingOptionsRemoteConfig extends NetworkTrackingOptions {\n /**\n * Related to pageUrlAllowlist but holds regex strings which will be initialized and appended to pageUrlAllowlist\n */\n captureRules?: NetworkCaptureRuleRemoteConfig[];\n}\n\n// Type alias for the remote config structure we expect (this is what comes from the filtered browserSDK config)\ntype RemoteConfigBrowserSDK = {\n autocapture?: AutocaptureOptionsRemoteConfig | boolean;\n customEnrichment?: CustomEnrichmentOptions | boolean;\n};\n\n/**\n * Performs a deep transformation of a remote config object so that\n * it matches the expected schema of the local config.\n *\n * Specifically, it normalizes nested `enabled` flags into concise union types.\n *\n * ### Transformation Rules:\n * - If an object has `enabled: true`, it is replaced by the same object without the `enabled` field.\n * - If it has only `enabled: true`, it is replaced with `true`.\n * - If it has `enabled: false`, it is replaced with `false` regardless of other fields.\n *\n * ### Examples:\n * Input: { prop: { enabled: true, hello: 'world' }}\n * Output: { prop: { hello: 'world' } }\n *\n * Input: { prop: { enabled: true }}\n * Output: { prop: true }\n *\n * Input: { prop: { enabled: false, hello: 'world' }}\n * Output: { prop: false }\n *\n * Input: { prop: { hello: 'world' }}\n * Output: { prop: { hello: 'world' } } // No change\n *\n * @param config Remote config object to be transformed\n * @returns Transformed config object compatible with local schema\n */\nexport function translateRemoteConfigToLocal(config?: Record<string, any>) {\n // Disabling type checking rules because remote config comes from a remote source\n // and this function needs to handle any unexpected values\n /* eslint-disable @typescript-eslint/no-unsafe-member-access,\n @typescript-eslint/no-unsafe-assignment,\n @typescript-eslint/no-unsafe-argument\n */\n if (typeof config !== 'object' || config === null) {\n return;\n }\n\n // translations are not applied on array properties\n if (Array.isArray(config)) {\n return;\n }\n\n const propertyNames = Object.keys(config);\n for (const propertyName of propertyNames) {\n try {\n const value = config[propertyName];\n // transform objects with { enabled } property to boolean | object\n if (typeof value?.enabled === 'boolean') {\n if (value.enabled) {\n // if enabled is true, set the value to the rest of the object\n // or true if the object has no other properties\n delete value.enabled;\n if (Object.keys(value).length === 0) {\n (config as any)[propertyName] = true;\n }\n } else {\n // If enabled is false, set the value to false\n (config as any)[propertyName] = false;\n }\n }\n\n // recursively translate properties of the value\n translateRemoteConfigToLocal(value as Record<string, any>);\n } catch (e) {\n // a failure here means that an accessor threw an error\n // so don't translate it\n // TODO(diagnostics): add a diagnostic event for this\n }\n }\n\n // translate remote responseHeaders and requestHeaders to local responseHeaders and requestHeaders\n try {\n if (config.autocapture?.networkTracking?.captureRules?.length) {\n for (const rule of config.autocapture.networkTracking.captureRules) {\n for (const header of ['responseHeaders', 'requestHeaders']) {\n const { captureSafeHeaders, allowlist } = rule[header] ?? {};\n if (!captureSafeHeaders && !allowlist) {\n continue;\n }\n // if allowlist is not an array, remote config contract is violated, remove it\n if (allowlist !== undefined && !Array.isArray(allowlist)) {\n delete rule[header];\n continue;\n }\n rule[header] = [...(captureSafeHeaders ? SAFE_HEADERS : []), ...(allowlist ?? [])];\n }\n }\n }\n } catch (e) {\n /* istanbul ignore next */\n // surprise exception, so don't translate it\n }\n\n // translate frustrationInteractions pluralization\n const frustrationInteractions = config.autocapture?.frustrationInteractions;\n if (frustrationInteractions) {\n if (frustrationInteractions.rageClick) {\n frustrationInteractions.rageClicks = frustrationInteractions.rageClick;\n delete frustrationInteractions.rageClick;\n }\n if (frustrationInteractions.deadClick) {\n frustrationInteractions.deadClicks = frustrationInteractions.deadClick;\n delete frustrationInteractions.deadClick;\n }\n }\n\n // normalize viewportContentUpdated inside elementInteractions\n try {\n const elementInteractions = config.autocapture?.elementInteractions;\n if (elementInteractions && typeof elementInteractions === 'object') {\n // { enabled: true } (no other fields) collapses to `true`; convert back to {} for the SDK.\n if (elementInteractions.viewportContentUpdated === true) {\n elementInteractions.viewportContentUpdated = {};\n }\n // { enabled: false, ... } collapses to `false`; convert back to { enabled: false } for the SDK.\n if (elementInteractions.viewportContentUpdated === false) {\n elementInteractions.viewportContentUpdated = { enabled: false };\n }\n // Migrate deprecated top-level exposureDuration to viewportContentUpdated.exposureDuration\n if (elementInteractions.exposureDuration !== undefined) {\n const viewportContentUpdated = elementInteractions.viewportContentUpdated;\n if (viewportContentUpdated === undefined) {\n elementInteractions.viewportContentUpdated = { exposureDuration: elementInteractions.exposureDuration };\n } else if (\n typeof viewportContentUpdated === 'object' &&\n viewportContentUpdated.exposureDuration === undefined &&\n viewportContentUpdated.enabled !== false\n ) {\n viewportContentUpdated.exposureDuration = elementInteractions.exposureDuration;\n }\n delete elementInteractions.exposureDuration;\n }\n }\n } catch (e) {\n /* istanbul ignore next */\n // surprise exception, so don't translate it\n }\n}\n\nfunction mergeUrls(urlsExact: (string | RegExp)[], urlsRegex: string[] | undefined, browserConfig: BrowserConfig) {\n // Convert string patterns to RegExp objects, warn on invalid patterns and skip them\n const regexList = [];\n for (const pattern of urlsRegex ?? []) {\n try {\n regexList.push(new RegExp(pattern));\n } catch (regexError) {\n browserConfig.loggerProvider.warn(`Invalid regex pattern: ${pattern}`, regexError);\n }\n }\n\n return urlsExact.concat(regexList);\n}\n\n/**\n * Updates the browser config in place by applying remote configuration settings.\n * Primarily merges autocapture settings from the remote config into the browser config.\n *\n * @param remoteConfig - The remote configuration to apply, or null if none available\n * @param browserConfig - The browser config object to update (modified in place)\n */\nexport function updateBrowserConfigWithRemoteConfig(\n remoteConfig: RemoteConfig | null,\n browserConfig: BrowserConfig,\n): void {\n if (!remoteConfig) {\n return;\n }\n\n // translate remote config to local compatible format\n translateRemoteConfigToLocal(remoteConfig);\n\n try {\n browserConfig.loggerProvider.debug(\n 'Update browser config with remote configuration:',\n JSON.stringify(remoteConfig),\n );\n\n // type cast error will be thrown if remoteConfig is not a valid RemoteConfigBrowserSDK\n // and it will be caught by the try-catch block\n const typedRemoteConfig = remoteConfig as RemoteConfigBrowserSDK;\n\n // merge remoteConfig.autocapture and browserConfig.autocapture\n // if a field is in remoteConfig.autocapture, use that value\n // if a field is not in remoteConfig.autocapture, use the value from browserConfig.autocapture\n if (typedRemoteConfig && 'autocapture' in typedRemoteConfig) {\n if (typeof typedRemoteConfig.autocapture === 'boolean') {\n browserConfig.autocapture = typedRemoteConfig.autocapture;\n }\n\n if (typeof typedRemoteConfig.autocapture === 'object' && typedRemoteConfig.autocapture !== null) {\n const transformedAutocaptureRemoteConfig = { ...typedRemoteConfig.autocapture };\n\n if (browserConfig.autocapture === undefined) {\n browserConfig.autocapture = typedRemoteConfig.autocapture;\n }\n\n // Handle Element Interactions config initialization\n if (\n typeof typedRemoteConfig.autocapture.elementInteractions === 'object' &&\n typedRemoteConfig.autocapture.elementInteractions !== null &&\n typedRemoteConfig.autocapture.elementInteractions.pageUrlAllowlistRegex?.length\n ) {\n transformedAutocaptureRemoteConfig.elementInteractions = {\n ...typedRemoteConfig.autocapture.elementInteractions,\n };\n const transformedRcElementInteractions = transformedAutocaptureRemoteConfig.elementInteractions;\n\n // combine exact allow list and regex allow list into just 'pageUrlAllowlist'\n const exactAllowList = transformedRcElementInteractions.pageUrlAllowlist ?? [];\n const urlsRegex = typedRemoteConfig.autocapture.elementInteractions.pageUrlAllowlistRegex;\n transformedRcElementInteractions.pageUrlAllowlist = mergeUrls(exactAllowList, urlsRegex, browserConfig);\n\n // clean up the regex allow list\n delete transformedRcElementInteractions.pageUrlAllowlistRegex;\n }\n\n // Handle Network Tracking config initialization\n if (\n typeof typedRemoteConfig.autocapture.networkTracking === 'object' &&\n typedRemoteConfig.autocapture.networkTracking !== null &&\n typedRemoteConfig.autocapture.networkTracking.captureRules?.length\n ) {\n transformedAutocaptureRemoteConfig.networkTracking = {\n ...typedRemoteConfig.autocapture.networkTracking,\n };\n const transformedRcNetworkTracking = transformedAutocaptureRemoteConfig.networkTracking;\n /* istanbul ignore next */\n const captureRules = transformedRcNetworkTracking.captureRules ?? [];\n for (const rule of captureRules) {\n rule.urls = mergeUrls(rule.urls ?? [], rule.urlsRegex, browserConfig);\n delete rule.urlsRegex;\n }\n }\n\n if (typeof browserConfig.autocapture === 'boolean') {\n browserConfig.autocapture = {\n attribution: browserConfig.autocapture,\n fileDownloads: browserConfig.autocapture,\n formInteractions: browserConfig.autocapture,\n pageViews: browserConfig.autocapture,\n sessions: browserConfig.autocapture,\n elementInteractions: browserConfig.autocapture,\n webVitals: browserConfig.autocapture,\n frustrationInteractions: browserConfig.autocapture,\n ...transformedAutocaptureRemoteConfig,\n };\n }\n\n if (typeof browserConfig.autocapture === 'object') {\n browserConfig.autocapture = {\n ...browserConfig.autocapture,\n ...transformedAutocaptureRemoteConfig,\n };\n }\n }\n\n // Override default tracking options if autocapture is updated by remote config\n browserConfig.defaultTracking = browserConfig.autocapture;\n }\n\n if ('customEnrichment' in typedRemoteConfig && typedRemoteConfig.customEnrichment !== null) {\n // Respect a locally-explicit false: if the user disabled custom enrichment at init time,\n // remote config must not re-enable it.\n if (browserConfig.customEnrichment !== false) {\n browserConfig.customEnrichment = typedRemoteConfig.customEnrichment;\n }\n }\n\n browserConfig.loggerProvider.debug('Browser config after remote config update:', JSON.stringify(browserConfig));\n } catch (e) {\n browserConfig.loggerProvider.error('Failed to apply remote configuration because of error: ', e);\n }\n}\n"]}
@@ -41,7 +41,7 @@ export declare class BrowserConfig extends Config implements IBrowserConfig {
41
41
  enableRequestBodyCompression: boolean;
42
42
  _enableRequestBodyCompressionExperimental: boolean;
43
43
  customEnrichment?: boolean | CustomEnrichmentOptions | undefined;
44
- readonly version = "2.38.2-SR-3115-rc2.0";
44
+ readonly version = "2.39.1";
45
45
  protected _cookieStorage: Storage<UserSession>;
46
46
  protected _deviceId?: string;
47
47
  protected _lastEventId?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -6,5 +6,6 @@ export declare const add: (plugin: import("@amplitude/analytics-core").Plugin<im
6
6
  export { AmplitudeBrowser } from './browser-client';
7
7
  export { runQueuedFunctions } from './utils/snippet-helper';
8
8
  export { Revenue, Identify } from '@amplitude/analytics-core';
9
+ export { trackVideo, type VideoCaptureOptions } from './video-capture/video-capture';
9
10
  export * as Types from './types';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,eAAO,MACL,GAAG,2NACH,aAAa,cACb,KAAK,mEACL,WAAW,4BACX,WAAW,+DACX,SAAS,6BACT,YAAY,4BACZ,SAAS,4BACT,aAAa,8RACb,QAAQ,6OACR,IAAI;;;GACJ,QAAQ,2SACR,MAAM,qFACN,KAAK,cACL,OAAO,2OACP,WAAW,8BACX,QAAQ,qOACR,WAAW,sFACX,SAAS,6BACT,YAAY,+BACZ,YAAY,mFACZ,SAAS,wCACT,KAAK,2SACL,yBAAyB,gCACzB,yCAAyC,4BACjC,CAAC;AACX,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAI9D,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,eAAO,MACL,GAAG,2NACH,aAAa,cACb,KAAK,mEACL,WAAW,4BACX,WAAW,+DACX,SAAS,6BACT,YAAY,4BACZ,SAAS,4BACT,aAAa,8RACb,QAAQ,6OACR,IAAI;;;GACJ,QAAQ,2SACR,MAAM,qFACN,KAAK,cACL,OAAO,2OACP,WAAW,8BACX,QAAQ,qOACR,WAAW,sFACX,SAAS,6BACT,YAAY,+BACZ,YAAY,mFACZ,SAAS,wCACT,KAAK,2SACL,yBAAyB,gCACzB,yCAAyC,4BACjC,CAAC;AACX,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,KAAK,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAIrF,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC"}
package/lib/cjs/index.js CHANGED
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Types = exports.Identify = exports.Revenue = exports.runQueuedFunctions = exports.AmplitudeBrowser = exports._enableRequestBodyCompressionExperimental = exports._setDiagnosticsSampleRate = exports.track = exports.setUserId = exports.setTransport = exports.setSessionId = exports.setOptOut = exports.setIdentity = exports.setGroup = exports.setDeviceId = exports.revenue = exports.reset = exports.remove = exports.logEvent = exports.init = exports.identify = exports.groupIdentify = exports.getUserId = exports.getSessionId = exports.getOptOut = exports.getIdentity = exports.getDeviceId = exports.flush = exports.extendSession = exports.add = exports.createInstance = void 0;
3
+ exports.Types = exports.trackVideo = exports.Identify = exports.Revenue = exports.runQueuedFunctions = exports.AmplitudeBrowser = exports._enableRequestBodyCompressionExperimental = exports._setDiagnosticsSampleRate = exports.track = exports.setUserId = exports.setTransport = exports.setSessionId = exports.setOptOut = exports.setIdentity = exports.setGroup = exports.setDeviceId = exports.revenue = exports.reset = exports.remove = exports.logEvent = exports.init = exports.identify = exports.groupIdentify = exports.getUserId = exports.getSessionId = exports.getOptOut = exports.getIdentity = exports.getDeviceId = exports.flush = exports.extendSession = exports.add = exports.createInstance = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  /* eslint-disable @typescript-eslint/unbound-method */
6
+ // dummy patch analytics-browser to force GTM deploy
6
7
  var browser_client_factory_1 = tslib_1.__importDefault(require("./browser-client-factory"));
7
8
  var browser_client_factory_2 = require("./browser-client-factory");
8
9
  Object.defineProperty(exports, "createInstance", { enumerable: true, get: function () { return browser_client_factory_2.createInstance; } });
@@ -14,7 +15,10 @@ Object.defineProperty(exports, "runQueuedFunctions", { enumerable: true, get: fu
14
15
  var analytics_core_1 = require("@amplitude/analytics-core");
15
16
  Object.defineProperty(exports, "Revenue", { enumerable: true, get: function () { return analytics_core_1.Revenue; } });
16
17
  Object.defineProperty(exports, "Identify", { enumerable: true, get: function () { return analytics_core_1.Identify; } });
18
+ var video_capture_1 = require("./video-capture/video-capture");
19
+ Object.defineProperty(exports, "trackVideo", { enumerable: true, get: function () { return video_capture_1.trackVideo; } });
17
20
  // Export types to maintain backward compatibility with `analytics-types`.
18
21
  // In the next major version, only export customer-facing types to reduce the public API surface.
19
22
  exports.Types = tslib_1.__importStar(require("./types"));
23
+ // empty code change to create patch
20
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,sDAAsD;AACtD,4FAA8C;AAC9C,mEAA0D;AAAjD,wHAAA,cAAc,OAAA;AAErB,QAAA,GAAG,GAyBD,gCAAM,MAxBR,QAAA,aAAa,GAwBX,gCAAM,gBAvBR,QAAA,KAAK,GAuBH,gCAAM,QAtBR,QAAA,WAAW,GAsBT,gCAAM,cArBR,QAAA,WAAW,GAqBT,gCAAM,cApBR,QAAA,SAAS,GAoBP,gCAAM,YAnBR,QAAA,YAAY,GAmBV,gCAAM,eAlBR,QAAA,SAAS,GAkBP,gCAAM,YAjBR,QAAA,aAAa,GAiBX,gCAAM,gBAhBR,QAAA,QAAQ,GAgBN,gCAAM,WAfR,QAAA,IAAI,GAeF,gCAAM,OAdR,QAAA,QAAQ,GAcN,gCAAM,WAbR,QAAA,MAAM,GAaJ,gCAAM,SAZR,QAAA,KAAK,GAYH,gCAAM,QAXR,QAAA,OAAO,GAWL,gCAAM,UAVR,QAAA,WAAW,GAUT,gCAAM,cATR,QAAA,QAAQ,GASN,gCAAM,WARR,QAAA,WAAW,GAQT,gCAAM,cAPR,QAAA,SAAS,GAOP,gCAAM,YANR,QAAA,YAAY,GAMV,gCAAM,eALR,QAAA,YAAY,GAKV,gCAAM,eAJR,QAAA,SAAS,GAIP,gCAAM,YAHR,QAAA,KAAK,GAGH,gCAAM,QAFR,QAAA,yBAAyB,GAEvB,gCAAM,4BADR,QAAA,yCAAyC,GACvC,gCAAM,2CAAC;AACX,mDAAoD;AAA3C,kHAAA,gBAAgB,OAAA;AACzB,yDAA4D;AAAnD,oHAAA,kBAAkB,OAAA;AAC3B,4DAA8D;AAArD,yGAAA,OAAO,OAAA;AAAE,0GAAA,QAAQ,OAAA;AAE1B,0EAA0E;AAC1E,iGAAiG;AACjG,yDAAiC","sourcesContent":["/* eslint-disable @typescript-eslint/unbound-method */\nimport client from './browser-client-factory';\nexport { createInstance } from './browser-client-factory';\nexport const {\n add,\n extendSession,\n flush,\n getDeviceId,\n getIdentity,\n getOptOut,\n getSessionId,\n getUserId,\n groupIdentify,\n identify,\n init,\n logEvent,\n remove,\n reset,\n revenue,\n setDeviceId,\n setGroup,\n setIdentity,\n setOptOut,\n setSessionId,\n setTransport,\n setUserId,\n track,\n _setDiagnosticsSampleRate,\n _enableRequestBodyCompressionExperimental,\n} = client;\nexport { AmplitudeBrowser } from './browser-client';\nexport { runQueuedFunctions } from './utils/snippet-helper';\nexport { Revenue, Identify } from '@amplitude/analytics-core';\n\n// Export types to maintain backward compatibility with `analytics-types`.\n// In the next major version, only export customer-facing types to reduce the public API surface.\nexport * as Types from './types';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,sDAAsD;AACtD,oDAAoD;AACpD,4FAA8C;AAC9C,mEAA0D;AAAjD,wHAAA,cAAc,OAAA;AAErB,QAAA,GAAG,GAyBD,gCAAM,MAxBR,QAAA,aAAa,GAwBX,gCAAM,gBAvBR,QAAA,KAAK,GAuBH,gCAAM,QAtBR,QAAA,WAAW,GAsBT,gCAAM,cArBR,QAAA,WAAW,GAqBT,gCAAM,cApBR,QAAA,SAAS,GAoBP,gCAAM,YAnBR,QAAA,YAAY,GAmBV,gCAAM,eAlBR,QAAA,SAAS,GAkBP,gCAAM,YAjBR,QAAA,aAAa,GAiBX,gCAAM,gBAhBR,QAAA,QAAQ,GAgBN,gCAAM,WAfR,QAAA,IAAI,GAeF,gCAAM,OAdR,QAAA,QAAQ,GAcN,gCAAM,WAbR,QAAA,MAAM,GAaJ,gCAAM,SAZR,QAAA,KAAK,GAYH,gCAAM,QAXR,QAAA,OAAO,GAWL,gCAAM,UAVR,QAAA,WAAW,GAUT,gCAAM,cATR,QAAA,QAAQ,GASN,gCAAM,WARR,QAAA,WAAW,GAQT,gCAAM,cAPR,QAAA,SAAS,GAOP,gCAAM,YANR,QAAA,YAAY,GAMV,gCAAM,eALR,QAAA,YAAY,GAKV,gCAAM,eAJR,QAAA,SAAS,GAIP,gCAAM,YAHR,QAAA,KAAK,GAGH,gCAAM,QAFR,QAAA,yBAAyB,GAEvB,gCAAM,4BADR,QAAA,yCAAyC,GACvC,gCAAM,2CAAC;AACX,mDAAoD;AAA3C,kHAAA,gBAAgB,OAAA;AACzB,yDAA4D;AAAnD,oHAAA,kBAAkB,OAAA;AAC3B,4DAA8D;AAArD,yGAAA,OAAO,OAAA;AAAE,0GAAA,QAAQ,OAAA;AAE1B,+DAAqF;AAA5E,2GAAA,UAAU,OAAA;AAEnB,0EAA0E;AAC1E,iGAAiG;AACjG,yDAAiC;AAEjC,oCAAoC","sourcesContent":["/* eslint-disable @typescript-eslint/unbound-method */\n// dummy patch analytics-browser to force GTM deploy\nimport client from './browser-client-factory';\nexport { createInstance } from './browser-client-factory';\nexport const {\n add,\n extendSession,\n flush,\n getDeviceId,\n getIdentity,\n getOptOut,\n getSessionId,\n getUserId,\n groupIdentify,\n identify,\n init,\n logEvent,\n remove,\n reset,\n revenue,\n setDeviceId,\n setGroup,\n setIdentity,\n setOptOut,\n setSessionId,\n setTransport,\n setUserId,\n track,\n _setDiagnosticsSampleRate,\n _enableRequestBodyCompressionExperimental,\n} = client;\nexport { AmplitudeBrowser } from './browser-client';\nexport { runQueuedFunctions } from './utils/snippet-helper';\nexport { Revenue, Identify } from '@amplitude/analytics-core';\n\nexport { trackVideo, type VideoCaptureOptions } from './video-capture/video-capture';\n\n// Export types to maintain backward compatibility with `analytics-types`.\n// In the next major version, only export customer-facing types to reduce the public API surface.\nexport * as Types from './types';\n\n// empty code change to create patch\n"]}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "2.38.2-SR-3115-rc2.0";
1
+ export declare const VERSION = "2.39.1";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,yBAAyB,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,WAAW,CAAC"}
@@ -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.38.2-SR-3115-rc2.0';
4
+ exports.VERSION = '2.39.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,sBAAsB,CAAC","sourcesContent":["export const VERSION = '2.38.2-SR-3115-rc2.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.39.1';\n"]}
@@ -0,0 +1,72 @@
1
+ import { BrowserClient, EmbeddedVideoPlayer, VideoVendor } from '@amplitude/analytics-core';
2
+ export declare class VideoCapture {
3
+ private readonly amplitude;
4
+ private videoEl;
5
+ private embeddedVideoPlayer;
6
+ private vendor?;
7
+ private extraEventProperties;
8
+ private listeners;
9
+ private onRemoveListeners;
10
+ constructor(amplitude: BrowserClient);
11
+ /**
12
+ * Specify a video element to capture events from
13
+ *
14
+ * @param videoEl - The HTML video element to capture events from.
15
+ * @returns The VideoCapture instance.
16
+ */
17
+ withVideoElement(videoEl: HTMLVideoElement): VideoCapture;
18
+ /**
19
+ * Specify an embedded video player.js instance to capture events from
20
+ * @param player - The embedded video player.js instance to capture events from.
21
+ * @returns The VideoCapture instance.
22
+ */
23
+ withEmbeddedPlayer(player: EmbeddedVideoPlayer): VideoCapture;
24
+ /**
25
+ * Specify a vendor to capture extra vendor-specific event properties
26
+ *
27
+ * @param vendor - The vendor of the video player. Currently only "mux" is supported.
28
+ * @returns The VideoCapture instance.
29
+ */
30
+ withVendor(vendor: VideoVendor): VideoCapture;
31
+ /**
32
+ * Specify extra event properties to include in all captured events
33
+ *
34
+ * @param properties - The extra event properties to include in the Amplitude event.
35
+ * @returns The VideoCapture instance.
36
+ */
37
+ withExtraEventProperties(properties: Record<string, string | number | boolean>): VideoCapture;
38
+ /**
39
+ * Track a "Video Content Started" event every time the video starts playing
40
+ * @returns The VideoCapture instance.
41
+ */
42
+ captureVideoStarted(): VideoCapture;
43
+ /**
44
+ * Track a "Video Content Stopped" event every time the video stops playing
45
+ * @returns The VideoCapture instance.
46
+ */
47
+ captureVideoStopped(): VideoCapture;
48
+ /**
49
+ * Start capturing analytics events for the video element
50
+ * @returns The VideoCapture instance.
51
+ * @throws An error if the video element is not specified.
52
+ */
53
+ start(): VideoCapture;
54
+ stop(): void;
55
+ }
56
+ export type VideoCaptureOptions = {
57
+ vendor?: VideoVendor;
58
+ extraEventProperties?: Record<string, string | number | boolean>;
59
+ };
60
+ /**
61
+ * Track video analytics events for an HTML video element or embedded video player.js instance.
62
+ *
63
+ * Captures Video Started and Video Stopped events.
64
+ *
65
+ * @experimental This function is experimental and may not be stable.
66
+ * @param amplitude - The Amplitude client instance.
67
+ * @param videoEl - The HTML video element or embedded video player.js instance to capture events from.
68
+ * @param options - The options for the video capture.
69
+ * @returns A function to stop the video capture.
70
+ */
71
+ export declare function trackVideo(amplitude: BrowserClient, videoEl: HTMLVideoElement | EmbeddedVideoPlayer, options?: VideoCaptureOptions): () => void;
72
+ //# sourceMappingURL=video-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video-capture.d.ts","sourceRoot":"","sources":["../../../src/video-capture/video-capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,aAAa,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAEvH,qBAAa,YAAY;IASX,OAAO,CAAC,QAAQ,CAAC,SAAS;IARtC,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,mBAAmB,CAAoC;IAC/D,OAAO,CAAC,MAAM,CAAC,CAAc;IAC7B,OAAO,CAAC,oBAAoB,CAAiD;IAE7E,OAAO,CAAC,SAAS,CAAsE;IACvF,OAAO,CAAC,iBAAiB,CAAsB;gBAElB,SAAS,EAAE,aAAa;IAErD;;;;;OAKG;IACH,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,YAAY;IAKzD;;;;OAIG;IACH,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,GAAG,YAAY;IAK7D;;;;;OAKG;IACH,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY;IAK7C;;;;;OAKG;IACH,wBAAwB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,YAAY;IAK7F;;;OAGG;IACH,mBAAmB,IAAI,YAAY;IAanC;;;OAGG;IACH,mBAAmB,IAAI,YAAY;IAiBnC;;;;OAIG;IACH,KAAK,IAAI,YAAY;IA2BrB,IAAI;CAIL;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CAClE,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,gBAAgB,GAAG,mBAAmB,EAC/C,OAAO,GAAE,mBAAwB,GAChC,MAAM,IAAI,CAiBZ"}
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.trackVideo = exports.VideoCapture = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var analytics_core_1 = require("@amplitude/analytics-core");
6
+ var VideoCapture = /** @class */ (function () {
7
+ function VideoCapture(amplitude) {
8
+ this.amplitude = amplitude;
9
+ this.videoEl = null;
10
+ this.embeddedVideoPlayer = null;
11
+ this.extraEventProperties = {};
12
+ this.listeners = [];
13
+ this.onRemoveListeners = [];
14
+ }
15
+ /**
16
+ * Specify a video element to capture events from
17
+ *
18
+ * @param videoEl - The HTML video element to capture events from.
19
+ * @returns The VideoCapture instance.
20
+ */
21
+ VideoCapture.prototype.withVideoElement = function (videoEl) {
22
+ this.videoEl = videoEl;
23
+ return this;
24
+ };
25
+ /**
26
+ * Specify an embedded video player.js instance to capture events from
27
+ * @param player - The embedded video player.js instance to capture events from.
28
+ * @returns The VideoCapture instance.
29
+ */
30
+ VideoCapture.prototype.withEmbeddedPlayer = function (player) {
31
+ this.embeddedVideoPlayer = player;
32
+ return this;
33
+ };
34
+ /**
35
+ * Specify a vendor to capture extra vendor-specific event properties
36
+ *
37
+ * @param vendor - The vendor of the video player. Currently only "mux" is supported.
38
+ * @returns The VideoCapture instance.
39
+ */
40
+ VideoCapture.prototype.withVendor = function (vendor) {
41
+ this.vendor = vendor;
42
+ return this;
43
+ };
44
+ /**
45
+ * Specify extra event properties to include in all captured events
46
+ *
47
+ * @param properties - The extra event properties to include in the Amplitude event.
48
+ * @returns The VideoCapture instance.
49
+ */
50
+ VideoCapture.prototype.withExtraEventProperties = function (properties) {
51
+ this.extraEventProperties = properties;
52
+ return this;
53
+ };
54
+ /**
55
+ * Track a "Video Content Started" event every time the video starts playing
56
+ * @returns The VideoCapture instance.
57
+ */
58
+ VideoCapture.prototype.captureVideoStarted = function () {
59
+ var _this = this;
60
+ this.listeners.push(function (previousState, nextState) {
61
+ if (previousState.playbackState !== 'playing' && nextState.playbackState === 'playing') {
62
+ // placeholder for Heartbeat Start Event
63
+ _this.amplitude.track('Video Content Started', tslib_1.__assign(tslib_1.__assign({}, _this.extraEventProperties), nextState.lastEvent));
64
+ }
65
+ });
66
+ return this;
67
+ };
68
+ /**
69
+ * Track a "Video Content Stopped" event every time the video stops playing
70
+ * @returns The VideoCapture instance.
71
+ */
72
+ VideoCapture.prototype.captureVideoStopped = function () {
73
+ var _this = this;
74
+ this.listeners.push(function (previousState, nextState) {
75
+ if (previousState.playbackState === 'playing' && nextState.playbackState !== 'playing') {
76
+ // placeholder for Heartbeat Stop Event
77
+ _this.amplitude.track('Video Content Stopped', tslib_1.__assign(tslib_1.__assign({}, _this.extraEventProperties), nextState.lastEvent));
78
+ }
79
+ });
80
+ return this;
81
+ };
82
+ // Placeholder: may need a generic state change listener to capture unusual events or to have
83
+ // more control over the event tracking.
84
+ // withStateChangeListener(listener: (previousState: VideoState, nextState: VideoState) => void): VideoCapture {
85
+ /**
86
+ * Start capturing analytics events for the video element
87
+ * @returns The VideoCapture instance.
88
+ * @throws An error if the video element is not specified.
89
+ */
90
+ VideoCapture.prototype.start = function () {
91
+ var _this = this;
92
+ var _a;
93
+ var videoEl = (_a = this.videoEl) !== null && _a !== void 0 ? _a : this.embeddedVideoPlayer;
94
+ if (!videoEl) {
95
+ throw new Error('Video element not specified. Use withVideoElement() or withEmbeddedPlayer() to specify the video element.');
96
+ }
97
+ if (this.videoEl && this.embeddedVideoPlayer) {
98
+ throw new Error('Both video element and embedded video player specified. Use only one of withVideoElement() or withEmbeddedPlayer() to specify the video element.');
99
+ }
100
+ var videoObserver = new analytics_core_1.VideoObserver({
101
+ videoEl: videoEl,
102
+ onStateChange: function (previousState, nextState) {
103
+ _this.listeners.forEach(function (listener) { return listener(previousState, nextState); });
104
+ },
105
+ vendor: this.vendor,
106
+ isEmbedded: !!this.embeddedVideoPlayer,
107
+ });
108
+ this.onRemoveListeners.push(function () {
109
+ videoObserver.destroy();
110
+ });
111
+ return this;
112
+ };
113
+ VideoCapture.prototype.stop = function () {
114
+ this.onRemoveListeners.forEach(function (listener) { return listener(); });
115
+ this.onRemoveListeners = [];
116
+ };
117
+ return VideoCapture;
118
+ }());
119
+ exports.VideoCapture = VideoCapture;
120
+ /**
121
+ * Track video analytics events for an HTML video element or embedded video player.js instance.
122
+ *
123
+ * Captures Video Started and Video Stopped events.
124
+ *
125
+ * @experimental This function is experimental and may not be stable.
126
+ * @param amplitude - The Amplitude client instance.
127
+ * @param videoEl - The HTML video element or embedded video player.js instance to capture events from.
128
+ * @param options - The options for the video capture.
129
+ * @returns A function to stop the video capture.
130
+ */
131
+ function trackVideo(amplitude, videoEl, options) {
132
+ var _a;
133
+ if (options === void 0) { options = {}; }
134
+ var videoCapture = new VideoCapture(amplitude);
135
+ if (videoEl instanceof HTMLVideoElement) {
136
+ videoCapture.withVideoElement(videoEl);
137
+ }
138
+ else {
139
+ videoCapture.withEmbeddedPlayer(videoEl);
140
+ }
141
+ if (options.vendor) {
142
+ videoCapture.withVendor(options.vendor);
143
+ }
144
+ videoCapture
145
+ .withExtraEventProperties((_a = options.extraEventProperties) !== null && _a !== void 0 ? _a : {})
146
+ .captureVideoStarted()
147
+ .captureVideoStopped()
148
+ .start();
149
+ return function () { return videoCapture.stop(); };
150
+ }
151
+ exports.trackVideo = trackVideo;
152
+ //# sourceMappingURL=video-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video-capture.js","sourceRoot":"","sources":["../../../src/video-capture/video-capture.ts"],"names":[],"mappings":"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","sourcesContent":["import { VideoState, VideoObserver, BrowserClient, EmbeddedVideoPlayer, VideoVendor } from '@amplitude/analytics-core';\n\nexport class VideoCapture {\n private videoEl: HTMLVideoElement | null = null;\n private embeddedVideoPlayer: EmbeddedVideoPlayer | null = null;\n private vendor?: VideoVendor;\n private extraEventProperties: Record<string, string | number | boolean> = {};\n\n private listeners: ((previousState: VideoState, nextState: VideoState) => void)[] = [];\n private onRemoveListeners: (() => void)[] = [];\n\n constructor(private readonly amplitude: BrowserClient) {}\n\n /**\n * Specify a video element to capture events from\n *\n * @param videoEl - The HTML video element to capture events from.\n * @returns The VideoCapture instance.\n */\n withVideoElement(videoEl: HTMLVideoElement): VideoCapture {\n this.videoEl = videoEl;\n return this;\n }\n\n /**\n * Specify an embedded video player.js instance to capture events from\n * @param player - The embedded video player.js instance to capture events from.\n * @returns The VideoCapture instance.\n */\n withEmbeddedPlayer(player: EmbeddedVideoPlayer): VideoCapture {\n this.embeddedVideoPlayer = player;\n return this;\n }\n\n /**\n * Specify a vendor to capture extra vendor-specific event properties\n *\n * @param vendor - The vendor of the video player. Currently only \"mux\" is supported.\n * @returns The VideoCapture instance.\n */\n withVendor(vendor: VideoVendor): VideoCapture {\n this.vendor = vendor;\n return this;\n }\n\n /**\n * Specify extra event properties to include in all captured events\n *\n * @param properties - The extra event properties to include in the Amplitude event.\n * @returns The VideoCapture instance.\n */\n withExtraEventProperties(properties: Record<string, string | number | boolean>): VideoCapture {\n this.extraEventProperties = properties;\n return this;\n }\n\n /**\n * Track a \"Video Content Started\" event every time the video starts playing\n * @returns The VideoCapture instance.\n */\n captureVideoStarted(): VideoCapture {\n this.listeners.push((previousState, nextState) => {\n if (previousState.playbackState !== 'playing' && nextState.playbackState === 'playing') {\n // placeholder for Heartbeat Start Event\n this.amplitude.track('Video Content Started', {\n ...this.extraEventProperties,\n ...nextState.lastEvent,\n });\n }\n });\n return this;\n }\n\n /**\n * Track a \"Video Content Stopped\" event every time the video stops playing\n * @returns The VideoCapture instance.\n */\n captureVideoStopped(): VideoCapture {\n this.listeners.push((previousState, nextState) => {\n if (previousState.playbackState === 'playing' && nextState.playbackState !== 'playing') {\n // placeholder for Heartbeat Stop Event\n this.amplitude.track('Video Content Stopped', {\n ...this.extraEventProperties,\n ...nextState.lastEvent,\n });\n }\n });\n return this;\n }\n\n // Placeholder: may need a generic state change listener to capture unusual events or to have\n // more control over the event tracking.\n // withStateChangeListener(listener: (previousState: VideoState, nextState: VideoState) => void): VideoCapture {\n\n /**\n * Start capturing analytics events for the video element\n * @returns The VideoCapture instance.\n * @throws An error if the video element is not specified.\n */\n start(): VideoCapture {\n const videoEl = this.videoEl ?? this.embeddedVideoPlayer;\n if (!videoEl) {\n throw new Error(\n 'Video element not specified. Use withVideoElement() or withEmbeddedPlayer() to specify the video element.',\n );\n }\n if (this.videoEl && this.embeddedVideoPlayer) {\n throw new Error(\n 'Both video element and embedded video player specified. Use only one of withVideoElement() or withEmbeddedPlayer() to specify the video element.',\n );\n }\n const videoObserver = new VideoObserver({\n videoEl,\n onStateChange: (previousState, nextState) => {\n this.listeners.forEach((listener) => listener(previousState, nextState));\n },\n vendor: this.vendor,\n isEmbedded: !!this.embeddedVideoPlayer,\n });\n\n this.onRemoveListeners.push(() => {\n videoObserver.destroy();\n });\n return this;\n }\n\n stop() {\n this.onRemoveListeners.forEach((listener) => listener());\n this.onRemoveListeners = [];\n }\n}\n\nexport type VideoCaptureOptions = {\n vendor?: VideoVendor;\n extraEventProperties?: Record<string, string | number | boolean>;\n};\n\n/**\n * Track video analytics events for an HTML video element or embedded video player.js instance.\n *\n * Captures Video Started and Video Stopped events.\n *\n * @experimental This function is experimental and may not be stable.\n * @param amplitude - The Amplitude client instance.\n * @param videoEl - The HTML video element or embedded video player.js instance to capture events from.\n * @param options - The options for the video capture.\n * @returns A function to stop the video capture.\n */\nexport function trackVideo(\n amplitude: BrowserClient,\n videoEl: HTMLVideoElement | EmbeddedVideoPlayer,\n options: VideoCaptureOptions = {},\n): () => void {\n const videoCapture = new VideoCapture(amplitude);\n if (videoEl instanceof HTMLVideoElement) {\n videoCapture.withVideoElement(videoEl);\n } else {\n videoCapture.withEmbeddedPlayer(videoEl);\n }\n if (options.vendor) {\n videoCapture.withVendor(options.vendor);\n }\n videoCapture\n .withExtraEventProperties(options.extraEventProperties ?? {})\n .captureVideoStarted()\n .captureVideoStopped()\n .start();\n\n return () => videoCapture.stop();\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"joined-config.d.ts","sourceRoot":"","sources":["../../../src/config/joined-config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,0BAA0B,EAC/B,aAAa,EAEb,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,8BAA+B,SAAQ,kBAAkB;IACxE,mBAAmB,CAAC,EAAE,OAAO,GAAG,sCAAsC,CAAC;IACvE,eAAe,CAAC,EAAE,OAAO,GAAG,kCAAkC,CAAC;CAChE;AACD,MAAM,WAAW,sCAAuC,SAAQ,0BAA0B;IACxF;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,8BAA+B,SAAQ,kBAAkB;IACxE;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,kCAAmC,SAAQ,sBAAsB;IAChF;;OAEG;IACH,YAAY,CAAC,EAAE,8BAA8B,EAAE,CAAC;CACjD;AAQD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QA+GxE;AAgBD;;;;;;GAMG;AACH,wBAAgB,mCAAmC,CACjD,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,aAAa,EAAE,aAAa,GAC3B,IAAI,CAyGN"}
1
+ {"version":3,"file":"joined-config.d.ts","sourceRoot":"","sources":["../../../src/config/joined-config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,0BAA0B,EAC/B,aAAa,EAEb,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,8BAA+B,SAAQ,kBAAkB;IACxE,mBAAmB,CAAC,EAAE,OAAO,GAAG,sCAAsC,CAAC;IACvE,eAAe,CAAC,EAAE,OAAO,GAAG,kCAAkC,CAAC;CAChE;AACD,MAAM,WAAW,sCAAuC,SAAQ,0BAA0B;IACxF;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,8BAA+B,SAAQ,kBAAkB;IACxE;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,kCAAmC,SAAQ,sBAAsB;IAChF;;OAEG;IACH,YAAY,CAAC,EAAE,8BAA8B,EAAE,CAAC;CACjD;AAQD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QA+GxE;AAgBD;;;;;;GAMG;AACH,wBAAgB,mCAAmC,CACjD,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,aAAa,EAAE,aAAa,GAC3B,IAAI,CA6GN"}
@@ -271,7 +271,11 @@ export function updateBrowserConfigWithRemoteConfig(remoteConfig, browserConfig)
271
271
  browserConfig.defaultTracking = browserConfig.autocapture;
272
272
  }
273
273
  if ('customEnrichment' in typedRemoteConfig && typedRemoteConfig.customEnrichment !== null) {
274
- browserConfig.customEnrichment = typedRemoteConfig.customEnrichment;
274
+ // Respect a locally-explicit false: if the user disabled custom enrichment at init time,
275
+ // remote config must not re-enable it.
276
+ if (browserConfig.customEnrichment !== false) {
277
+ browserConfig.customEnrichment = typedRemoteConfig.customEnrichment;
278
+ }
275
279
  }
276
280
  browserConfig.loggerProvider.debug('Browser config after remote config update:', JSON.stringify(browserConfig));
277
281
  }