@amplitude/analytics-browser 0.5.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/lib/cjs/attribution/campaign-parser.d.ts +10 -0
- package/lib/cjs/attribution/campaign-parser.d.ts.map +1 -0
- package/lib/cjs/attribution/campaign-parser.js +56 -0
- package/lib/cjs/attribution/campaign-parser.js.map +1 -0
- package/lib/cjs/attribution/campaign-tracker.d.ts +72 -0
- package/lib/cjs/attribution/campaign-tracker.d.ts.map +1 -0
- package/lib/cjs/attribution/campaign-tracker.js +91 -0
- package/lib/cjs/attribution/campaign-tracker.js.map +1 -0
- package/lib/cjs/{constants.d.ts → attribution/constants.d.ts} +4 -0
- package/lib/cjs/attribution/constants.d.ts.map +1 -0
- package/lib/cjs/attribution/constants.js +28 -0
- package/lib/cjs/attribution/constants.js.map +1 -0
- package/lib/cjs/browser-client.d.ts +4 -4
- package/lib/cjs/browser-client.d.ts.map +1 -1
- package/lib/cjs/browser-client.js +39 -28
- package/lib/cjs/browser-client.js.map +1 -1
- package/lib/cjs/config.d.ts +13 -17
- package/lib/cjs/config.d.ts.map +1 -1
- package/lib/cjs/config.js +90 -45
- package/lib/cjs/config.js.map +1 -1
- package/lib/cjs/cookie-migration/index.js +2 -2
- package/lib/cjs/cookie-migration/index.js.map +1 -1
- package/lib/cjs/plugins/context.d.ts +1 -0
- package/lib/cjs/plugins/context.d.ts.map +1 -1
- package/lib/cjs/plugins/context.js +21 -13
- package/lib/cjs/plugins/context.js.map +1 -1
- package/lib/cjs/session-manager.d.ts +19 -5
- package/lib/cjs/session-manager.d.ts.map +1 -1
- package/lib/cjs/session-manager.js +51 -33
- package/lib/cjs/session-manager.js.map +1 -1
- package/lib/cjs/utils/cookie-name.d.ts +3 -0
- package/lib/cjs/utils/cookie-name.d.ts.map +1 -0
- package/lib/cjs/utils/cookie-name.js +14 -0
- package/lib/cjs/utils/cookie-name.js.map +1 -0
- 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/attribution/campaign-parser.d.ts +10 -0
- package/lib/esm/attribution/campaign-parser.d.ts.map +1 -0
- package/lib/esm/attribution/campaign-parser.js +54 -0
- package/lib/esm/attribution/campaign-parser.js.map +1 -0
- package/lib/esm/attribution/campaign-tracker.d.ts +72 -0
- package/lib/esm/attribution/campaign-tracker.d.ts.map +1 -0
- package/lib/esm/attribution/campaign-tracker.js +89 -0
- package/lib/esm/attribution/campaign-tracker.js.map +1 -0
- package/lib/esm/{constants.d.ts → attribution/constants.d.ts} +4 -0
- package/lib/esm/attribution/constants.d.ts.map +1 -0
- package/lib/esm/{constants.js → attribution/constants.js} +13 -0
- package/lib/esm/attribution/constants.js.map +1 -0
- package/lib/esm/browser-client.d.ts +4 -4
- package/lib/esm/browser-client.d.ts.map +1 -1
- package/lib/esm/browser-client.js +41 -30
- package/lib/esm/browser-client.js.map +1 -1
- package/lib/esm/config.d.ts +13 -17
- package/lib/esm/config.d.ts.map +1 -1
- package/lib/esm/config.js +87 -42
- package/lib/esm/config.js.map +1 -1
- package/lib/esm/cookie-migration/index.js +1 -1
- package/lib/esm/cookie-migration/index.js.map +1 -1
- package/lib/esm/plugins/context.d.ts +1 -0
- package/lib/esm/plugins/context.d.ts.map +1 -1
- package/lib/esm/plugins/context.js +21 -13
- package/lib/esm/plugins/context.js.map +1 -1
- package/lib/esm/session-manager.d.ts +19 -5
- package/lib/esm/session-manager.d.ts.map +1 -1
- package/lib/esm/session-manager.js +50 -28
- package/lib/esm/session-manager.js.map +1 -1
- package/lib/esm/utils/cookie-name.d.ts +3 -0
- package/lib/esm/utils/cookie-name.d.ts.map +1 -0
- package/lib/esm/utils/cookie-name.js +10 -0
- package/lib/esm/utils/cookie-name.js.map +1 -0
- 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-min.js +1 -1
- package/lib/scripts/amplitude-min.js.gz +0 -0
- 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/package.json +4 -4
- package/lib/cjs/attribution.d.ts +0 -11
- package/lib/cjs/attribution.d.ts.map +0 -1
- package/lib/cjs/attribution.js +0 -64
- package/lib/cjs/attribution.js.map +0 -1
- package/lib/cjs/constants.d.ts.map +0 -1
- package/lib/cjs/constants.js +0 -15
- package/lib/cjs/constants.js.map +0 -1
- package/lib/esm/attribution.d.ts +0 -11
- package/lib/esm/attribution.d.ts.map +0 -1
- package/lib/esm/attribution.js +0 -57
- package/lib/esm/attribution.js.map +0 -1
- package/lib/esm/constants.d.ts.map +0 -1
- package/lib/esm/constants.js.map +0 -1
package/README.md
CHANGED
|
@@ -32,7 +32,7 @@ Alternatively, the package is also distributed through a CDN. Copy and paste the
|
|
|
32
32
|
<!-- README_SNIPPET_BLOCK -->
|
|
33
33
|
```html
|
|
34
34
|
<script type="text/javascript">
|
|
35
|
-
!function(){"use strict";!function(e,t){var r=e.amplitude||{_q:[]};if(r.invoked)e.console&&console.error&&console.error("Amplitude snippet has been loaded.");else{r.invoked=!0;var n=t.createElement("script");n.type="text/javascript",n.integrity="sha384-
|
|
35
|
+
!function(){"use strict";!function(e,t){var r=e.amplitude||{_q:[]};if(r.invoked)e.console&&console.error&&console.error("Amplitude snippet has been loaded.");else{r.invoked=!0;var n=t.createElement("script");n.type="text/javascript",n.integrity="sha384-LRqQslnCLN5Y5/WML9z04UjXrLxTaaAlEcWCBN5yhzUYR+3bekPziHIuZlJCwBuk",n.crossOrigin="anonymous",n.async=!0,n.src="https://cdn.amplitude.com/libs/analytics-browser-0.6.1-min.js.gz",n.onload=function(){e.amplitude.runQueuedFunctions||console.log("[Amplitude] Error: could not load SDK")};var s=t.getElementsByTagName("script")[0];function v(e,t){e.prototype[t]=function(){return this._q.push({name:t,args:Array.prototype.slice.call(arguments,0)}),this}}s.parentNode.insertBefore(n,s);for(var o=function(){return this._q=[],this},i=["add","append","clearAll","prepend","set","setOnce","unset","preInsert","postInsert","remove","getUserProperties"],a=0;a<i.length;a++)v(o,i[a]);r.Identify=o;for(var u=function(){return this._q=[],this},c=["getEventProperties","setProductId","setQuantity","setPrice","setRevenue","setRevenueType","setEventProperties"],l=0;l<c.length;l++)v(u,c[l]);r.Revenue=u;var p=["getDeviceId","setDeviceId","regenerateDeviceId","getSessionId","setSessionId","getUserId","setUserId","setOptOut","setTransport"],d=["init","add","remove","track","logEvent","identify","groupIdentify","setGroup","revenue"];function f(e){function t(t,r){e[t]=function(){var n={promise:new Promise((r=>{e._q.push({name:t,args:Array.prototype.slice.call(arguments,0),resolve:r})}))};if(r)return n}}for(var r=0;r<p.length;r++)t(p[r],!1);for(var n=0;n<d.length;n++)t(d[n],!0)}f(r),e.amplitude=r}}(window,document)}();
|
|
36
36
|
|
|
37
37
|
amplitude.init("YOUR_API_KEY_HERE");
|
|
38
38
|
</script>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { UTMCookie } from '../storage/utm-cookie';
|
|
2
|
+
import { Campaign, CampaignParser as ICampaignParser, ClickIdParameters, ReferrerParameters, UTMParameters } from '@amplitude/analytics-types';
|
|
3
|
+
export declare class CampaignParser implements ICampaignParser {
|
|
4
|
+
utmCookieStorage: UTMCookie;
|
|
5
|
+
parse(): Campaign;
|
|
6
|
+
getUtmParam(): UTMParameters;
|
|
7
|
+
getReferrer(): ReferrerParameters;
|
|
8
|
+
getClickIds(): ClickIdParameters;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=campaign-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-parser.d.ts","sourceRoot":"","sources":["../../../src/attribution/campaign-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAiBlD,OAAO,EACL,QAAQ,EACR,cAAc,IAAI,eAAe,EACjC,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACd,MAAM,4BAA4B,CAAC;AAEpC,qBAAa,cAAe,YAAW,eAAe;IACpD,gBAAgB,YAAmB;IAEnC,KAAK,IAAI,QAAQ;IASjB,WAAW,IAAI,aAAa;IAmB5B,WAAW,IAAI,kBAAkB;IAcjC,WAAW,IAAI,iBAAiB;CAOjC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
+
exports.CampaignParser = void 0;
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
4
|
+
var utm_cookie_1 = require("../storage/utm-cookie");
|
|
5
|
+
var query_params_1 = require("../utils/query-params");
|
|
6
|
+
var constants_1 = require("./constants");
|
|
7
|
+
var CampaignParser = /** @class */ (function () {
|
|
8
|
+
function CampaignParser() {
|
|
9
|
+
this.utmCookieStorage = new utm_cookie_1.UTMCookie();
|
|
10
|
+
}
|
|
11
|
+
CampaignParser.prototype.parse = function () {
|
|
12
|
+
return (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, constants_1.BASE_CAMPAIGN), this.getUtmParam()), this.getReferrer()), this.getClickIds());
|
|
13
|
+
};
|
|
14
|
+
CampaignParser.prototype.getUtmParam = function () {
|
|
15
|
+
var params = (0, query_params_1.getQueryParams)();
|
|
16
|
+
var cookies = (this.utmCookieStorage.isEnabled() && this.utmCookieStorage.get('__utmz')) || {};
|
|
17
|
+
var utmSource = params[constants_1.UTM_SOURCE] || cookies[constants_1.UTMZ_SOURCE];
|
|
18
|
+
var utmMedium = params[constants_1.UTM_MEDIUM] || cookies[constants_1.UTMZ_MEDIUM];
|
|
19
|
+
var utmCampaign = params[constants_1.UTM_CAMPAIGN] || cookies[constants_1.UTMZ_CAMPAIGN];
|
|
20
|
+
var utmTerm = params[constants_1.UTM_TERM] || cookies[constants_1.UTMZ_TERM];
|
|
21
|
+
var utmContent = params[constants_1.UTM_CONTENT] || cookies[constants_1.UTMZ_CONTENT];
|
|
22
|
+
return {
|
|
23
|
+
utm_source: utmSource,
|
|
24
|
+
utm_medium: utmMedium,
|
|
25
|
+
utm_campaign: utmCampaign,
|
|
26
|
+
utm_term: utmTerm,
|
|
27
|
+
utm_content: utmContent,
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
CampaignParser.prototype.getReferrer = function () {
|
|
31
|
+
var _a, _b;
|
|
32
|
+
var data = {
|
|
33
|
+
referrer: undefined,
|
|
34
|
+
referring_domain: undefined,
|
|
35
|
+
};
|
|
36
|
+
try {
|
|
37
|
+
data.referrer = document.referrer || undefined;
|
|
38
|
+
data.referring_domain = (_b = (_a = data.referrer) === null || _a === void 0 ? void 0 : _a.split('/')[2]) !== null && _b !== void 0 ? _b : undefined;
|
|
39
|
+
}
|
|
40
|
+
catch (_c) {
|
|
41
|
+
// nothing to track
|
|
42
|
+
}
|
|
43
|
+
return data;
|
|
44
|
+
};
|
|
45
|
+
CampaignParser.prototype.getClickIds = function () {
|
|
46
|
+
var _a;
|
|
47
|
+
var params = (0, query_params_1.getQueryParams)();
|
|
48
|
+
return _a = {},
|
|
49
|
+
_a[constants_1.GCLID] = params[constants_1.GCLID],
|
|
50
|
+
_a[constants_1.FBCLID] = params[constants_1.FBCLID],
|
|
51
|
+
_a;
|
|
52
|
+
};
|
|
53
|
+
return CampaignParser;
|
|
54
|
+
}());
|
|
55
|
+
exports.CampaignParser = CampaignParser;
|
|
56
|
+
//# sourceMappingURL=campaign-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-parser.js","sourceRoot":"","sources":["../../../src/attribution/campaign-parser.ts"],"names":[],"mappings":";;;AAAA,oDAAkD;AAClD,sDAAuD;AACvD,yCAcqB;AASrB;IAAA;QACE,qBAAgB,GAAG,IAAI,sBAAS,EAAE,CAAC;IAmDrC,CAAC;IAjDC,8BAAK,GAAL;QACE,mGACK,yBAAa,GACb,IAAI,CAAC,WAAW,EAAE,GAClB,IAAI,CAAC,WAAW,EAAE,GAClB,IAAI,CAAC,WAAW,EAAE,EACrB;IACJ,CAAC;IAED,oCAAW,GAAX;QACE,IAAM,MAAM,GAAG,IAAA,6BAAc,GAAE,CAAC;QAChC,IAAM,OAAO,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QAEjG,IAAM,SAAS,GAAG,MAAM,CAAC,sBAAU,CAAC,IAAI,OAAO,CAAC,uBAAW,CAAC,CAAC;QAC7D,IAAM,SAAS,GAAG,MAAM,CAAC,sBAAU,CAAC,IAAI,OAAO,CAAC,uBAAW,CAAC,CAAC;QAC7D,IAAM,WAAW,GAAG,MAAM,CAAC,wBAAY,CAAC,IAAI,OAAO,CAAC,yBAAa,CAAC,CAAC;QACnE,IAAM,OAAO,GAAG,MAAM,CAAC,oBAAQ,CAAC,IAAI,OAAO,CAAC,qBAAS,CAAC,CAAC;QACvD,IAAM,UAAU,GAAG,MAAM,CAAC,uBAAW,CAAC,IAAI,OAAO,CAAC,wBAAY,CAAC,CAAC;QAEhE,OAAO;YACL,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,SAAS;YACrB,YAAY,EAAE,WAAW;YACzB,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,UAAU;SACxB,CAAC;IACJ,CAAC;IAED,oCAAW,GAAX;;QACE,IAAM,IAAI,GAAuB;YAC/B,QAAQ,EAAE,SAAS;YACnB,gBAAgB,EAAE,SAAS;SAC5B,CAAC;QACF,IAAI;YACF,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,SAAS,CAAC;YAC/C,IAAI,CAAC,gBAAgB,GAAG,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,mCAAI,SAAS,CAAC;SACnE;QAAC,WAAM;YACN,mBAAmB;SACpB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oCAAW,GAAX;;QACE,IAAM,MAAM,GAAG,IAAA,6BAAc,GAAE,CAAC;QAChC;YACE,GAAC,iBAAK,IAAG,MAAM,CAAC,iBAAK,CAAC;YACtB,GAAC,kBAAM,IAAG,MAAM,CAAC,kBAAM,CAAC;eACxB;IACJ,CAAC;IACH,qBAAC;AAAD,CAAC,AApDD,IAoDC;AApDY,wCAAc","sourcesContent":["import { UTMCookie } from '../storage/utm-cookie';\nimport { getQueryParams } from '../utils/query-params';\nimport {\n UTM_CAMPAIGN,\n UTM_CONTENT,\n UTM_MEDIUM,\n UTM_SOURCE,\n UTM_TERM,\n UTMZ_SOURCE,\n UTMZ_MEDIUM,\n UTMZ_CAMPAIGN,\n UTMZ_TERM,\n UTMZ_CONTENT,\n GCLID,\n FBCLID,\n BASE_CAMPAIGN,\n} from './constants';\nimport {\n Campaign,\n CampaignParser as ICampaignParser,\n ClickIdParameters,\n ReferrerParameters,\n UTMParameters,\n} from '@amplitude/analytics-types';\n\nexport class CampaignParser implements ICampaignParser {\n utmCookieStorage = new UTMCookie();\n\n parse(): Campaign {\n return {\n ...BASE_CAMPAIGN,\n ...this.getUtmParam(),\n ...this.getReferrer(),\n ...this.getClickIds(),\n };\n }\n\n getUtmParam(): UTMParameters {\n const params = getQueryParams();\n const cookies = (this.utmCookieStorage.isEnabled() && this.utmCookieStorage.get('__utmz')) || {};\n\n const utmSource = params[UTM_SOURCE] || cookies[UTMZ_SOURCE];\n const utmMedium = params[UTM_MEDIUM] || cookies[UTMZ_MEDIUM];\n const utmCampaign = params[UTM_CAMPAIGN] || cookies[UTMZ_CAMPAIGN];\n const utmTerm = params[UTM_TERM] || cookies[UTMZ_TERM];\n const utmContent = params[UTM_CONTENT] || cookies[UTMZ_CONTENT];\n\n return {\n utm_source: utmSource,\n utm_medium: utmMedium,\n utm_campaign: utmCampaign,\n utm_term: utmTerm,\n utm_content: utmContent,\n };\n }\n\n getReferrer(): ReferrerParameters {\n const data: ReferrerParameters = {\n referrer: undefined,\n referring_domain: undefined,\n };\n try {\n data.referrer = document.referrer || undefined;\n data.referring_domain = data.referrer?.split('/')[2] ?? undefined;\n } catch {\n // nothing to track\n }\n return data;\n }\n\n getClickIds(): ClickIdParameters {\n const params = getQueryParams();\n return {\n [GCLID]: params[GCLID],\n [FBCLID]: params[FBCLID],\n };\n }\n}\n"]}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Storage, Campaign, CampaignParser as ICampaignParser, CampaignTracker as ICampaignTracker, CampaignTrackFunction, CampaignTrackerOptions } from '@amplitude/analytics-types';
|
|
2
|
+
export declare class CampaignTracker implements ICampaignTracker {
|
|
3
|
+
storage: Storage<Campaign>;
|
|
4
|
+
storageKey: string;
|
|
5
|
+
parser: ICampaignParser;
|
|
6
|
+
track: CampaignTrackFunction;
|
|
7
|
+
onNewCampaign: (campaign: Campaign) => unknown;
|
|
8
|
+
disabled: boolean;
|
|
9
|
+
trackNewCampaigns: boolean;
|
|
10
|
+
trackPageViews: boolean;
|
|
11
|
+
excludeReferrers: string[];
|
|
12
|
+
initialEmptyValue: string;
|
|
13
|
+
constructor(apiKey: string, options: CampaignTrackerOptions);
|
|
14
|
+
isNewCampaign(currentCampaign: Campaign, previousCampaign: Campaign): boolean;
|
|
15
|
+
saveCampaignToStorage(campaign: Campaign): void;
|
|
16
|
+
getCampaignFromStorage(): Campaign;
|
|
17
|
+
createCampaignEvent(campaign: Campaign): {
|
|
18
|
+
event_type: string;
|
|
19
|
+
event_properties?: {
|
|
20
|
+
[key: string]: any;
|
|
21
|
+
} | undefined;
|
|
22
|
+
user_properties: {
|
|
23
|
+
[key: string]: any;
|
|
24
|
+
} | import("@amplitude/analytics-types").IdentifyUserProperties | {
|
|
25
|
+
[x: string]: any;
|
|
26
|
+
};
|
|
27
|
+
group_properties?: {
|
|
28
|
+
[key: string]: any;
|
|
29
|
+
} | undefined;
|
|
30
|
+
groups?: {
|
|
31
|
+
[key: string]: any;
|
|
32
|
+
} | undefined;
|
|
33
|
+
user_id?: string | undefined;
|
|
34
|
+
device_id?: string | undefined;
|
|
35
|
+
time?: number | undefined;
|
|
36
|
+
location_lat?: number | undefined;
|
|
37
|
+
location_lng?: number | undefined;
|
|
38
|
+
app_version?: string | undefined;
|
|
39
|
+
version_name?: string | undefined;
|
|
40
|
+
library?: string | undefined;
|
|
41
|
+
platform?: string | undefined;
|
|
42
|
+
os_name?: string | undefined;
|
|
43
|
+
os_version?: string | undefined;
|
|
44
|
+
device_brand?: string | undefined;
|
|
45
|
+
device_manufacturer?: string | undefined;
|
|
46
|
+
device_model?: string | undefined;
|
|
47
|
+
carrier?: string | undefined;
|
|
48
|
+
country?: string | undefined;
|
|
49
|
+
region?: string | undefined;
|
|
50
|
+
city?: string | undefined;
|
|
51
|
+
dma?: string | undefined;
|
|
52
|
+
idfa?: string | undefined;
|
|
53
|
+
idfv?: string | undefined;
|
|
54
|
+
adid?: string | undefined;
|
|
55
|
+
android_id?: string | undefined;
|
|
56
|
+
language?: string | undefined;
|
|
57
|
+
ip?: string | undefined;
|
|
58
|
+
uuid?: string | undefined;
|
|
59
|
+
price?: number | undefined;
|
|
60
|
+
quantity?: number | undefined;
|
|
61
|
+
revenue?: number | undefined;
|
|
62
|
+
productId?: string | undefined;
|
|
63
|
+
revenueType?: string | undefined;
|
|
64
|
+
event_id?: number | undefined;
|
|
65
|
+
session_id?: number | undefined;
|
|
66
|
+
insert_id?: string | undefined;
|
|
67
|
+
plan?: import("@amplitude/analytics-types").Plan | undefined;
|
|
68
|
+
partner_id?: string | undefined;
|
|
69
|
+
};
|
|
70
|
+
send(isNewSession: boolean): Promise<void>;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=campaign-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-tracker.d.ts","sourceRoot":"","sources":["../../../src/attribution/campaign-tracker.ts"],"names":[],"mappings":"AACA,OAAO,EACL,OAAO,EACP,QAAQ,EACR,cAAc,IAAI,eAAe,EACjC,eAAe,IAAI,gBAAgB,EACnC,qBAAqB,EACrB,sBAAsB,EAEvB,MAAM,4BAA4B,CAAC;AAKpC,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,qBAAqB,CAAC;IAC7B,aAAa,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;IAE/C,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;gBAEd,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB;IAiB3D,aAAa,CAAC,eAAe,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ;IAenE,qBAAqB,CAAC,QAAQ,EAAE,QAAQ;IAIxC,sBAAsB,IAAI,QAAQ;IAIlC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6BhC,IAAI,CAAC,YAAY,EAAE,OAAO;CAejC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
+
exports.CampaignTracker = void 0;
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
4
|
+
var analytics_core_1 = require("@amplitude/analytics-core");
|
|
5
|
+
var cookie_name_1 = require("../utils/cookie-name");
|
|
6
|
+
var campaign_parser_1 = require("./campaign-parser");
|
|
7
|
+
var constants_1 = require("./constants");
|
|
8
|
+
var CampaignTracker = /** @class */ (function () {
|
|
9
|
+
function CampaignTracker(apiKey, options) {
|
|
10
|
+
var _a, _b;
|
|
11
|
+
this.storage = options.storage;
|
|
12
|
+
this.storageKey = (0, cookie_name_1.getCookieName)(apiKey, constants_1.MKTG);
|
|
13
|
+
this.parser = new campaign_parser_1.CampaignParser();
|
|
14
|
+
this.track = options.track;
|
|
15
|
+
this.onNewCampaign = options.onNewCampaign;
|
|
16
|
+
this.disabled = Boolean(options.disabled);
|
|
17
|
+
this.trackNewCampaigns = Boolean(options.trackNewCampaigns);
|
|
18
|
+
this.trackPageViews = Boolean(options.trackPageViews);
|
|
19
|
+
this.excludeReferrers = (_a = options.excludeReferrers) !== null && _a !== void 0 ? _a : [];
|
|
20
|
+
if (typeof location !== 'undefined') {
|
|
21
|
+
this.excludeReferrers.unshift(location.hostname);
|
|
22
|
+
}
|
|
23
|
+
this.initialEmptyValue = (_b = options.initialEmptyValue) !== null && _b !== void 0 ? _b : constants_1.EMPTY_VALUE;
|
|
24
|
+
}
|
|
25
|
+
CampaignTracker.prototype.isNewCampaign = function (currentCampaign, previousCampaign) {
|
|
26
|
+
var isReferrerExcluded = Boolean(currentCampaign.referring_domain && this.excludeReferrers.includes(currentCampaign.referring_domain));
|
|
27
|
+
var hasNewUtm = previousCampaign.utm_campaign !== currentCampaign.utm_campaign ||
|
|
28
|
+
previousCampaign.utm_source !== currentCampaign.utm_source ||
|
|
29
|
+
previousCampaign.utm_medium !== currentCampaign.utm_medium ||
|
|
30
|
+
previousCampaign.utm_term !== currentCampaign.utm_term ||
|
|
31
|
+
previousCampaign.utm_content !== currentCampaign.utm_content;
|
|
32
|
+
var hasNewReferrer = previousCampaign.referring_domain !== currentCampaign.referring_domain;
|
|
33
|
+
return !isReferrerExcluded && (hasNewUtm || hasNewReferrer);
|
|
34
|
+
};
|
|
35
|
+
CampaignTracker.prototype.saveCampaignToStorage = function (campaign) {
|
|
36
|
+
this.storage.set(this.storageKey, campaign);
|
|
37
|
+
};
|
|
38
|
+
CampaignTracker.prototype.getCampaignFromStorage = function () {
|
|
39
|
+
return this.storage.get(this.storageKey) || (0, tslib_1.__assign)({}, constants_1.BASE_CAMPAIGN);
|
|
40
|
+
};
|
|
41
|
+
CampaignTracker.prototype.createCampaignEvent = function (campaign) {
|
|
42
|
+
var _this = this;
|
|
43
|
+
var campaignParameters = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, constants_1.BASE_CAMPAIGN), campaign);
|
|
44
|
+
var identifyEvent = Object.entries(campaignParameters).reduce(function (identify, _a) {
|
|
45
|
+
var _b = (0, tslib_1.__read)(_a, 2), key = _b[0], value = _b[1];
|
|
46
|
+
identify.setOnce("initial_".concat(key), value || _this.initialEmptyValue);
|
|
47
|
+
if (value) {
|
|
48
|
+
return identify.set(key, value);
|
|
49
|
+
}
|
|
50
|
+
return identify.unset(key);
|
|
51
|
+
}, new analytics_core_1.Identify());
|
|
52
|
+
var pageViewEvent = {
|
|
53
|
+
event_type: 'Page View',
|
|
54
|
+
event_properties: {
|
|
55
|
+
page_title: /* istanbul ignore next */ (typeof document !== 'undefined' && document.title) || '',
|
|
56
|
+
page_location: /* istanbul ignore next */ (typeof location !== 'undefined' && location.href) || '',
|
|
57
|
+
page_path: /* istanbul ignore next */ (typeof location !== 'undefined' && location.pathname) || '',
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, (0, analytics_core_1.createIdentifyEvent)(identifyEvent)), (this.trackPageViews && pageViewEvent));
|
|
61
|
+
};
|
|
62
|
+
CampaignTracker.prototype.send = function (isNewSession) {
|
|
63
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
64
|
+
var currentCampaign, previousCampaign;
|
|
65
|
+
return (0, tslib_1.__generator)(this, function (_a) {
|
|
66
|
+
switch (_a.label) {
|
|
67
|
+
case 0:
|
|
68
|
+
if (this.disabled) {
|
|
69
|
+
return [2 /*return*/];
|
|
70
|
+
}
|
|
71
|
+
currentCampaign = this.parser.parse();
|
|
72
|
+
previousCampaign = this.getCampaignFromStorage();
|
|
73
|
+
if (!isNewSession) {
|
|
74
|
+
if (!this.trackNewCampaigns || !this.isNewCampaign(currentCampaign, previousCampaign)) {
|
|
75
|
+
return [2 /*return*/];
|
|
76
|
+
}
|
|
77
|
+
this.onNewCampaign(currentCampaign);
|
|
78
|
+
}
|
|
79
|
+
return [4 /*yield*/, this.track(this.createCampaignEvent(currentCampaign))];
|
|
80
|
+
case 1:
|
|
81
|
+
_a.sent();
|
|
82
|
+
this.saveCampaignToStorage(currentCampaign);
|
|
83
|
+
return [2 /*return*/];
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
return CampaignTracker;
|
|
89
|
+
}());
|
|
90
|
+
exports.CampaignTracker = CampaignTracker;
|
|
91
|
+
//# sourceMappingURL=campaign-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-tracker.js","sourceRoot":"","sources":["../../../src/attribution/campaign-tracker.ts"],"names":[],"mappings":"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","sourcesContent":["import { createIdentifyEvent, Identify } from '@amplitude/analytics-core';\nimport {\n Storage,\n Campaign,\n CampaignParser as ICampaignParser,\n CampaignTracker as ICampaignTracker,\n CampaignTrackFunction,\n CampaignTrackerOptions,\n BaseEvent,\n} from '@amplitude/analytics-types';\nimport { getCookieName as getStorageKey } from '../utils/cookie-name';\nimport { CampaignParser } from './campaign-parser';\nimport { BASE_CAMPAIGN, EMPTY_VALUE, MKTG } from './constants';\n\nexport class CampaignTracker implements ICampaignTracker {\n storage: Storage<Campaign>;\n storageKey: string;\n parser: ICampaignParser;\n track: CampaignTrackFunction;\n onNewCampaign: (campaign: Campaign) => unknown;\n\n disabled: boolean;\n trackNewCampaigns: boolean;\n trackPageViews: boolean;\n excludeReferrers: string[];\n initialEmptyValue: string;\n\n constructor(apiKey: string, options: CampaignTrackerOptions) {\n this.storage = options.storage;\n this.storageKey = getStorageKey(apiKey, MKTG);\n this.parser = new CampaignParser();\n this.track = options.track;\n this.onNewCampaign = options.onNewCampaign;\n\n this.disabled = Boolean(options.disabled);\n this.trackNewCampaigns = Boolean(options.trackNewCampaigns);\n this.trackPageViews = Boolean(options.trackPageViews);\n this.excludeReferrers = options.excludeReferrers ?? [];\n if (typeof location !== 'undefined') {\n this.excludeReferrers.unshift(location.hostname);\n }\n this.initialEmptyValue = options.initialEmptyValue ?? EMPTY_VALUE;\n }\n\n isNewCampaign(currentCampaign: Campaign, previousCampaign: Campaign) {\n const isReferrerExcluded = Boolean(\n currentCampaign.referring_domain && this.excludeReferrers.includes(currentCampaign.referring_domain),\n );\n const hasNewUtm =\n previousCampaign.utm_campaign !== currentCampaign.utm_campaign ||\n previousCampaign.utm_source !== currentCampaign.utm_source ||\n previousCampaign.utm_medium !== currentCampaign.utm_medium ||\n previousCampaign.utm_term !== currentCampaign.utm_term ||\n previousCampaign.utm_content !== currentCampaign.utm_content;\n const hasNewReferrer = previousCampaign.referring_domain !== currentCampaign.referring_domain;\n\n return !isReferrerExcluded && (hasNewUtm || hasNewReferrer);\n }\n\n saveCampaignToStorage(campaign: Campaign) {\n this.storage.set(this.storageKey, campaign);\n }\n\n getCampaignFromStorage(): Campaign {\n return this.storage.get(this.storageKey) || { ...BASE_CAMPAIGN };\n }\n\n createCampaignEvent(campaign: Campaign) {\n const campaignParameters: Campaign = {\n // This object definition allows undefined keys to be iterated on\n // in .reduce() to build indentify object\n ...BASE_CAMPAIGN,\n ...campaign,\n };\n const identifyEvent = Object.entries(campaignParameters).reduce((identify, [key, value]) => {\n identify.setOnce(`initial_${key}`, value || this.initialEmptyValue);\n if (value) {\n return identify.set(key, value);\n }\n return identify.unset(key);\n }, new Identify());\n\n const pageViewEvent: BaseEvent = {\n event_type: 'Page View',\n event_properties: {\n page_title: /* istanbul ignore next */ (typeof document !== 'undefined' && document.title) || '',\n page_location: /* istanbul ignore next */ (typeof location !== 'undefined' && location.href) || '',\n page_path: /* istanbul ignore next */ (typeof location !== 'undefined' && location.pathname) || '',\n },\n };\n return {\n ...createIdentifyEvent(identifyEvent),\n ...(this.trackPageViews && pageViewEvent),\n };\n }\n\n async send(isNewSession: boolean) {\n if (this.disabled) {\n return;\n }\n const currentCampaign = this.parser.parse();\n const previousCampaign = this.getCampaignFromStorage();\n if (!isNewSession) {\n if (!this.trackNewCampaigns || !this.isNewCampaign(currentCampaign, previousCampaign)) {\n return;\n }\n this.onNewCampaign(currentCampaign);\n }\n await this.track(this.createCampaignEvent(currentCampaign));\n this.saveCampaignToStorage(currentCampaign);\n }\n}\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Campaign } from '@amplitude/analytics-types';
|
|
1
2
|
export declare const UTM_SOURCE = "utm_source";
|
|
2
3
|
export declare const UTM_MEDIUM = "utm_medium";
|
|
3
4
|
export declare const UTM_CAMPAIGN = "utm_campaign";
|
|
@@ -10,4 +11,7 @@ export declare const UTMZ_TERM = "utmctr";
|
|
|
10
11
|
export declare const UTMZ_CONTENT = "utmcct";
|
|
11
12
|
export declare const GCLID = "gclid";
|
|
12
13
|
export declare const FBCLID = "fbclid";
|
|
14
|
+
export declare const EMPTY_VALUE = "EMPTY";
|
|
15
|
+
export declare const BASE_CAMPAIGN: Campaign;
|
|
16
|
+
export declare const MKTG = "MKTG";
|
|
13
17
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/attribution/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,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;AAE/B,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,eAAO,MAAM,aAAa,EAAE,QAU3B,CAAC;AAEF,eAAO,MAAM,IAAI,SAAS,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
+
exports.MKTG = exports.BASE_CAMPAIGN = exports.EMPTY_VALUE = exports.FBCLID = exports.GCLID = exports.UTMZ_CONTENT = exports.UTMZ_TERM = exports.UTMZ_CAMPAIGN = exports.UTMZ_MEDIUM = exports.UTMZ_SOURCE = exports.UTM_CONTENT = exports.UTM_TERM = exports.UTM_CAMPAIGN = exports.UTM_MEDIUM = exports.UTM_SOURCE = void 0;
|
|
3
|
+
exports.UTM_SOURCE = 'utm_source';
|
|
4
|
+
exports.UTM_MEDIUM = 'utm_medium';
|
|
5
|
+
exports.UTM_CAMPAIGN = 'utm_campaign';
|
|
6
|
+
exports.UTM_TERM = 'utm_term';
|
|
7
|
+
exports.UTM_CONTENT = 'utm_content';
|
|
8
|
+
exports.UTMZ_SOURCE = 'utmcsr';
|
|
9
|
+
exports.UTMZ_MEDIUM = 'utmcmd';
|
|
10
|
+
exports.UTMZ_CAMPAIGN = 'utmccn';
|
|
11
|
+
exports.UTMZ_TERM = 'utmctr';
|
|
12
|
+
exports.UTMZ_CONTENT = 'utmcct';
|
|
13
|
+
exports.GCLID = 'gclid';
|
|
14
|
+
exports.FBCLID = 'fbclid';
|
|
15
|
+
exports.EMPTY_VALUE = 'EMPTY';
|
|
16
|
+
exports.BASE_CAMPAIGN = {
|
|
17
|
+
utm_source: undefined,
|
|
18
|
+
utm_medium: undefined,
|
|
19
|
+
utm_campaign: undefined,
|
|
20
|
+
utm_term: undefined,
|
|
21
|
+
utm_content: undefined,
|
|
22
|
+
referrer: undefined,
|
|
23
|
+
referring_domain: undefined,
|
|
24
|
+
gclid: undefined,
|
|
25
|
+
fbclid: undefined,
|
|
26
|
+
};
|
|
27
|
+
exports.MKTG = 'MKTG';
|
|
28
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/attribution/constants.ts"],"names":[],"mappings":";;AAEa,QAAA,UAAU,GAAG,YAAY,CAAC;AAC1B,QAAA,UAAU,GAAG,YAAY,CAAC;AAC1B,QAAA,YAAY,GAAG,cAAc,CAAC;AAC9B,QAAA,QAAQ,GAAG,UAAU,CAAC;AACtB,QAAA,WAAW,GAAG,aAAa,CAAC;AAE5B,QAAA,WAAW,GAAG,QAAQ,CAAC;AACvB,QAAA,WAAW,GAAG,QAAQ,CAAC;AACvB,QAAA,aAAa,GAAG,QAAQ,CAAC;AACzB,QAAA,SAAS,GAAG,QAAQ,CAAC;AACrB,QAAA,YAAY,GAAG,QAAQ,CAAC;AAExB,QAAA,KAAK,GAAG,OAAO,CAAC;AAChB,QAAA,MAAM,GAAG,QAAQ,CAAC;AAElB,QAAA,WAAW,GAAG,OAAO,CAAC;AAEtB,QAAA,aAAa,GAAa;IACrC,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,YAAY,EAAE,SAAS;IACvB,QAAQ,EAAE,SAAS;IACnB,WAAW,EAAE,SAAS;IACtB,QAAQ,EAAE,SAAS;IACnB,gBAAgB,EAAE,SAAS;IAC3B,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;CAClB,CAAC;AAEW,QAAA,IAAI,GAAG,MAAM,CAAC","sourcesContent":["import { Campaign } from '@amplitude/analytics-types';\n\nexport 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\nexport const EMPTY_VALUE = 'EMPTY';\n\nexport const BASE_CAMPAIGN: Campaign = {\n utm_source: undefined,\n utm_medium: undefined,\n utm_campaign: undefined,\n utm_term: undefined,\n utm_content: undefined,\n referrer: undefined,\n referring_domain: undefined,\n gclid: undefined,\n fbclid: undefined,\n};\n\nexport const MKTG = 'MKTG';\n"]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { AmplitudeCore } from '@amplitude/analytics-core';
|
|
2
|
-
import { BrowserConfig, BrowserOptions, EventOptions, Identify as IIdentify, Result, Revenue as IRevenue, TransportType } from '@amplitude/analytics-types';
|
|
2
|
+
import { AdditionalBrowserOptions, AttributionBrowserOptions, BrowserConfig, BrowserOptions, EventOptions, Identify as IIdentify, Result, Revenue as IRevenue, TransportType } from '@amplitude/analytics-types';
|
|
3
3
|
export declare class AmplitudeBrowser extends AmplitudeCore<BrowserConfig> {
|
|
4
|
-
init(apiKey: string, userId?: string, options?: BrowserOptions): Promise<void>;
|
|
4
|
+
init(apiKey: string, userId?: string, options?: BrowserOptions & AdditionalBrowserOptions): Promise<void>;
|
|
5
|
+
runAttributionStrategy(attributionConfig?: AttributionBrowserOptions, isNewSession?: boolean): Promise<void>;
|
|
5
6
|
getUserId(): string | undefined;
|
|
6
7
|
setUserId(userId: string | undefined): void;
|
|
7
8
|
getDeviceId(): string | undefined;
|
|
@@ -14,7 +15,6 @@ export declare class AmplitudeBrowser extends AmplitudeCore<BrowserConfig> {
|
|
|
14
15
|
identify(identify: IIdentify, eventOptions?: EventOptions): Promise<Result>;
|
|
15
16
|
groupIdentify(groupType: string, groupName: string | string[], identify: IIdentify, eventOptions?: EventOptions): Promise<Result>;
|
|
16
17
|
revenue(revenue: IRevenue, eventOptions?: EventOptions): Promise<Result>;
|
|
17
|
-
trackAttributions(): Promise<Result> | undefined;
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
20
|
* Initializes the Amplitude SDK with your apiKey, userId and optional configurations.
|
|
@@ -24,7 +24,7 @@ export declare class AmplitudeBrowser extends AmplitudeCore<BrowserConfig> {
|
|
|
24
24
|
* await init(API_KEY, USER_ID, options).promise;
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
|
-
export declare const init: (apiKey: string, userId?: string | undefined, options?: BrowserOptions | undefined) => import("@amplitude/analytics-types").AmplitudeReturn<void>;
|
|
27
|
+
export declare const init: (apiKey: string, userId?: string | undefined, options?: (BrowserOptions & AdditionalBrowserOptions) | undefined) => import("@amplitude/analytics-types").AmplitudeReturn<void>;
|
|
28
28
|
/**
|
|
29
29
|
* Adds a new plugin.
|
|
30
30
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-client.d.ts","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAiD,MAAM,2BAA2B,CAAC;AACzG,OAAO,EACL,aAAa,EACb,cAAc,
|
|
1
|
+
{"version":3,"file":"browser-client.d.ts","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAiD,MAAM,2BAA2B,CAAC;AACzG,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,aAAa,EACb,cAAc,EAEd,YAAY,EACZ,QAAQ,IAAI,SAAS,EACrB,MAAM,EACN,OAAO,IAAI,QAAQ,EACnB,aAAa,EACd,MAAM,4BAA4B,CAAC;AAOpC,qBAAa,gBAAiB,SAAQ,aAAa,CAAC,aAAa,CAAC;IAC1D,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,wBAAwB;IAoCzF,sBAAsB,CAAC,iBAAiB,CAAC,EAAE,yBAAyB,EAAE,YAAY,UAAQ;IAehG,SAAS;IAIT,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAIpC,WAAW;IAIX,WAAW,CAAC,QAAQ,EAAE,MAAM;IAI5B,kBAAkB;IAKlB,YAAY;IAIZ,YAAY,CAAC,SAAS,EAAE,MAAM;IAI9B,SAAS,CAAC,MAAM,EAAE,OAAO;IAIzB,YAAY,CAAC,SAAS,EAAE,aAAa;IAIrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAS3E,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAC5B,QAAQ,EAAE,SAAS,EACnB,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,MAAM,CAAC;IASlB,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,YAAY;CAQvD;AAID;;;;;;;GAOG;AACH,eAAO,MAAM,IAAI,gLAA0C,CAAC;AAE5D;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG,qHAAyC,CAAC;AAE1D;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,oFAA4C,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,KAAK,mOAA2C,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,QAAQ,mOAA8C,CAAC;AAEpE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,QAAQ,gIAA8C,CAAC;AAEpE;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,iLAAmD,CAAC;AAC9E,eAAO,MAAM,QAAQ,mHAA8C,CAAC;AAEpE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,OAAO,8HAA6C,CAAC;AAElE;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,0BAAgC,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,WAlMF,MAAM,GAAG,SAAS,SAkMgB,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,0BAAkC,CAAC;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,aA9MA,MAAM,SA8M4B,CAAC;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,YAAyC,CAAC;AAEzE;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,0BAAmC,CAAC;AAE7D;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,cA/NC,MAAM,SA+N4B,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,WAxOF,OAAO,SAwO2B,CAAC;AAEvD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,cApPC,aAAa,SAoPqB,CAAC"}
|
|
@@ -5,9 +5,8 @@ var analytics_core_1 = require("@amplitude/analytics-core");
|
|
|
5
5
|
var snippet_helper_1 = require("./utils/snippet-helper");
|
|
6
6
|
var context_1 = require("./plugins/context");
|
|
7
7
|
var config_1 = require("./config");
|
|
8
|
-
var attribution_1 = require("./attribution");
|
|
9
|
-
var session_manager_1 = require("./session-manager");
|
|
10
8
|
var cookie_migration_1 = require("./cookie-migration");
|
|
9
|
+
var campaign_tracker_1 = require("./attribution/campaign-tracker");
|
|
11
10
|
var AmplitudeBrowser = /** @class */ (function (_super) {
|
|
12
11
|
(0, tslib_1.__extends)(AmplitudeBrowser, _super);
|
|
13
12
|
function AmplitudeBrowser() {
|
|
@@ -16,27 +15,58 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
|
|
|
16
15
|
AmplitudeBrowser.prototype.init = function (apiKey, userId, options) {
|
|
17
16
|
var _a, _b, _c;
|
|
18
17
|
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
19
|
-
var oldCookies, browserOptions;
|
|
18
|
+
var oldCookies, browserOptions, isNewSession;
|
|
20
19
|
return (0, tslib_1.__generator)(this, function (_d) {
|
|
21
20
|
switch (_d.label) {
|
|
22
21
|
case 0:
|
|
23
22
|
oldCookies = (0, cookie_migration_1.parseOldCookies)(apiKey, options);
|
|
24
|
-
browserOptions = (0, config_1.useBrowserConfig)(apiKey, userId || oldCookies.userId, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, options), { deviceId: (_a = oldCookies.deviceId) !== null && _a !== void 0 ? _a : options === null || options === void 0 ? void 0 : options.deviceId, sessionId: (_b = oldCookies.sessionId) !== null && _b !== void 0 ? _b : options === null || options === void 0 ? void 0 : options.sessionId, optOut: (_c = options === null || options === void 0 ? void 0 : options.optOut) !== null && _c !== void 0 ? _c : oldCookies.optOut }));
|
|
23
|
+
browserOptions = (0, config_1.useBrowserConfig)(apiKey, userId || oldCookies.userId, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, options), { deviceId: (_a = oldCookies.deviceId) !== null && _a !== void 0 ? _a : options === null || options === void 0 ? void 0 : options.deviceId, sessionId: (_b = oldCookies.sessionId) !== null && _b !== void 0 ? _b : options === null || options === void 0 ? void 0 : options.sessionId, optOut: (_c = options === null || options === void 0 ? void 0 : options.optOut) !== null && _c !== void 0 ? _c : oldCookies.optOut, lastEventTime: oldCookies.lastEventTime }));
|
|
25
24
|
return [4 /*yield*/, _super.prototype.init.call(this, undefined, undefined, browserOptions)];
|
|
26
25
|
case 1:
|
|
27
26
|
_d.sent();
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
isNewSession = false;
|
|
28
|
+
if (!this.config.sessionId ||
|
|
29
|
+
(this.config.lastEventTime && Date.now() - this.config.lastEventTime > this.config.sessionTimeout)) {
|
|
30
|
+
// Either
|
|
31
|
+
// 1) No previous session; or
|
|
32
|
+
// 2) Previous session expired
|
|
33
|
+
this.config.sessionId = Date.now();
|
|
34
|
+
isNewSession = true;
|
|
35
|
+
}
|
|
30
36
|
// Step 4: Install plugins
|
|
37
|
+
// Do not track any events before this
|
|
31
38
|
return [4 /*yield*/, this.add(new context_1.Context())];
|
|
32
39
|
case 2:
|
|
33
40
|
// Step 4: Install plugins
|
|
41
|
+
// Do not track any events before this
|
|
34
42
|
_d.sent();
|
|
35
43
|
return [4 /*yield*/, this.add(new analytics_core_1.Destination())];
|
|
36
44
|
case 3:
|
|
37
45
|
_d.sent();
|
|
38
|
-
// Step
|
|
39
|
-
|
|
46
|
+
// Step 5: Track attributions
|
|
47
|
+
return [4 /*yield*/, this.runAttributionStrategy(options === null || options === void 0 ? void 0 : options.attribution, isNewSession)];
|
|
48
|
+
case 4:
|
|
49
|
+
// Step 5: Track attributions
|
|
50
|
+
_d.sent();
|
|
51
|
+
return [2 /*return*/];
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
AmplitudeBrowser.prototype.runAttributionStrategy = function (attributionConfig, isNewSession) {
|
|
57
|
+
if (isNewSession === void 0) { isNewSession = false; }
|
|
58
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
59
|
+
var track, onNewCampaign, storage, campaignTracker;
|
|
60
|
+
return (0, tslib_1.__generator)(this, function (_a) {
|
|
61
|
+
switch (_a.label) {
|
|
62
|
+
case 0:
|
|
63
|
+
track = this.track.bind(this);
|
|
64
|
+
onNewCampaign = this.setSessionId.bind(this, Date.now());
|
|
65
|
+
storage = (0, config_1.createFlexibleStorage)(this.config);
|
|
66
|
+
campaignTracker = new campaign_tracker_1.CampaignTracker(this.config.apiKey, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, attributionConfig), { storage: storage, track: track, onNewCampaign: onNewCampaign }));
|
|
67
|
+
return [4 /*yield*/, campaignTracker.send(isNewSession)];
|
|
68
|
+
case 1:
|
|
69
|
+
_a.sent();
|
|
40
70
|
return [2 /*return*/];
|
|
41
71
|
}
|
|
42
72
|
});
|
|
@@ -47,14 +77,12 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
|
|
|
47
77
|
};
|
|
48
78
|
AmplitudeBrowser.prototype.setUserId = function (userId) {
|
|
49
79
|
this.config.userId = userId;
|
|
50
|
-
(0, session_manager_1.updateCookies)(this.config);
|
|
51
80
|
};
|
|
52
81
|
AmplitudeBrowser.prototype.getDeviceId = function () {
|
|
53
82
|
return this.config.deviceId;
|
|
54
83
|
};
|
|
55
84
|
AmplitudeBrowser.prototype.setDeviceId = function (deviceId) {
|
|
56
85
|
this.config.deviceId = deviceId;
|
|
57
|
-
(0, session_manager_1.updateCookies)(this.config);
|
|
58
86
|
};
|
|
59
87
|
AmplitudeBrowser.prototype.regenerateDeviceId = function () {
|
|
60
88
|
var deviceId = (0, config_1.createDeviceId)();
|
|
@@ -65,11 +93,9 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
|
|
|
65
93
|
};
|
|
66
94
|
AmplitudeBrowser.prototype.setSessionId = function (sessionId) {
|
|
67
95
|
this.config.sessionId = sessionId;
|
|
68
|
-
(0, session_manager_1.updateCookies)(this.config);
|
|
69
96
|
};
|
|
70
97
|
AmplitudeBrowser.prototype.setOptOut = function (optOut) {
|
|
71
|
-
|
|
72
|
-
(0, session_manager_1.updateCookies)(this.config);
|
|
98
|
+
this.config.optOut = optOut;
|
|
73
99
|
};
|
|
74
100
|
AmplitudeBrowser.prototype.setTransport = function (transport) {
|
|
75
101
|
this.config.transportProvider = (0, config_1.createTransport)(transport);
|
|
@@ -98,21 +124,6 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
|
|
|
98
124
|
}
|
|
99
125
|
return _super.prototype.revenue.call(this, revenue, eventOptions);
|
|
100
126
|
};
|
|
101
|
-
AmplitudeBrowser.prototype.trackAttributions = function () {
|
|
102
|
-
var attributions = (0, attribution_1.getAttributions)(this.config);
|
|
103
|
-
if (Object.keys(attributions).length === 0) {
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
var id = new analytics_core_1.Identify();
|
|
107
|
-
Object.entries(attributions).forEach(function (_a) {
|
|
108
|
-
var _b = (0, tslib_1.__read)(_a, 2), key = _b[0], value = _b[1];
|
|
109
|
-
if (value) {
|
|
110
|
-
id.setOnce("initial_".concat(key), value);
|
|
111
|
-
id.set(key, value);
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
return this.identify(id);
|
|
115
|
-
};
|
|
116
127
|
return AmplitudeBrowser;
|
|
117
128
|
}(analytics_core_1.AmplitudeCore));
|
|
118
129
|
exports.AmplitudeBrowser = AmplitudeBrowser;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-client.js","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { AmplitudeCore, Destination, Identify, Revenue, returnWrapper } from '@amplitude/analytics-core';\nimport {\n BrowserConfig,\n BrowserOptions,\n EventOptions,\n Identify as IIdentify,\n Result,\n Revenue as IRevenue,\n TransportType,\n} from '@amplitude/analytics-types';\nimport { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';\nimport { Context } from './plugins/context';\nimport { useBrowserConfig, createTransport, createDeviceId } from './config';\nimport { getAttributions } from './attribution';\nimport { updateCookies } from './session-manager';\nimport { parseOldCookies } from './cookie-migration';\n\nexport class AmplitudeBrowser extends AmplitudeCore<BrowserConfig> {\n async init(apiKey: string, userId?: string, options?: BrowserOptions) {\n // Step 1: Read cookies stored by old SDK\n const oldCookies = parseOldCookies(apiKey, options);\n\n // Step 2: Create browser config\n const browserOptions = useBrowserConfig(apiKey, userId || oldCookies.userId, {\n ...options,\n deviceId: oldCookies.deviceId ?? options?.deviceId,\n sessionId: oldCookies.sessionId ?? options?.sessionId,\n optOut: options?.optOut ?? oldCookies.optOut,\n });\n await super.init(undefined, undefined, browserOptions);\n\n // Step 3: Store user session in cookie storage\n updateCookies(this.config, oldCookies.lastEventTime);\n\n // Step 4: Install plugins\n await this.add(new Context());\n await this.add(new Destination());\n\n // Step 4: Track attributions\n void this.trackAttributions();\n }\n\n getUserId() {\n return this.config.userId;\n }\n\n setUserId(userId: string | undefined) {\n this.config.userId = userId;\n updateCookies(this.config);\n }\n\n getDeviceId() {\n return this.config.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n this.config.deviceId = deviceId;\n updateCookies(this.config);\n }\n\n regenerateDeviceId() {\n const deviceId = createDeviceId();\n this.setDeviceId(deviceId);\n }\n\n getSessionId() {\n return this.config.sessionId;\n }\n\n setSessionId(sessionId: number) {\n this.config.sessionId = sessionId;\n updateCookies(this.config);\n }\n\n setOptOut(optOut: boolean) {\n super.setOptOut(optOut);\n updateCookies(this.config);\n }\n\n setTransport(transport: TransportType) {\n this.config.transportProvider = createTransport(transport);\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions): Promise<Result> {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.identify(identify, eventOptions);\n }\n\n groupIdentify(\n groupType: string,\n groupName: string | string[],\n identify: IIdentify,\n eventOptions?: EventOptions,\n ): Promise<Result> {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.groupIdentify(groupType, groupName, identify, eventOptions);\n }\n\n revenue(revenue: IRevenue, eventOptions?: EventOptions) {\n if (isInstanceProxy(revenue)) {\n const queue = revenue._q;\n revenue._q = [];\n revenue = convertProxyObjectToRealObject(new Revenue(), queue);\n }\n return super.revenue(revenue, eventOptions);\n }\n\n trackAttributions() {\n const attributions = getAttributions(this.config);\n if (Object.keys(attributions).length === 0) {\n return;\n }\n const id = new Identify();\n Object.entries(attributions).forEach(([key, value]: [string, string]) => {\n if (value) {\n id.setOnce(`initial_${key}`, value);\n id.set(key, value);\n }\n });\n return this.identify(id);\n }\n}\n\nconst client = new AmplitudeBrowser();\n\n/**\n * Initializes the Amplitude SDK with your apiKey, userId and optional configurations.\n * This method must be called before any other operations.\n *\n * ```typescript\n * await init(API_KEY, USER_ID, options).promise;\n * ```\n */\nexport const init = returnWrapper(client.init.bind(client));\n\n/**\n * Adds a new plugin.\n *\n * ```typescript\n * const plugin = {...};\n * amplitude.add(plugin);\n * ```\n */\nexport const add = returnWrapper(client.add.bind(client));\n\n/**\n * Removes a plugin.\n *\n * ```typescript\n * amplitude.remove('myPlugin');\n * ```\n */\nexport const remove = returnWrapper(client.remove.bind(client));\n\n/**\n * Tracks user-defined event, with specified type, optional event properties and optional overwrites.\n *\n * ```typescript\n * // event tracking with event type only\n * track('Page Load');\n *\n * // event tracking with event type and additional event properties\n * track('Page Load', { loadTime: 1000 });\n *\n * // event tracking with event type, additional event properties, and overwritten event options\n * track('Page Load', { loadTime: 1000 }, { sessionId: -1 });\n *\n * // alternatively, this tracking method is awaitable\n * const result = await track('Page Load').promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const track = returnWrapper(client.track.bind(client));\n\n/**\n * Alias for track()\n */\nexport const logEvent = returnWrapper(client.logEvent.bind(client));\n\n/**\n * Sends an identify event containing user property operations\n *\n * ```typescript\n * const id = new Identify();\n * id.set('colors', ['rose', 'gold']);\n * identify(id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await identify(id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const identify = returnWrapper(client.identify.bind(client));\n\n/**\n * Sends a group identify event containing group property operations.\n *\n * ```typescript\n * const id = new Identify();\n * id.set('skills', ['js', 'ts']);\n * const groupType = 'org';\n * const groupName = 'engineering';\n * groupIdentify(groupType, groupName, id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await groupIdentify(groupType, groupName, id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const groupIdentify = returnWrapper(client.groupIdentify.bind(client));\nexport const setGroup = returnWrapper(client.setGroup.bind(client));\n\n/**\n * Sends a revenue event containing revenue property operations.\n *\n * ```typescript\n * const rev = new Revenue();\n * rev.setRevenue(100);\n * revenue(rev);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await revenue(rev).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const revenue = returnWrapper(client.revenue.bind(client));\n\n/**\n * Returns current user ID.\n *\n * ```typescript\n * const userId = getUserId();\n * ```\n */\nexport const getUserId = client.getUserId.bind(client);\n\n/**\n * Sets a new user ID.\n *\n * ```typescript\n * setUserId('userId');\n * ```\n */\nexport const setUserId = client.setUserId.bind(client);\n\n/**\n * Returns current device ID.\n *\n * ```typescript\n * const deviceId = getDeviceId();\n * ```\n */\nexport const getDeviceId = client.getDeviceId.bind(client);\n\n/**\n * Sets a new device ID.\n * When setting a custom device ID, make sure the value is sufficiently unique.\n * A uuid is recommended.\n *\n * ```typescript\n * setDeviceId('deviceId');\n * ```\n */\nexport const setDeviceId = client.setDeviceId.bind(client);\n\n/**\n * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you\n * are doing. This can be used in conjunction with `setUserId(undefined)` to anonymize users after they log out.\n * With an `unefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.\n *\n * ```typescript\n * regenerateDeviceId();\n * ```\n */\nexport const regenerateDeviceId = client.regenerateDeviceId.bind(client);\n\n/**\n * Returns current session ID.\n *\n * ```typescript\n * const sessionId = getSessionId();\n * ```\n */\nexport const getSessionId = client.getSessionId.bind(client);\n\n/**\n * Sets a new session ID.\n * When settign a custom session ID, make sure the value is in milliseconds since epoch (Unix Timestamp).\n *\n * ```typescript\n * setSessionId(Date.now());\n * ```\n */\nexport const setSessionId = client.setSessionId.bind(client);\n\n/**\n * Sets a new optOut config value. This toggles event tracking on/off.\n *\n *```typescript\n * // Stops tracking\n * setOptOut(true);\n *\n * // Starts/resumes tracking\n * setOptOut(false);\n * ```\n */\nexport const setOptOut = client.setOptOut.bind(client);\n\n/**\n * Sets the network transport type for events.\n *\n * ```typescript\n * // Use Fetch API\n * setTransport('fetch');\n *\n * // Use XMLHttpRequest API\n * setTransport('xhr');\n *\n * // Use navigator.sendBeacon API\n * setTransport('beacon');\n * ```\n */\nexport const setTransport = client.setTransport.bind(client);\n"]}
|
|
1
|
+
{"version":3,"file":"browser-client.js","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":";;;AAAA,4DAAyG;AAazG,yDAAyF;AACzF,6CAA4C;AAC5C,mCAAoG;AACpG,uDAAqD;AACrD,mEAAiE;AAEjE;IAAsC,iDAA4B;IAAlE;;IAwHA,CAAC;IAvHO,+BAAI,GAAV,UAAW,MAAc,EAAE,MAAe,EAAE,OAAmD;;;;;;;wBAEvF,UAAU,GAAG,IAAA,kCAAe,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;wBAG9C,cAAc,GAAG,IAAA,yBAAgB,EAAC,MAAM,EAAE,MAAM,IAAI,UAAU,CAAC,MAAM,kDACtE,OAAO,KACV,QAAQ,EAAE,MAAA,UAAU,CAAC,QAAQ,mCAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,EAClD,SAAS,EAAE,MAAA,UAAU,CAAC,SAAS,mCAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,EACrD,MAAM,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,mCAAI,UAAU,CAAC,MAAM,EAC5C,aAAa,EAAE,UAAU,CAAC,aAAa,IACvC,CAAC;wBACH,qBAAM,iBAAM,IAAI,YAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,EAAA;;wBAAtD,SAAsD,CAAC;wBAGnD,YAAY,GAAG,KAAK,CAAC;wBACzB,IACE,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS;4BACtB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAClG;4BACA,SAAS;4BACT,6BAA6B;4BAC7B,8BAA8B;4BAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;4BACnC,YAAY,GAAG,IAAI,CAAC;yBACrB;wBAED,0BAA0B;wBAC1B,sCAAsC;wBACtC,qBAAM,IAAI,CAAC,GAAG,CAAC,IAAI,iBAAO,EAAE,CAAC,EAAA;;wBAF7B,0BAA0B;wBAC1B,sCAAsC;wBACtC,SAA6B,CAAC;wBAC9B,qBAAM,IAAI,CAAC,GAAG,CAAC,IAAI,4BAAW,EAAE,CAAC,EAAA;;wBAAjC,SAAiC,CAAC;wBAElC,6BAA6B;wBAC7B,qBAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,EAAE,YAAY,CAAC,EAAA;;wBADrE,6BAA6B;wBAC7B,SAAqE,CAAC;;;;;KACvE;IAEK,iDAAsB,GAA5B,UAA6B,iBAA6C,EAAE,YAAoB;QAApB,6BAAA,EAAA,oBAAoB;;;;;;wBACxF,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC9B,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;wBAEzD,OAAO,GAAG,IAAA,8BAAqB,EAAW,IAAI,CAAC,MAAM,CAAC,CAAC;wBACvD,eAAe,GAAG,IAAI,kCAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,kDACzD,iBAAiB,KACpB,OAAO,SAAA,EACP,KAAK,OAAA,EACL,aAAa,eAAA,IACb,CAAC;wBAEH,qBAAM,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,EAAA;;wBAAxC,SAAwC,CAAC;;;;;KAC1C;IAED,oCAAS,GAAT;QACE,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,oCAAS,GAAT,UAAU,MAA0B;QAClC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IAC9B,CAAC;IAED,sCAAW,GAAX;QACE,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAED,sCAAW,GAAX,UAAY,QAAgB;QAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAClC,CAAC;IAED,6CAAkB,GAAlB;QACE,IAAM,QAAQ,GAAG,IAAA,uBAAc,GAAE,CAAC;QAClC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAED,uCAAY,GAAZ;QACE,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IAC/B,CAAC;IAED,uCAAY,GAAZ,UAAa,SAAiB;QAC5B,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;IACpC,CAAC;IAED,oCAAS,GAAT,UAAU,MAAe;QACvB,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IAC9B,CAAC;IAED,uCAAY,GAAZ,UAAa,SAAwB;QACnC,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,IAAA,wBAAe,EAAC,SAAS,CAAC,CAAC;IAC7D,CAAC;IAED,mCAAQ,GAAR,UAAS,QAAmB,EAAE,YAA2B;QACvD,IAAI,IAAA,gCAAe,EAAC,QAAQ,CAAC,EAAE;YAC7B,IAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;YACjB,QAAQ,GAAG,IAAA,+CAA8B,EAAC,IAAI,yBAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;SAClE;QACD,OAAO,iBAAM,QAAQ,YAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAChD,CAAC;IAED,wCAAa,GAAb,UACE,SAAiB,EACjB,SAA4B,EAC5B,QAAmB,EACnB,YAA2B;QAE3B,IAAI,IAAA,gCAAe,EAAC,QAAQ,CAAC,EAAE;YAC7B,IAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;YACjB,QAAQ,GAAG,IAAA,+CAA8B,EAAC,IAAI,yBAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;SAClE;QACD,OAAO,iBAAM,aAAa,YAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC3E,CAAC;IAED,kCAAO,GAAP,UAAQ,OAAiB,EAAE,YAA2B;QACpD,IAAI,IAAA,gCAAe,EAAC,OAAO,CAAC,EAAE;YAC5B,IAAM,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;YAChB,OAAO,GAAG,IAAA,+CAA8B,EAAC,IAAI,wBAAO,EAAE,EAAE,KAAK,CAAC,CAAC;SAChE;QACD,OAAO,iBAAM,OAAO,YAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC9C,CAAC;IACH,uBAAC;AAAD,CAAC,AAxHD,CAAsC,8BAAa,GAwHlD;AAxHY,4CAAgB;AA0H7B,IAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAEtC;;;;;;;GAOG;AACU,QAAA,IAAI,GAAG,IAAA,8BAAa,EAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAE5D;;;;;;;GAOG;AACU,QAAA,GAAG,GAAG,IAAA,8BAAa,EAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAE1D;;;;;;GAMG;AACU,QAAA,MAAM,GAAG,IAAA,8BAAa,EAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;GAmBG;AACU,QAAA,KAAK,GAAG,IAAA,8BAAa,EAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAE9D;;GAEG;AACU,QAAA,QAAQ,GAAG,IAAA,8BAAa,EAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAEpE;;;;;;;;;;;;;;GAcG;AACU,QAAA,QAAQ,GAAG,IAAA,8BAAa,EAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAEpE;;;;;;;;;;;;;;;;GAgBG;AACU,QAAA,aAAa,GAAG,IAAA,8BAAa,EAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACjE,QAAA,QAAQ,GAAG,IAAA,8BAAa,EAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAEpE;;;;;;;;;;;;;;GAcG;AACU,QAAA,OAAO,GAAG,IAAA,8BAAa,EAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAElE;;;;;;GAMG;AACU,QAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEvD;;;;;;GAMG;AACU,QAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEvD;;;;;;GAMG;AACU,QAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAE3D;;;;;;;;GAQG;AACU,QAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAE3D;;;;;;;;GAQG;AACU,QAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEzE;;;;;;GAMG;AACU,QAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAE7D;;;;;;;GAOG;AACU,QAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAE7D;;;;;;;;;;GAUG;AACU,QAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEvD;;;;;;;;;;;;;GAaG;AACU,QAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC","sourcesContent":["import { AmplitudeCore, Destination, Identify, Revenue, returnWrapper } from '@amplitude/analytics-core';\nimport {\n AdditionalBrowserOptions,\n AttributionBrowserOptions,\n BrowserConfig,\n BrowserOptions,\n Campaign,\n EventOptions,\n Identify as IIdentify,\n Result,\n Revenue as IRevenue,\n TransportType,\n} from '@amplitude/analytics-types';\nimport { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';\nimport { Context } from './plugins/context';\nimport { useBrowserConfig, createTransport, createDeviceId, createFlexibleStorage } from './config';\nimport { parseOldCookies } from './cookie-migration';\nimport { CampaignTracker } from './attribution/campaign-tracker';\n\nexport class AmplitudeBrowser extends AmplitudeCore<BrowserConfig> {\n async init(apiKey: string, userId?: string, options?: BrowserOptions & AdditionalBrowserOptions) {\n // Step 1: Read cookies stored by old SDK\n const oldCookies = parseOldCookies(apiKey, options);\n\n // Step 2: Create browser config\n const browserOptions = useBrowserConfig(apiKey, userId || oldCookies.userId, {\n ...options,\n deviceId: oldCookies.deviceId ?? options?.deviceId,\n sessionId: oldCookies.sessionId ?? options?.sessionId,\n optOut: options?.optOut ?? oldCookies.optOut,\n lastEventTime: oldCookies.lastEventTime,\n });\n await super.init(undefined, undefined, browserOptions);\n\n // Step 3: Manage session\n let isNewSession = false;\n if (\n !this.config.sessionId ||\n (this.config.lastEventTime && Date.now() - this.config.lastEventTime > this.config.sessionTimeout)\n ) {\n // Either\n // 1) No previous session; or\n // 2) Previous session expired\n this.config.sessionId = Date.now();\n isNewSession = true;\n }\n\n // Step 4: Install plugins\n // Do not track any events before this\n await this.add(new Context());\n await this.add(new Destination());\n\n // Step 5: Track attributions\n await this.runAttributionStrategy(options?.attribution, isNewSession);\n }\n\n async runAttributionStrategy(attributionConfig?: AttributionBrowserOptions, isNewSession = false) {\n const track = this.track.bind(this);\n const onNewCampaign = this.setSessionId.bind(this, Date.now());\n\n const storage = createFlexibleStorage<Campaign>(this.config);\n const campaignTracker = new CampaignTracker(this.config.apiKey, {\n ...attributionConfig,\n storage,\n track,\n onNewCampaign,\n });\n\n await campaignTracker.send(isNewSession);\n }\n\n getUserId() {\n return this.config.userId;\n }\n\n setUserId(userId: string | undefined) {\n this.config.userId = userId;\n }\n\n getDeviceId() {\n return this.config.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n this.config.deviceId = deviceId;\n }\n\n regenerateDeviceId() {\n const deviceId = createDeviceId();\n this.setDeviceId(deviceId);\n }\n\n getSessionId() {\n return this.config.sessionId;\n }\n\n setSessionId(sessionId: number) {\n this.config.sessionId = sessionId;\n }\n\n setOptOut(optOut: boolean) {\n this.config.optOut = optOut;\n }\n\n setTransport(transport: TransportType) {\n this.config.transportProvider = createTransport(transport);\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions): Promise<Result> {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.identify(identify, eventOptions);\n }\n\n groupIdentify(\n groupType: string,\n groupName: string | string[],\n identify: IIdentify,\n eventOptions?: EventOptions,\n ): Promise<Result> {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.groupIdentify(groupType, groupName, identify, eventOptions);\n }\n\n revenue(revenue: IRevenue, eventOptions?: EventOptions) {\n if (isInstanceProxy(revenue)) {\n const queue = revenue._q;\n revenue._q = [];\n revenue = convertProxyObjectToRealObject(new Revenue(), queue);\n }\n return super.revenue(revenue, eventOptions);\n }\n}\n\nconst client = new AmplitudeBrowser();\n\n/**\n * Initializes the Amplitude SDK with your apiKey, userId and optional configurations.\n * This method must be called before any other operations.\n *\n * ```typescript\n * await init(API_KEY, USER_ID, options).promise;\n * ```\n */\nexport const init = returnWrapper(client.init.bind(client));\n\n/**\n * Adds a new plugin.\n *\n * ```typescript\n * const plugin = {...};\n * amplitude.add(plugin);\n * ```\n */\nexport const add = returnWrapper(client.add.bind(client));\n\n/**\n * Removes a plugin.\n *\n * ```typescript\n * amplitude.remove('myPlugin');\n * ```\n */\nexport const remove = returnWrapper(client.remove.bind(client));\n\n/**\n * Tracks user-defined event, with specified type, optional event properties and optional overwrites.\n *\n * ```typescript\n * // event tracking with event type only\n * track('Page Load');\n *\n * // event tracking with event type and additional event properties\n * track('Page Load', { loadTime: 1000 });\n *\n * // event tracking with event type, additional event properties, and overwritten event options\n * track('Page Load', { loadTime: 1000 }, { sessionId: -1 });\n *\n * // alternatively, this tracking method is awaitable\n * const result = await track('Page Load').promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const track = returnWrapper(client.track.bind(client));\n\n/**\n * Alias for track()\n */\nexport const logEvent = returnWrapper(client.logEvent.bind(client));\n\n/**\n * Sends an identify event containing user property operations\n *\n * ```typescript\n * const id = new Identify();\n * id.set('colors', ['rose', 'gold']);\n * identify(id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await identify(id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const identify = returnWrapper(client.identify.bind(client));\n\n/**\n * Sends a group identify event containing group property operations.\n *\n * ```typescript\n * const id = new Identify();\n * id.set('skills', ['js', 'ts']);\n * const groupType = 'org';\n * const groupName = 'engineering';\n * groupIdentify(groupType, groupName, id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await groupIdentify(groupType, groupName, id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const groupIdentify = returnWrapper(client.groupIdentify.bind(client));\nexport const setGroup = returnWrapper(client.setGroup.bind(client));\n\n/**\n * Sends a revenue event containing revenue property operations.\n *\n * ```typescript\n * const rev = new Revenue();\n * rev.setRevenue(100);\n * revenue(rev);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await revenue(rev).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const revenue = returnWrapper(client.revenue.bind(client));\n\n/**\n * Returns current user ID.\n *\n * ```typescript\n * const userId = getUserId();\n * ```\n */\nexport const getUserId = client.getUserId.bind(client);\n\n/**\n * Sets a new user ID.\n *\n * ```typescript\n * setUserId('userId');\n * ```\n */\nexport const setUserId = client.setUserId.bind(client);\n\n/**\n * Returns current device ID.\n *\n * ```typescript\n * const deviceId = getDeviceId();\n * ```\n */\nexport const getDeviceId = client.getDeviceId.bind(client);\n\n/**\n * Sets a new device ID.\n * When setting a custom device ID, make sure the value is sufficiently unique.\n * A uuid is recommended.\n *\n * ```typescript\n * setDeviceId('deviceId');\n * ```\n */\nexport const setDeviceId = client.setDeviceId.bind(client);\n\n/**\n * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you\n * are doing. This can be used in conjunction with `setUserId(undefined)` to anonymize users after they log out.\n * With an `unefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.\n *\n * ```typescript\n * regenerateDeviceId();\n * ```\n */\nexport const regenerateDeviceId = client.regenerateDeviceId.bind(client);\n\n/**\n * Returns current session ID.\n *\n * ```typescript\n * const sessionId = getSessionId();\n * ```\n */\nexport const getSessionId = client.getSessionId.bind(client);\n\n/**\n * Sets a new session ID.\n * When settign a custom session ID, make sure the value is in milliseconds since epoch (Unix Timestamp).\n *\n * ```typescript\n * setSessionId(Date.now());\n * ```\n */\nexport const setSessionId = client.setSessionId.bind(client);\n\n/**\n * Sets a new optOut config value. This toggles event tracking on/off.\n *\n *```typescript\n * // Stops tracking\n * setOptOut(true);\n *\n * // Starts/resumes tracking\n * setOptOut(false);\n * ```\n */\nexport const setOptOut = client.setOptOut.bind(client);\n\n/**\n * Sets the network transport type for events.\n *\n * ```typescript\n * // Use Fetch API\n * setTransport('fetch');\n *\n * // Use XMLHttpRequest API\n * setTransport('xhr');\n *\n * // Use navigator.sendBeacon API\n * setTransport('beacon');\n * ```\n */\nexport const setTransport = client.setTransport.bind(client);\n"]}
|