@amplitude/analytics-client-common 2.1.3 → 2.1.4-beta.0
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/lib/cjs/attribution/helpers.d.ts +11 -0
- package/lib/cjs/attribution/helpers.d.ts.map +1 -0
- package/lib/cjs/attribution/helpers.js +66 -0
- package/lib/cjs/attribution/helpers.js.map +1 -0
- package/lib/cjs/attribution/web-attribution.d.ts +22 -0
- package/lib/cjs/attribution/web-attribution.d.ts.map +1 -0
- package/lib/cjs/attribution/web-attribution.js +67 -0
- package/lib/cjs/attribution/web-attribution.js.map +1 -0
- package/lib/cjs/index.d.ts +4 -1
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +12 -3
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/storage/helpers.d.ts +2 -0
- package/lib/cjs/storage/helpers.d.ts.map +1 -0
- package/lib/cjs/storage/helpers.js +10 -0
- package/lib/cjs/storage/helpers.js.map +1 -0
- package/lib/esm/attribution/helpers.d.ts +11 -0
- package/lib/esm/attribution/helpers.d.ts.map +1 -0
- package/lib/esm/attribution/helpers.js +60 -0
- package/lib/esm/attribution/helpers.js.map +1 -0
- package/lib/esm/attribution/web-attribution.d.ts +22 -0
- package/lib/esm/attribution/web-attribution.d.ts.map +1 -0
- package/lib/esm/attribution/web-attribution.js +65 -0
- package/lib/esm/attribution/web-attribution.js.map +1 -0
- package/lib/esm/index.d.ts +4 -1
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/index.js +4 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/storage/helpers.d.ts +2 -0
- package/lib/esm/storage/helpers.d.ts.map +1 -0
- package/lib/esm/storage/helpers.js +7 -0
- package/lib/esm/storage/helpers.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Campaign } from '@amplitude/analytics-types';
|
|
2
|
+
export interface Options {
|
|
3
|
+
excludeReferrers?: (string | RegExp)[];
|
|
4
|
+
initialEmptyValue?: string;
|
|
5
|
+
resetSessionOnNewCampaign?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const isNewCampaign: (current: Campaign, previous: Campaign | undefined, options: Options, isNewSession?: boolean) => boolean;
|
|
8
|
+
export declare const isExcludedReferrer: (excludeReferrers?: (string | RegExp)[], referringDomain?: string) => boolean;
|
|
9
|
+
export declare const createCampaignEvent: (campaign: Campaign, options: Options) => import("@amplitude/analytics-types").IdentifyEvent;
|
|
10
|
+
export declare const getDefaultExcludedReferrers: (cookieDomain: string | undefined) => RegExp[];
|
|
11
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/attribution/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAGtD,MAAM,WAAW,OAAO;IACtB,gBAAgB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACvC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAiBD,eAAO,MAAM,aAAa,YACf,QAAQ,YACP,QAAQ,GAAG,SAAS,WACrB,OAAO,oCAoBjB,CAAC;AAEF,eAAO,MAAM,kBAAkB,sBAAsB,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,sCAIvE,CAAC;AAEF,eAAO,MAAM,mBAAmB,aAAc,QAAQ,WAAW,OAAO,uDAgBvE,CAAC;AAEF,eAAO,MAAM,2BAA2B,iBAAkB,MAAM,GAAG,SAAS,aAS3E,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
+
exports.getDefaultExcludedReferrers = exports.createCampaignEvent = exports.isExcludedReferrer = exports.isNewCampaign = void 0;
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
4
|
+
var analytics_core_1 = require("@amplitude/analytics-core");
|
|
5
|
+
var constants_1 = require("./constants");
|
|
6
|
+
var domainWithoutSubdomain = function (domain) {
|
|
7
|
+
var parts = domain.split('.');
|
|
8
|
+
if (parts.length <= 2) {
|
|
9
|
+
return domain;
|
|
10
|
+
}
|
|
11
|
+
return parts.slice(parts.length - 2, parts.length).join('.');
|
|
12
|
+
};
|
|
13
|
+
//Direct traffic mean no external referral, no UTMs, no click-ids, and no other customer identified marketing campaign url params.
|
|
14
|
+
var isDirectTraffic = function (current) {
|
|
15
|
+
return Object.values(current).every(function (value) { return !value; });
|
|
16
|
+
};
|
|
17
|
+
var isNewCampaign = function (current, previous, options, isNewSession) {
|
|
18
|
+
if (isNewSession === void 0) { isNewSession = true; }
|
|
19
|
+
var referrer = current.referrer, referring_domain = current.referring_domain, currentCampaign = tslib_1.__rest(current, ["referrer", "referring_domain"]);
|
|
20
|
+
var _a = previous || {}, _previous_referrer = _a.referrer, prevReferringDomain = _a.referring_domain, previousCampaign = tslib_1.__rest(_a, ["referrer", "referring_domain"]);
|
|
21
|
+
if ((0, exports.isExcludedReferrer)(options.excludeReferrers, current.referring_domain)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
//In the same session, direct traffic should not override or unset any persisting query params
|
|
25
|
+
if (!isNewSession && isDirectTraffic(current) && previous) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
var hasNewCampaign = JSON.stringify(currentCampaign) !== JSON.stringify(previousCampaign);
|
|
29
|
+
var hasNewDomain = domainWithoutSubdomain(referring_domain || '') !== domainWithoutSubdomain(prevReferringDomain || '');
|
|
30
|
+
return !previous || hasNewCampaign || hasNewDomain;
|
|
31
|
+
};
|
|
32
|
+
exports.isNewCampaign = isNewCampaign;
|
|
33
|
+
var isExcludedReferrer = function (excludeReferrers, referringDomain) {
|
|
34
|
+
if (excludeReferrers === void 0) { excludeReferrers = []; }
|
|
35
|
+
if (referringDomain === void 0) { referringDomain = ''; }
|
|
36
|
+
return excludeReferrers.some(function (value) {
|
|
37
|
+
return value instanceof RegExp ? value.test(referringDomain) : value === referringDomain;
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
exports.isExcludedReferrer = isExcludedReferrer;
|
|
41
|
+
var createCampaignEvent = function (campaign, options) {
|
|
42
|
+
var campaignParameters = tslib_1.__assign(tslib_1.__assign({}, constants_1.BASE_CAMPAIGN), campaign);
|
|
43
|
+
var identifyEvent = Object.entries(campaignParameters).reduce(function (identify, _a) {
|
|
44
|
+
var _b;
|
|
45
|
+
var _c = tslib_1.__read(_a, 2), key = _c[0], value = _c[1];
|
|
46
|
+
identify.setOnce("initial_".concat(key), (_b = value !== null && value !== void 0 ? value : options.initialEmptyValue) !== null && _b !== void 0 ? _b : 'EMPTY');
|
|
47
|
+
if (value) {
|
|
48
|
+
return identify.set(key, value);
|
|
49
|
+
}
|
|
50
|
+
return identify.unset(key);
|
|
51
|
+
}, new analytics_core_1.Identify());
|
|
52
|
+
return (0, analytics_core_1.createIdentifyEvent)(identifyEvent);
|
|
53
|
+
};
|
|
54
|
+
exports.createCampaignEvent = createCampaignEvent;
|
|
55
|
+
var getDefaultExcludedReferrers = function (cookieDomain) {
|
|
56
|
+
var domain = cookieDomain;
|
|
57
|
+
if (domain) {
|
|
58
|
+
if (domain.startsWith('.')) {
|
|
59
|
+
domain = domain.substring(1);
|
|
60
|
+
}
|
|
61
|
+
return [new RegExp("".concat(domain.replace('.', '\\.'), "$"))];
|
|
62
|
+
}
|
|
63
|
+
return [];
|
|
64
|
+
};
|
|
65
|
+
exports.getDefaultExcludedReferrers = getDefaultExcludedReferrers;
|
|
66
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/attribution/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { createIdentifyEvent, Identify } from '@amplitude/analytics-core';\nimport { Campaign } from '@amplitude/analytics-types';\nimport { BASE_CAMPAIGN } from './constants';\n\nexport interface Options {\n excludeReferrers?: (string | RegExp)[];\n initialEmptyValue?: string;\n resetSessionOnNewCampaign?: boolean;\n}\n\nconst domainWithoutSubdomain = (domain: string) => {\n const parts = domain.split('.');\n\n if (parts.length <= 2) {\n return domain;\n }\n\n return parts.slice(parts.length - 2, parts.length).join('.');\n};\n\n//Direct traffic mean no external referral, no UTMs, no click-ids, and no other customer identified marketing campaign url params.\nconst isDirectTraffic = (current: Campaign) => {\n return Object.values(current).every((value) => !value);\n};\n\nexport const isNewCampaign = (\n current: Campaign,\n previous: Campaign | undefined,\n options: Options,\n isNewSession = true,\n) => {\n const { referrer, referring_domain, ...currentCampaign } = current;\n const { referrer: _previous_referrer, referring_domain: prevReferringDomain, ...previousCampaign } = previous || {};\n\n if (isExcludedReferrer(options.excludeReferrers, current.referring_domain)) {\n return false;\n }\n\n //In the same session, direct traffic should not override or unset any persisting query params\n if (!isNewSession && isDirectTraffic(current) && previous) {\n return false;\n }\n\n const hasNewCampaign = JSON.stringify(currentCampaign) !== JSON.stringify(previousCampaign);\n const hasNewDomain =\n domainWithoutSubdomain(referring_domain || '') !== domainWithoutSubdomain(prevReferringDomain || '');\n\n return !previous || hasNewCampaign || hasNewDomain;\n};\n\nexport const isExcludedReferrer = (excludeReferrers: (string | RegExp)[] = [], referringDomain = '') => {\n return excludeReferrers.some((value) =>\n value instanceof RegExp ? value.test(referringDomain) : value === referringDomain,\n );\n};\n\nexport const createCampaignEvent = (campaign: Campaign, options: Options) => {\n const campaignParameters: Campaign = {\n // This object definition allows undefined keys to be iterated on\n // in .reduce() to build indentify object\n ...BASE_CAMPAIGN,\n ...campaign,\n };\n const identifyEvent = Object.entries(campaignParameters).reduce((identify, [key, value]) => {\n identify.setOnce(`initial_${key}`, value ?? options.initialEmptyValue ?? 'EMPTY');\n if (value) {\n return identify.set(key, value);\n }\n return identify.unset(key);\n }, new Identify());\n\n return createIdentifyEvent(identifyEvent);\n};\n\nexport const getDefaultExcludedReferrers = (cookieDomain: string | undefined) => {\n let domain = cookieDomain;\n if (domain) {\n if (domain.startsWith('.')) {\n domain = domain.substring(1);\n }\n return [new RegExp(`${domain.replace('.', '\\\\.')}$`)];\n }\n return [];\n};\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BrowserConfig } from '@amplitude/analytics-types';
|
|
2
|
+
import { Campaign, Storage } from '@amplitude/analytics-types';
|
|
3
|
+
import { Options } from './helpers';
|
|
4
|
+
export declare class WebAttribution {
|
|
5
|
+
options: Options;
|
|
6
|
+
storage: Storage<Campaign>;
|
|
7
|
+
storageKey: string;
|
|
8
|
+
previousCampaign?: Campaign;
|
|
9
|
+
currentCampaign: Campaign;
|
|
10
|
+
shouldTrackNewCampaign: boolean;
|
|
11
|
+
constructor(options: Options, config: BrowserConfig);
|
|
12
|
+
init(): Promise<void>;
|
|
13
|
+
fetchCampaign(): Promise<[Campaign, Campaign | undefined]>;
|
|
14
|
+
/**
|
|
15
|
+
* This can be called when enable web attribution and either
|
|
16
|
+
* 1. set a new session
|
|
17
|
+
* 2. has new campaign and enable resetSessionOnNewCampaign
|
|
18
|
+
*/
|
|
19
|
+
generateCampaignEvent(event_id?: number): import("@amplitude/analytics-types").IdentifyEvent;
|
|
20
|
+
shouldSetSessionIdOnNewCampaign(): boolean;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=web-attribution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-attribution.d.ts","sourceRoot":"","sources":["../../../src/attribution/web-attribution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAmE,MAAM,WAAW,CAAC;AAKrG,qBAAa,cAAc;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,QAAQ,CAAC;IAC5B,eAAe,EAAE,QAAQ,CAAC;IAC1B,sBAAsB,UAAS;gBAEnB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa;IAa7C,IAAI;IASJ,aAAa;IAInB;;;;OAIG;IACH,qBAAqB,CAAC,QAAQ,CAAC,EAAE,MAAM;IAUvC,+BAA+B;CAGhC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
+
exports.WebAttribution = void 0;
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
4
|
+
var helpers_1 = require("./helpers");
|
|
5
|
+
var helpers_2 = require("../storage/helpers");
|
|
6
|
+
var campaign_parser_1 = require("./campaign-parser");
|
|
7
|
+
var constants_1 = require("./constants");
|
|
8
|
+
var WebAttribution = /** @class */ (function () {
|
|
9
|
+
function WebAttribution(options, config) {
|
|
10
|
+
var _a;
|
|
11
|
+
this.shouldTrackNewCampaign = false;
|
|
12
|
+
this.options = tslib_1.__assign({ initialEmptyValue: 'EMPTY', resetSessionOnNewCampaign: false, excludeReferrers: (0, helpers_1.getDefaultExcludedReferrers)((_a = config.cookieOptions) === null || _a === void 0 ? void 0 : _a.domain) }, options);
|
|
13
|
+
this.storage = config.cookieStorage;
|
|
14
|
+
this.storageKey = (0, helpers_2.getStorageKey)(config.apiKey, 'MKTG');
|
|
15
|
+
this.currentCampaign = constants_1.BASE_CAMPAIGN;
|
|
16
|
+
config.loggerProvider.log('Installing web attribution tracking.');
|
|
17
|
+
}
|
|
18
|
+
WebAttribution.prototype.init = function () {
|
|
19
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
20
|
+
var _a;
|
|
21
|
+
return tslib_1.__generator(this, function (_b) {
|
|
22
|
+
switch (_b.label) {
|
|
23
|
+
case 0: return [4 /*yield*/, this.fetchCampaign()];
|
|
24
|
+
case 1:
|
|
25
|
+
_a = tslib_1.__read.apply(void 0, [_b.sent(), 2]), this.currentCampaign = _a[0], this.previousCampaign = _a[1];
|
|
26
|
+
if (!(0, helpers_1.isNewCampaign)(this.currentCampaign, this.previousCampaign, this.options)) return [3 /*break*/, 3];
|
|
27
|
+
this.shouldTrackNewCampaign = true;
|
|
28
|
+
return [4 /*yield*/, this.storage.set(this.storageKey, this.currentCampaign)];
|
|
29
|
+
case 2:
|
|
30
|
+
_b.sent();
|
|
31
|
+
_b.label = 3;
|
|
32
|
+
case 3: return [2 /*return*/];
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
WebAttribution.prototype.fetchCampaign = function () {
|
|
38
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
39
|
+
return tslib_1.__generator(this, function (_a) {
|
|
40
|
+
switch (_a.label) {
|
|
41
|
+
case 0: return [4 /*yield*/, Promise.all([new campaign_parser_1.CampaignParser().parse(), this.storage.get(this.storageKey)])];
|
|
42
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* This can be called when enable web attribution and either
|
|
49
|
+
* 1. set a new session
|
|
50
|
+
* 2. has new campaign and enable resetSessionOnNewCampaign
|
|
51
|
+
*/
|
|
52
|
+
WebAttribution.prototype.generateCampaignEvent = function (event_id) {
|
|
53
|
+
// Mark this campaign has been tracked
|
|
54
|
+
this.shouldTrackNewCampaign = false;
|
|
55
|
+
var campaignEvent = (0, helpers_1.createCampaignEvent)(this.currentCampaign, this.options);
|
|
56
|
+
if (event_id) {
|
|
57
|
+
campaignEvent.event_id = event_id;
|
|
58
|
+
}
|
|
59
|
+
return campaignEvent;
|
|
60
|
+
};
|
|
61
|
+
WebAttribution.prototype.shouldSetSessionIdOnNewCampaign = function () {
|
|
62
|
+
return this.shouldTrackNewCampaign && !!this.options.resetSessionOnNewCampaign;
|
|
63
|
+
};
|
|
64
|
+
return WebAttribution;
|
|
65
|
+
}());
|
|
66
|
+
exports.WebAttribution = WebAttribution;
|
|
67
|
+
//# sourceMappingURL=web-attribution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-attribution.js","sourceRoot":"","sources":["../../../src/attribution/web-attribution.ts"],"names":[],"mappings":";;;AAEA,qCAAqG;AACrG,8CAAmD;AACnD,qDAAmD;AACnD,yCAA4C;AAE5C;IAQE,wBAAY,OAAgB,EAAE,MAAqB;;QAFnD,2BAAsB,GAAG,KAAK,CAAC;QAG7B,IAAI,CAAC,OAAO,sBACV,iBAAiB,EAAE,OAAO,EAC1B,yBAAyB,EAAE,KAAK,EAChC,gBAAgB,EAAE,IAAA,qCAA2B,EAAC,MAAA,MAAM,CAAC,aAAa,0CAAE,MAAM,CAAC,IACxE,OAAO,CACX,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,aAA6C,CAAC;QACpE,IAAI,CAAC,UAAU,GAAG,IAAA,uBAAa,EAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,eAAe,GAAG,yBAAa,CAAC;QACrC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACpE,CAAC;IAEK,6BAAI,GAAV;;;;;4BACkD,qBAAM,IAAI,CAAC,aAAa,EAAE,EAAA;;wBAA1E,KAAA,8BAAgD,SAA0B,KAAA,EAAzE,IAAI,CAAC,eAAe,QAAA,EAAE,IAAI,CAAC,gBAAgB,QAAA,CAA+B;6BAEvE,IAAA,uBAAa,EAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,EAAxE,wBAAwE;wBAC1E,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;wBACnC,qBAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,EAAA;;wBAA7D,SAA6D,CAAC;;;;;;KAEjE;IAEK,sCAAa,GAAnB;;;;4BACS,qBAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,gCAAc,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAA;4BAA3F,sBAAO,SAAoF,EAAC;;;;KAC7F;IAED;;;;OAIG;IACH,8CAAqB,GAArB,UAAsB,QAAiB;QACrC,sCAAsC;QACtC,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;QACpC,IAAM,aAAa,GAAG,IAAA,6BAAmB,EAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9E,IAAI,QAAQ,EAAE;YACZ,aAAa,CAAC,QAAQ,GAAG,QAAQ,CAAC;SACnC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,wDAA+B,GAA/B;QACE,OAAO,IAAI,CAAC,sBAAsB,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC;IACjF,CAAC;IACH,qBAAC;AAAD,CAAC,AApDD,IAoDC;AApDY,wCAAc","sourcesContent":["import { BrowserConfig } from '@amplitude/analytics-types';\nimport { Campaign, Storage } from '@amplitude/analytics-types';\nimport { Options, getDefaultExcludedReferrers, createCampaignEvent, isNewCampaign } from './helpers';\nimport { getStorageKey } from '../storage/helpers';\nimport { CampaignParser } from './campaign-parser';\nimport { BASE_CAMPAIGN } from './constants';\n\nexport class WebAttribution {\n options: Options;\n storage: Storage<Campaign>;\n storageKey: string;\n previousCampaign?: Campaign;\n currentCampaign: Campaign;\n shouldTrackNewCampaign = false;\n\n constructor(options: Options, config: BrowserConfig) {\n this.options = {\n initialEmptyValue: 'EMPTY',\n resetSessionOnNewCampaign: false,\n excludeReferrers: getDefaultExcludedReferrers(config.cookieOptions?.domain),\n ...options,\n };\n this.storage = config.cookieStorage as unknown as Storage<Campaign>;\n this.storageKey = getStorageKey(config.apiKey, 'MKTG');\n this.currentCampaign = BASE_CAMPAIGN;\n config.loggerProvider.log('Installing web attribution tracking.');\n }\n\n async init() {\n [this.currentCampaign, this.previousCampaign] = await this.fetchCampaign();\n\n if (isNewCampaign(this.currentCampaign, this.previousCampaign, this.options)) {\n this.shouldTrackNewCampaign = true;\n await this.storage.set(this.storageKey, this.currentCampaign);\n }\n }\n\n async fetchCampaign() {\n return await Promise.all([new CampaignParser().parse(), this.storage.get(this.storageKey)]);\n }\n\n /**\n * This can be called when enable web attribution and either\n * 1. set a new session\n * 2. has new campaign and enable resetSessionOnNewCampaign\n */\n generateCampaignEvent(event_id?: number) {\n // Mark this campaign has been tracked\n this.shouldTrackNewCampaign = false;\n const campaignEvent = createCampaignEvent(this.currentCampaign, this.options);\n if (event_id) {\n campaignEvent.event_id = event_id;\n }\n return campaignEvent;\n }\n\n shouldSetSessionIdOnNewCampaign() {\n return this.shouldTrackNewCampaign && !!this.options.resetSessionOnNewCampaign;\n }\n}\n"]}
|
package/lib/cjs/index.d.ts
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
export { CampaignParser } from './attribution/campaign-parser';
|
|
2
2
|
export { CampaignTracker } from './attribution/campaign-tracker';
|
|
3
|
+
export { Options, isNewCampaign, isExcludedReferrer, createCampaignEvent, getDefaultExcludedReferrers, } from './attribution/helpers';
|
|
4
|
+
export { WebAttribution } from './attribution/web-attribution';
|
|
5
|
+
export { BASE_CAMPAIGN } from './attribution/constants';
|
|
3
6
|
export { getQueryParams } from './query-params';
|
|
4
7
|
export { isNewSession } from './session';
|
|
5
8
|
export { getCookieName, getOldCookieName } from './cookie-name';
|
|
9
|
+
export { getStorageKey } from './storage/helpers';
|
|
6
10
|
export { CookieStorage } from './storage/cookie';
|
|
7
11
|
export { FetchTransport } from './transports/fetch';
|
|
8
12
|
export { getAnalyticsConnector, setConnectorDeviceId, setConnectorUserId } from './analytics-connector';
|
|
9
13
|
export { IdentityEventSender } from './plugins/identity';
|
|
10
14
|
export { getLanguage } from './language';
|
|
11
|
-
export { BASE_CAMPAIGN } from './attribution/constants';
|
|
12
15
|
export { getGlobalScope } from './global-scope';
|
|
13
16
|
export { getPageViewTrackingConfig, getAttributionTrackingConfig, isAttributionTrackingEnabled, isFileDownloadTrackingEnabled, isFormInteractionTrackingEnabled, isPageViewTrackingEnabled, isSessionTrackingEnabled, } from './default-tracking';
|
|
14
17
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACxG,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACL,OAAO,EACP,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACxG,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,4BAA4B,EAC5B,6BAA6B,EAC7B,gCAAgC,EAChC,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC"}
|
package/lib/cjs/index.js
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
-
exports.isSessionTrackingEnabled = exports.isPageViewTrackingEnabled = exports.isFormInteractionTrackingEnabled = exports.isFileDownloadTrackingEnabled = exports.isAttributionTrackingEnabled = exports.getAttributionTrackingConfig = exports.getPageViewTrackingConfig = exports.getGlobalScope = exports.
|
|
2
|
+
exports.isSessionTrackingEnabled = exports.isPageViewTrackingEnabled = exports.isFormInteractionTrackingEnabled = exports.isFileDownloadTrackingEnabled = exports.isAttributionTrackingEnabled = exports.getAttributionTrackingConfig = exports.getPageViewTrackingConfig = exports.getGlobalScope = exports.getLanguage = exports.IdentityEventSender = exports.setConnectorUserId = exports.setConnectorDeviceId = exports.getAnalyticsConnector = exports.FetchTransport = exports.CookieStorage = exports.getStorageKey = exports.getOldCookieName = exports.getCookieName = exports.isNewSession = exports.getQueryParams = exports.BASE_CAMPAIGN = exports.WebAttribution = exports.getDefaultExcludedReferrers = exports.createCampaignEvent = exports.isExcludedReferrer = exports.isNewCampaign = exports.CampaignTracker = exports.CampaignParser = void 0;
|
|
3
3
|
var campaign_parser_1 = require("./attribution/campaign-parser");
|
|
4
4
|
Object.defineProperty(exports, "CampaignParser", { enumerable: true, get: function () { return campaign_parser_1.CampaignParser; } });
|
|
5
5
|
var campaign_tracker_1 = require("./attribution/campaign-tracker");
|
|
6
6
|
Object.defineProperty(exports, "CampaignTracker", { enumerable: true, get: function () { return campaign_tracker_1.CampaignTracker; } });
|
|
7
|
+
var helpers_1 = require("./attribution/helpers");
|
|
8
|
+
Object.defineProperty(exports, "isNewCampaign", { enumerable: true, get: function () { return helpers_1.isNewCampaign; } });
|
|
9
|
+
Object.defineProperty(exports, "isExcludedReferrer", { enumerable: true, get: function () { return helpers_1.isExcludedReferrer; } });
|
|
10
|
+
Object.defineProperty(exports, "createCampaignEvent", { enumerable: true, get: function () { return helpers_1.createCampaignEvent; } });
|
|
11
|
+
Object.defineProperty(exports, "getDefaultExcludedReferrers", { enumerable: true, get: function () { return helpers_1.getDefaultExcludedReferrers; } });
|
|
12
|
+
var web_attribution_1 = require("./attribution/web-attribution");
|
|
13
|
+
Object.defineProperty(exports, "WebAttribution", { enumerable: true, get: function () { return web_attribution_1.WebAttribution; } });
|
|
14
|
+
var constants_1 = require("./attribution/constants");
|
|
15
|
+
Object.defineProperty(exports, "BASE_CAMPAIGN", { enumerable: true, get: function () { return constants_1.BASE_CAMPAIGN; } });
|
|
7
16
|
var query_params_1 = require("./query-params");
|
|
8
17
|
Object.defineProperty(exports, "getQueryParams", { enumerable: true, get: function () { return query_params_1.getQueryParams; } });
|
|
9
18
|
var session_1 = require("./session");
|
|
@@ -11,6 +20,8 @@ Object.defineProperty(exports, "isNewSession", { enumerable: true, get: function
|
|
|
11
20
|
var cookie_name_1 = require("./cookie-name");
|
|
12
21
|
Object.defineProperty(exports, "getCookieName", { enumerable: true, get: function () { return cookie_name_1.getCookieName; } });
|
|
13
22
|
Object.defineProperty(exports, "getOldCookieName", { enumerable: true, get: function () { return cookie_name_1.getOldCookieName; } });
|
|
23
|
+
var helpers_2 = require("./storage/helpers");
|
|
24
|
+
Object.defineProperty(exports, "getStorageKey", { enumerable: true, get: function () { return helpers_2.getStorageKey; } });
|
|
14
25
|
var cookie_1 = require("./storage/cookie");
|
|
15
26
|
Object.defineProperty(exports, "CookieStorage", { enumerable: true, get: function () { return cookie_1.CookieStorage; } });
|
|
16
27
|
var fetch_1 = require("./transports/fetch");
|
|
@@ -23,8 +34,6 @@ var identity_1 = require("./plugins/identity");
|
|
|
23
34
|
Object.defineProperty(exports, "IdentityEventSender", { enumerable: true, get: function () { return identity_1.IdentityEventSender; } });
|
|
24
35
|
var language_1 = require("./language");
|
|
25
36
|
Object.defineProperty(exports, "getLanguage", { enumerable: true, get: function () { return language_1.getLanguage; } });
|
|
26
|
-
var constants_1 = require("./attribution/constants");
|
|
27
|
-
Object.defineProperty(exports, "BASE_CAMPAIGN", { enumerable: true, get: function () { return constants_1.BASE_CAMPAIGN; } });
|
|
28
37
|
var global_scope_1 = require("./global-scope");
|
|
29
38
|
Object.defineProperty(exports, "getGlobalScope", { enumerable: true, get: function () { return global_scope_1.getGlobalScope; } });
|
|
30
39
|
var default_tracking_1 = require("./default-tracking");
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;AAAA,iEAA+D;AAAtD,iHAAA,cAAc,OAAA;AACvB,mEAAiE;AAAxD,mHAAA,eAAe,OAAA;AACxB,+CAAgD;AAAvC,8GAAA,cAAc,OAAA;AACvB,qCAAyC;AAAhC,uGAAA,YAAY,OAAA;AACrB,6CAAgE;AAAvD,4GAAA,aAAa,OAAA;AAAE,+GAAA,gBAAgB,OAAA;AACxC,2CAAiD;AAAxC,uGAAA,aAAa,OAAA;AACtB,4CAAoD;AAA3C,uGAAA,cAAc,OAAA;AACvB,6DAAwG;AAA/F,4HAAA,qBAAqB,OAAA;AAAE,2HAAA,oBAAoB,OAAA;AAAE,yHAAA,kBAAkB,OAAA;AACxE,+CAAyD;AAAhD,+GAAA,mBAAmB,OAAA;AAC5B,uCAAyC;AAAhC,uGAAA,WAAW,OAAA;AACpB
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;AAAA,iEAA+D;AAAtD,iHAAA,cAAc,OAAA;AACvB,mEAAiE;AAAxD,mHAAA,eAAe,OAAA;AACxB,iDAM+B;AAJ7B,wGAAA,aAAa,OAAA;AACb,6GAAA,kBAAkB,OAAA;AAClB,8GAAA,mBAAmB,OAAA;AACnB,sHAAA,2BAA2B,OAAA;AAE7B,iEAA+D;AAAtD,iHAAA,cAAc,OAAA;AACvB,qDAAwD;AAA/C,0GAAA,aAAa,OAAA;AACtB,+CAAgD;AAAvC,8GAAA,cAAc,OAAA;AACvB,qCAAyC;AAAhC,uGAAA,YAAY,OAAA;AACrB,6CAAgE;AAAvD,4GAAA,aAAa,OAAA;AAAE,+GAAA,gBAAgB,OAAA;AACxC,6CAAkD;AAAzC,wGAAA,aAAa,OAAA;AACtB,2CAAiD;AAAxC,uGAAA,aAAa,OAAA;AACtB,4CAAoD;AAA3C,uGAAA,cAAc,OAAA;AACvB,6DAAwG;AAA/F,4HAAA,qBAAqB,OAAA;AAAE,2HAAA,oBAAoB,OAAA;AAAE,yHAAA,kBAAkB,OAAA;AACxE,+CAAyD;AAAhD,+GAAA,mBAAmB,OAAA;AAC5B,uCAAyC;AAAhC,uGAAA,WAAW,OAAA;AACpB,+CAAgD;AAAvC,8GAAA,cAAc,OAAA;AACvB,uDAQ4B;AAP1B,6HAAA,yBAAyB,OAAA;AACzB,gIAAA,4BAA4B,OAAA;AAC5B,gIAAA,4BAA4B,OAAA;AAC5B,iIAAA,6BAA6B,OAAA;AAC7B,oIAAA,gCAAgC,OAAA;AAChC,6HAAA,yBAAyB,OAAA;AACzB,4HAAA,wBAAwB,OAAA","sourcesContent":["export { CampaignParser } from './attribution/campaign-parser';\nexport { CampaignTracker } from './attribution/campaign-tracker';\nexport {\n Options,\n isNewCampaign,\n isExcludedReferrer,\n createCampaignEvent,\n getDefaultExcludedReferrers,\n} from './attribution/helpers';\nexport { WebAttribution } from './attribution/web-attribution';\nexport { BASE_CAMPAIGN } from './attribution/constants';\nexport { getQueryParams } from './query-params';\nexport { isNewSession } from './session';\nexport { getCookieName, getOldCookieName } from './cookie-name';\nexport { getStorageKey } from './storage/helpers';\nexport { CookieStorage } from './storage/cookie';\nexport { FetchTransport } from './transports/fetch';\nexport { getAnalyticsConnector, setConnectorDeviceId, setConnectorUserId } from './analytics-connector';\nexport { IdentityEventSender } from './plugins/identity';\nexport { getLanguage } from './language';\nexport { getGlobalScope } from './global-scope';\nexport {\n getPageViewTrackingConfig,\n getAttributionTrackingConfig,\n isAttributionTrackingEnabled,\n isFileDownloadTrackingEnabled,\n isFormInteractionTrackingEnabled,\n isPageViewTrackingEnabled,\n isSessionTrackingEnabled,\n} from './default-tracking';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/storage/helpers.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,WAAY,MAAM,6CAE3C,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
+
exports.getStorageKey = void 0;
|
|
3
|
+
var analytics_core_1 = require("@amplitude/analytics-core");
|
|
4
|
+
var getStorageKey = function (apiKey, postKey, limit) {
|
|
5
|
+
if (postKey === void 0) { postKey = ''; }
|
|
6
|
+
if (limit === void 0) { limit = 10; }
|
|
7
|
+
return [analytics_core_1.AMPLITUDE_PREFIX, postKey, apiKey.substring(0, limit)].filter(Boolean).join('_');
|
|
8
|
+
};
|
|
9
|
+
exports.getStorageKey = getStorageKey;
|
|
10
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/storage/helpers.ts"],"names":[],"mappings":";;AAAA,4DAA6D;AAEtD,IAAM,aAAa,GAAG,UAAC,MAAc,EAAE,OAAY,EAAE,KAAU;IAAxB,wBAAA,EAAA,YAAY;IAAE,sBAAA,EAAA,UAAU;IACpE,OAAO,CAAC,iCAAgB,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3F,CAAC,CAAC;AAFW,QAAA,aAAa,iBAExB","sourcesContent":["import { AMPLITUDE_PREFIX } from '@amplitude/analytics-core';\n\nexport const getStorageKey = (apiKey: string, postKey = '', limit = 10) => {\n return [AMPLITUDE_PREFIX, postKey, apiKey.substring(0, limit)].filter(Boolean).join('_');\n};\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Campaign } from '@amplitude/analytics-types';
|
|
2
|
+
export interface Options {
|
|
3
|
+
excludeReferrers?: (string | RegExp)[];
|
|
4
|
+
initialEmptyValue?: string;
|
|
5
|
+
resetSessionOnNewCampaign?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const isNewCampaign: (current: Campaign, previous: Campaign | undefined, options: Options, isNewSession?: boolean) => boolean;
|
|
8
|
+
export declare const isExcludedReferrer: (excludeReferrers?: (string | RegExp)[], referringDomain?: string) => boolean;
|
|
9
|
+
export declare const createCampaignEvent: (campaign: Campaign, options: Options) => import("@amplitude/analytics-types").IdentifyEvent;
|
|
10
|
+
export declare const getDefaultExcludedReferrers: (cookieDomain: string | undefined) => RegExp[];
|
|
11
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/attribution/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAGtD,MAAM,WAAW,OAAO;IACtB,gBAAgB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACvC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAiBD,eAAO,MAAM,aAAa,YACf,QAAQ,YACP,QAAQ,GAAG,SAAS,WACrB,OAAO,oCAoBjB,CAAC;AAEF,eAAO,MAAM,kBAAkB,sBAAsB,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,sCAIvE,CAAC;AAEF,eAAO,MAAM,mBAAmB,aAAc,QAAQ,WAAW,OAAO,uDAgBvE,CAAC;AAEF,eAAO,MAAM,2BAA2B,iBAAkB,MAAM,GAAG,SAAS,aAS3E,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { __assign, __read, __rest } from "tslib";
|
|
2
|
+
import { createIdentifyEvent, Identify } from '@amplitude/analytics-core';
|
|
3
|
+
import { BASE_CAMPAIGN } from './constants';
|
|
4
|
+
var domainWithoutSubdomain = function (domain) {
|
|
5
|
+
var parts = domain.split('.');
|
|
6
|
+
if (parts.length <= 2) {
|
|
7
|
+
return domain;
|
|
8
|
+
}
|
|
9
|
+
return parts.slice(parts.length - 2, parts.length).join('.');
|
|
10
|
+
};
|
|
11
|
+
//Direct traffic mean no external referral, no UTMs, no click-ids, and no other customer identified marketing campaign url params.
|
|
12
|
+
var isDirectTraffic = function (current) {
|
|
13
|
+
return Object.values(current).every(function (value) { return !value; });
|
|
14
|
+
};
|
|
15
|
+
export var isNewCampaign = function (current, previous, options, isNewSession) {
|
|
16
|
+
if (isNewSession === void 0) { isNewSession = true; }
|
|
17
|
+
var referrer = current.referrer, referring_domain = current.referring_domain, currentCampaign = __rest(current, ["referrer", "referring_domain"]);
|
|
18
|
+
var _a = previous || {}, _previous_referrer = _a.referrer, prevReferringDomain = _a.referring_domain, previousCampaign = __rest(_a, ["referrer", "referring_domain"]);
|
|
19
|
+
if (isExcludedReferrer(options.excludeReferrers, current.referring_domain)) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
//In the same session, direct traffic should not override or unset any persisting query params
|
|
23
|
+
if (!isNewSession && isDirectTraffic(current) && previous) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
var hasNewCampaign = JSON.stringify(currentCampaign) !== JSON.stringify(previousCampaign);
|
|
27
|
+
var hasNewDomain = domainWithoutSubdomain(referring_domain || '') !== domainWithoutSubdomain(prevReferringDomain || '');
|
|
28
|
+
return !previous || hasNewCampaign || hasNewDomain;
|
|
29
|
+
};
|
|
30
|
+
export var isExcludedReferrer = function (excludeReferrers, referringDomain) {
|
|
31
|
+
if (excludeReferrers === void 0) { excludeReferrers = []; }
|
|
32
|
+
if (referringDomain === void 0) { referringDomain = ''; }
|
|
33
|
+
return excludeReferrers.some(function (value) {
|
|
34
|
+
return value instanceof RegExp ? value.test(referringDomain) : value === referringDomain;
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
export var createCampaignEvent = function (campaign, options) {
|
|
38
|
+
var campaignParameters = __assign(__assign({}, BASE_CAMPAIGN), campaign);
|
|
39
|
+
var identifyEvent = Object.entries(campaignParameters).reduce(function (identify, _a) {
|
|
40
|
+
var _b;
|
|
41
|
+
var _c = __read(_a, 2), key = _c[0], value = _c[1];
|
|
42
|
+
identify.setOnce("initial_".concat(key), (_b = value !== null && value !== void 0 ? value : options.initialEmptyValue) !== null && _b !== void 0 ? _b : 'EMPTY');
|
|
43
|
+
if (value) {
|
|
44
|
+
return identify.set(key, value);
|
|
45
|
+
}
|
|
46
|
+
return identify.unset(key);
|
|
47
|
+
}, new Identify());
|
|
48
|
+
return createIdentifyEvent(identifyEvent);
|
|
49
|
+
};
|
|
50
|
+
export var getDefaultExcludedReferrers = function (cookieDomain) {
|
|
51
|
+
var domain = cookieDomain;
|
|
52
|
+
if (domain) {
|
|
53
|
+
if (domain.startsWith('.')) {
|
|
54
|
+
domain = domain.substring(1);
|
|
55
|
+
}
|
|
56
|
+
return [new RegExp("".concat(domain.replace('.', '\\.'), "$"))];
|
|
57
|
+
}
|
|
58
|
+
return [];
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/attribution/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { createIdentifyEvent, Identify } from '@amplitude/analytics-core';\nimport { Campaign } from '@amplitude/analytics-types';\nimport { BASE_CAMPAIGN } from './constants';\n\nexport interface Options {\n excludeReferrers?: (string | RegExp)[];\n initialEmptyValue?: string;\n resetSessionOnNewCampaign?: boolean;\n}\n\nconst domainWithoutSubdomain = (domain: string) => {\n const parts = domain.split('.');\n\n if (parts.length <= 2) {\n return domain;\n }\n\n return parts.slice(parts.length - 2, parts.length).join('.');\n};\n\n//Direct traffic mean no external referral, no UTMs, no click-ids, and no other customer identified marketing campaign url params.\nconst isDirectTraffic = (current: Campaign) => {\n return Object.values(current).every((value) => !value);\n};\n\nexport const isNewCampaign = (\n current: Campaign,\n previous: Campaign | undefined,\n options: Options,\n isNewSession = true,\n) => {\n const { referrer, referring_domain, ...currentCampaign } = current;\n const { referrer: _previous_referrer, referring_domain: prevReferringDomain, ...previousCampaign } = previous || {};\n\n if (isExcludedReferrer(options.excludeReferrers, current.referring_domain)) {\n return false;\n }\n\n //In the same session, direct traffic should not override or unset any persisting query params\n if (!isNewSession && isDirectTraffic(current) && previous) {\n return false;\n }\n\n const hasNewCampaign = JSON.stringify(currentCampaign) !== JSON.stringify(previousCampaign);\n const hasNewDomain =\n domainWithoutSubdomain(referring_domain || '') !== domainWithoutSubdomain(prevReferringDomain || '');\n\n return !previous || hasNewCampaign || hasNewDomain;\n};\n\nexport const isExcludedReferrer = (excludeReferrers: (string | RegExp)[] = [], referringDomain = '') => {\n return excludeReferrers.some((value) =>\n value instanceof RegExp ? value.test(referringDomain) : value === referringDomain,\n );\n};\n\nexport const createCampaignEvent = (campaign: Campaign, options: Options) => {\n const campaignParameters: Campaign = {\n // This object definition allows undefined keys to be iterated on\n // in .reduce() to build indentify object\n ...BASE_CAMPAIGN,\n ...campaign,\n };\n const identifyEvent = Object.entries(campaignParameters).reduce((identify, [key, value]) => {\n identify.setOnce(`initial_${key}`, value ?? options.initialEmptyValue ?? 'EMPTY');\n if (value) {\n return identify.set(key, value);\n }\n return identify.unset(key);\n }, new Identify());\n\n return createIdentifyEvent(identifyEvent);\n};\n\nexport const getDefaultExcludedReferrers = (cookieDomain: string | undefined) => {\n let domain = cookieDomain;\n if (domain) {\n if (domain.startsWith('.')) {\n domain = domain.substring(1);\n }\n return [new RegExp(`${domain.replace('.', '\\\\.')}$`)];\n }\n return [];\n};\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BrowserConfig } from '@amplitude/analytics-types';
|
|
2
|
+
import { Campaign, Storage } from '@amplitude/analytics-types';
|
|
3
|
+
import { Options } from './helpers';
|
|
4
|
+
export declare class WebAttribution {
|
|
5
|
+
options: Options;
|
|
6
|
+
storage: Storage<Campaign>;
|
|
7
|
+
storageKey: string;
|
|
8
|
+
previousCampaign?: Campaign;
|
|
9
|
+
currentCampaign: Campaign;
|
|
10
|
+
shouldTrackNewCampaign: boolean;
|
|
11
|
+
constructor(options: Options, config: BrowserConfig);
|
|
12
|
+
init(): Promise<void>;
|
|
13
|
+
fetchCampaign(): Promise<[Campaign, Campaign | undefined]>;
|
|
14
|
+
/**
|
|
15
|
+
* This can be called when enable web attribution and either
|
|
16
|
+
* 1. set a new session
|
|
17
|
+
* 2. has new campaign and enable resetSessionOnNewCampaign
|
|
18
|
+
*/
|
|
19
|
+
generateCampaignEvent(event_id?: number): import("@amplitude/analytics-types").IdentifyEvent;
|
|
20
|
+
shouldSetSessionIdOnNewCampaign(): boolean;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=web-attribution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-attribution.d.ts","sourceRoot":"","sources":["../../../src/attribution/web-attribution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAmE,MAAM,WAAW,CAAC;AAKrG,qBAAa,cAAc;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,QAAQ,CAAC;IAC5B,eAAe,EAAE,QAAQ,CAAC;IAC1B,sBAAsB,UAAS;gBAEnB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa;IAa7C,IAAI;IASJ,aAAa;IAInB;;;;OAIG;IACH,qBAAqB,CAAC,QAAQ,CAAC,EAAE,MAAM;IAUvC,+BAA+B;CAGhC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { __assign, __awaiter, __generator, __read } from "tslib";
|
|
2
|
+
import { getDefaultExcludedReferrers, createCampaignEvent, isNewCampaign } from './helpers';
|
|
3
|
+
import { getStorageKey } from '../storage/helpers';
|
|
4
|
+
import { CampaignParser } from './campaign-parser';
|
|
5
|
+
import { BASE_CAMPAIGN } from './constants';
|
|
6
|
+
var WebAttribution = /** @class */ (function () {
|
|
7
|
+
function WebAttribution(options, config) {
|
|
8
|
+
var _a;
|
|
9
|
+
this.shouldTrackNewCampaign = false;
|
|
10
|
+
this.options = __assign({ initialEmptyValue: 'EMPTY', resetSessionOnNewCampaign: false, excludeReferrers: getDefaultExcludedReferrers((_a = config.cookieOptions) === null || _a === void 0 ? void 0 : _a.domain) }, options);
|
|
11
|
+
this.storage = config.cookieStorage;
|
|
12
|
+
this.storageKey = getStorageKey(config.apiKey, 'MKTG');
|
|
13
|
+
this.currentCampaign = BASE_CAMPAIGN;
|
|
14
|
+
config.loggerProvider.log('Installing web attribution tracking.');
|
|
15
|
+
}
|
|
16
|
+
WebAttribution.prototype.init = function () {
|
|
17
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
18
|
+
var _a;
|
|
19
|
+
return __generator(this, function (_b) {
|
|
20
|
+
switch (_b.label) {
|
|
21
|
+
case 0: return [4 /*yield*/, this.fetchCampaign()];
|
|
22
|
+
case 1:
|
|
23
|
+
_a = __read.apply(void 0, [_b.sent(), 2]), this.currentCampaign = _a[0], this.previousCampaign = _a[1];
|
|
24
|
+
if (!isNewCampaign(this.currentCampaign, this.previousCampaign, this.options)) return [3 /*break*/, 3];
|
|
25
|
+
this.shouldTrackNewCampaign = true;
|
|
26
|
+
return [4 /*yield*/, this.storage.set(this.storageKey, this.currentCampaign)];
|
|
27
|
+
case 2:
|
|
28
|
+
_b.sent();
|
|
29
|
+
_b.label = 3;
|
|
30
|
+
case 3: return [2 /*return*/];
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
WebAttribution.prototype.fetchCampaign = function () {
|
|
36
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
37
|
+
return __generator(this, function (_a) {
|
|
38
|
+
switch (_a.label) {
|
|
39
|
+
case 0: return [4 /*yield*/, Promise.all([new CampaignParser().parse(), this.storage.get(this.storageKey)])];
|
|
40
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* This can be called when enable web attribution and either
|
|
47
|
+
* 1. set a new session
|
|
48
|
+
* 2. has new campaign and enable resetSessionOnNewCampaign
|
|
49
|
+
*/
|
|
50
|
+
WebAttribution.prototype.generateCampaignEvent = function (event_id) {
|
|
51
|
+
// Mark this campaign has been tracked
|
|
52
|
+
this.shouldTrackNewCampaign = false;
|
|
53
|
+
var campaignEvent = createCampaignEvent(this.currentCampaign, this.options);
|
|
54
|
+
if (event_id) {
|
|
55
|
+
campaignEvent.event_id = event_id;
|
|
56
|
+
}
|
|
57
|
+
return campaignEvent;
|
|
58
|
+
};
|
|
59
|
+
WebAttribution.prototype.shouldSetSessionIdOnNewCampaign = function () {
|
|
60
|
+
return this.shouldTrackNewCampaign && !!this.options.resetSessionOnNewCampaign;
|
|
61
|
+
};
|
|
62
|
+
return WebAttribution;
|
|
63
|
+
}());
|
|
64
|
+
export { WebAttribution };
|
|
65
|
+
//# sourceMappingURL=web-attribution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-attribution.js","sourceRoot":"","sources":["../../../src/attribution/web-attribution.ts"],"names":[],"mappings":";AAEA,OAAO,EAAW,2BAA2B,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACrG,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;IAQE,wBAAY,OAAgB,EAAE,MAAqB;;QAFnD,2BAAsB,GAAG,KAAK,CAAC;QAG7B,IAAI,CAAC,OAAO,cACV,iBAAiB,EAAE,OAAO,EAC1B,yBAAyB,EAAE,KAAK,EAChC,gBAAgB,EAAE,2BAA2B,CAAC,MAAA,MAAM,CAAC,aAAa,0CAAE,MAAM,CAAC,IACxE,OAAO,CACX,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,aAA6C,CAAC;QACpE,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,eAAe,GAAG,aAAa,CAAC;QACrC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACpE,CAAC;IAEK,6BAAI,GAAV;;;;;4BACkD,qBAAM,IAAI,CAAC,aAAa,EAAE,EAAA;;wBAA1E,KAAA,sBAAgD,SAA0B,KAAA,EAAzE,IAAI,CAAC,eAAe,QAAA,EAAE,IAAI,CAAC,gBAAgB,QAAA,CAA+B;6BAEvE,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,EAAxE,wBAAwE;wBAC1E,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;wBACnC,qBAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,EAAA;;wBAA7D,SAA6D,CAAC;;;;;;KAEjE;IAEK,sCAAa,GAAnB;;;;4BACS,qBAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAA;4BAA3F,sBAAO,SAAoF,EAAC;;;;KAC7F;IAED;;;;OAIG;IACH,8CAAqB,GAArB,UAAsB,QAAiB;QACrC,sCAAsC;QACtC,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;QACpC,IAAM,aAAa,GAAG,mBAAmB,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9E,IAAI,QAAQ,EAAE;YACZ,aAAa,CAAC,QAAQ,GAAG,QAAQ,CAAC;SACnC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,wDAA+B,GAA/B;QACE,OAAO,IAAI,CAAC,sBAAsB,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC;IACjF,CAAC;IACH,qBAAC;AAAD,CAAC,AApDD,IAoDC","sourcesContent":["import { BrowserConfig } from '@amplitude/analytics-types';\nimport { Campaign, Storage } from '@amplitude/analytics-types';\nimport { Options, getDefaultExcludedReferrers, createCampaignEvent, isNewCampaign } from './helpers';\nimport { getStorageKey } from '../storage/helpers';\nimport { CampaignParser } from './campaign-parser';\nimport { BASE_CAMPAIGN } from './constants';\n\nexport class WebAttribution {\n options: Options;\n storage: Storage<Campaign>;\n storageKey: string;\n previousCampaign?: Campaign;\n currentCampaign: Campaign;\n shouldTrackNewCampaign = false;\n\n constructor(options: Options, config: BrowserConfig) {\n this.options = {\n initialEmptyValue: 'EMPTY',\n resetSessionOnNewCampaign: false,\n excludeReferrers: getDefaultExcludedReferrers(config.cookieOptions?.domain),\n ...options,\n };\n this.storage = config.cookieStorage as unknown as Storage<Campaign>;\n this.storageKey = getStorageKey(config.apiKey, 'MKTG');\n this.currentCampaign = BASE_CAMPAIGN;\n config.loggerProvider.log('Installing web attribution tracking.');\n }\n\n async init() {\n [this.currentCampaign, this.previousCampaign] = await this.fetchCampaign();\n\n if (isNewCampaign(this.currentCampaign, this.previousCampaign, this.options)) {\n this.shouldTrackNewCampaign = true;\n await this.storage.set(this.storageKey, this.currentCampaign);\n }\n }\n\n async fetchCampaign() {\n return await Promise.all([new CampaignParser().parse(), this.storage.get(this.storageKey)]);\n }\n\n /**\n * This can be called when enable web attribution and either\n * 1. set a new session\n * 2. has new campaign and enable resetSessionOnNewCampaign\n */\n generateCampaignEvent(event_id?: number) {\n // Mark this campaign has been tracked\n this.shouldTrackNewCampaign = false;\n const campaignEvent = createCampaignEvent(this.currentCampaign, this.options);\n if (event_id) {\n campaignEvent.event_id = event_id;\n }\n return campaignEvent;\n }\n\n shouldSetSessionIdOnNewCampaign() {\n return this.shouldTrackNewCampaign && !!this.options.resetSessionOnNewCampaign;\n }\n}\n"]}
|
package/lib/esm/index.d.ts
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
export { CampaignParser } from './attribution/campaign-parser';
|
|
2
2
|
export { CampaignTracker } from './attribution/campaign-tracker';
|
|
3
|
+
export { Options, isNewCampaign, isExcludedReferrer, createCampaignEvent, getDefaultExcludedReferrers, } from './attribution/helpers';
|
|
4
|
+
export { WebAttribution } from './attribution/web-attribution';
|
|
5
|
+
export { BASE_CAMPAIGN } from './attribution/constants';
|
|
3
6
|
export { getQueryParams } from './query-params';
|
|
4
7
|
export { isNewSession } from './session';
|
|
5
8
|
export { getCookieName, getOldCookieName } from './cookie-name';
|
|
9
|
+
export { getStorageKey } from './storage/helpers';
|
|
6
10
|
export { CookieStorage } from './storage/cookie';
|
|
7
11
|
export { FetchTransport } from './transports/fetch';
|
|
8
12
|
export { getAnalyticsConnector, setConnectorDeviceId, setConnectorUserId } from './analytics-connector';
|
|
9
13
|
export { IdentityEventSender } from './plugins/identity';
|
|
10
14
|
export { getLanguage } from './language';
|
|
11
|
-
export { BASE_CAMPAIGN } from './attribution/constants';
|
|
12
15
|
export { getGlobalScope } from './global-scope';
|
|
13
16
|
export { getPageViewTrackingConfig, getAttributionTrackingConfig, isAttributionTrackingEnabled, isFileDownloadTrackingEnabled, isFormInteractionTrackingEnabled, isPageViewTrackingEnabled, isSessionTrackingEnabled, } from './default-tracking';
|
|
14
17
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACxG,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACL,OAAO,EACP,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACxG,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,4BAA4B,EAC5B,6BAA6B,EAC7B,gCAAgC,EAChC,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC"}
|
package/lib/esm/index.js
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
export { CampaignParser } from './attribution/campaign-parser';
|
|
2
2
|
export { CampaignTracker } from './attribution/campaign-tracker';
|
|
3
|
+
export { isNewCampaign, isExcludedReferrer, createCampaignEvent, getDefaultExcludedReferrers, } from './attribution/helpers';
|
|
4
|
+
export { WebAttribution } from './attribution/web-attribution';
|
|
5
|
+
export { BASE_CAMPAIGN } from './attribution/constants';
|
|
3
6
|
export { getQueryParams } from './query-params';
|
|
4
7
|
export { isNewSession } from './session';
|
|
5
8
|
export { getCookieName, getOldCookieName } from './cookie-name';
|
|
9
|
+
export { getStorageKey } from './storage/helpers';
|
|
6
10
|
export { CookieStorage } from './storage/cookie';
|
|
7
11
|
export { FetchTransport } from './transports/fetch';
|
|
8
12
|
export { getAnalyticsConnector, setConnectorDeviceId, setConnectorUserId } from './analytics-connector';
|
|
9
13
|
export { IdentityEventSender } from './plugins/identity';
|
|
10
14
|
export { getLanguage } from './language';
|
|
11
|
-
export { BASE_CAMPAIGN } from './attribution/constants';
|
|
12
15
|
export { getGlobalScope } from './global-scope';
|
|
13
16
|
export { getPageViewTrackingConfig, getAttributionTrackingConfig, isAttributionTrackingEnabled, isFileDownloadTrackingEnabled, isFormInteractionTrackingEnabled, isPageViewTrackingEnabled, isSessionTrackingEnabled, } from './default-tracking';
|
|
14
17
|
//# sourceMappingURL=index.js.map
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACxG,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAEL,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACxG,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,4BAA4B,EAC5B,6BAA6B,EAC7B,gCAAgC,EAChC,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC","sourcesContent":["export { CampaignParser } from './attribution/campaign-parser';\nexport { CampaignTracker } from './attribution/campaign-tracker';\nexport {\n Options,\n isNewCampaign,\n isExcludedReferrer,\n createCampaignEvent,\n getDefaultExcludedReferrers,\n} from './attribution/helpers';\nexport { WebAttribution } from './attribution/web-attribution';\nexport { BASE_CAMPAIGN } from './attribution/constants';\nexport { getQueryParams } from './query-params';\nexport { isNewSession } from './session';\nexport { getCookieName, getOldCookieName } from './cookie-name';\nexport { getStorageKey } from './storage/helpers';\nexport { CookieStorage } from './storage/cookie';\nexport { FetchTransport } from './transports/fetch';\nexport { getAnalyticsConnector, setConnectorDeviceId, setConnectorUserId } from './analytics-connector';\nexport { IdentityEventSender } from './plugins/identity';\nexport { getLanguage } from './language';\nexport { getGlobalScope } from './global-scope';\nexport {\n getPageViewTrackingConfig,\n getAttributionTrackingConfig,\n isAttributionTrackingEnabled,\n isFileDownloadTrackingEnabled,\n isFormInteractionTrackingEnabled,\n isPageViewTrackingEnabled,\n isSessionTrackingEnabled,\n} from './default-tracking';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/storage/helpers.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,WAAY,MAAM,6CAE3C,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AMPLITUDE_PREFIX } from '@amplitude/analytics-core';
|
|
2
|
+
export var getStorageKey = function (apiKey, postKey, limit) {
|
|
3
|
+
if (postKey === void 0) { postKey = ''; }
|
|
4
|
+
if (limit === void 0) { limit = 10; }
|
|
5
|
+
return [AMPLITUDE_PREFIX, postKey, apiKey.substring(0, limit)].filter(Boolean).join('_');
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/storage/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,CAAC,IAAM,aAAa,GAAG,UAAC,MAAc,EAAE,OAAY,EAAE,KAAU;IAAxB,wBAAA,EAAA,YAAY;IAAE,sBAAA,EAAA,UAAU;IACpE,OAAO,CAAC,gBAAgB,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3F,CAAC,CAAC","sourcesContent":["import { AMPLITUDE_PREFIX } from '@amplitude/analytics-core';\n\nexport const getStorageKey = (apiKey: string, postKey = '', limit = 10) => {\n return [AMPLITUDE_PREFIX, postKey, apiKey.substring(0, limit)].filter(Boolean).join('_');\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amplitude/analytics-client-common",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.4-beta.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"author": "Amplitude Inc",
|
|
6
6
|
"homepage": "https://github.com/amplitude/Amplitude-TypeScript",
|
|
@@ -43,5 +43,5 @@
|
|
|
43
43
|
"files": [
|
|
44
44
|
"lib"
|
|
45
45
|
],
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "e55f597fcaed19a1deeb8ec02d8e623593a7b3e8"
|
|
47
47
|
}
|