@amplitude/analytics-browser 2.12.1 → 2.12.2
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.
- package/README.md +1 -1
- package/lib/cjs/config.d.ts +1 -1
- package/lib/cjs/index.d.ts +4 -4
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +4 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/plugins/file-download-tracking.d.ts.map +1 -1
- package/lib/cjs/plugins/file-download-tracking.js +19 -8
- package/lib/cjs/plugins/file-download-tracking.js.map +1 -1
- package/lib/cjs/plugins/form-interaction-tracking.d.ts.map +1 -1
- package/lib/cjs/plugins/form-interaction-tracking.js +18 -8
- package/lib/cjs/plugins/form-interaction-tracking.js.map +1 -1
- package/lib/cjs/version.d.ts +1 -1
- package/lib/cjs/version.js +1 -1
- package/lib/cjs/version.js.map +1 -1
- package/lib/esm/config.d.ts +1 -1
- package/lib/esm/index.d.ts +4 -4
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/index.js +5 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/plugins/file-download-tracking.d.ts.map +1 -1
- package/lib/esm/plugins/file-download-tracking.js +19 -8
- package/lib/esm/plugins/file-download-tracking.js.map +1 -1
- package/lib/esm/plugins/form-interaction-tracking.d.ts.map +1 -1
- package/lib/esm/plugins/form-interaction-tracking.js +18 -8
- package/lib/esm/plugins/form-interaction-tracking.js.map +1 -1
- package/lib/esm/version.d.ts +1 -1
- package/lib/esm/version.js +1 -1
- package/lib/esm/version.js.map +1 -1
- package/lib/scripts/amplitude-bookmarklet-snippet-min.js +1 -1
- package/lib/scripts/amplitude-bookmarklet.html +1 -1
- package/lib/scripts/amplitude-gtm-min.js +1 -1
- package/lib/scripts/amplitude-gtm-min.js.gz +0 -0
- package/lib/scripts/amplitude-gtm-min.js.map +1 -1
- package/lib/scripts/amplitude-gtm-snippet-min.js +1 -1
- package/lib/scripts/amplitude-min.js +1 -1
- package/lib/scripts/amplitude-min.js.gz +0 -0
- package/lib/scripts/amplitude-min.js.map +1 -1
- package/lib/scripts/amplitude-min.umd.js +1 -1
- package/lib/scripts/amplitude-min.umd.js.gz +0 -0
- package/lib/scripts/amplitude-snippet-instructions.html +1 -1
- package/lib/scripts/amplitude-snippet-min.js +1 -1
- package/lib/scripts/config.d.ts +1 -1
- package/lib/scripts/index.d.ts +4 -4
- package/lib/scripts/index.d.ts.map +1 -1
- package/lib/scripts/plugins/file-download-tracking.d.ts.map +1 -1
- package/lib/scripts/plugins/form-interaction-tracking.d.ts.map +1 -1
- package/lib/scripts/version.d.ts +1 -1
- package/package.json +4 -4
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._q.push({name:t,args:Array.prototype.slice.call(r,0)})},i=function(e,t,r){e[t]=function(){if(r)return{promise:new Promise(s(e,t,Array.prototype.slice.call(arguments)))};o(e,t,Array.prototype.slice.call(arguments))}},
|
|
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._q.push({name:t,args:Array.prototype.slice.call(r,0)})},i=function(e,t,r){e[t]=function(){if(r)return{promise:new Promise(s(e,t,Array.prototype.slice.call(arguments)))};o(e,t,Array.prototype.slice.call(arguments))}},c=function(e){for(var t=0;t<g.length;t++)i(e,g[t],!1);for(var r=0;r<m.length;r++)i(e,m[r],!0)};r.invoked=!0;var a=t.createElement("script");a.type="text/javascript",a.integrity="sha384-ZNQpM6W99BKecTIDzxEeg1vpQbbq+rfMhiN3nQVDGVNUGP4CV+t8maNr0ZZ43Bqf",a.crossOrigin="anonymous",a.async=!0,a.src="https://cdn.amplitude.com/libs/analytics-browser-2.12.2-min.js.gz",a.onload=function(){e.amplitude.runQueuedFunctions||console.log("[Amplitude] Error: could not load SDK")};var u=t.getElementsByTagName("script")[0];u.parentNode.insertBefore(a,u);for(var p=function(){return this._q=[],this},l=["add","append","clearAll","prepend","set","setOnce","unset","preInsert","postInsert","remove","getUserProperties"],d=0;d<l.length;d++)n(p,l[d]);r.Identify=p;for(var f=function(){return this._q=[],this},v=["getEventProperties","setProductId","setQuantity","setPrice","setRevenue","setRevenueType","setReceipt","setReceiptSig","setCurrency","setEventProperties"],y=0;y<v.length;y++)n(f,v[y]);r.Revenue=f;var g=["getDeviceId","setDeviceId","getSessionId","setSessionId","getUserId","setUserId","setOptOut","setTransport","reset","extendSession"],m=["init","add","remove","track","logEvent","identify","groupIdentify","setGroup","revenue","flush"];c(r),r.createInstance=function(e){return r._iq[e]={_q:[]},c(r._iq[e]),r._iq[e]},e.amplitude=r}}(window,document)}();
|
|
57
57
|
|
|
58
58
|
amplitude.init("<YOUR_API_KEY>");
|
|
59
59
|
</script>
|
package/lib/cjs/config.d.ts
CHANGED
|
@@ -30,7 +30,7 @@ export declare class BrowserConfig extends Config implements IBrowserConfig {
|
|
|
30
30
|
transport: 'fetch' | 'xhr' | 'beacon';
|
|
31
31
|
useBatch: boolean;
|
|
32
32
|
fetchRemoteConfig: boolean;
|
|
33
|
-
readonly version = "2.12.
|
|
33
|
+
readonly version = "2.12.2";
|
|
34
34
|
protected _cookieStorage: Storage<UserSession>;
|
|
35
35
|
protected _deviceId?: string;
|
|
36
36
|
protected _lastEventId?: number;
|
package/lib/cjs/index.d.ts
CHANGED
|
@@ -23,13 +23,13 @@ export declare namespace Types {
|
|
|
23
23
|
type BrowserOptions = BrowserOptionsType;
|
|
24
24
|
type Config = IConfigType;
|
|
25
25
|
type Event = EventType;
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
const IdentifyOperation: typeof IdentifyOperationType;
|
|
27
|
+
const SpecialEventType: typeof SpecialEventTypeType;
|
|
28
28
|
type Identify = IIdentifyType;
|
|
29
29
|
type Revenue = IRevenueType;
|
|
30
|
-
|
|
30
|
+
const RevenueProperty: typeof RevenuePropertyType;
|
|
31
31
|
type Logger = ILoggerType;
|
|
32
|
-
|
|
32
|
+
const LogLevel: typeof LogLevelType;
|
|
33
33
|
type Plugin = PluginType;
|
|
34
34
|
type BeforePlugin = BeforePluginType;
|
|
35
35
|
type EnrichmentPlugin = EnrichmentPluginType;
|
package/lib/cjs/index.d.ts.map
CHANGED
|
@@ -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,2FACH,aAAa,cACb,KAAK,mCACL,WAAW,4BACX,YAAY,4BACZ,SAAS,4BACT,aAAa,8JACb,QAAQ,6GACR,IAAI;;;GACJ,QAAQ,2KACR,MAAM,qDACN,KAAK,cACL,OAAO,2GACP,WAAW,8BACX,QAAQ,qIACR,SAAS,6BACT,YAAY,+BACZ,YAAY,0CACZ,SAAS,wCACT,KAAK,yKACG,CAAC;AACX,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EACL,eAAe,IAAI,mBAAmB,EACtC,SAAS,IAAI,aAAa,EAC1B,YAAY,IAAI,gBAAgB,EAChC,aAAa,IAAI,iBAAiB,EAClC,kBAAkB,IAAI,sBAAsB,EAC5C,kBAAkB,IAAI,sBAAsB,EAC5C,cAAc,IAAI,kBAAkB,EACpC,aAAa,IAAI,iBAAiB,EAClC,OAAO,IAAI,WAAW,EACtB,KAAK,IAAI,SAAS,EAClB,iBAAiB,IAAI,qBAAqB,EAC1C,gBAAgB,IAAI,oBAAoB,EACxC,SAAS,IAAI,aAAa,EAC1B,QAAQ,IAAI,YAAY,EACxB,eAAe,IAAI,mBAAmB,EACtC,OAAO,IAAI,WAAW,EACtB,QAAQ,IAAI,YAAY,EACxB,MAAM,IAAI,UAAU,EACpB,YAAY,IAAI,gBAAgB,EAChC,gBAAgB,IAAI,oBAAoB,EACxC,iBAAiB,IAAI,qBAAqB,EAC1C,MAAM,IAAI,UAAU,EACpB,cAAc,IAAI,kBAAkB,EACpC,mBAAmB,IAAI,uBAAuB,EAC9C,OAAO,IAAI,eAAe,EAC1B,aAAa,IAAI,iBAAiB,EAElC,SAAS,IAAI,aAAa,EAC1B,0BAA0B,IAAI,8BAA8B,EAC5D,UAAU,IAAI,cAAc,EAI7B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,QAAQ,IAAI,YAAY,EACxB,cAAc,IAAI,kBAAkB,EACpC,iBAAiB,IAAI,qBAAqB,EAC1C,kBAAkB,IAAI,sBAAsB,EAC5C,aAAa,IAAI,iBAAiB,EACnC,MAAM,wBAAwB,CAAC;AAKhC,yBAAiB,KAAK,CAAC;IACrB,KAAY,eAAe,CAAC,CAAC,IAAI,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACxD,KAAY,SAAS,GAAG,aAAa,CAAC;IACtC,KAAY,YAAY,GAAG,gBAAgB,CAAC;IAC5C,KAAY,QAAQ,GAAG,YAAY,CAAC;IACpC,KAAY,cAAc,GAAG,kBAAkB,CAAC;IAChD,KAAY,iBAAiB,GAAG,qBAAqB,CAAC;IACtD,KAAY,kBAAkB,GAAG,sBAAsB,CAAC;IACxD,KAAY,aAAa,GAAG,iBAAiB,CAAC;IAC9C,KAAY,aAAa,GAAG,iBAAiB,CAAC;IAC9C,KAAY,kBAAkB,GAAG,sBAAsB,CAAC;IACxD,KAAY,kBAAkB,GAAG,sBAAsB,CAAC;IACxD,KAAY,aAAa,GAAG,iBAAiB,CAAC;IAC9C,KAAY,cAAc,GAAG,kBAAkB,CAAC;IAChD,KAAY,MAAM,GAAG,WAAW,CAAC;IACjC,KAAY,KAAK,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/index.js
CHANGED
|
@@ -18,6 +18,10 @@ var analytics_core_2 = require("@amplitude/analytics-core");
|
|
|
18
18
|
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
19
19
|
var Types;
|
|
20
20
|
(function (Types) {
|
|
21
|
+
Types.IdentifyOperation = analytics_core_2.IdentifyOperation;
|
|
22
|
+
Types.SpecialEventType = analytics_core_2.SpecialEventType;
|
|
23
|
+
Types.RevenueProperty = analytics_core_2.RevenueProperty;
|
|
24
|
+
Types.LogLevel = analytics_core_2.LogLevel;
|
|
21
25
|
Types.OfflineDisabled = analytics_core_2.OfflineDisabled;
|
|
22
26
|
Types.DEFAULT_CSS_SELECTOR_ALLOWLIST = analytics_core_2.DEFAULT_CSS_SELECTOR_ALLOWLIST;
|
|
23
27
|
Types.DEFAULT_DATA_ATTRIBUTE_PREFIX = analytics_core_2.DEFAULT_DATA_ATTRIBUTE_PREFIX;
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -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,GAoBD,gCAAM,MAnBR,QAAA,aAAa,GAmBX,gCAAM,gBAlBR,QAAA,KAAK,GAkBH,gCAAM,QAjBR,QAAA,WAAW,GAiBT,gCAAM,cAhBR,QAAA,YAAY,GAgBV,gCAAM,eAfR,QAAA,SAAS,GAeP,gCAAM,YAdR,QAAA,aAAa,GAcX,gCAAM,gBAbR,QAAA,QAAQ,GAaN,gCAAM,WAZR,QAAA,IAAI,GAYF,gCAAM,OAXR,QAAA,QAAQ,GAWN,gCAAM,WAVR,QAAA,MAAM,GAUJ,gCAAM,SATR,QAAA,KAAK,GASH,gCAAM,QARR,QAAA,OAAO,GAQL,gCAAM,UAPR,QAAA,WAAW,GAOT,gCAAM,cANR,QAAA,QAAQ,GAMN,gCAAM,WALR,QAAA,SAAS,GAKP,gCAAM,YAJR,QAAA,YAAY,GAIV,gCAAM,eAHR,QAAA,YAAY,GAGV,gCAAM,eAFR,QAAA,SAAS,GAEP,gCAAM,YADR,QAAA,KAAK,GACH,gCAAM,OAAC;AACX,yDAA4D;AAAnD,oHAAA,kBAAkB,OAAA;AAC3B,4DAA8D;AAArD,yGAAA,OAAO,OAAA;AAAE,0GAAA,QAAQ,OAAA;AAE1B,4DAkCmC;AAUnC,wFAAwF;AACxF,iGAAiG;AACjG,2DAA2D;AAC3D,IAAiB,KAAK,CAuCrB;AAvCD,WAAiB,KAAK;
|
|
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,GAoBD,gCAAM,MAnBR,QAAA,aAAa,GAmBX,gCAAM,gBAlBR,QAAA,KAAK,GAkBH,gCAAM,QAjBR,QAAA,WAAW,GAiBT,gCAAM,cAhBR,QAAA,YAAY,GAgBV,gCAAM,eAfR,QAAA,SAAS,GAeP,gCAAM,YAdR,QAAA,aAAa,GAcX,gCAAM,gBAbR,QAAA,QAAQ,GAaN,gCAAM,WAZR,QAAA,IAAI,GAYF,gCAAM,OAXR,QAAA,QAAQ,GAWN,gCAAM,WAVR,QAAA,MAAM,GAUJ,gCAAM,SATR,QAAA,KAAK,GASH,gCAAM,QARR,QAAA,OAAO,GAQL,gCAAM,UAPR,QAAA,WAAW,GAOT,gCAAM,cANR,QAAA,QAAQ,GAMN,gCAAM,WALR,QAAA,SAAS,GAKP,gCAAM,YAJR,QAAA,YAAY,GAIV,gCAAM,eAHR,QAAA,YAAY,GAGV,gCAAM,eAFR,QAAA,SAAS,GAEP,gCAAM,YADR,QAAA,KAAK,GACH,gCAAM,OAAC;AACX,yDAA4D;AAAnD,oHAAA,kBAAkB,OAAA;AAC3B,4DAA8D;AAArD,yGAAA,OAAO,OAAA;AAAE,0GAAA,QAAQ,OAAA;AAE1B,4DAkCmC;AAUnC,wFAAwF;AACxF,iGAAiG;AACjG,2DAA2D;AAC3D,IAAiB,KAAK,CAuCrB;AAvCD,WAAiB,KAAK;IAgBP,uBAAiB,GAAG,kCAAqB,CAAC;IAC1C,sBAAgB,GAAG,iCAAoB,CAAC;IAGxC,qBAAe,GAAG,gCAAmB,CAAC;IAEtC,cAAQ,GAAG,yBAAY,CAAC;IAUxB,qBAAe,GAAG,gCAAmB,CAAC;IAItC,oCAA8B,GAAG,+CAAmC,CAAC;IACrE,mCAA6B,GAAG,8CAAkC,CAAC;IACnE,oCAA8B,GAAG,+CAAmC,CAAC;AACpF,CAAC,EAvCgB,KAAK,GAAL,aAAK,KAAL,aAAK,QAuCrB","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 getSessionId,\n getUserId,\n groupIdentify,\n identify,\n init,\n logEvent,\n remove,\n reset,\n revenue,\n setDeviceId,\n setGroup,\n setOptOut,\n setSessionId,\n setTransport,\n setUserId,\n track,\n} = client;\nexport { runQueuedFunctions } from './utils/snippet-helper';\nexport { Revenue, Identify } from '@amplitude/analytics-core';\n\nimport {\n AmplitudeReturn as AmplitudeReturnType,\n BaseEvent as BaseEventType,\n EventOptions as EventOptionsType,\n BrowserClient as BrowserClientType,\n AttributionOptions as AttributionOptionsType,\n AutocaptureOptions as AutocaptureOptionsType,\n BrowserOptions as BrowserOptionsType,\n BrowserConfig as BrowserConfigType,\n IConfig as IConfigType,\n Event as EventType,\n IdentifyOperation as IdentifyOperationType,\n SpecialEventType as SpecialEventTypeType,\n IIdentify as IIdentifyType,\n IRevenue as IRevenueType,\n RevenueProperty as RevenuePropertyType,\n ILogger as ILoggerType,\n LogLevel as LogLevelType,\n Plugin as PluginType,\n BeforePlugin as BeforePluginType,\n EnrichmentPlugin as EnrichmentPluginType,\n DestinationPlugin as DestinationPluginType,\n Result as ResultType,\n ServerZoneType as ServerZoneTypeType,\n IdentityStorageType as IdentityStorageTypeType,\n Storage as StorageTypeType,\n TransportType as TransportTypeType,\n OfflineDisabled as OfflineDisabledType,\n Messenger as MessengerType,\n ElementInteractionsOptions as ElementInteractionsOptionsType,\n ActionType as ActionTypeType,\n DEFAULT_CSS_SELECTOR_ALLOWLIST as DEFAULT_CSS_SELECTOR_ALLOWLIST_TYPE,\n DEFAULT_DATA_ATTRIBUTE_PREFIX as DEFAULT_DATA_ATTRIBUTE_PREFIX_TYPE,\n DEFAULT_ACTION_CLICK_ALLOWLIST as DEFAULT_ACTION_CLICK_ALLOWLIST_TYPE,\n} from '@amplitude/analytics-core';\n\nimport {\n Campaign as CampaignType,\n CampaignParser as CampaignParserType,\n ClickIdParameters as ClickIdParametersType,\n ReferrerParameters as ReferrerParametersType,\n UTMParameters as UTMParametersType,\n} from './attribution/campaign';\n\n// Export the following 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.\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace Types {\n export type AmplitudeReturn<T> = AmplitudeReturnType<T>;\n export type BaseEvent = BaseEventType;\n export type EventOptions = EventOptionsType;\n export type Campaign = CampaignType;\n export type CampaignParser = CampaignParserType;\n export type ClickIdParameters = ClickIdParametersType;\n export type ReferrerParameters = ReferrerParametersType;\n export type UTMParameters = UTMParametersType;\n export type BrowserClient = BrowserClientType;\n export type AttributionOptions = AttributionOptionsType;\n export type AutocaptureOptions = AutocaptureOptionsType;\n export type BrowserConfig = BrowserConfigType;\n export type BrowserOptions = BrowserOptionsType;\n export type Config = IConfigType;\n export type Event = EventType;\n export const IdentifyOperation = IdentifyOperationType;\n export const SpecialEventType = SpecialEventTypeType;\n export type Identify = IIdentifyType;\n export type Revenue = IRevenueType;\n export const RevenueProperty = RevenuePropertyType;\n export type Logger = ILoggerType;\n export const LogLevel = LogLevelType;\n export type Plugin = PluginType;\n export type BeforePlugin = BeforePluginType;\n export type EnrichmentPlugin = EnrichmentPluginType;\n export type DestinationPlugin = DestinationPluginType;\n export type Result = ResultType;\n export type ServerZoneType = ServerZoneTypeType;\n export type IdentityStorageType = IdentityStorageTypeType;\n export type Storage<T> = StorageTypeType<T>;\n export type TransportType = TransportTypeType;\n export const OfflineDisabled = OfflineDisabledType;\n export type Messenger = MessengerType;\n export type ElementInteractionsOptions = ElementInteractionsOptionsType;\n export type ActionType = ActionTypeType;\n export const DEFAULT_CSS_SELECTOR_ALLOWLIST = DEFAULT_CSS_SELECTOR_ALLOWLIST_TYPE;\n export const DEFAULT_DATA_ATTRIBUTE_PREFIX = DEFAULT_DATA_ATTRIBUTE_PREFIX_TYPE;\n export const DEFAULT_ACTION_CLICK_ALLOWLIST = DEFAULT_ACTION_CLICK_ALLOWLIST_TYPE;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-download-tracking.d.ts","sourceRoot":"","sources":["../../../src/plugins/file-download-tracking.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,gBAAgB,EAAiB,MAAM,2BAA2B,CAAC;AAQnG,eAAO,MAAM,oBAAoB,QAAO,
|
|
1
|
+
{"version":3,"file":"file-download-tracking.d.ts","sourceRoot":"","sources":["../../../src/plugins/file-download-tracking.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,gBAAgB,EAAiB,MAAM,2BAA2B,CAAC;AAQnG,eAAO,MAAM,oBAAoB,QAAO,gBA4HvC,CAAC"}
|
|
@@ -26,13 +26,9 @@ var fileDownloadTracking = function () {
|
|
|
26
26
|
var name = '@amplitude/plugin-file-download-tracking-browser';
|
|
27
27
|
var type = 'enrichment';
|
|
28
28
|
var setup = function (config, amplitude) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
29
|
-
var
|
|
30
|
-
return tslib_1.__generator(this, function (
|
|
31
|
-
|
|
32
|
-
// after the body is built. When Amplitud gets initialized in a script tag, the body tag is still unavailable. So register this
|
|
33
|
-
// only after the window is loaded
|
|
34
|
-
/* istanbul ignore next */
|
|
35
|
-
(_a = (0, analytics_core_1.getGlobalScope)()) === null || _a === void 0 ? void 0 : _a.addEventListener('load', function () {
|
|
29
|
+
var initializeFileDownloadTracking, window_1;
|
|
30
|
+
return tslib_1.__generator(this, function (_a) {
|
|
31
|
+
initializeFileDownloadTracking = function () {
|
|
36
32
|
/* istanbul ignore if */
|
|
37
33
|
if (!amplitude) {
|
|
38
34
|
// TODO: Add required minimum version of @amplitude/analytics-browser
|
|
@@ -94,7 +90,22 @@ var fileDownloadTracking = function () {
|
|
|
94
90
|
childList: true,
|
|
95
91
|
});
|
|
96
92
|
}
|
|
97
|
-
}
|
|
93
|
+
};
|
|
94
|
+
// If the document is already loaded, initialize immediately.
|
|
95
|
+
/* istanbul ignore else*/
|
|
96
|
+
if (document.readyState === 'complete') {
|
|
97
|
+
initializeFileDownloadTracking();
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
window_1 = (0, analytics_core_1.getGlobalScope)();
|
|
101
|
+
/* istanbul ignore else*/
|
|
102
|
+
if (window_1) {
|
|
103
|
+
window_1.addEventListener('load', initializeFileDownloadTracking);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
config.loggerProvider.debug('File download tracking is not installed because global is undefined.');
|
|
107
|
+
}
|
|
108
|
+
}
|
|
98
109
|
return [2 /*return*/];
|
|
99
110
|
});
|
|
100
111
|
}); };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-download-tracking.js","sourceRoot":"","sources":["../../../src/plugins/file-download-tracking.ts"],"names":[],"mappings":";;;;AAAA,0CAAoH;AAEpH,4DAAmG;AAQ5F,IAAM,oBAAoB,GAAG;IAClC,IAAI,QAAsC,CAAC;IAC3C,IAAI,cAAc,GAAoB,EAAE,CAAC;IACzC,IAAM,gBAAgB,GAAG,UAAC,OAAgB,EAAE,IAAa,EAAE,OAAmB;QAC5E,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;IACF,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,IAAM,IAAI,GAAG,kDAAkD,CAAC;IAChE,IAAM,IAAI,GAAG,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"file-download-tracking.js","sourceRoot":"","sources":["../../../src/plugins/file-download-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import { DEFAULT_FILE_DOWNLOAD_EVENT, FILE_EXTENSION, FILE_NAME, LINK_ID, LINK_TEXT, LINK_URL } from '../constants';\nimport { BrowserConfig } from '../config';\nimport { getGlobalScope, Event, EnrichmentPlugin, BrowserClient } from '@amplitude/analytics-core';\n\ninterface EventListener {\n element: Element;\n type: 'click';\n handler: () => void;\n}\n\nexport const fileDownloadTracking = (): EnrichmentPlugin => {\n let observer: MutationObserver | undefined;\n let eventListeners: EventListener[] = [];\n const addEventListener = (element: Element, type: 'click', handler: () => void) => {\n element.addEventListener(type, handler);\n eventListeners.push({\n element,\n type,\n handler,\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 const name = '@amplitude/plugin-file-download-tracking-browser';\n const type = 'enrichment';\n\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\n const initializeFileDownloadTracking = () => {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn(\n 'File download tracking requires a later version of @amplitude/analytics-browser. File download events are not tracked.',\n );\n return;\n }\n\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n const addFileDownloadListener = (a: HTMLAnchorElement) => {\n let url: URL;\n try {\n // eslint-disable-next-line no-restricted-globals\n url = new URL(a.href, window.location.href);\n } catch {\n /* istanbul ignore next */\n return;\n }\n const result = ext.exec(url.href);\n const fileExtension = result?.[1];\n\n if (fileExtension) {\n addEventListener(a, 'click', () => {\n if (fileExtension) {\n amplitude.track(DEFAULT_FILE_DOWNLOAD_EVENT, {\n [FILE_EXTENSION]: fileExtension,\n [FILE_NAME]: url.pathname,\n [LINK_ID]: a.id,\n [LINK_TEXT]: a.text,\n [LINK_URL]: a.href,\n });\n }\n });\n }\n };\n\n const ext =\n /\\.(pdf|xlsx?|docx?|txt|rtf|csv|exe|key|pp(s|t|tx)|7z|pkg|rar|gz|zip|avi|mov|mp4|mpe?g|wmv|midi?|mp3|wav|wma)(\\?.+)?$/;\n\n // Adds listener to existing anchor tags\n const links = Array.from(document.getElementsByTagName('a'));\n links.forEach(addFileDownloadListener);\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 === 'A') {\n addFileDownloadListener(node as HTMLAnchorElement);\n }\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n Array.from(node.querySelectorAll('a') as HTMLAnchorElement[]).map(addFileDownloadListener);\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 /* istanbul ignore else*/\n if (document.readyState === 'complete') {\n initializeFileDownloadTracking();\n } else {\n // Otherwise, wait for the load event.\n const window = getGlobalScope();\n /* istanbul ignore else*/\n if (window) {\n window.addEventListener('load', initializeFileDownloadTracking);\n } else {\n config.loggerProvider.debug('File download tracking is not installed because global is undefined.');\n }\n }\n };\n\n const execute = async (event: Event) => 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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-interaction-tracking.d.ts","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":"AAQA,OAAO,EAAyB,gBAAgB,EAAiB,MAAM,2BAA2B,CAAC;AAQnG,eAAO,MAAM,uBAAuB,QAAO,
|
|
1
|
+
{"version":3,"file":"form-interaction-tracking.d.ts","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":"AAQA,OAAO,EAAyB,gBAAgB,EAAiB,MAAM,2BAA2B,CAAC;AAQnG,eAAO,MAAM,uBAAuB,QAAO,gBAkI1C,CAAC;AAEF,eAAO,MAAM,iBAAiB,uDAU7B,CAAC;AAGF,eAAO,MAAM,iBAAiB,SAAU,eAAe,KAAG,MAAM,GAAG,IASlE,CAAC"}
|
|
@@ -26,13 +26,9 @@ var formInteractionTracking = function () {
|
|
|
26
26
|
var name = '@amplitude/plugin-form-interaction-tracking-browser';
|
|
27
27
|
var type = 'enrichment';
|
|
28
28
|
var setup = function (config, amplitude) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
29
|
-
var
|
|
30
|
-
return tslib_1.__generator(this, function (
|
|
31
|
-
|
|
32
|
-
// after the body is built. When Amplitud gets initialized in a script tag, the body tag is still unavailable. So register this
|
|
33
|
-
// only after the window is loaded
|
|
34
|
-
/* istanbul ignore next */
|
|
35
|
-
(_a = (0, analytics_core_1.getGlobalScope)()) === null || _a === void 0 ? void 0 : _a.addEventListener('load', function () {
|
|
29
|
+
var initializeFormTracking, window_1;
|
|
30
|
+
return tslib_1.__generator(this, function (_a) {
|
|
31
|
+
initializeFormTracking = function () {
|
|
36
32
|
/* istanbul ignore if */
|
|
37
33
|
if (!amplitude) {
|
|
38
34
|
// TODO: Add required minimum version of @amplitude/analytics-browser
|
|
@@ -98,7 +94,21 @@ var formInteractionTracking = function () {
|
|
|
98
94
|
childList: true,
|
|
99
95
|
});
|
|
100
96
|
}
|
|
101
|
-
}
|
|
97
|
+
};
|
|
98
|
+
// If the document is already loaded, initialize immediately.
|
|
99
|
+
if (document.readyState === 'complete') {
|
|
100
|
+
initializeFormTracking();
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
window_1 = (0, analytics_core_1.getGlobalScope)();
|
|
104
|
+
/* istanbul ignore else*/
|
|
105
|
+
if (window_1) {
|
|
106
|
+
window_1.addEventListener('load', initializeFormTracking);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
config.loggerProvider.debug('Form interaction tracking is not installed because global is undefined.');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
102
112
|
return [2 /*return*/];
|
|
103
113
|
});
|
|
104
114
|
}); };
|
|
@@ -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 { getGlobalScope, Event, EnrichmentPlugin, BrowserClient } from '@amplitude/analytics-core';\n\ninterface EventListener {\n element: Element;\n type: 'change' | 'submit';\n handler: () => 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: () => 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 const name = '@amplitude/plugin-form-interaction-tracking-browser';\n const type = 'enrichment';\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\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 Amplitud gets initialized in a script tag, the body tag is still unavailable. So register this\n // only after the window is loaded\n /* istanbul ignore next */\n getGlobalScope()?.addEventListener('load', function () {\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', () => {\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\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 const execute = async (event: Event) => 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":"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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 { getGlobalScope, Event, EnrichmentPlugin, BrowserClient } from '@amplitude/analytics-core';\n\ninterface EventListener {\n element: Element;\n type: 'change' | 'submit';\n handler: () => 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: () => 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 const name = '@amplitude/plugin-form-interaction-tracking-browser';\n const type = 'enrichment';\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\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', () => {\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\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: Event) => 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"]}
|
package/lib/cjs/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "2.12.
|
|
1
|
+
export declare const VERSION = "2.12.2";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/lib/cjs/version.js
CHANGED
package/lib/cjs/version.js.map
CHANGED
|
@@ -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.12.
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["export const VERSION = '2.12.2';\n"]}
|
package/lib/esm/config.d.ts
CHANGED
|
@@ -30,7 +30,7 @@ export declare class BrowserConfig extends Config implements IBrowserConfig {
|
|
|
30
30
|
transport: 'fetch' | 'xhr' | 'beacon';
|
|
31
31
|
useBatch: boolean;
|
|
32
32
|
fetchRemoteConfig: boolean;
|
|
33
|
-
readonly version = "2.12.
|
|
33
|
+
readonly version = "2.12.2";
|
|
34
34
|
protected _cookieStorage: Storage<UserSession>;
|
|
35
35
|
protected _deviceId?: string;
|
|
36
36
|
protected _lastEventId?: number;
|
package/lib/esm/index.d.ts
CHANGED
|
@@ -23,13 +23,13 @@ export declare namespace Types {
|
|
|
23
23
|
type BrowserOptions = BrowserOptionsType;
|
|
24
24
|
type Config = IConfigType;
|
|
25
25
|
type Event = EventType;
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
const IdentifyOperation: typeof IdentifyOperationType;
|
|
27
|
+
const SpecialEventType: typeof SpecialEventTypeType;
|
|
28
28
|
type Identify = IIdentifyType;
|
|
29
29
|
type Revenue = IRevenueType;
|
|
30
|
-
|
|
30
|
+
const RevenueProperty: typeof RevenuePropertyType;
|
|
31
31
|
type Logger = ILoggerType;
|
|
32
|
-
|
|
32
|
+
const LogLevel: typeof LogLevelType;
|
|
33
33
|
type Plugin = PluginType;
|
|
34
34
|
type BeforePlugin = BeforePluginType;
|
|
35
35
|
type EnrichmentPlugin = EnrichmentPluginType;
|
package/lib/esm/index.d.ts.map
CHANGED
|
@@ -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,2FACH,aAAa,cACb,KAAK,mCACL,WAAW,4BACX,YAAY,4BACZ,SAAS,4BACT,aAAa,8JACb,QAAQ,6GACR,IAAI;;;GACJ,QAAQ,2KACR,MAAM,qDACN,KAAK,cACL,OAAO,2GACP,WAAW,8BACX,QAAQ,qIACR,SAAS,6BACT,YAAY,+BACZ,YAAY,0CACZ,SAAS,wCACT,KAAK,yKACG,CAAC;AACX,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EACL,eAAe,IAAI,mBAAmB,EACtC,SAAS,IAAI,aAAa,EAC1B,YAAY,IAAI,gBAAgB,EAChC,aAAa,IAAI,iBAAiB,EAClC,kBAAkB,IAAI,sBAAsB,EAC5C,kBAAkB,IAAI,sBAAsB,EAC5C,cAAc,IAAI,kBAAkB,EACpC,aAAa,IAAI,iBAAiB,EAClC,OAAO,IAAI,WAAW,EACtB,KAAK,IAAI,SAAS,EAClB,iBAAiB,IAAI,qBAAqB,EAC1C,gBAAgB,IAAI,oBAAoB,EACxC,SAAS,IAAI,aAAa,EAC1B,QAAQ,IAAI,YAAY,EACxB,eAAe,IAAI,mBAAmB,EACtC,OAAO,IAAI,WAAW,EACtB,QAAQ,IAAI,YAAY,EACxB,MAAM,IAAI,UAAU,EACpB,YAAY,IAAI,gBAAgB,EAChC,gBAAgB,IAAI,oBAAoB,EACxC,iBAAiB,IAAI,qBAAqB,EAC1C,MAAM,IAAI,UAAU,EACpB,cAAc,IAAI,kBAAkB,EACpC,mBAAmB,IAAI,uBAAuB,EAC9C,OAAO,IAAI,eAAe,EAC1B,aAAa,IAAI,iBAAiB,EAElC,SAAS,IAAI,aAAa,EAC1B,0BAA0B,IAAI,8BAA8B,EAC5D,UAAU,IAAI,cAAc,EAI7B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,QAAQ,IAAI,YAAY,EACxB,cAAc,IAAI,kBAAkB,EACpC,iBAAiB,IAAI,qBAAqB,EAC1C,kBAAkB,IAAI,sBAAsB,EAC5C,aAAa,IAAI,iBAAiB,EACnC,MAAM,wBAAwB,CAAC;AAKhC,yBAAiB,KAAK,CAAC;IACrB,KAAY,eAAe,CAAC,CAAC,IAAI,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACxD,KAAY,SAAS,GAAG,aAAa,CAAC;IACtC,KAAY,YAAY,GAAG,gBAAgB,CAAC;IAC5C,KAAY,QAAQ,GAAG,YAAY,CAAC;IACpC,KAAY,cAAc,GAAG,kBAAkB,CAAC;IAChD,KAAY,iBAAiB,GAAG,qBAAqB,CAAC;IACtD,KAAY,kBAAkB,GAAG,sBAAsB,CAAC;IACxD,KAAY,aAAa,GAAG,iBAAiB,CAAC;IAC9C,KAAY,aAAa,GAAG,iBAAiB,CAAC;IAC9C,KAAY,kBAAkB,GAAG,sBAAsB,CAAC;IACxD,KAAY,kBAAkB,GAAG,sBAAsB,CAAC;IACxD,KAAY,aAAa,GAAG,iBAAiB,CAAC;IAC9C,KAAY,cAAc,GAAG,kBAAkB,CAAC;IAChD,KAAY,MAAM,GAAG,WAAW,CAAC;IACjC,KAAY,KAAK,GAAG,SAAS,CAAC;
|
|
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,2FACH,aAAa,cACb,KAAK,mCACL,WAAW,4BACX,YAAY,4BACZ,SAAS,4BACT,aAAa,8JACb,QAAQ,6GACR,IAAI;;;GACJ,QAAQ,2KACR,MAAM,qDACN,KAAK,cACL,OAAO,2GACP,WAAW,8BACX,QAAQ,qIACR,SAAS,6BACT,YAAY,+BACZ,YAAY,0CACZ,SAAS,wCACT,KAAK,yKACG,CAAC;AACX,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EACL,eAAe,IAAI,mBAAmB,EACtC,SAAS,IAAI,aAAa,EAC1B,YAAY,IAAI,gBAAgB,EAChC,aAAa,IAAI,iBAAiB,EAClC,kBAAkB,IAAI,sBAAsB,EAC5C,kBAAkB,IAAI,sBAAsB,EAC5C,cAAc,IAAI,kBAAkB,EACpC,aAAa,IAAI,iBAAiB,EAClC,OAAO,IAAI,WAAW,EACtB,KAAK,IAAI,SAAS,EAClB,iBAAiB,IAAI,qBAAqB,EAC1C,gBAAgB,IAAI,oBAAoB,EACxC,SAAS,IAAI,aAAa,EAC1B,QAAQ,IAAI,YAAY,EACxB,eAAe,IAAI,mBAAmB,EACtC,OAAO,IAAI,WAAW,EACtB,QAAQ,IAAI,YAAY,EACxB,MAAM,IAAI,UAAU,EACpB,YAAY,IAAI,gBAAgB,EAChC,gBAAgB,IAAI,oBAAoB,EACxC,iBAAiB,IAAI,qBAAqB,EAC1C,MAAM,IAAI,UAAU,EACpB,cAAc,IAAI,kBAAkB,EACpC,mBAAmB,IAAI,uBAAuB,EAC9C,OAAO,IAAI,eAAe,EAC1B,aAAa,IAAI,iBAAiB,EAElC,SAAS,IAAI,aAAa,EAC1B,0BAA0B,IAAI,8BAA8B,EAC5D,UAAU,IAAI,cAAc,EAI7B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,QAAQ,IAAI,YAAY,EACxB,cAAc,IAAI,kBAAkB,EACpC,iBAAiB,IAAI,qBAAqB,EAC1C,kBAAkB,IAAI,sBAAsB,EAC5C,aAAa,IAAI,iBAAiB,EACnC,MAAM,wBAAwB,CAAC;AAKhC,yBAAiB,KAAK,CAAC;IACrB,KAAY,eAAe,CAAC,CAAC,IAAI,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACxD,KAAY,SAAS,GAAG,aAAa,CAAC;IACtC,KAAY,YAAY,GAAG,gBAAgB,CAAC;IAC5C,KAAY,QAAQ,GAAG,YAAY,CAAC;IACpC,KAAY,cAAc,GAAG,kBAAkB,CAAC;IAChD,KAAY,iBAAiB,GAAG,qBAAqB,CAAC;IACtD,KAAY,kBAAkB,GAAG,sBAAsB,CAAC;IACxD,KAAY,aAAa,GAAG,iBAAiB,CAAC;IAC9C,KAAY,aAAa,GAAG,iBAAiB,CAAC;IAC9C,KAAY,kBAAkB,GAAG,sBAAsB,CAAC;IACxD,KAAY,kBAAkB,GAAG,sBAAsB,CAAC;IACxD,KAAY,aAAa,GAAG,iBAAiB,CAAC;IAC9C,KAAY,cAAc,GAAG,kBAAkB,CAAC;IAChD,KAAY,MAAM,GAAG,WAAW,CAAC;IACjC,KAAY,KAAK,GAAG,SAAS,CAAC;IACvB,MAAM,iBAAiB,8BAAwB,CAAC;IAChD,MAAM,gBAAgB,6BAAuB,CAAC;IACrD,KAAY,QAAQ,GAAG,aAAa,CAAC;IACrC,KAAY,OAAO,GAAG,YAAY,CAAC;IAC5B,MAAM,eAAe,4BAAsB,CAAC;IACnD,KAAY,MAAM,GAAG,WAAW,CAAC;IAC1B,MAAM,QAAQ,qBAAe,CAAC;IACrC,KAAY,MAAM,GAAG,UAAU,CAAC;IAChC,KAAY,YAAY,GAAG,gBAAgB,CAAC;IAC5C,KAAY,gBAAgB,GAAG,oBAAoB,CAAC;IACpD,KAAY,iBAAiB,GAAG,qBAAqB,CAAC;IACtD,KAAY,MAAM,GAAG,UAAU,CAAC;IAChC,KAAY,cAAc,GAAG,kBAAkB,CAAC;IAChD,KAAY,mBAAmB,GAAG,uBAAuB,CAAC;IAC1D,KAAY,OAAO,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;IAC5C,KAAY,aAAa,GAAG,iBAAiB,CAAC;IACvC,MAAM,eAAe,MAAsB,CAAC;IACnD,KAAY,SAAS,GAAG,aAAa,CAAC;IACtC,KAAY,0BAA0B,GAAG,8BAA8B,CAAC;IACxE,KAAY,UAAU,GAAG,cAAc,CAAC;IACjC,MAAM,8BAA8B,UAAsC,CAAC;IAC3E,MAAM,6BAA6B,oBAAqC,CAAC;IACzE,MAAM,8BAA8B,UAAsC,CAAC;CACnF"}
|
package/lib/esm/index.js
CHANGED
|
@@ -4,12 +4,16 @@ export { createInstance } from './browser-client-factory';
|
|
|
4
4
|
export var add = client.add, extendSession = client.extendSession, flush = client.flush, getDeviceId = client.getDeviceId, getSessionId = client.getSessionId, getUserId = client.getUserId, groupIdentify = client.groupIdentify, identify = client.identify, init = client.init, logEvent = client.logEvent, remove = client.remove, reset = client.reset, revenue = client.revenue, setDeviceId = client.setDeviceId, setGroup = client.setGroup, setOptOut = client.setOptOut, setSessionId = client.setSessionId, setTransport = client.setTransport, setUserId = client.setUserId, track = client.track;
|
|
5
5
|
export { runQueuedFunctions } from './utils/snippet-helper';
|
|
6
6
|
export { Revenue, Identify } from '@amplitude/analytics-core';
|
|
7
|
-
import { OfflineDisabled as OfflineDisabledType, DEFAULT_CSS_SELECTOR_ALLOWLIST as DEFAULT_CSS_SELECTOR_ALLOWLIST_TYPE, DEFAULT_DATA_ATTRIBUTE_PREFIX as DEFAULT_DATA_ATTRIBUTE_PREFIX_TYPE, DEFAULT_ACTION_CLICK_ALLOWLIST as DEFAULT_ACTION_CLICK_ALLOWLIST_TYPE, } from '@amplitude/analytics-core';
|
|
7
|
+
import { IdentifyOperation as IdentifyOperationType, SpecialEventType as SpecialEventTypeType, RevenueProperty as RevenuePropertyType, LogLevel as LogLevelType, OfflineDisabled as OfflineDisabledType, DEFAULT_CSS_SELECTOR_ALLOWLIST as DEFAULT_CSS_SELECTOR_ALLOWLIST_TYPE, DEFAULT_DATA_ATTRIBUTE_PREFIX as DEFAULT_DATA_ATTRIBUTE_PREFIX_TYPE, DEFAULT_ACTION_CLICK_ALLOWLIST as DEFAULT_ACTION_CLICK_ALLOWLIST_TYPE, } from '@amplitude/analytics-core';
|
|
8
8
|
// Export the following types to maintain backward compatibility with `analytics-types`.
|
|
9
9
|
// In the next major version, only export customer-facing types to reduce the public API surface.
|
|
10
10
|
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
11
11
|
export var Types;
|
|
12
12
|
(function (Types) {
|
|
13
|
+
Types.IdentifyOperation = IdentifyOperationType;
|
|
14
|
+
Types.SpecialEventType = SpecialEventTypeType;
|
|
15
|
+
Types.RevenueProperty = RevenuePropertyType;
|
|
16
|
+
Types.LogLevel = LogLevelType;
|
|
13
17
|
Types.OfflineDisabled = OfflineDisabledType;
|
|
14
18
|
Types.DEFAULT_CSS_SELECTOR_ALLOWLIST = DEFAULT_CSS_SELECTOR_ALLOWLIST_TYPE;
|
|
15
19
|
Types.DEFAULT_DATA_ATTRIBUTE_PREFIX = DEFAULT_DATA_ATTRIBUTE_PREFIX_TYPE;
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,OAAO,MAAM,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,MAAM,CACJ,IAAA,GAAG,GAoBD,MAAM,IApBL,EACH,aAAa,GAmBX,MAAM,cAnBK,EACb,KAAK,GAkBH,MAAM,MAlBH,EACL,WAAW,GAiBT,MAAM,YAjBG,EACX,YAAY,GAgBV,MAAM,aAhBI,EACZ,SAAS,GAeP,MAAM,UAfC,EACT,aAAa,GAcX,MAAM,cAdK,EACb,QAAQ,GAaN,MAAM,SAbA,EACR,IAAI,GAYF,MAAM,KAZJ,EACJ,QAAQ,GAWN,MAAM,SAXA,EACR,MAAM,GAUJ,MAAM,OAVF,EACN,KAAK,GASH,MAAM,MATH,EACL,OAAO,GAQL,MAAM,QARD,EACP,WAAW,GAOT,MAAM,YAPG,EACX,QAAQ,GAMN,MAAM,SANA,EACR,SAAS,GAKP,MAAM,UALC,EACT,YAAY,GAIV,MAAM,aAJI,EACZ,YAAY,GAGV,MAAM,aAHI,EACZ,SAAS,GAEP,MAAM,UAFC,EACT,KAAK,GACH,MAAM,MADH,CACI;AACX,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,OAAO,MAAM,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,MAAM,CACJ,IAAA,GAAG,GAoBD,MAAM,IApBL,EACH,aAAa,GAmBX,MAAM,cAnBK,EACb,KAAK,GAkBH,MAAM,MAlBH,EACL,WAAW,GAiBT,MAAM,YAjBG,EACX,YAAY,GAgBV,MAAM,aAhBI,EACZ,SAAS,GAeP,MAAM,UAfC,EACT,aAAa,GAcX,MAAM,cAdK,EACb,QAAQ,GAaN,MAAM,SAbA,EACR,IAAI,GAYF,MAAM,KAZJ,EACJ,QAAQ,GAWN,MAAM,SAXA,EACR,MAAM,GAUJ,MAAM,OAVF,EACN,KAAK,GASH,MAAM,MATH,EACL,OAAO,GAQL,MAAM,QARD,EACP,WAAW,GAOT,MAAM,YAPG,EACX,QAAQ,GAMN,MAAM,SANA,EACR,SAAS,GAKP,MAAM,UALC,EACT,YAAY,GAIV,MAAM,aAJI,EACZ,YAAY,GAGV,MAAM,aAHI,EACZ,SAAS,GAEP,MAAM,UAFC,EACT,KAAK,GACH,MAAM,MADH,CACI;AACX,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAWL,iBAAiB,IAAI,qBAAqB,EAC1C,gBAAgB,IAAI,oBAAoB,EAGxC,eAAe,IAAI,mBAAmB,EAEtC,QAAQ,IAAI,YAAY,EAUxB,eAAe,IAAI,mBAAmB,EAItC,8BAA8B,IAAI,mCAAmC,EACrE,6BAA6B,IAAI,kCAAkC,EACnE,8BAA8B,IAAI,mCAAmC,GACtE,MAAM,2BAA2B,CAAC;AAUnC,wFAAwF;AACxF,iGAAiG;AACjG,2DAA2D;AAC3D,MAAM,KAAW,KAAK,CAuCrB;AAvCD,WAAiB,KAAK;IAgBP,uBAAiB,GAAG,qBAAqB,CAAC;IAC1C,sBAAgB,GAAG,oBAAoB,CAAC;IAGxC,qBAAe,GAAG,mBAAmB,CAAC;IAEtC,cAAQ,GAAG,YAAY,CAAC;IAUxB,qBAAe,GAAG,mBAAmB,CAAC;IAItC,oCAA8B,GAAG,mCAAmC,CAAC;IACrE,mCAA6B,GAAG,kCAAkC,CAAC;IACnE,oCAA8B,GAAG,mCAAmC,CAAC;AACpF,CAAC,EAvCgB,KAAK,KAAL,KAAK,QAuCrB","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 getSessionId,\n getUserId,\n groupIdentify,\n identify,\n init,\n logEvent,\n remove,\n reset,\n revenue,\n setDeviceId,\n setGroup,\n setOptOut,\n setSessionId,\n setTransport,\n setUserId,\n track,\n} = client;\nexport { runQueuedFunctions } from './utils/snippet-helper';\nexport { Revenue, Identify } from '@amplitude/analytics-core';\n\nimport {\n AmplitudeReturn as AmplitudeReturnType,\n BaseEvent as BaseEventType,\n EventOptions as EventOptionsType,\n BrowserClient as BrowserClientType,\n AttributionOptions as AttributionOptionsType,\n AutocaptureOptions as AutocaptureOptionsType,\n BrowserOptions as BrowserOptionsType,\n BrowserConfig as BrowserConfigType,\n IConfig as IConfigType,\n Event as EventType,\n IdentifyOperation as IdentifyOperationType,\n SpecialEventType as SpecialEventTypeType,\n IIdentify as IIdentifyType,\n IRevenue as IRevenueType,\n RevenueProperty as RevenuePropertyType,\n ILogger as ILoggerType,\n LogLevel as LogLevelType,\n Plugin as PluginType,\n BeforePlugin as BeforePluginType,\n EnrichmentPlugin as EnrichmentPluginType,\n DestinationPlugin as DestinationPluginType,\n Result as ResultType,\n ServerZoneType as ServerZoneTypeType,\n IdentityStorageType as IdentityStorageTypeType,\n Storage as StorageTypeType,\n TransportType as TransportTypeType,\n OfflineDisabled as OfflineDisabledType,\n Messenger as MessengerType,\n ElementInteractionsOptions as ElementInteractionsOptionsType,\n ActionType as ActionTypeType,\n DEFAULT_CSS_SELECTOR_ALLOWLIST as DEFAULT_CSS_SELECTOR_ALLOWLIST_TYPE,\n DEFAULT_DATA_ATTRIBUTE_PREFIX as DEFAULT_DATA_ATTRIBUTE_PREFIX_TYPE,\n DEFAULT_ACTION_CLICK_ALLOWLIST as DEFAULT_ACTION_CLICK_ALLOWLIST_TYPE,\n} from '@amplitude/analytics-core';\n\nimport {\n Campaign as CampaignType,\n CampaignParser as CampaignParserType,\n ClickIdParameters as ClickIdParametersType,\n ReferrerParameters as ReferrerParametersType,\n UTMParameters as UTMParametersType,\n} from './attribution/campaign';\n\n// Export the following 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.\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace Types {\n export type AmplitudeReturn<T> = AmplitudeReturnType<T>;\n export type BaseEvent = BaseEventType;\n export type EventOptions = EventOptionsType;\n export type Campaign = CampaignType;\n export type CampaignParser = CampaignParserType;\n export type ClickIdParameters = ClickIdParametersType;\n export type ReferrerParameters = ReferrerParametersType;\n export type UTMParameters = UTMParametersType;\n export type BrowserClient = BrowserClientType;\n export type AttributionOptions = AttributionOptionsType;\n export type AutocaptureOptions = AutocaptureOptionsType;\n export type BrowserConfig = BrowserConfigType;\n export type BrowserOptions = BrowserOptionsType;\n export type Config = IConfigType;\n export type Event = EventType;\n export const IdentifyOperation = IdentifyOperationType;\n export const SpecialEventType = SpecialEventTypeType;\n export type Identify = IIdentifyType;\n export type Revenue = IRevenueType;\n export const RevenueProperty = RevenuePropertyType;\n export type Logger = ILoggerType;\n export const LogLevel = LogLevelType;\n export type Plugin = PluginType;\n export type BeforePlugin = BeforePluginType;\n export type EnrichmentPlugin = EnrichmentPluginType;\n export type DestinationPlugin = DestinationPluginType;\n export type Result = ResultType;\n export type ServerZoneType = ServerZoneTypeType;\n export type IdentityStorageType = IdentityStorageTypeType;\n export type Storage<T> = StorageTypeType<T>;\n export type TransportType = TransportTypeType;\n export const OfflineDisabled = OfflineDisabledType;\n export type Messenger = MessengerType;\n export type ElementInteractionsOptions = ElementInteractionsOptionsType;\n export type ActionType = ActionTypeType;\n export const DEFAULT_CSS_SELECTOR_ALLOWLIST = DEFAULT_CSS_SELECTOR_ALLOWLIST_TYPE;\n export const DEFAULT_DATA_ATTRIBUTE_PREFIX = DEFAULT_DATA_ATTRIBUTE_PREFIX_TYPE;\n export const DEFAULT_ACTION_CLICK_ALLOWLIST = DEFAULT_ACTION_CLICK_ALLOWLIST_TYPE;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-download-tracking.d.ts","sourceRoot":"","sources":["../../../src/plugins/file-download-tracking.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,gBAAgB,EAAiB,MAAM,2BAA2B,CAAC;AAQnG,eAAO,MAAM,oBAAoB,QAAO,
|
|
1
|
+
{"version":3,"file":"file-download-tracking.d.ts","sourceRoot":"","sources":["../../../src/plugins/file-download-tracking.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,gBAAgB,EAAiB,MAAM,2BAA2B,CAAC;AAQnG,eAAO,MAAM,oBAAoB,QAAO,gBA4HvC,CAAC"}
|
|
@@ -23,13 +23,9 @@ export var fileDownloadTracking = function () {
|
|
|
23
23
|
var name = '@amplitude/plugin-file-download-tracking-browser';
|
|
24
24
|
var type = 'enrichment';
|
|
25
25
|
var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {
|
|
26
|
-
var
|
|
27
|
-
return __generator(this, function (
|
|
28
|
-
|
|
29
|
-
// after the body is built. When Amplitud gets initialized in a script tag, the body tag is still unavailable. So register this
|
|
30
|
-
// only after the window is loaded
|
|
31
|
-
/* istanbul ignore next */
|
|
32
|
-
(_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.addEventListener('load', function () {
|
|
26
|
+
var initializeFileDownloadTracking, window_1;
|
|
27
|
+
return __generator(this, function (_a) {
|
|
28
|
+
initializeFileDownloadTracking = function () {
|
|
33
29
|
/* istanbul ignore if */
|
|
34
30
|
if (!amplitude) {
|
|
35
31
|
// TODO: Add required minimum version of @amplitude/analytics-browser
|
|
@@ -91,7 +87,22 @@ export var fileDownloadTracking = function () {
|
|
|
91
87
|
childList: true,
|
|
92
88
|
});
|
|
93
89
|
}
|
|
94
|
-
}
|
|
90
|
+
};
|
|
91
|
+
// If the document is already loaded, initialize immediately.
|
|
92
|
+
/* istanbul ignore else*/
|
|
93
|
+
if (document.readyState === 'complete') {
|
|
94
|
+
initializeFileDownloadTracking();
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
window_1 = getGlobalScope();
|
|
98
|
+
/* istanbul ignore else*/
|
|
99
|
+
if (window_1) {
|
|
100
|
+
window_1.addEventListener('load', initializeFileDownloadTracking);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
config.loggerProvider.debug('File download tracking is not installed because global is undefined.');
|
|
104
|
+
}
|
|
105
|
+
}
|
|
95
106
|
return [2 /*return*/];
|
|
96
107
|
});
|
|
97
108
|
}); };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-download-tracking.js","sourceRoot":"","sources":["../../../src/plugins/file-download-tracking.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,2BAA2B,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEpH,OAAO,EAAE,cAAc,EAA0C,MAAM,2BAA2B,CAAC;AAQnG,MAAM,CAAC,IAAM,oBAAoB,GAAG;IAClC,IAAI,QAAsC,CAAC;IAC3C,IAAI,cAAc,GAAoB,EAAE,CAAC;IACzC,IAAM,gBAAgB,GAAG,UAAC,OAAgB,EAAE,IAAa,EAAE,OAAmB;QAC5E,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;IACF,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,IAAM,IAAI,GAAG,kDAAkD,CAAC;IAChE,IAAM,IAAI,GAAG,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"file-download-tracking.js","sourceRoot":"","sources":["../../../src/plugins/file-download-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import { DEFAULT_FILE_DOWNLOAD_EVENT, FILE_EXTENSION, FILE_NAME, LINK_ID, LINK_TEXT, LINK_URL } from '../constants';\nimport { BrowserConfig } from '../config';\nimport { getGlobalScope, Event, EnrichmentPlugin, BrowserClient } from '@amplitude/analytics-core';\n\ninterface EventListener {\n element: Element;\n type: 'click';\n handler: () => void;\n}\n\nexport const fileDownloadTracking = (): EnrichmentPlugin => {\n let observer: MutationObserver | undefined;\n let eventListeners: EventListener[] = [];\n const addEventListener = (element: Element, type: 'click', handler: () => void) => {\n element.addEventListener(type, handler);\n eventListeners.push({\n element,\n type,\n handler,\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 const name = '@amplitude/plugin-file-download-tracking-browser';\n const type = 'enrichment';\n\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\n const initializeFileDownloadTracking = () => {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn(\n 'File download tracking requires a later version of @amplitude/analytics-browser. File download events are not tracked.',\n );\n return;\n }\n\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n const addFileDownloadListener = (a: HTMLAnchorElement) => {\n let url: URL;\n try {\n // eslint-disable-next-line no-restricted-globals\n url = new URL(a.href, window.location.href);\n } catch {\n /* istanbul ignore next */\n return;\n }\n const result = ext.exec(url.href);\n const fileExtension = result?.[1];\n\n if (fileExtension) {\n addEventListener(a, 'click', () => {\n if (fileExtension) {\n amplitude.track(DEFAULT_FILE_DOWNLOAD_EVENT, {\n [FILE_EXTENSION]: fileExtension,\n [FILE_NAME]: url.pathname,\n [LINK_ID]: a.id,\n [LINK_TEXT]: a.text,\n [LINK_URL]: a.href,\n });\n }\n });\n }\n };\n\n const ext =\n /\\.(pdf|xlsx?|docx?|txt|rtf|csv|exe|key|pp(s|t|tx)|7z|pkg|rar|gz|zip|avi|mov|mp4|mpe?g|wmv|midi?|mp3|wav|wma)(\\?.+)?$/;\n\n // Adds listener to existing anchor tags\n const links = Array.from(document.getElementsByTagName('a'));\n links.forEach(addFileDownloadListener);\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 === 'A') {\n addFileDownloadListener(node as HTMLAnchorElement);\n }\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n Array.from(node.querySelectorAll('a') as HTMLAnchorElement[]).map(addFileDownloadListener);\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 /* istanbul ignore else*/\n if (document.readyState === 'complete') {\n initializeFileDownloadTracking();\n } else {\n // Otherwise, wait for the load event.\n const window = getGlobalScope();\n /* istanbul ignore else*/\n if (window) {\n window.addEventListener('load', initializeFileDownloadTracking);\n } else {\n config.loggerProvider.debug('File download tracking is not installed because global is undefined.');\n }\n }\n };\n\n const execute = async (event: Event) => 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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-interaction-tracking.d.ts","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":"AAQA,OAAO,EAAyB,gBAAgB,EAAiB,MAAM,2BAA2B,CAAC;AAQnG,eAAO,MAAM,uBAAuB,QAAO,
|
|
1
|
+
{"version":3,"file":"form-interaction-tracking.d.ts","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":"AAQA,OAAO,EAAyB,gBAAgB,EAAiB,MAAM,2BAA2B,CAAC;AAQnG,eAAO,MAAM,uBAAuB,QAAO,gBAkI1C,CAAC;AAEF,eAAO,MAAM,iBAAiB,uDAU7B,CAAC;AAGF,eAAO,MAAM,iBAAiB,SAAU,eAAe,KAAG,MAAM,GAAG,IASlE,CAAC"}
|
|
@@ -23,13 +23,9 @@ export var formInteractionTracking = function () {
|
|
|
23
23
|
var name = '@amplitude/plugin-form-interaction-tracking-browser';
|
|
24
24
|
var type = 'enrichment';
|
|
25
25
|
var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {
|
|
26
|
-
var
|
|
27
|
-
return __generator(this, function (
|
|
28
|
-
|
|
29
|
-
// after the body is built. When Amplitud gets initialized in a script tag, the body tag is still unavailable. So register this
|
|
30
|
-
// only after the window is loaded
|
|
31
|
-
/* istanbul ignore next */
|
|
32
|
-
(_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.addEventListener('load', function () {
|
|
26
|
+
var initializeFormTracking, window_1;
|
|
27
|
+
return __generator(this, function (_a) {
|
|
28
|
+
initializeFormTracking = function () {
|
|
33
29
|
/* istanbul ignore if */
|
|
34
30
|
if (!amplitude) {
|
|
35
31
|
// TODO: Add required minimum version of @amplitude/analytics-browser
|
|
@@ -95,7 +91,21 @@ export var formInteractionTracking = function () {
|
|
|
95
91
|
childList: true,
|
|
96
92
|
});
|
|
97
93
|
}
|
|
98
|
-
}
|
|
94
|
+
};
|
|
95
|
+
// If the document is already loaded, initialize immediately.
|
|
96
|
+
if (document.readyState === 'complete') {
|
|
97
|
+
initializeFormTracking();
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
window_1 = getGlobalScope();
|
|
101
|
+
/* istanbul ignore else*/
|
|
102
|
+
if (window_1) {
|
|
103
|
+
window_1.addEventListener('load', initializeFormTracking);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
config.loggerProvider.debug('Form interaction tracking is not installed because global is undefined.');
|
|
107
|
+
}
|
|
108
|
+
}
|
|
99
109
|
return [2 /*return*/];
|
|
100
110
|
});
|
|
101
111
|
}); };
|
|
@@ -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 { getGlobalScope, Event, EnrichmentPlugin, BrowserClient } from '@amplitude/analytics-core';\n\ninterface EventListener {\n element: Element;\n type: 'change' | 'submit';\n handler: () => 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: () => 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 const name = '@amplitude/plugin-form-interaction-tracking-browser';\n const type = 'enrichment';\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\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 Amplitud gets initialized in a script tag, the body tag is still unavailable. So register this\n // only after the window is loaded\n /* istanbul ignore next */\n getGlobalScope()?.addEventListener('load', function () {\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', () => {\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\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 const execute = async (event: Event) => 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,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,OAAO,EACP,SAAS,EACT,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAA0C,MAAM,2BAA2B,CAAC;AAQnG,MAAM,CAAC,IAAM,uBAAuB,GAAG;IACrC,IAAI,QAAsC,CAAC;IAC3C,IAAI,cAAc,GAAoB,EAAE,CAAC;IAEzC,IAAM,gBAAgB,GAAG,UAAC,OAAgB,EAAE,IAAyB,EAAE,OAAmB;QACxF,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,IAAM,IAAI,GAAG,qDAAqD,CAAC;IACnE,IAAM,IAAI,GAAG,YAAY,CAAC;IAC1B,IAAM,KAAK,GAAG,UAAO,MAAqB,EAAE,SAAwB;;;YAC5D,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,0BAA0B,GAAG,UAAC,IAAqB;oBACvD,IAAI,cAAc,GAAG,KAAK,CAAC;oBAE3B,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE;;wBAC/B,IAAM,eAAe,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;wBAChD,IAAI,CAAC,cAAc,EAAE;4BACnB,SAAS,CAAC,KAAK,CAAC,wBAAwB;gCACtC,GAAC,OAAO,IAAG,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;gCACrC,GAAC,SAAS,IAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;gCACzC,GAAC,gBAAgB,IAAG,eAAe;oCACnC,CAAC;yBACJ;wBACD,cAAc,GAAG,IAAI,CAAC;oBACxB,CAAC,CAAC,CAAC;oBAEH,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE;;wBAC/B,IAAM,eAAe,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;wBAChD,IAAI,CAAC,cAAc,EAAE;4BACnB,SAAS,CAAC,KAAK,CAAC,wBAAwB;gCACtC,GAAC,OAAO,IAAG,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;gCACrC,GAAC,SAAS,IAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;gCACzC,GAAC,gBAAgB,IAAG,eAAe;oCACnC,CAAC;yBACJ;wBAED,SAAS,CAAC,KAAK,CAAC,yBAAyB;4BACvC,GAAC,OAAO,IAAG,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;4BACrC,GAAC,SAAS,IAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;4BACzC,GAAC,gBAAgB,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,cAAc,EAAE,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,KAAY;QAAK,sBAAA,KAAK,EAAA;aAAA,CAAC;IAC9C,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;AAEF,MAAM,CAAC,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;AAEF,oJAAoJ;AACpJ,MAAM,CAAC,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","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 { getGlobalScope, Event, EnrichmentPlugin, BrowserClient } from '@amplitude/analytics-core';\n\ninterface EventListener {\n element: Element;\n type: 'change' | 'submit';\n handler: () => 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: () => 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 const name = '@amplitude/plugin-form-interaction-tracking-browser';\n const type = 'enrichment';\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\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', () => {\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\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: Event) => 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"]}
|
package/lib/esm/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "2.12.
|
|
1
|
+
export declare const VERSION = "2.12.2";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|