@amplitude/analytics-react-native 0.0.1-dev.6 → 0.0.1-dev.7

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 (107) hide show
  1. package/README.md +150 -0
  2. package/android/src/main/java/com/amplitude/reactnative/AmplitudeReactNativeModule.kt +5 -5
  3. package/ios/AmplitudeReactNative.swift +4 -4
  4. package/lib/commonjs/attribution/campaign-tracker.js +1 -1
  5. package/lib/commonjs/attribution/campaign-tracker.js.map +1 -1
  6. package/lib/commonjs/config.js +2 -22
  7. package/lib/commonjs/config.js.map +1 -1
  8. package/lib/commonjs/index.js +2 -16
  9. package/lib/commonjs/index.js.map +1 -1
  10. package/lib/commonjs/plugins/context.js +4 -4
  11. package/lib/commonjs/plugins/context.js.map +1 -1
  12. package/lib/commonjs/plugins/identity.js +40 -0
  13. package/lib/commonjs/plugins/identity.js.map +1 -0
  14. package/lib/commonjs/react-native-client.js +23 -57
  15. package/lib/commonjs/react-native-client.js.map +1 -1
  16. package/lib/commonjs/storage/cookie.js +1 -6
  17. package/lib/commonjs/storage/cookie.js.map +1 -1
  18. package/lib/commonjs/utils/analytics-connector.js +15 -0
  19. package/lib/commonjs/utils/analytics-connector.js.map +1 -0
  20. package/lib/commonjs/utils/query-params.js +1 -6
  21. package/lib/commonjs/utils/query-params.js.map +1 -1
  22. package/lib/commonjs/version.js +1 -1
  23. package/lib/commonjs/version.js.map +1 -1
  24. package/lib/module/attribution/campaign-tracker.js +1 -1
  25. package/lib/module/attribution/campaign-tracker.js.map +1 -1
  26. package/lib/module/config.js +1 -15
  27. package/lib/module/config.js.map +1 -1
  28. package/lib/module/index.js +3 -4
  29. package/lib/module/index.js.map +1 -1
  30. package/lib/module/plugins/context.js +4 -4
  31. package/lib/module/plugins/context.js.map +1 -1
  32. package/lib/module/plugins/identity.js +29 -0
  33. package/lib/module/plugins/identity.js.map +1 -0
  34. package/lib/module/react-native-client.js +21 -55
  35. package/lib/module/react-native-client.js.map +1 -1
  36. package/lib/module/storage/cookie.js +1 -6
  37. package/lib/module/storage/cookie.js.map +1 -1
  38. package/lib/module/utils/analytics-connector.js +5 -0
  39. package/lib/module/utils/analytics-connector.js.map +1 -0
  40. package/lib/module/utils/query-params.js +1 -6
  41. package/lib/module/utils/query-params.js.map +1 -1
  42. package/lib/module/version.js +1 -1
  43. package/lib/module/version.js.map +1 -1
  44. package/lib/typescript/config.d.ts +1 -4
  45. package/lib/typescript/config.d.ts.map +1 -1
  46. package/lib/typescript/index.d.ts +2 -4
  47. package/lib/typescript/index.d.ts.map +1 -1
  48. package/lib/typescript/plugins/context.d.ts +5 -5
  49. package/lib/typescript/plugins/context.d.ts.map +1 -1
  50. package/lib/typescript/plugins/identity.d.ts +9 -0
  51. package/lib/typescript/plugins/identity.d.ts.map +1 -0
  52. package/lib/typescript/react-native-client.d.ts +7 -26
  53. package/lib/typescript/react-native-client.d.ts.map +1 -1
  54. package/lib/typescript/storage/cookie.d.ts.map +1 -1
  55. package/lib/typescript/utils/analytics-connector.d.ts +3 -0
  56. package/lib/typescript/utils/analytics-connector.d.ts.map +1 -0
  57. package/lib/typescript/utils/query-params.d.ts.map +1 -1
  58. package/lib/typescript/version.d.ts +1 -1
  59. package/package.json +1 -2
  60. package/lib/commonjs/constants.js +0 -31
  61. package/lib/commonjs/constants.js.map +0 -1
  62. package/lib/commonjs/transports/send-beacon.js +0 -43
  63. package/lib/commonjs/transports/send-beacon.js.map +0 -1
  64. package/lib/commonjs/transports/xhr.js +0 -54
  65. package/lib/commonjs/transports/xhr.js.map +0 -1
  66. package/lib/commonjs/utils/snippet-helper.js +0 -56
  67. package/lib/commonjs/utils/snippet-helper.js.map +0 -1
  68. package/lib/module/constants.js +0 -13
  69. package/lib/module/constants.js.map +0 -1
  70. package/lib/module/transports/send-beacon.js +0 -33
  71. package/lib/module/transports/send-beacon.js.map +0 -1
  72. package/lib/module/transports/xhr.js +0 -44
  73. package/lib/module/transports/xhr.js.map +0 -1
  74. package/lib/module/utils/snippet-helper.js +0 -41
  75. package/lib/module/utils/snippet-helper.js.map +0 -1
  76. package/lib/typescript/constants.d.ts +0 -13
  77. package/lib/typescript/constants.d.ts.map +0 -1
  78. package/lib/typescript/transports/send-beacon.d.ts +0 -6
  79. package/lib/typescript/transports/send-beacon.d.ts.map +0 -1
  80. package/lib/typescript/transports/xhr.d.ts +0 -7
  81. package/lib/typescript/transports/xhr.d.ts.map +0 -1
  82. package/lib/typescript/utils/snippet-helper.d.ts +0 -16
  83. package/lib/typescript/utils/snippet-helper.d.ts.map +0 -1
  84. package/src/attribution/campaign-parser.ts +0 -78
  85. package/src/attribution/campaign-tracker.ts +0 -112
  86. package/src/attribution/constants.ts +0 -32
  87. package/src/config.ts +0 -240
  88. package/src/constants.ts +0 -14
  89. package/src/cookie-migration/index.ts +0 -54
  90. package/src/index.ts +0 -24
  91. package/src/plugins/context.ts +0 -106
  92. package/src/react-native-client.ts +0 -366
  93. package/src/session-manager.ts +0 -81
  94. package/src/storage/cookie.ts +0 -100
  95. package/src/storage/local-storage.ts +0 -67
  96. package/src/storage/utm-cookie.ts +0 -27
  97. package/src/transports/fetch.ts +0 -23
  98. package/src/transports/send-beacon.ts +0 -34
  99. package/src/transports/xhr.ts +0 -36
  100. package/src/typings/browser-snippet.d.ts +0 -7
  101. package/src/typings/ua-parser.d.ts +0 -4
  102. package/src/utils/cookie-name.ts +0 -9
  103. package/src/utils/language.ts +0 -7
  104. package/src/utils/platform.ts +0 -9
  105. package/src/utils/query-params.ts +0 -21
  106. package/src/utils/snippet-helper.ts +0 -35
  107. package/src/version.ts +0 -1
@@ -1,43 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.SendBeaconTransport = void 0;
7
-
8
- var _analyticsCore = require("@amplitude/analytics-core");
9
-
10
- class SendBeaconTransport extends _analyticsCore.BaseTransport {
11
- async send(serverUrl, payload) {
12
- return new Promise((resolve, reject) => {
13
- /* istanbul ignore if */
14
- if (typeof window === 'undefined' || typeof window.navigator === 'undefined' || typeof window.navigator.sendBeacon === 'undefined') {
15
- throw new Error('SendBeaconTransport is not supported');
16
- }
17
-
18
- try {
19
- const data = JSON.stringify(payload);
20
- const success = window.navigator.sendBeacon(serverUrl, JSON.stringify(payload));
21
-
22
- if (success) {
23
- return resolve(this.buildResponse({
24
- code: 200,
25
- events_ingested: payload.events.length,
26
- payload_size_bytes: data.length,
27
- server_upload_time: Date.now()
28
- }));
29
- }
30
-
31
- return resolve(this.buildResponse({
32
- code: 500
33
- }));
34
- } catch (e) {
35
- reject(e);
36
- }
37
- });
38
- }
39
-
40
- }
41
-
42
- exports.SendBeaconTransport = SendBeaconTransport;
43
- //# sourceMappingURL=send-beacon.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["SendBeaconTransport","BaseTransport","send","serverUrl","payload","Promise","resolve","reject","window","navigator","sendBeacon","Error","data","JSON","stringify","success","buildResponse","code","events_ingested","events","length","payload_size_bytes","server_upload_time","Date","now","e"],"sources":["send-beacon.ts"],"sourcesContent":["import { BaseTransport } from '@amplitude/analytics-core';\nimport { Payload, Response, Transport } from '@amplitude/analytics-types';\n\nexport class SendBeaconTransport extends BaseTransport implements Transport {\n async send(serverUrl: string, payload: Payload): Promise<Response | null> {\n return new Promise((resolve, reject) => {\n /* istanbul ignore if */\n if (\n typeof window === 'undefined' ||\n typeof window.navigator === 'undefined' ||\n typeof window.navigator.sendBeacon === 'undefined'\n ) {\n throw new Error('SendBeaconTransport is not supported');\n }\n try {\n const data = JSON.stringify(payload);\n const success = window.navigator.sendBeacon(serverUrl, JSON.stringify(payload));\n if (success) {\n return resolve(\n this.buildResponse({\n code: 200,\n events_ingested: payload.events.length,\n payload_size_bytes: data.length,\n server_upload_time: Date.now(),\n }),\n );\n }\n return resolve(this.buildResponse({ code: 500 }));\n } catch (e) {\n reject(e);\n }\n });\n }\n}\n"],"mappings":";;;;;;;AAAA;;AAGO,MAAMA,mBAAN,SAAkCC,4BAAlC,CAAqE;EAChE,MAAJC,IAAI,CAACC,SAAD,EAAoBC,OAApB,EAAgE;IACxE,OAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;MACtC;MACA,IACE,OAAOC,MAAP,KAAkB,WAAlB,IACA,OAAOA,MAAM,CAACC,SAAd,KAA4B,WAD5B,IAEA,OAAOD,MAAM,CAACC,SAAP,CAAiBC,UAAxB,KAAuC,WAHzC,EAIE;QACA,MAAM,IAAIC,KAAJ,CAAU,sCAAV,CAAN;MACD;;MACD,IAAI;QACF,MAAMC,IAAI,GAAGC,IAAI,CAACC,SAAL,CAAeV,OAAf,CAAb;QACA,MAAMW,OAAO,GAAGP,MAAM,CAACC,SAAP,CAAiBC,UAAjB,CAA4BP,SAA5B,EAAuCU,IAAI,CAACC,SAAL,CAAeV,OAAf,CAAvC,CAAhB;;QACA,IAAIW,OAAJ,EAAa;UACX,OAAOT,OAAO,CACZ,KAAKU,aAAL,CAAmB;YACjBC,IAAI,EAAE,GADW;YAEjBC,eAAe,EAAEd,OAAO,CAACe,MAAR,CAAeC,MAFf;YAGjBC,kBAAkB,EAAET,IAAI,CAACQ,MAHR;YAIjBE,kBAAkB,EAAEC,IAAI,CAACC,GAAL;UAJH,CAAnB,CADY,CAAd;QAQD;;QACD,OAAOlB,OAAO,CAAC,KAAKU,aAAL,CAAmB;UAAEC,IAAI,EAAE;QAAR,CAAnB,CAAD,CAAd;MACD,CAdD,CAcE,OAAOQ,CAAP,EAAU;QACVlB,MAAM,CAACkB,CAAD,CAAN;MACD;IACF,CA1BM,CAAP;EA2BD;;AA7ByE"}
@@ -1,54 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.XHRTransport = void 0;
7
-
8
- var _analyticsCore = require("@amplitude/analytics-core");
9
-
10
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
11
-
12
- class XHRTransport extends _analyticsCore.BaseTransport {
13
- constructor() {
14
- super(...arguments);
15
-
16
- _defineProperty(this, "state", {
17
- done: 4
18
- });
19
- }
20
-
21
- async send(serverUrl, payload) {
22
- return new Promise((resolve, reject) => {
23
- /* istanbul ignore if */
24
- if (typeof XMLHttpRequest === 'undefined') {
25
- reject(new Error('XHRTransport is not supported.'));
26
- }
27
-
28
- const xhr = new XMLHttpRequest();
29
- xhr.open('POST', serverUrl, true);
30
-
31
- xhr.onreadystatechange = () => {
32
- if (xhr.readyState === this.state.done) {
33
- try {
34
- const responsePayload = xhr.responseText; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
35
-
36
- const parsedResponsePayload = JSON.parse(responsePayload);
37
- const result = this.buildResponse(parsedResponsePayload);
38
- resolve(result);
39
- } catch (e) {
40
- reject(e);
41
- }
42
- }
43
- };
44
-
45
- xhr.setRequestHeader('Content-Type', 'application/json');
46
- xhr.setRequestHeader('Accept', '*/*');
47
- xhr.send(JSON.stringify(payload));
48
- });
49
- }
50
-
51
- }
52
-
53
- exports.XHRTransport = XHRTransport;
54
- //# sourceMappingURL=xhr.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["XHRTransport","BaseTransport","done","send","serverUrl","payload","Promise","resolve","reject","XMLHttpRequest","Error","xhr","open","onreadystatechange","readyState","state","responsePayload","responseText","parsedResponsePayload","JSON","parse","result","buildResponse","e","setRequestHeader","stringify"],"sources":["xhr.ts"],"sourcesContent":["import { BaseTransport } from '@amplitude/analytics-core';\nimport { Payload, Response, Transport } from '@amplitude/analytics-types';\n\nexport class XHRTransport extends BaseTransport implements Transport {\n private state = {\n done: 4,\n };\n\n async send(serverUrl: string, payload: Payload): Promise<Response | null> {\n return new Promise((resolve, reject) => {\n /* istanbul ignore if */\n if (typeof XMLHttpRequest === 'undefined') {\n reject(new Error('XHRTransport is not supported.'));\n }\n\n const xhr = new XMLHttpRequest();\n xhr.open('POST', serverUrl, true);\n xhr.onreadystatechange = () => {\n if (xhr.readyState === this.state.done) {\n try {\n const responsePayload = xhr.responseText;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const parsedResponsePayload: Record<string, any> = JSON.parse(responsePayload);\n const result = this.buildResponse(parsedResponsePayload);\n resolve(result);\n } catch (e) {\n reject(e);\n }\n }\n };\n xhr.setRequestHeader('Content-Type', 'application/json');\n xhr.setRequestHeader('Accept', '*/*');\n xhr.send(JSON.stringify(payload));\n });\n }\n}\n"],"mappings":";;;;;;;AAAA;;;;AAGO,MAAMA,YAAN,SAA2BC,4BAA3B,CAA8D;EAAA;IAAA;;IAAA,+BACnD;MACdC,IAAI,EAAE;IADQ,CADmD;EAAA;;EAKzD,MAAJC,IAAI,CAACC,SAAD,EAAoBC,OAApB,EAAgE;IACxE,OAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;MACtC;MACA,IAAI,OAAOC,cAAP,KAA0B,WAA9B,EAA2C;QACzCD,MAAM,CAAC,IAAIE,KAAJ,CAAU,gCAAV,CAAD,CAAN;MACD;;MAED,MAAMC,GAAG,GAAG,IAAIF,cAAJ,EAAZ;MACAE,GAAG,CAACC,IAAJ,CAAS,MAAT,EAAiBR,SAAjB,EAA4B,IAA5B;;MACAO,GAAG,CAACE,kBAAJ,GAAyB,MAAM;QAC7B,IAAIF,GAAG,CAACG,UAAJ,KAAmB,KAAKC,KAAL,CAAWb,IAAlC,EAAwC;UACtC,IAAI;YACF,MAAMc,eAAe,GAAGL,GAAG,CAACM,YAA5B,CADE,CAEF;;YACA,MAAMC,qBAA0C,GAAGC,IAAI,CAACC,KAAL,CAAWJ,eAAX,CAAnD;YACA,MAAMK,MAAM,GAAG,KAAKC,aAAL,CAAmBJ,qBAAnB,CAAf;YACAX,OAAO,CAACc,MAAD,CAAP;UACD,CAND,CAME,OAAOE,CAAP,EAAU;YACVf,MAAM,CAACe,CAAD,CAAN;UACD;QACF;MACF,CAZD;;MAaAZ,GAAG,CAACa,gBAAJ,CAAqB,cAArB,EAAqC,kBAArC;MACAb,GAAG,CAACa,gBAAJ,CAAqB,QAArB,EAA+B,KAA/B;MACAb,GAAG,CAACR,IAAJ,CAASgB,IAAI,CAACM,SAAL,CAAepB,OAAf,CAAT;IACD,CAxBM,CAAP;EAyBD;;AA/BkE"}
@@ -1,56 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.runQueuedFunctions = exports.isInstanceProxy = exports.convertProxyObjectToRealObject = void 0;
7
-
8
- /**
9
- * Applies the proxied functions on the proxied amplitude snippet to an instance of the real object.
10
- * @ignore
11
- */
12
- const runQueuedFunctions = (instance, queue) => {
13
- convertProxyObjectToRealObject(instance, queue);
14
- };
15
- /**
16
- * Applies the proxied functions on the proxied object to an instance of the real object.
17
- * Used to convert proxied Identify and Revenue objects.
18
- */
19
-
20
-
21
- exports.runQueuedFunctions = runQueuedFunctions;
22
-
23
- const convertProxyObjectToRealObject = (instance, queue) => {
24
- for (let i = 0; i < queue.length; i++) {
25
- const {
26
- name,
27
- args,
28
- resolve
29
- } = queue[i];
30
- const fn = instance && instance[name];
31
-
32
- if (typeof fn === 'function') {
33
- const result = fn.apply(instance, args);
34
-
35
- if (typeof resolve === 'function') {
36
- resolve(result === null || result === void 0 ? void 0 : result.promise);
37
- }
38
- }
39
- }
40
-
41
- return instance;
42
- };
43
- /**
44
- * Check if the param is snippet proxy
45
- */
46
-
47
-
48
- exports.convertProxyObjectToRealObject = convertProxyObjectToRealObject;
49
-
50
- const isInstanceProxy = instance => {
51
- const instanceProxy = instance;
52
- return instanceProxy && instanceProxy._q !== undefined;
53
- };
54
-
55
- exports.isInstanceProxy = isInstanceProxy;
56
- //# sourceMappingURL=snippet-helper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["runQueuedFunctions","instance","queue","convertProxyObjectToRealObject","i","length","name","args","resolve","fn","result","apply","promise","isInstanceProxy","instanceProxy","_q","undefined"],"sources":["snippet-helper.ts"],"sourcesContent":["import { AmplitudeReturn, InstanceProxy, QueueProxy, Result } from '@amplitude/analytics-types';\n\n/**\n * Applies the proxied functions on the proxied amplitude snippet to an instance of the real object.\n * @ignore\n */\nexport const runQueuedFunctions = (instance: object, queue: QueueProxy) => {\n convertProxyObjectToRealObject(instance, queue);\n};\n\n/**\n * Applies the proxied functions on the proxied object to an instance of the real object.\n * Used to convert proxied Identify and Revenue objects.\n */\nexport const convertProxyObjectToRealObject = <T>(instance: T, queue: QueueProxy): T => {\n for (let i = 0; i < queue.length; i++) {\n const { name, args, resolve } = queue[i];\n const fn = instance && instance[name as keyof T];\n if (typeof fn === 'function') {\n const result = fn.apply(instance, args) as AmplitudeReturn<Promise<Result>>;\n if (typeof resolve === 'function') {\n resolve(result?.promise);\n }\n }\n }\n return instance;\n};\n\n/**\n * Check if the param is snippet proxy\n */\nexport const isInstanceProxy = (instance: unknown): instance is InstanceProxy => {\n const instanceProxy = instance as InstanceProxy;\n return instanceProxy && instanceProxy._q !== undefined;\n};\n"],"mappings":";;;;;;;AAEA;AACA;AACA;AACA;AACO,MAAMA,kBAAkB,GAAG,CAACC,QAAD,EAAmBC,KAAnB,KAAyC;EACzEC,8BAA8B,CAACF,QAAD,EAAWC,KAAX,CAA9B;AACD,CAFM;AAIP;AACA;AACA;AACA;;;;;AACO,MAAMC,8BAA8B,GAAG,CAAIF,QAAJ,EAAiBC,KAAjB,KAA0C;EACtF,KAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,KAAK,CAACG,MAA1B,EAAkCD,CAAC,EAAnC,EAAuC;IACrC,MAAM;MAAEE,IAAF;MAAQC,IAAR;MAAcC;IAAd,IAA0BN,KAAK,CAACE,CAAD,CAArC;IACA,MAAMK,EAAE,GAAGR,QAAQ,IAAIA,QAAQ,CAACK,IAAD,CAA/B;;IACA,IAAI,OAAOG,EAAP,KAAc,UAAlB,EAA8B;MAC5B,MAAMC,MAAM,GAAGD,EAAE,CAACE,KAAH,CAASV,QAAT,EAAmBM,IAAnB,CAAf;;MACA,IAAI,OAAOC,OAAP,KAAmB,UAAvB,EAAmC;QACjCA,OAAO,CAACE,MAAD,aAACA,MAAD,uBAACA,MAAM,CAAEE,OAAT,CAAP;MACD;IACF;EACF;;EACD,OAAOX,QAAP;AACD,CAZM;AAcP;AACA;AACA;;;;;AACO,MAAMY,eAAe,GAAIZ,QAAD,IAAkD;EAC/E,MAAMa,aAAa,GAAGb,QAAtB;EACA,OAAOa,aAAa,IAAIA,aAAa,CAACC,EAAd,KAAqBC,SAA7C;AACD,CAHM"}
@@ -1,13 +0,0 @@
1
- export const UTM_SOURCE = 'utm_source';
2
- export const UTM_MEDIUM = 'utm_medium';
3
- export const UTM_CAMPAIGN = 'utm_campaign';
4
- export const UTM_TERM = 'utm_term';
5
- export const UTM_CONTENT = 'utm_content';
6
- export const UTMZ_SOURCE = 'utmcsr';
7
- export const UTMZ_MEDIUM = 'utmcmd';
8
- export const UTMZ_CAMPAIGN = 'utmccn';
9
- export const UTMZ_TERM = 'utmctr';
10
- export const UTMZ_CONTENT = 'utmcct';
11
- export const GCLID = 'gclid';
12
- export const FBCLID = 'fbclid';
13
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["UTM_SOURCE","UTM_MEDIUM","UTM_CAMPAIGN","UTM_TERM","UTM_CONTENT","UTMZ_SOURCE","UTMZ_MEDIUM","UTMZ_CAMPAIGN","UTMZ_TERM","UTMZ_CONTENT","GCLID","FBCLID"],"sources":["constants.ts"],"sourcesContent":["export const UTM_SOURCE = 'utm_source';\nexport const UTM_MEDIUM = 'utm_medium';\nexport const UTM_CAMPAIGN = 'utm_campaign';\nexport const UTM_TERM = 'utm_term';\nexport const UTM_CONTENT = 'utm_content';\n\nexport const UTMZ_SOURCE = 'utmcsr';\nexport const UTMZ_MEDIUM = 'utmcmd';\nexport const UTMZ_CAMPAIGN = 'utmccn';\nexport const UTMZ_TERM = 'utmctr';\nexport const UTMZ_CONTENT = 'utmcct';\n\nexport const GCLID = 'gclid';\nexport const FBCLID = 'fbclid';\n"],"mappings":"AAAA,OAAO,MAAMA,UAAU,GAAG,YAAnB;AACP,OAAO,MAAMC,UAAU,GAAG,YAAnB;AACP,OAAO,MAAMC,YAAY,GAAG,cAArB;AACP,OAAO,MAAMC,QAAQ,GAAG,UAAjB;AACP,OAAO,MAAMC,WAAW,GAAG,aAApB;AAEP,OAAO,MAAMC,WAAW,GAAG,QAApB;AACP,OAAO,MAAMC,WAAW,GAAG,QAApB;AACP,OAAO,MAAMC,aAAa,GAAG,QAAtB;AACP,OAAO,MAAMC,SAAS,GAAG,QAAlB;AACP,OAAO,MAAMC,YAAY,GAAG,QAArB;AAEP,OAAO,MAAMC,KAAK,GAAG,OAAd;AACP,OAAO,MAAMC,MAAM,GAAG,QAAf"}
@@ -1,33 +0,0 @@
1
- import { BaseTransport } from '@amplitude/analytics-core';
2
- export class SendBeaconTransport extends BaseTransport {
3
- async send(serverUrl, payload) {
4
- return new Promise((resolve, reject) => {
5
- /* istanbul ignore if */
6
- if (typeof window === 'undefined' || typeof window.navigator === 'undefined' || typeof window.navigator.sendBeacon === 'undefined') {
7
- throw new Error('SendBeaconTransport is not supported');
8
- }
9
-
10
- try {
11
- const data = JSON.stringify(payload);
12
- const success = window.navigator.sendBeacon(serverUrl, JSON.stringify(payload));
13
-
14
- if (success) {
15
- return resolve(this.buildResponse({
16
- code: 200,
17
- events_ingested: payload.events.length,
18
- payload_size_bytes: data.length,
19
- server_upload_time: Date.now()
20
- }));
21
- }
22
-
23
- return resolve(this.buildResponse({
24
- code: 500
25
- }));
26
- } catch (e) {
27
- reject(e);
28
- }
29
- });
30
- }
31
-
32
- }
33
- //# sourceMappingURL=send-beacon.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["BaseTransport","SendBeaconTransport","send","serverUrl","payload","Promise","resolve","reject","window","navigator","sendBeacon","Error","data","JSON","stringify","success","buildResponse","code","events_ingested","events","length","payload_size_bytes","server_upload_time","Date","now","e"],"sources":["send-beacon.ts"],"sourcesContent":["import { BaseTransport } from '@amplitude/analytics-core';\nimport { Payload, Response, Transport } from '@amplitude/analytics-types';\n\nexport class SendBeaconTransport extends BaseTransport implements Transport {\n async send(serverUrl: string, payload: Payload): Promise<Response | null> {\n return new Promise((resolve, reject) => {\n /* istanbul ignore if */\n if (\n typeof window === 'undefined' ||\n typeof window.navigator === 'undefined' ||\n typeof window.navigator.sendBeacon === 'undefined'\n ) {\n throw new Error('SendBeaconTransport is not supported');\n }\n try {\n const data = JSON.stringify(payload);\n const success = window.navigator.sendBeacon(serverUrl, JSON.stringify(payload));\n if (success) {\n return resolve(\n this.buildResponse({\n code: 200,\n events_ingested: payload.events.length,\n payload_size_bytes: data.length,\n server_upload_time: Date.now(),\n }),\n );\n }\n return resolve(this.buildResponse({ code: 500 }));\n } catch (e) {\n reject(e);\n }\n });\n }\n}\n"],"mappings":"AAAA,SAASA,aAAT,QAA8B,2BAA9B;AAGA,OAAO,MAAMC,mBAAN,SAAkCD,aAAlC,CAAqE;EAChE,MAAJE,IAAI,CAACC,SAAD,EAAoBC,OAApB,EAAgE;IACxE,OAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;MACtC;MACA,IACE,OAAOC,MAAP,KAAkB,WAAlB,IACA,OAAOA,MAAM,CAACC,SAAd,KAA4B,WAD5B,IAEA,OAAOD,MAAM,CAACC,SAAP,CAAiBC,UAAxB,KAAuC,WAHzC,EAIE;QACA,MAAM,IAAIC,KAAJ,CAAU,sCAAV,CAAN;MACD;;MACD,IAAI;QACF,MAAMC,IAAI,GAAGC,IAAI,CAACC,SAAL,CAAeV,OAAf,CAAb;QACA,MAAMW,OAAO,GAAGP,MAAM,CAACC,SAAP,CAAiBC,UAAjB,CAA4BP,SAA5B,EAAuCU,IAAI,CAACC,SAAL,CAAeV,OAAf,CAAvC,CAAhB;;QACA,IAAIW,OAAJ,EAAa;UACX,OAAOT,OAAO,CACZ,KAAKU,aAAL,CAAmB;YACjBC,IAAI,EAAE,GADW;YAEjBC,eAAe,EAAEd,OAAO,CAACe,MAAR,CAAeC,MAFf;YAGjBC,kBAAkB,EAAET,IAAI,CAACQ,MAHR;YAIjBE,kBAAkB,EAAEC,IAAI,CAACC,GAAL;UAJH,CAAnB,CADY,CAAd;QAQD;;QACD,OAAOlB,OAAO,CAAC,KAAKU,aAAL,CAAmB;UAAEC,IAAI,EAAE;QAAR,CAAnB,CAAD,CAAd;MACD,CAdD,CAcE,OAAOQ,CAAP,EAAU;QACVlB,MAAM,CAACkB,CAAD,CAAN;MACD;IACF,CA1BM,CAAP;EA2BD;;AA7ByE"}
@@ -1,44 +0,0 @@
1
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
-
3
- import { BaseTransport } from '@amplitude/analytics-core';
4
- export class XHRTransport extends BaseTransport {
5
- constructor() {
6
- super(...arguments);
7
-
8
- _defineProperty(this, "state", {
9
- done: 4
10
- });
11
- }
12
-
13
- async send(serverUrl, payload) {
14
- return new Promise((resolve, reject) => {
15
- /* istanbul ignore if */
16
- if (typeof XMLHttpRequest === 'undefined') {
17
- reject(new Error('XHRTransport is not supported.'));
18
- }
19
-
20
- const xhr = new XMLHttpRequest();
21
- xhr.open('POST', serverUrl, true);
22
-
23
- xhr.onreadystatechange = () => {
24
- if (xhr.readyState === this.state.done) {
25
- try {
26
- const responsePayload = xhr.responseText; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
27
-
28
- const parsedResponsePayload = JSON.parse(responsePayload);
29
- const result = this.buildResponse(parsedResponsePayload);
30
- resolve(result);
31
- } catch (e) {
32
- reject(e);
33
- }
34
- }
35
- };
36
-
37
- xhr.setRequestHeader('Content-Type', 'application/json');
38
- xhr.setRequestHeader('Accept', '*/*');
39
- xhr.send(JSON.stringify(payload));
40
- });
41
- }
42
-
43
- }
44
- //# sourceMappingURL=xhr.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["BaseTransport","XHRTransport","done","send","serverUrl","payload","Promise","resolve","reject","XMLHttpRequest","Error","xhr","open","onreadystatechange","readyState","state","responsePayload","responseText","parsedResponsePayload","JSON","parse","result","buildResponse","e","setRequestHeader","stringify"],"sources":["xhr.ts"],"sourcesContent":["import { BaseTransport } from '@amplitude/analytics-core';\nimport { Payload, Response, Transport } from '@amplitude/analytics-types';\n\nexport class XHRTransport extends BaseTransport implements Transport {\n private state = {\n done: 4,\n };\n\n async send(serverUrl: string, payload: Payload): Promise<Response | null> {\n return new Promise((resolve, reject) => {\n /* istanbul ignore if */\n if (typeof XMLHttpRequest === 'undefined') {\n reject(new Error('XHRTransport is not supported.'));\n }\n\n const xhr = new XMLHttpRequest();\n xhr.open('POST', serverUrl, true);\n xhr.onreadystatechange = () => {\n if (xhr.readyState === this.state.done) {\n try {\n const responsePayload = xhr.responseText;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const parsedResponsePayload: Record<string, any> = JSON.parse(responsePayload);\n const result = this.buildResponse(parsedResponsePayload);\n resolve(result);\n } catch (e) {\n reject(e);\n }\n }\n };\n xhr.setRequestHeader('Content-Type', 'application/json');\n xhr.setRequestHeader('Accept', '*/*');\n xhr.send(JSON.stringify(payload));\n });\n }\n}\n"],"mappings":";;AAAA,SAASA,aAAT,QAA8B,2BAA9B;AAGA,OAAO,MAAMC,YAAN,SAA2BD,aAA3B,CAA8D;EAAA;IAAA;;IAAA,+BACnD;MACdE,IAAI,EAAE;IADQ,CADmD;EAAA;;EAKzD,MAAJC,IAAI,CAACC,SAAD,EAAoBC,OAApB,EAAgE;IACxE,OAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;MACtC;MACA,IAAI,OAAOC,cAAP,KAA0B,WAA9B,EAA2C;QACzCD,MAAM,CAAC,IAAIE,KAAJ,CAAU,gCAAV,CAAD,CAAN;MACD;;MAED,MAAMC,GAAG,GAAG,IAAIF,cAAJ,EAAZ;MACAE,GAAG,CAACC,IAAJ,CAAS,MAAT,EAAiBR,SAAjB,EAA4B,IAA5B;;MACAO,GAAG,CAACE,kBAAJ,GAAyB,MAAM;QAC7B,IAAIF,GAAG,CAACG,UAAJ,KAAmB,KAAKC,KAAL,CAAWb,IAAlC,EAAwC;UACtC,IAAI;YACF,MAAMc,eAAe,GAAGL,GAAG,CAACM,YAA5B,CADE,CAEF;;YACA,MAAMC,qBAA0C,GAAGC,IAAI,CAACC,KAAL,CAAWJ,eAAX,CAAnD;YACA,MAAMK,MAAM,GAAG,KAAKC,aAAL,CAAmBJ,qBAAnB,CAAf;YACAX,OAAO,CAACc,MAAD,CAAP;UACD,CAND,CAME,OAAOE,CAAP,EAAU;YACVf,MAAM,CAACe,CAAD,CAAN;UACD;QACF;MACF,CAZD;;MAaAZ,GAAG,CAACa,gBAAJ,CAAqB,cAArB,EAAqC,kBAArC;MACAb,GAAG,CAACa,gBAAJ,CAAqB,QAArB,EAA+B,KAA/B;MACAb,GAAG,CAACR,IAAJ,CAASgB,IAAI,CAACM,SAAL,CAAepB,OAAf,CAAT;IACD,CAxBM,CAAP;EAyBD;;AA/BkE"}
@@ -1,41 +0,0 @@
1
- /**
2
- * Applies the proxied functions on the proxied amplitude snippet to an instance of the real object.
3
- * @ignore
4
- */
5
- export const runQueuedFunctions = (instance, queue) => {
6
- convertProxyObjectToRealObject(instance, queue);
7
- };
8
- /**
9
- * Applies the proxied functions on the proxied object to an instance of the real object.
10
- * Used to convert proxied Identify and Revenue objects.
11
- */
12
-
13
- export const convertProxyObjectToRealObject = (instance, queue) => {
14
- for (let i = 0; i < queue.length; i++) {
15
- const {
16
- name,
17
- args,
18
- resolve
19
- } = queue[i];
20
- const fn = instance && instance[name];
21
-
22
- if (typeof fn === 'function') {
23
- const result = fn.apply(instance, args);
24
-
25
- if (typeof resolve === 'function') {
26
- resolve(result === null || result === void 0 ? void 0 : result.promise);
27
- }
28
- }
29
- }
30
-
31
- return instance;
32
- };
33
- /**
34
- * Check if the param is snippet proxy
35
- */
36
-
37
- export const isInstanceProxy = instance => {
38
- const instanceProxy = instance;
39
- return instanceProxy && instanceProxy._q !== undefined;
40
- };
41
- //# sourceMappingURL=snippet-helper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["runQueuedFunctions","instance","queue","convertProxyObjectToRealObject","i","length","name","args","resolve","fn","result","apply","promise","isInstanceProxy","instanceProxy","_q","undefined"],"sources":["snippet-helper.ts"],"sourcesContent":["import { AmplitudeReturn, InstanceProxy, QueueProxy, Result } from '@amplitude/analytics-types';\n\n/**\n * Applies the proxied functions on the proxied amplitude snippet to an instance of the real object.\n * @ignore\n */\nexport const runQueuedFunctions = (instance: object, queue: QueueProxy) => {\n convertProxyObjectToRealObject(instance, queue);\n};\n\n/**\n * Applies the proxied functions on the proxied object to an instance of the real object.\n * Used to convert proxied Identify and Revenue objects.\n */\nexport const convertProxyObjectToRealObject = <T>(instance: T, queue: QueueProxy): T => {\n for (let i = 0; i < queue.length; i++) {\n const { name, args, resolve } = queue[i];\n const fn = instance && instance[name as keyof T];\n if (typeof fn === 'function') {\n const result = fn.apply(instance, args) as AmplitudeReturn<Promise<Result>>;\n if (typeof resolve === 'function') {\n resolve(result?.promise);\n }\n }\n }\n return instance;\n};\n\n/**\n * Check if the param is snippet proxy\n */\nexport const isInstanceProxy = (instance: unknown): instance is InstanceProxy => {\n const instanceProxy = instance as InstanceProxy;\n return instanceProxy && instanceProxy._q !== undefined;\n};\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA,OAAO,MAAMA,kBAAkB,GAAG,CAACC,QAAD,EAAmBC,KAAnB,KAAyC;EACzEC,8BAA8B,CAACF,QAAD,EAAWC,KAAX,CAA9B;AACD,CAFM;AAIP;AACA;AACA;AACA;;AACA,OAAO,MAAMC,8BAA8B,GAAG,CAAIF,QAAJ,EAAiBC,KAAjB,KAA0C;EACtF,KAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,KAAK,CAACG,MAA1B,EAAkCD,CAAC,EAAnC,EAAuC;IACrC,MAAM;MAAEE,IAAF;MAAQC,IAAR;MAAcC;IAAd,IAA0BN,KAAK,CAACE,CAAD,CAArC;IACA,MAAMK,EAAE,GAAGR,QAAQ,IAAIA,QAAQ,CAACK,IAAD,CAA/B;;IACA,IAAI,OAAOG,EAAP,KAAc,UAAlB,EAA8B;MAC5B,MAAMC,MAAM,GAAGD,EAAE,CAACE,KAAH,CAASV,QAAT,EAAmBM,IAAnB,CAAf;;MACA,IAAI,OAAOC,OAAP,KAAmB,UAAvB,EAAmC;QACjCA,OAAO,CAACE,MAAD,aAACA,MAAD,uBAACA,MAAM,CAAEE,OAAT,CAAP;MACD;IACF;EACF;;EACD,OAAOX,QAAP;AACD,CAZM;AAcP;AACA;AACA;;AACA,OAAO,MAAMY,eAAe,GAAIZ,QAAD,IAAkD;EAC/E,MAAMa,aAAa,GAAGb,QAAtB;EACA,OAAOa,aAAa,IAAIA,aAAa,CAACC,EAAd,KAAqBC,SAA7C;AACD,CAHM"}
@@ -1,13 +0,0 @@
1
- export declare const UTM_SOURCE = "utm_source";
2
- export declare const UTM_MEDIUM = "utm_medium";
3
- export declare const UTM_CAMPAIGN = "utm_campaign";
4
- export declare const UTM_TERM = "utm_term";
5
- export declare const UTM_CONTENT = "utm_content";
6
- export declare const UTMZ_SOURCE = "utmcsr";
7
- export declare const UTMZ_MEDIUM = "utmcmd";
8
- export declare const UTMZ_CAMPAIGN = "utmccn";
9
- export declare const UTMZ_TERM = "utmctr";
10
- export declare const UTMZ_CONTENT = "utmcct";
11
- export declare const GCLID = "gclid";
12
- export declare const FBCLID = "fbclid";
13
- //# sourceMappingURL=constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,eAAe,CAAC;AACvC,eAAO,MAAM,UAAU,eAAe,CAAC;AACvC,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAC3C,eAAO,MAAM,QAAQ,aAAa,CAAC;AACnC,eAAO,MAAM,WAAW,gBAAgB,CAAC;AAEzC,eAAO,MAAM,WAAW,WAAW,CAAC;AACpC,eAAO,MAAM,WAAW,WAAW,CAAC;AACpC,eAAO,MAAM,aAAa,WAAW,CAAC;AACtC,eAAO,MAAM,SAAS,WAAW,CAAC;AAClC,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,eAAO,MAAM,KAAK,UAAU,CAAC;AAC7B,eAAO,MAAM,MAAM,WAAW,CAAC"}
@@ -1,6 +0,0 @@
1
- import { BaseTransport } from '@amplitude/analytics-core';
2
- import { Payload, Response, Transport } from '@amplitude/analytics-types';
3
- export declare class SendBeaconTransport extends BaseTransport implements Transport {
4
- send(serverUrl: string, payload: Payload): Promise<Response | null>;
5
- }
6
- //# sourceMappingURL=send-beacon.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"send-beacon.d.ts","sourceRoot":"","sources":["../../../src/transports/send-beacon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE1E,qBAAa,mBAAoB,SAAQ,aAAc,YAAW,SAAS;IACnE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CA6B1E"}
@@ -1,7 +0,0 @@
1
- import { BaseTransport } from '@amplitude/analytics-core';
2
- import { Payload, Response, Transport } from '@amplitude/analytics-types';
3
- export declare class XHRTransport extends BaseTransport implements Transport {
4
- private state;
5
- send(serverUrl: string, payload: Payload): Promise<Response | null>;
6
- }
7
- //# sourceMappingURL=xhr.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xhr.d.ts","sourceRoot":"","sources":["../../../src/transports/xhr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE1E,qBAAa,YAAa,SAAQ,aAAc,YAAW,SAAS;IAClE,OAAO,CAAC,KAAK,CAEX;IAEI,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CA2B1E"}
@@ -1,16 +0,0 @@
1
- import { InstanceProxy, QueueProxy } from '@amplitude/analytics-types';
2
- /**
3
- * Applies the proxied functions on the proxied amplitude snippet to an instance of the real object.
4
- * @ignore
5
- */
6
- export declare const runQueuedFunctions: (instance: object, queue: QueueProxy) => void;
7
- /**
8
- * Applies the proxied functions on the proxied object to an instance of the real object.
9
- * Used to convert proxied Identify and Revenue objects.
10
- */
11
- export declare const convertProxyObjectToRealObject: <T>(instance: T, queue: QueueProxy) => T;
12
- /**
13
- * Check if the param is snippet proxy
14
- */
15
- export declare const isInstanceProxy: (instance: unknown) => instance is InstanceProxy;
16
- //# sourceMappingURL=snippet-helper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"snippet-helper.d.ts","sourceRoot":"","sources":["../../../src/utils/snippet-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,aAAa,EAAE,UAAU,EAAU,MAAM,4BAA4B,CAAC;AAEhG;;;GAGG;AACH,eAAO,MAAM,kBAAkB,aAAc,MAAM,4BAElD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,8BAA8B,0CAY1C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,aAAc,OAAO,8BAGhD,CAAC"}
@@ -1,78 +0,0 @@
1
- import { UTMCookie } from '../storage/utm-cookie';
2
- import { getQueryParams } from '../utils/query-params';
3
- import {
4
- UTM_CAMPAIGN,
5
- UTM_CONTENT,
6
- UTM_MEDIUM,
7
- UTM_SOURCE,
8
- UTM_TERM,
9
- UTMZ_SOURCE,
10
- UTMZ_MEDIUM,
11
- UTMZ_CAMPAIGN,
12
- UTMZ_TERM,
13
- UTMZ_CONTENT,
14
- GCLID,
15
- FBCLID,
16
- BASE_CAMPAIGN,
17
- } from './constants';
18
- import {
19
- Campaign,
20
- CampaignParser as ICampaignParser,
21
- ClickIdParameters,
22
- ReferrerParameters,
23
- UTMParameters,
24
- } from '@amplitude/analytics-types';
25
-
26
- export class CampaignParser implements ICampaignParser {
27
- utmCookieStorage = new UTMCookie();
28
-
29
- async parse(): Promise<Campaign> {
30
- return {
31
- ...BASE_CAMPAIGN,
32
- ...(await this.getUtmParam()),
33
- ...this.getReferrer(),
34
- ...this.getClickIds(),
35
- } as Campaign;
36
- }
37
-
38
- async getUtmParam(): Promise<UTMParameters> {
39
- const params = getQueryParams();
40
- const cookies = ((await this.utmCookieStorage.isEnabled()) && (await this.utmCookieStorage.get('__utmz'))) || {};
41
-
42
- const utmSource = params[UTM_SOURCE] || cookies[UTMZ_SOURCE];
43
- const utmMedium = params[UTM_MEDIUM] || cookies[UTMZ_MEDIUM];
44
- const utmCampaign = params[UTM_CAMPAIGN] || cookies[UTMZ_CAMPAIGN];
45
- const utmTerm = params[UTM_TERM] || cookies[UTMZ_TERM];
46
- const utmContent = params[UTM_CONTENT] || cookies[UTMZ_CONTENT];
47
-
48
- return {
49
- utm_source: utmSource,
50
- utm_medium: utmMedium,
51
- utm_campaign: utmCampaign,
52
- utm_term: utmTerm,
53
- utm_content: utmContent,
54
- };
55
- }
56
-
57
- getReferrer(): ReferrerParameters {
58
- const data: ReferrerParameters = {
59
- referrer: undefined,
60
- referring_domain: undefined,
61
- };
62
- try {
63
- data.referrer = document.referrer || undefined;
64
- data.referring_domain = data.referrer?.split('/')[2] ?? undefined;
65
- } catch {
66
- // nothing to track
67
- }
68
- return data;
69
- }
70
-
71
- getClickIds(): ClickIdParameters {
72
- const params = getQueryParams();
73
- return {
74
- [GCLID]: params[GCLID],
75
- [FBCLID]: params[FBCLID],
76
- };
77
- }
78
- }
@@ -1,112 +0,0 @@
1
- import { createIdentifyEvent, Identify } from '@amplitude/analytics-core';
2
- import {
3
- Storage,
4
- Campaign,
5
- CampaignParser as ICampaignParser,
6
- CampaignTracker as ICampaignTracker,
7
- CampaignTrackFunction,
8
- CampaignTrackerOptions,
9
- BaseEvent,
10
- } from '@amplitude/analytics-types';
11
- import { getCookieName as getStorageKey } from '../utils/cookie-name';
12
- import { CampaignParser } from './campaign-parser';
13
- import { BASE_CAMPAIGN, EMPTY_VALUE, MKTG } from './constants';
14
-
15
- export class CampaignTracker implements ICampaignTracker {
16
- storage: Storage<Campaign>;
17
- storageKey: string;
18
- parser: ICampaignParser;
19
- track: CampaignTrackFunction;
20
- onNewCampaign: (campaign: Campaign) => unknown;
21
-
22
- disabled: boolean;
23
- trackNewCampaigns: boolean;
24
- trackPageViews: boolean;
25
- excludeReferrers: string[];
26
- initialEmptyValue: string;
27
-
28
- constructor(apiKey: string, options: CampaignTrackerOptions) {
29
- this.storage = options.storage;
30
- this.storageKey = getStorageKey(apiKey, MKTG);
31
- this.parser = new CampaignParser();
32
- this.track = options.track;
33
- this.onNewCampaign = options.onNewCampaign;
34
-
35
- this.disabled = Boolean(options.disabled);
36
- this.trackNewCampaigns = Boolean(options.trackNewCampaigns);
37
- this.trackPageViews = options.trackPageViews === undefined || Boolean(options.trackPageViews);
38
- this.excludeReferrers = options.excludeReferrers ?? [];
39
- if (typeof location !== 'undefined') {
40
- this.excludeReferrers.unshift(location.hostname);
41
- }
42
- this.initialEmptyValue = options.initialEmptyValue ?? EMPTY_VALUE;
43
- }
44
-
45
- isNewCampaign(currentCampaign: Campaign, previousCampaign: Campaign) {
46
- const isReferrerExcluded = Boolean(
47
- currentCampaign.referring_domain && this.excludeReferrers.includes(currentCampaign.referring_domain),
48
- );
49
- const hasNewUtm =
50
- previousCampaign.utm_campaign !== currentCampaign.utm_campaign ||
51
- previousCampaign.utm_source !== currentCampaign.utm_source ||
52
- previousCampaign.utm_medium !== currentCampaign.utm_medium ||
53
- previousCampaign.utm_term !== currentCampaign.utm_term ||
54
- previousCampaign.utm_content !== currentCampaign.utm_content;
55
- const hasNewReferrer = previousCampaign.referring_domain !== currentCampaign.referring_domain;
56
-
57
- return !isReferrerExcluded && (hasNewUtm || hasNewReferrer);
58
- }
59
-
60
- async saveCampaignToStorage(campaign: Campaign): Promise<void> {
61
- await this.storage.set(this.storageKey, campaign);
62
- }
63
-
64
- async getCampaignFromStorage(): Promise<Campaign> {
65
- return (await this.storage.get(this.storageKey)) || { ...BASE_CAMPAIGN };
66
- }
67
-
68
- createCampaignEvent(campaign: Campaign) {
69
- const campaignParameters: Campaign = {
70
- // This object definition allows undefined keys to be iterated on
71
- // in .reduce() to build indentify object
72
- ...BASE_CAMPAIGN,
73
- ...campaign,
74
- };
75
- const identifyEvent = Object.entries(campaignParameters).reduce((identify, [key, value]) => {
76
- identify.setOnce(`initial_${key}`, value || this.initialEmptyValue);
77
- if (value) {
78
- return identify.set(key, value);
79
- }
80
- return identify.unset(key);
81
- }, new Identify());
82
-
83
- const pageViewEvent: BaseEvent = {
84
- event_type: 'Page View',
85
- event_properties: {
86
- page_title: /* istanbul ignore next */ (typeof document !== 'undefined' && document.title) || '',
87
- page_location: /* istanbul ignore next */ (typeof location !== 'undefined' && location.href) || '',
88
- page_path: /* istanbul ignore next */ (typeof location !== 'undefined' && location.pathname) || '',
89
- },
90
- };
91
- return {
92
- ...createIdentifyEvent(identifyEvent),
93
- ...(this.trackPageViews && pageViewEvent),
94
- };
95
- }
96
-
97
- async send(isNewSession: boolean) {
98
- if (this.disabled) {
99
- return;
100
- }
101
- const currentCampaign = await this.parser.parse();
102
- const previousCampaign = await this.getCampaignFromStorage();
103
- if (!isNewSession) {
104
- if (!this.trackNewCampaigns || !this.isNewCampaign(currentCampaign, previousCampaign)) {
105
- return;
106
- }
107
- this.onNewCampaign(currentCampaign);
108
- }
109
- await this.track(this.createCampaignEvent(currentCampaign));
110
- await this.saveCampaignToStorage(currentCampaign);
111
- }
112
- }
@@ -1,32 +0,0 @@
1
- import { Campaign } from '@amplitude/analytics-types';
2
-
3
- export const UTM_SOURCE = 'utm_source';
4
- export const UTM_MEDIUM = 'utm_medium';
5
- export const UTM_CAMPAIGN = 'utm_campaign';
6
- export const UTM_TERM = 'utm_term';
7
- export const UTM_CONTENT = 'utm_content';
8
-
9
- export const UTMZ_SOURCE = 'utmcsr';
10
- export const UTMZ_MEDIUM = 'utmcmd';
11
- export const UTMZ_CAMPAIGN = 'utmccn';
12
- export const UTMZ_TERM = 'utmctr';
13
- export const UTMZ_CONTENT = 'utmcct';
14
-
15
- export const GCLID = 'gclid';
16
- export const FBCLID = 'fbclid';
17
-
18
- export const EMPTY_VALUE = 'EMPTY';
19
-
20
- export const BASE_CAMPAIGN: Campaign = {
21
- utm_source: undefined,
22
- utm_medium: undefined,
23
- utm_campaign: undefined,
24
- utm_term: undefined,
25
- utm_content: undefined,
26
- referrer: undefined,
27
- referring_domain: undefined,
28
- gclid: undefined,
29
- fbclid: undefined,
30
- };
31
-
32
- export const MKTG = 'MKTG';