@amplitude/plugin-web-attribution-browser 1.0.4 → 2.0.0-beta.10
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 +5 -9
- package/lib/cjs/helpers.d.ts +2 -0
- package/lib/cjs/helpers.d.ts.map +1 -1
- package/lib/cjs/helpers.js +22 -4
- package/lib/cjs/helpers.js.map +1 -1
- package/lib/cjs/index.d.ts +0 -1
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +1 -3
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/typings/web-attribution.d.ts +2 -5
- package/lib/cjs/typings/web-attribution.d.ts.map +1 -1
- package/lib/cjs/typings/web-attribution.js.map +1 -1
- package/lib/cjs/web-attribution.d.ts.map +1 -1
- package/lib/cjs/web-attribution.js +10 -51
- package/lib/cjs/web-attribution.js.map +1 -1
- package/lib/esm/helpers.d.ts +2 -0
- package/lib/esm/helpers.d.ts.map +1 -1
- package/lib/esm/helpers.js +19 -3
- package/lib/esm/helpers.js.map +1 -1
- package/lib/esm/index.d.ts +0 -1
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/index.js +0 -2
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/typings/web-attribution.d.ts +2 -5
- package/lib/esm/typings/web-attribution.d.ts.map +1 -1
- package/lib/esm/typings/web-attribution.js.map +1 -1
- package/lib/esm/web-attribution.d.ts.map +1 -1
- package/lib/esm/web-attribution.js +11 -52
- package/lib/esm/web-attribution.js.map +1 -1
- package/lib/scripts/amplitude-min.umd.js +1 -1
- package/lib/scripts/amplitude-min.umd.js.gz +0 -0
- package/lib/scripts/helpers.d.ts +2 -0
- package/lib/scripts/helpers.d.ts.map +1 -1
- package/lib/scripts/index.d.ts +0 -1
- package/lib/scripts/index.d.ts.map +1 -1
- package/lib/scripts/typings/web-attribution.d.ts +2 -5
- package/lib/scripts/typings/web-attribution.d.ts.map +1 -1
- package/lib/scripts/web-attribution.d.ts.map +1 -1
- package/package.json +7 -7
- package/lib/scripts/amplitude-min.js +0 -1
- package/lib/scripts/amplitude-min.js.gz +0 -0
package/README.md
CHANGED
|
@@ -15,33 +15,30 @@ This package is published on NPM registry and is available to be installed using
|
|
|
15
15
|
|
|
16
16
|
```sh
|
|
17
17
|
# npm
|
|
18
|
-
npm install @amplitude/plugin-web-attribution-browser
|
|
18
|
+
npm install @amplitude/plugin-web-attribution-browser
|
|
19
19
|
|
|
20
20
|
# yarn
|
|
21
|
-
yarn add @amplitude/plugin-web-attribution-browser
|
|
21
|
+
yarn add @amplitude/plugin-web-attribution-browser
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
## Usage
|
|
25
25
|
|
|
26
|
-
This plugin works on top of Amplitude Browser SDK and adds web attribution tracking features to built-in features. To use this plugin, you need to install `@amplitude/analytics-browser` version `
|
|
26
|
+
This plugin works on top of Amplitude Browser SDK and adds web attribution tracking features to built-in features. To use this plugin, you need to install `@amplitude/analytics-browser` version `v2.0.0` or later.
|
|
27
27
|
|
|
28
28
|
### 1. Import Amplitude packages
|
|
29
29
|
|
|
30
|
-
* `@amplitude/analytics-browser`
|
|
31
30
|
* `@amplitude/plugin-web-attribution-browser`
|
|
32
31
|
|
|
33
32
|
```typescript
|
|
34
|
-
import * as amplitude from '@amplitude/analytics-browser';
|
|
35
33
|
import { webAttributionPlugin } from '@amplitude/plugin-web-attribution-browser';
|
|
36
34
|
```
|
|
37
35
|
|
|
38
36
|
### 2. Instantiate page view plugin
|
|
39
37
|
|
|
40
|
-
The plugin
|
|
38
|
+
The plugin accepts an optional parameter of type `Object` to configure the plugin based on your use case.
|
|
41
39
|
|
|
42
40
|
```typescript
|
|
43
41
|
const webAttributionTracking = webAttributionPlugin(amplitude, {
|
|
44
|
-
disabled: undefined,
|
|
45
42
|
excludeReferrers: undefined,
|
|
46
43
|
initialEmptyValue: undefined,
|
|
47
44
|
resetSessionOnNewCampaign: undefined,
|
|
@@ -52,8 +49,7 @@ const webAttributionTracking = webAttributionPlugin(amplitude, {
|
|
|
52
49
|
|
|
53
50
|
|Name|Type|Default|Description|
|
|
54
51
|
|-|-|-|-|
|
|
55
|
-
|`
|
|
56
|
-
|`excludeReferrers`|`string[]`|`[]`|Use this option to prevent the plugin from tracking campaigns parameters from specific referrers. For example: `subdomain.domain.com`.|
|
|
52
|
+
|`excludeReferrers`|`(string \| RegExp)[]`|`[]`|Use this option to prevent the plugin from tracking campaigns parameters from specific referrers. For example: `subdomain.domain.com`.|
|
|
57
53
|
|`initialEmptyValue`|`string`|`"EMPTY"`|Use this option to specify empty values for [first-touch attribution](https://www.docs.developers.amplitude.com/data/sdks/marketing-analytics-browser/#first-touch-attribution).|
|
|
58
54
|
|`resetSessionOnNewCampaign`|`boolean`|`false`|Use this option to control whether a new session should start on a new campaign.|
|
|
59
55
|
|
package/lib/cjs/helpers.d.ts
CHANGED
|
@@ -2,5 +2,7 @@ import { Campaign } from '@amplitude/analytics-types';
|
|
|
2
2
|
import { Options } from './typings/web-attribution';
|
|
3
3
|
export declare const getStorageKey: (apiKey: string, postKey?: string, limit?: number) => string;
|
|
4
4
|
export declare const isNewCampaign: (current: Campaign, previous: Campaign | undefined, options: Options) => boolean;
|
|
5
|
+
export declare const isExcludedReferrer: (excludeReferrers?: (string | RegExp)[], referringDomain?: string) => boolean;
|
|
5
6
|
export declare const createCampaignEvent: (campaign: Campaign, options: Options) => import("@amplitude/analytics-types").IdentifyEvent;
|
|
7
|
+
export declare const getDefaultExcludedReferrers: (cookieDomain: string | undefined) => RegExp[];
|
|
6
8
|
//# sourceMappingURL=helpers.d.ts.map
|
package/lib/cjs/helpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEpD,eAAO,MAAM,aAAa,WAAY,MAAM,6CAE3C,CAAC;AAYF,eAAO,MAAM,aAAa,YAAa,QAAQ,YAAY,QAAQ,GAAG,SAAS,WAAW,OAAO,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEpD,eAAO,MAAM,aAAa,WAAY,MAAM,6CAE3C,CAAC;AAYF,eAAO,MAAM,aAAa,YAAa,QAAQ,YAAY,QAAQ,GAAG,SAAS,WAAW,OAAO,YAYhG,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"}
|
package/lib/cjs/helpers.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
-
exports.createCampaignEvent = exports.isNewCampaign = exports.getStorageKey = void 0;
|
|
2
|
+
exports.getDefaultExcludedReferrers = exports.createCampaignEvent = exports.isExcludedReferrer = exports.isNewCampaign = exports.getStorageKey = void 0;
|
|
3
3
|
var tslib_1 = require("tslib");
|
|
4
4
|
var analytics_client_common_1 = require("@amplitude/analytics-client-common");
|
|
5
5
|
var analytics_core_1 = require("@amplitude/analytics-core");
|
|
@@ -17,10 +17,9 @@ var domainWithoutSubdomain = function (domain) {
|
|
|
17
17
|
return parts.slice(parts.length - 2, parts.length).join('.');
|
|
18
18
|
};
|
|
19
19
|
var isNewCampaign = function (current, previous, options) {
|
|
20
|
-
var _a;
|
|
21
20
|
var referrer = current.referrer, referring_domain = current.referring_domain, currentCampaign = tslib_1.__rest(current, ["referrer", "referring_domain"]);
|
|
22
|
-
var
|
|
23
|
-
if (
|
|
21
|
+
var _a = previous || {}, _previous_referrer = _a.referrer, prevReferringDomain = _a.referring_domain, previousCampaign = tslib_1.__rest(_a, ["referrer", "referring_domain"]);
|
|
22
|
+
if ((0, exports.isExcludedReferrer)(options.excludeReferrers, current.referring_domain)) {
|
|
24
23
|
return false;
|
|
25
24
|
}
|
|
26
25
|
var hasNewCampaign = JSON.stringify(currentCampaign) !== JSON.stringify(previousCampaign);
|
|
@@ -28,6 +27,14 @@ var isNewCampaign = function (current, previous, options) {
|
|
|
28
27
|
return !previous || hasNewCampaign || hasNewDomain;
|
|
29
28
|
};
|
|
30
29
|
exports.isNewCampaign = isNewCampaign;
|
|
30
|
+
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
|
+
exports.isExcludedReferrer = isExcludedReferrer;
|
|
31
38
|
var createCampaignEvent = function (campaign, options) {
|
|
32
39
|
var campaignParameters = tslib_1.__assign(tslib_1.__assign({}, analytics_client_common_1.BASE_CAMPAIGN), campaign);
|
|
33
40
|
var identifyEvent = Object.entries(campaignParameters).reduce(function (identify, _a) {
|
|
@@ -42,4 +49,15 @@ var createCampaignEvent = function (campaign, options) {
|
|
|
42
49
|
return (0, analytics_core_1.createIdentifyEvent)(identifyEvent);
|
|
43
50
|
};
|
|
44
51
|
exports.createCampaignEvent = createCampaignEvent;
|
|
52
|
+
var getDefaultExcludedReferrers = function (cookieDomain) {
|
|
53
|
+
var domain = cookieDomain;
|
|
54
|
+
if (domain) {
|
|
55
|
+
if (domain.startsWith('.')) {
|
|
56
|
+
domain = domain.substring(1);
|
|
57
|
+
}
|
|
58
|
+
return [new RegExp("".concat(domain.replace('.', '\\.'), "$"))];
|
|
59
|
+
}
|
|
60
|
+
return [];
|
|
61
|
+
};
|
|
62
|
+
exports.getDefaultExcludedReferrers = getDefaultExcludedReferrers;
|
|
45
63
|
//# sourceMappingURL=helpers.js.map
|
package/lib/cjs/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":";;;AAAA,8EAAmE;AACnE,4DAA4F;AAIrF,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;AAEF,IAAM,sBAAsB,GAAG,UAAC,MAAc;IAC5C,IAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEhC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;QACrB,OAAO,MAAM,CAAC;KACf;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEK,IAAM,aAAa,GAAG,UAAC,OAAiB,EAAE,QAA8B,EAAE,OAAgB
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { BASE_CAMPAIGN } from '@amplitude/analytics-client-common';\nimport { AMPLITUDE_PREFIX, createIdentifyEvent, Identify } from '@amplitude/analytics-core';\nimport { Campaign } from '@amplitude/analytics-types';\nimport { Options } from './typings/web-attribution';\n\nexport const getStorageKey = (apiKey: string, postKey = '', limit = 10) => {\n return [AMPLITUDE_PREFIX, postKey, apiKey.substring(0, limit)].filter(Boolean).join('_');\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\nexport const isNewCampaign = (current: Campaign, previous: Campaign | undefined, options: Options) => {\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 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"]}
|
package/lib/cjs/index.d.ts
CHANGED
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,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,oBAAoB,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,oBAAoB,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAC"}
|
package/lib/cjs/index.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
-
exports.
|
|
3
|
-
var tslib_1 = require("tslib");
|
|
2
|
+
exports.plugin = exports.webAttributionPlugin = void 0;
|
|
4
3
|
var web_attribution_1 = require("./web-attribution");
|
|
5
4
|
Object.defineProperty(exports, "webAttributionPlugin", { enumerable: true, get: function () { return web_attribution_1.webAttributionPlugin; } });
|
|
6
5
|
var web_attribution_2 = require("./web-attribution");
|
|
7
6
|
Object.defineProperty(exports, "plugin", { enumerable: true, get: function () { return web_attribution_2.webAttributionPlugin; } });
|
|
8
|
-
exports.Types = tslib_1.__importStar(require("./typings/web-attribution"));
|
|
9
7
|
//# sourceMappingURL=index.js.map
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;AAAA,qDAAyD;AAAhD,uHAAA,oBAAoB,OAAA;AAC7B,qDAAmE;AAA1D,yGAAA,oBAAoB,OAAU","sourcesContent":["export { webAttributionPlugin } from './web-attribution';\nexport { webAttributionPlugin as plugin } from './web-attribution';\n"]}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
import { BeforePlugin
|
|
1
|
+
import { BeforePlugin } from '@amplitude/analytics-types';
|
|
2
2
|
export interface Options {
|
|
3
|
-
|
|
4
|
-
excludeReferrers?: string[];
|
|
3
|
+
excludeReferrers?: (string | RegExp)[];
|
|
5
4
|
initialEmptyValue?: string;
|
|
6
5
|
resetSessionOnNewCampaign?: boolean;
|
|
7
6
|
}
|
|
8
7
|
export interface CreateWebAttributionPlugin {
|
|
9
|
-
(client: BrowserClient, options?: Options): BeforePlugin;
|
|
10
8
|
(options?: Options): BeforePlugin;
|
|
11
9
|
}
|
|
12
|
-
export type CreateWebAttributionPluginParameters = [BrowserClient, Options?] | [Options?];
|
|
13
10
|
//# sourceMappingURL=web-attribution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-attribution.d.ts","sourceRoot":"","sources":["../../../src/typings/web-attribution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"web-attribution.d.ts","sourceRoot":"","sources":["../../../src/typings/web-attribution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,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;AAED,MAAM,WAAW,0BAA0B;IACzC,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;CACnC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-attribution.js","sourceRoot":"","sources":["../../../src/typings/web-attribution.ts"],"names":[],"mappings":"","sourcesContent":["import { BeforePlugin
|
|
1
|
+
{"version":3,"file":"web-attribution.js","sourceRoot":"","sources":["../../../src/typings/web-attribution.ts"],"names":[],"mappings":"","sourcesContent":["import { BeforePlugin } from '@amplitude/analytics-types';\n\nexport interface Options {\n excludeReferrers?: (string | RegExp)[];\n initialEmptyValue?: string;\n resetSessionOnNewCampaign?: boolean;\n}\n\nexport interface CreateWebAttributionPlugin {\n (options?: Options): BeforePlugin;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-attribution.d.ts","sourceRoot":"","sources":["../../src/web-attribution.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"web-attribution.d.ts","sourceRoot":"","sources":["../../src/web-attribution.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAW,MAAM,2BAA2B,CAAC;AAEhF,eAAO,MAAM,oBAAoB,EAAE,0BAuClC,CAAC"}
|
|
@@ -2,59 +2,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
2
2
|
exports.webAttributionPlugin = void 0;
|
|
3
3
|
var tslib_1 = require("tslib");
|
|
4
4
|
var analytics_client_common_1 = require("@amplitude/analytics-client-common");
|
|
5
|
-
var analytics_types_1 = require("@amplitude/analytics-types");
|
|
6
5
|
var helpers_1 = require("./helpers");
|
|
7
|
-
var webAttributionPlugin = function () {
|
|
6
|
+
var webAttributionPlugin = function (options) {
|
|
8
7
|
var _this = this;
|
|
9
|
-
|
|
10
|
-
var args = [];
|
|
11
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
12
|
-
args[_i] = arguments[_i];
|
|
13
|
-
}
|
|
14
|
-
var amplitude;
|
|
15
|
-
var options = {};
|
|
16
|
-
var _b = tslib_1.__read(args, 2), clientOrOptions = _b[0], configOrUndefined = _b[1];
|
|
17
|
-
if (clientOrOptions && 'init' in clientOrOptions) {
|
|
18
|
-
amplitude = clientOrOptions;
|
|
19
|
-
if (configOrUndefined) {
|
|
20
|
-
options = configOrUndefined;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
else if (clientOrOptions) {
|
|
24
|
-
options = clientOrOptions;
|
|
25
|
-
}
|
|
26
|
-
var excludeReferrers = (_a = options.excludeReferrers) !== null && _a !== void 0 ? _a : [];
|
|
27
|
-
if (typeof location !== 'undefined') {
|
|
28
|
-
excludeReferrers.unshift(location.hostname);
|
|
29
|
-
}
|
|
30
|
-
options = tslib_1.__assign(tslib_1.__assign({ disabled: false, initialEmptyValue: 'EMPTY', resetSessionOnNewCampaign: false }, options), { excludeReferrers: excludeReferrers });
|
|
8
|
+
if (options === void 0) { options = {}; }
|
|
31
9
|
var plugin = {
|
|
32
|
-
name: 'web-attribution',
|
|
33
|
-
type:
|
|
34
|
-
setup: function (config,
|
|
10
|
+
name: '@amplitude/plugin-web-attribution-browser',
|
|
11
|
+
type: 'before',
|
|
12
|
+
setup: function (config, amplitude) {
|
|
35
13
|
var _a;
|
|
36
14
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
37
|
-
var
|
|
15
|
+
var pluginConfig, storage, storageKey, _b, currentCampaign, previousCampaign, campaignEvent;
|
|
38
16
|
return tslib_1.__generator(this, function (_c) {
|
|
39
17
|
switch (_c.label) {
|
|
40
18
|
case 0:
|
|
41
|
-
|
|
42
|
-
if (!amplitude) {
|
|
43
|
-
receivedType = clientOrOptions ? 'Options' : 'undefined';
|
|
44
|
-
config.loggerProvider.error("Argument of type '".concat(receivedType, "' is not assignable to parameter of type 'BrowserClient'."));
|
|
45
|
-
return [2 /*return*/];
|
|
46
|
-
}
|
|
47
|
-
if (options.disabled) {
|
|
48
|
-
config.loggerProvider.log('@amplitude/plugin-web-attribution-browser is disabled. Attribution is not tracked.');
|
|
49
|
-
return [2 /*return*/];
|
|
50
|
-
}
|
|
19
|
+
pluginConfig = tslib_1.__assign({ initialEmptyValue: 'EMPTY', resetSessionOnNewCampaign: false, excludeReferrers: (0, helpers_1.getDefaultExcludedReferrers)((_a = config.cookieOptions) === null || _a === void 0 ? void 0 : _a.domain) }, options);
|
|
51
20
|
config.loggerProvider.log('Installing @amplitude/plugin-web-attribution-browser.');
|
|
52
|
-
if (!client && !((_a = config.attribution) === null || _a === void 0 ? void 0 : _a.disabled)) {
|
|
53
|
-
config.loggerProvider.warn('@amplitude/plugin-web-attribution-browser overrides web attribution behavior defined in @amplitude/analytics-browser. Resolve by disabling web attribution tracking in @amplitude/analytics-browser.');
|
|
54
|
-
config.attribution = {
|
|
55
|
-
disabled: true,
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
21
|
storage = config.cookieStorage;
|
|
59
22
|
storageKey = (0, helpers_1.getStorageKey)(config.apiKey, 'MKTG');
|
|
60
23
|
return [4 /*yield*/, Promise.all([
|
|
@@ -63,14 +26,13 @@ var webAttributionPlugin = function () {
|
|
|
63
26
|
])];
|
|
64
27
|
case 1:
|
|
65
28
|
_b = tslib_1.__read.apply(void 0, [_c.sent(), 2]), currentCampaign = _b[0], previousCampaign = _b[1];
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (options.resetSessionOnNewCampaign) {
|
|
29
|
+
if ((0, helpers_1.isNewCampaign)(currentCampaign, previousCampaign, pluginConfig)) {
|
|
30
|
+
if (pluginConfig.resetSessionOnNewCampaign) {
|
|
69
31
|
amplitude.setSessionId(Date.now());
|
|
70
32
|
config.loggerProvider.log('Created a new session for new campaign.');
|
|
71
33
|
}
|
|
72
34
|
config.loggerProvider.log('Tracking attribution.');
|
|
73
|
-
campaignEvent = (0, helpers_1.createCampaignEvent)(currentCampaign,
|
|
35
|
+
campaignEvent = (0, helpers_1.createCampaignEvent)(currentCampaign, pluginConfig);
|
|
74
36
|
amplitude.track(campaignEvent);
|
|
75
37
|
void storage.set(storageKey, currentCampaign);
|
|
76
38
|
}
|
|
@@ -83,9 +45,6 @@ var webAttributionPlugin = function () {
|
|
|
83
45
|
return [2 /*return*/, event];
|
|
84
46
|
}); }); },
|
|
85
47
|
};
|
|
86
|
-
// For Amplitude-internal functionality
|
|
87
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
88
|
-
plugin.__pluginEnabledOverride = undefined;
|
|
89
48
|
return plugin;
|
|
90
49
|
};
|
|
91
50
|
exports.webAttributionPlugin = webAttributionPlugin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-attribution.js","sourceRoot":"","sources":["../../src/web-attribution.ts"],"names":[],"mappings":";;;AAAA,8EAAoE;
|
|
1
|
+
{"version":3,"file":"web-attribution.js","sourceRoot":"","sources":["../../src/web-attribution.ts"],"names":[],"mappings":";;;AAAA,8EAAoE;AAEpE,qCAA2G;AAGpG,IAAM,oBAAoB,GAA+B,UAAU,OAAqB;IAA/B,iBAuC/D;IAvCyE,wBAAA,EAAA,YAAqB;IAC7F,IAAM,MAAM,GAAiB;QAC3B,IAAI,EAAE,2CAA2C;QACjD,IAAI,EAAE,QAAQ;QAEd,KAAK,EAAE,UAAgB,MAAqB,EAAE,SAAwB;;;;;;;4BAC9D,YAAY,sBAChB,iBAAiB,EAAE,OAAO,EAC1B,yBAAyB,EAAE,KAAK,EAChC,gBAAgB,EAAE,IAAA,qCAA2B,EAAC,MAAA,MAAM,CAAC,aAAa,0CAAE,MAAM,CAAC,IACxE,OAAO,CACX,CAAC;4BACF,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;4BAG7E,OAAO,GAAG,MAAM,CAAC,aAA6C,CAAC;4BAC/D,UAAU,GAAG,IAAA,uBAAa,EAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;4BAEZ,qBAAM,OAAO,CAAC,GAAG,CAAC;oCAC5D,IAAI,wCAAc,EAAE,CAAC,KAAK,EAAE;oCAC5B,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;iCACxB,CAAC,EAAA;;4BAHI,KAAA,8BAAsC,SAG1C,KAAA,EAHK,eAAe,QAAA,EAAE,gBAAgB,QAAA;4BAKxC,IAAI,IAAA,uBAAa,EAAC,eAAe,EAAE,gBAAgB,EAAE,YAAY,CAAC,EAAE;gCAClE,IAAI,YAAY,CAAC,yBAAyB,EAAE;oCAC1C,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;oCACnC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;iCACtE;gCACD,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;gCAC7C,aAAa,GAAG,IAAA,6BAAmB,EAAC,eAAe,EAAE,YAAY,CAAC,CAAC;gCACzE,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gCAC/B,KAAK,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;6BAC/C;;;;;SACF;QAED,OAAO,EAAE,UAAO,KAAY;YAAK,sBAAA,KAAK,EAAA;iBAAA;KACvC,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAvCW,QAAA,oBAAoB,wBAuC/B","sourcesContent":["import { CampaignParser } from '@amplitude/analytics-client-common';\nimport { BeforePlugin, BrowserClient, BrowserConfig, Campaign, Event, Storage } from '@amplitude/analytics-types';\nimport { createCampaignEvent, getDefaultExcludedReferrers, getStorageKey, isNewCampaign } from './helpers';\nimport { CreateWebAttributionPlugin, Options } from './typings/web-attribution';\n\nexport const webAttributionPlugin: CreateWebAttributionPlugin = function (options: Options = {}) {\n const plugin: BeforePlugin = {\n name: '@amplitude/plugin-web-attribution-browser',\n type: 'before',\n\n setup: async function (config: BrowserConfig, amplitude: BrowserClient) {\n const pluginConfig = {\n initialEmptyValue: 'EMPTY',\n resetSessionOnNewCampaign: false,\n excludeReferrers: getDefaultExcludedReferrers(config.cookieOptions?.domain),\n ...options,\n };\n config.loggerProvider.log('Installing @amplitude/plugin-web-attribution-browser.');\n\n // Share cookie storage with user session storage\n const storage = config.cookieStorage as unknown as Storage<Campaign>;\n const storageKey = getStorageKey(config.apiKey, 'MKTG');\n\n const [currentCampaign, previousCampaign] = await Promise.all([\n new CampaignParser().parse(),\n storage.get(storageKey),\n ]);\n\n if (isNewCampaign(currentCampaign, previousCampaign, pluginConfig)) {\n if (pluginConfig.resetSessionOnNewCampaign) {\n amplitude.setSessionId(Date.now());\n config.loggerProvider.log('Created a new session for new campaign.');\n }\n config.loggerProvider.log('Tracking attribution.');\n const campaignEvent = createCampaignEvent(currentCampaign, pluginConfig);\n amplitude.track(campaignEvent);\n void storage.set(storageKey, currentCampaign);\n }\n },\n\n execute: async (event: Event) => event,\n };\n\n return plugin;\n};\n"]}
|
package/lib/esm/helpers.d.ts
CHANGED
|
@@ -2,5 +2,7 @@ import { Campaign } from '@amplitude/analytics-types';
|
|
|
2
2
|
import { Options } from './typings/web-attribution';
|
|
3
3
|
export declare const getStorageKey: (apiKey: string, postKey?: string, limit?: number) => string;
|
|
4
4
|
export declare const isNewCampaign: (current: Campaign, previous: Campaign | undefined, options: Options) => boolean;
|
|
5
|
+
export declare const isExcludedReferrer: (excludeReferrers?: (string | RegExp)[], referringDomain?: string) => boolean;
|
|
5
6
|
export declare const createCampaignEvent: (campaign: Campaign, options: Options) => import("@amplitude/analytics-types").IdentifyEvent;
|
|
7
|
+
export declare const getDefaultExcludedReferrers: (cookieDomain: string | undefined) => RegExp[];
|
|
6
8
|
//# sourceMappingURL=helpers.d.ts.map
|
package/lib/esm/helpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEpD,eAAO,MAAM,aAAa,WAAY,MAAM,6CAE3C,CAAC;AAYF,eAAO,MAAM,aAAa,YAAa,QAAQ,YAAY,QAAQ,GAAG,SAAS,WAAW,OAAO,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEpD,eAAO,MAAM,aAAa,WAAY,MAAM,6CAE3C,CAAC;AAYF,eAAO,MAAM,aAAa,YAAa,QAAQ,YAAY,QAAQ,GAAG,SAAS,WAAW,OAAO,YAYhG,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"}
|
package/lib/esm/helpers.js
CHANGED
|
@@ -14,16 +14,22 @@ var domainWithoutSubdomain = function (domain) {
|
|
|
14
14
|
return parts.slice(parts.length - 2, parts.length).join('.');
|
|
15
15
|
};
|
|
16
16
|
export var isNewCampaign = function (current, previous, options) {
|
|
17
|
-
var _a;
|
|
18
17
|
var referrer = current.referrer, referring_domain = current.referring_domain, currentCampaign = __rest(current, ["referrer", "referring_domain"]);
|
|
19
|
-
var
|
|
20
|
-
if (
|
|
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)) {
|
|
21
20
|
return false;
|
|
22
21
|
}
|
|
23
22
|
var hasNewCampaign = JSON.stringify(currentCampaign) !== JSON.stringify(previousCampaign);
|
|
24
23
|
var hasNewDomain = domainWithoutSubdomain(referring_domain || '') !== domainWithoutSubdomain(prevReferringDomain || '');
|
|
25
24
|
return !previous || hasNewCampaign || hasNewDomain;
|
|
26
25
|
};
|
|
26
|
+
export var isExcludedReferrer = function (excludeReferrers, referringDomain) {
|
|
27
|
+
if (excludeReferrers === void 0) { excludeReferrers = []; }
|
|
28
|
+
if (referringDomain === void 0) { referringDomain = ''; }
|
|
29
|
+
return excludeReferrers.some(function (value) {
|
|
30
|
+
return value instanceof RegExp ? value.test(referringDomain) : value === referringDomain;
|
|
31
|
+
});
|
|
32
|
+
};
|
|
27
33
|
export var createCampaignEvent = function (campaign, options) {
|
|
28
34
|
var campaignParameters = __assign(__assign({}, BASE_CAMPAIGN), campaign);
|
|
29
35
|
var identifyEvent = Object.entries(campaignParameters).reduce(function (identify, _a) {
|
|
@@ -37,4 +43,14 @@ export var createCampaignEvent = function (campaign, options) {
|
|
|
37
43
|
}, new Identify());
|
|
38
44
|
return createIdentifyEvent(identifyEvent);
|
|
39
45
|
};
|
|
46
|
+
export var getDefaultExcludedReferrers = function (cookieDomain) {
|
|
47
|
+
var domain = cookieDomain;
|
|
48
|
+
if (domain) {
|
|
49
|
+
if (domain.startsWith('.')) {
|
|
50
|
+
domain = domain.substring(1);
|
|
51
|
+
}
|
|
52
|
+
return [new RegExp("".concat(domain.replace('.', '\\.'), "$"))];
|
|
53
|
+
}
|
|
54
|
+
return [];
|
|
55
|
+
};
|
|
40
56
|
//# sourceMappingURL=helpers.js.map
|
package/lib/esm/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAI5F,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;AAEF,IAAM,sBAAsB,GAAG,UAAC,MAAc;IAC5C,IAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEhC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;QACrB,OAAO,MAAM,CAAC;KACf;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,aAAa,GAAG,UAAC,OAAiB,EAAE,QAA8B,EAAE,OAAgB
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { BASE_CAMPAIGN } from '@amplitude/analytics-client-common';\nimport { AMPLITUDE_PREFIX, createIdentifyEvent, Identify } from '@amplitude/analytics-core';\nimport { Campaign } from '@amplitude/analytics-types';\nimport { Options } from './typings/web-attribution';\n\nexport const getStorageKey = (apiKey: string, postKey = '', limit = 10) => {\n return [AMPLITUDE_PREFIX, postKey, apiKey.substring(0, limit)].filter(Boolean).join('_');\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\nexport const isNewCampaign = (current: Campaign, previous: Campaign | undefined, options: Options) => {\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 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"]}
|
package/lib/esm/index.d.ts
CHANGED
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,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,oBAAoB,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,oBAAoB,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAC"}
|
package/lib/esm/index.js
CHANGED
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,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,oBAAoB,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,oBAAoB,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAC","sourcesContent":["export { webAttributionPlugin } from './web-attribution';\nexport { webAttributionPlugin as plugin } from './web-attribution';\n"]}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
import { BeforePlugin
|
|
1
|
+
import { BeforePlugin } from '@amplitude/analytics-types';
|
|
2
2
|
export interface Options {
|
|
3
|
-
|
|
4
|
-
excludeReferrers?: string[];
|
|
3
|
+
excludeReferrers?: (string | RegExp)[];
|
|
5
4
|
initialEmptyValue?: string;
|
|
6
5
|
resetSessionOnNewCampaign?: boolean;
|
|
7
6
|
}
|
|
8
7
|
export interface CreateWebAttributionPlugin {
|
|
9
|
-
(client: BrowserClient, options?: Options): BeforePlugin;
|
|
10
8
|
(options?: Options): BeforePlugin;
|
|
11
9
|
}
|
|
12
|
-
export type CreateWebAttributionPluginParameters = [BrowserClient, Options?] | [Options?];
|
|
13
10
|
//# sourceMappingURL=web-attribution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-attribution.d.ts","sourceRoot":"","sources":["../../../src/typings/web-attribution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"web-attribution.d.ts","sourceRoot":"","sources":["../../../src/typings/web-attribution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,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;AAED,MAAM,WAAW,0BAA0B;IACzC,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;CACnC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-attribution.js","sourceRoot":"","sources":["../../../src/typings/web-attribution.ts"],"names":[],"mappings":"","sourcesContent":["import { BeforePlugin
|
|
1
|
+
{"version":3,"file":"web-attribution.js","sourceRoot":"","sources":["../../../src/typings/web-attribution.ts"],"names":[],"mappings":"","sourcesContent":["import { BeforePlugin } from '@amplitude/analytics-types';\n\nexport interface Options {\n excludeReferrers?: (string | RegExp)[];\n initialEmptyValue?: string;\n resetSessionOnNewCampaign?: boolean;\n}\n\nexport interface CreateWebAttributionPlugin {\n (options?: Options): BeforePlugin;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-attribution.d.ts","sourceRoot":"","sources":["../../src/web-attribution.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"web-attribution.d.ts","sourceRoot":"","sources":["../../src/web-attribution.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAW,MAAM,2BAA2B,CAAC;AAEhF,eAAO,MAAM,oBAAoB,EAAE,0BAuClC,CAAC"}
|
|
@@ -1,58 +1,21 @@
|
|
|
1
1
|
import { __assign, __awaiter, __generator, __read } from "tslib";
|
|
2
2
|
import { CampaignParser } from '@amplitude/analytics-client-common';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
export var webAttributionPlugin = function () {
|
|
3
|
+
import { createCampaignEvent, getDefaultExcludedReferrers, getStorageKey, isNewCampaign } from './helpers';
|
|
4
|
+
export var webAttributionPlugin = function (options) {
|
|
6
5
|
var _this = this;
|
|
7
|
-
|
|
8
|
-
var args = [];
|
|
9
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
10
|
-
args[_i] = arguments[_i];
|
|
11
|
-
}
|
|
12
|
-
var amplitude;
|
|
13
|
-
var options = {};
|
|
14
|
-
var _b = __read(args, 2), clientOrOptions = _b[0], configOrUndefined = _b[1];
|
|
15
|
-
if (clientOrOptions && 'init' in clientOrOptions) {
|
|
16
|
-
amplitude = clientOrOptions;
|
|
17
|
-
if (configOrUndefined) {
|
|
18
|
-
options = configOrUndefined;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
else if (clientOrOptions) {
|
|
22
|
-
options = clientOrOptions;
|
|
23
|
-
}
|
|
24
|
-
var excludeReferrers = (_a = options.excludeReferrers) !== null && _a !== void 0 ? _a : [];
|
|
25
|
-
if (typeof location !== 'undefined') {
|
|
26
|
-
excludeReferrers.unshift(location.hostname);
|
|
27
|
-
}
|
|
28
|
-
options = __assign(__assign({ disabled: false, initialEmptyValue: 'EMPTY', resetSessionOnNewCampaign: false }, options), { excludeReferrers: excludeReferrers });
|
|
6
|
+
if (options === void 0) { options = {}; }
|
|
29
7
|
var plugin = {
|
|
30
|
-
name: 'web-attribution',
|
|
31
|
-
type:
|
|
32
|
-
setup: function (config,
|
|
8
|
+
name: '@amplitude/plugin-web-attribution-browser',
|
|
9
|
+
type: 'before',
|
|
10
|
+
setup: function (config, amplitude) {
|
|
33
11
|
var _a;
|
|
34
12
|
return __awaiter(this, void 0, void 0, function () {
|
|
35
|
-
var
|
|
13
|
+
var pluginConfig, storage, storageKey, _b, currentCampaign, previousCampaign, campaignEvent;
|
|
36
14
|
return __generator(this, function (_c) {
|
|
37
15
|
switch (_c.label) {
|
|
38
16
|
case 0:
|
|
39
|
-
|
|
40
|
-
if (!amplitude) {
|
|
41
|
-
receivedType = clientOrOptions ? 'Options' : 'undefined';
|
|
42
|
-
config.loggerProvider.error("Argument of type '".concat(receivedType, "' is not assignable to parameter of type 'BrowserClient'."));
|
|
43
|
-
return [2 /*return*/];
|
|
44
|
-
}
|
|
45
|
-
if (options.disabled) {
|
|
46
|
-
config.loggerProvider.log('@amplitude/plugin-web-attribution-browser is disabled. Attribution is not tracked.');
|
|
47
|
-
return [2 /*return*/];
|
|
48
|
-
}
|
|
17
|
+
pluginConfig = __assign({ initialEmptyValue: 'EMPTY', resetSessionOnNewCampaign: false, excludeReferrers: getDefaultExcludedReferrers((_a = config.cookieOptions) === null || _a === void 0 ? void 0 : _a.domain) }, options);
|
|
49
18
|
config.loggerProvider.log('Installing @amplitude/plugin-web-attribution-browser.');
|
|
50
|
-
if (!client && !((_a = config.attribution) === null || _a === void 0 ? void 0 : _a.disabled)) {
|
|
51
|
-
config.loggerProvider.warn('@amplitude/plugin-web-attribution-browser overrides web attribution behavior defined in @amplitude/analytics-browser. Resolve by disabling web attribution tracking in @amplitude/analytics-browser.');
|
|
52
|
-
config.attribution = {
|
|
53
|
-
disabled: true,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
19
|
storage = config.cookieStorage;
|
|
57
20
|
storageKey = getStorageKey(config.apiKey, 'MKTG');
|
|
58
21
|
return [4 /*yield*/, Promise.all([
|
|
@@ -61,14 +24,13 @@ export var webAttributionPlugin = function () {
|
|
|
61
24
|
])];
|
|
62
25
|
case 1:
|
|
63
26
|
_b = __read.apply(void 0, [_c.sent(), 2]), currentCampaign = _b[0], previousCampaign = _b[1];
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
if (options.resetSessionOnNewCampaign) {
|
|
27
|
+
if (isNewCampaign(currentCampaign, previousCampaign, pluginConfig)) {
|
|
28
|
+
if (pluginConfig.resetSessionOnNewCampaign) {
|
|
67
29
|
amplitude.setSessionId(Date.now());
|
|
68
30
|
config.loggerProvider.log('Created a new session for new campaign.');
|
|
69
31
|
}
|
|
70
32
|
config.loggerProvider.log('Tracking attribution.');
|
|
71
|
-
campaignEvent = createCampaignEvent(currentCampaign,
|
|
33
|
+
campaignEvent = createCampaignEvent(currentCampaign, pluginConfig);
|
|
72
34
|
amplitude.track(campaignEvent);
|
|
73
35
|
void storage.set(storageKey, currentCampaign);
|
|
74
36
|
}
|
|
@@ -81,9 +43,6 @@ export var webAttributionPlugin = function () {
|
|
|
81
43
|
return [2 /*return*/, event];
|
|
82
44
|
}); }); },
|
|
83
45
|
};
|
|
84
|
-
// For Amplitude-internal functionality
|
|
85
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
86
|
-
plugin.__pluginEnabledOverride = undefined;
|
|
87
46
|
return plugin;
|
|
88
47
|
};
|
|
89
48
|
//# sourceMappingURL=web-attribution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-attribution.js","sourceRoot":"","sources":["../../src/web-attribution.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"web-attribution.js","sourceRoot":"","sources":["../../src/web-attribution.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG3G,MAAM,CAAC,IAAM,oBAAoB,GAA+B,UAAU,OAAqB;IAA/B,iBAuC/D;IAvCyE,wBAAA,EAAA,YAAqB;IAC7F,IAAM,MAAM,GAAiB;QAC3B,IAAI,EAAE,2CAA2C;QACjD,IAAI,EAAE,QAAQ;QAEd,KAAK,EAAE,UAAgB,MAAqB,EAAE,SAAwB;;;;;;;4BAC9D,YAAY,cAChB,iBAAiB,EAAE,OAAO,EAC1B,yBAAyB,EAAE,KAAK,EAChC,gBAAgB,EAAE,2BAA2B,CAAC,MAAA,MAAM,CAAC,aAAa,0CAAE,MAAM,CAAC,IACxE,OAAO,CACX,CAAC;4BACF,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;4BAG7E,OAAO,GAAG,MAAM,CAAC,aAA6C,CAAC;4BAC/D,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;4BAEZ,qBAAM,OAAO,CAAC,GAAG,CAAC;oCAC5D,IAAI,cAAc,EAAE,CAAC,KAAK,EAAE;oCAC5B,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;iCACxB,CAAC,EAAA;;4BAHI,KAAA,sBAAsC,SAG1C,KAAA,EAHK,eAAe,QAAA,EAAE,gBAAgB,QAAA;4BAKxC,IAAI,aAAa,CAAC,eAAe,EAAE,gBAAgB,EAAE,YAAY,CAAC,EAAE;gCAClE,IAAI,YAAY,CAAC,yBAAyB,EAAE;oCAC1C,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;oCACnC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;iCACtE;gCACD,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;gCAC7C,aAAa,GAAG,mBAAmB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;gCACzE,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gCAC/B,KAAK,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;6BAC/C;;;;;SACF;QAED,OAAO,EAAE,UAAO,KAAY;YAAK,sBAAA,KAAK,EAAA;iBAAA;KACvC,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC","sourcesContent":["import { CampaignParser } from '@amplitude/analytics-client-common';\nimport { BeforePlugin, BrowserClient, BrowserConfig, Campaign, Event, Storage } from '@amplitude/analytics-types';\nimport { createCampaignEvent, getDefaultExcludedReferrers, getStorageKey, isNewCampaign } from './helpers';\nimport { CreateWebAttributionPlugin, Options } from './typings/web-attribution';\n\nexport const webAttributionPlugin: CreateWebAttributionPlugin = function (options: Options = {}) {\n const plugin: BeforePlugin = {\n name: '@amplitude/plugin-web-attribution-browser',\n type: 'before',\n\n setup: async function (config: BrowserConfig, amplitude: BrowserClient) {\n const pluginConfig = {\n initialEmptyValue: 'EMPTY',\n resetSessionOnNewCampaign: false,\n excludeReferrers: getDefaultExcludedReferrers(config.cookieOptions?.domain),\n ...options,\n };\n config.loggerProvider.log('Installing @amplitude/plugin-web-attribution-browser.');\n\n // Share cookie storage with user session storage\n const storage = config.cookieStorage as unknown as Storage<Campaign>;\n const storageKey = getStorageKey(config.apiKey, 'MKTG');\n\n const [currentCampaign, previousCampaign] = await Promise.all([\n new CampaignParser().parse(),\n storage.get(storageKey),\n ]);\n\n if (isNewCampaign(currentCampaign, previousCampaign, pluginConfig)) {\n if (pluginConfig.resetSessionOnNewCampaign) {\n amplitude.setSessionId(Date.now());\n config.loggerProvider.log('Created a new session for new campaign.');\n }\n config.loggerProvider.log('Tracking attribution.');\n const campaignEvent = createCampaignEvent(currentCampaign, pluginConfig);\n amplitude.track(campaignEvent);\n void storage.set(storageKey, currentCampaign);\n }\n },\n\n execute: async (event: Event) => event,\n };\n\n return plugin;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).amplitude={})}(this,(function(e){"use strict";var t=function(){return t=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var i in t=arguments[r])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},t.apply(this,arguments)};function r(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(e);i<n.length;i++)t.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(r[n[i]]=e[n[i]])}return r}function n(e,t,r,n){return new(r||(r=Promise))((function(i,o){function u(e){try{
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).amplitude={})}(this,(function(e){"use strict";var t=function(){return t=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var i in t=arguments[r])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},t.apply(this,arguments)};function r(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(e);i<n.length;i++)t.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(r[n[i]]=e[n[i]])}return r}function n(e,t,r,n){return new(r||(r=Promise))((function(i,o){function u(e){try{f(n.next(e))}catch(e){o(e)}}function a(e){try{f(n.throw(e))}catch(e){o(e)}}function f(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(u,a)}f((n=n.apply(e,t||[])).next())}))}function i(e,t){var r,n,i,o,u={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(a){return function(f){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;o&&(o=0,a[0]&&(u=0)),u;)try{if(r=1,n&&(i=2&a[0]?n.return:a[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,a[1])).done)return i;switch(n=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return u.label++,{value:a[1],done:!1};case 5:u.label++,n=a[1],a=[0];continue;case 7:a=u.ops.pop(),u.trys.pop();continue;default:if(!(i=u.trys,(i=i.length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){u=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]<i[3])){u.label=a[1];break}if(6===a[0]&&u.label<i[1]){u.label=i[1],i=a;break}if(i&&u.label<i[2]){u.label=i[2],u.ops.push(a);break}i[2]&&u.ops.pop(),u.trys.pop();continue}a=t.call(e,u)}catch(e){a=[6,e],n=0}finally{r=i=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,f])}}}function o(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,o=r.call(e),u=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)u.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return u}var u,a,f,s=function(){var e,t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:void 0;return(null===(e=null==t?void 0:t.location)||void 0===e?void 0:e.search)?t.location.search.substring(1).split("&").filter(Boolean).reduce((function(e,t){var r=t.split("=",2),n=l(r[0]),i=l(r[1]);return i?(e[n]=i,e):e}),{}):{}},l=function(e){void 0===e&&(e="");try{return decodeURIComponent(e)}catch(e){return""}},c="dclid",d="fbclid",p="gbraid",v="gclid",y="ko_click_id",h="li_fat_id",m="msclkid",_="rtd_cid",g="ttclid",b="twclid",E="wbraid",S={utm_campaign:void 0,utm_content:void 0,utm_id:void 0,utm_medium:void 0,utm_source:void 0,utm_term:void 0,referrer:void 0,referring_domain:void 0,dclid:void 0,gbraid:void 0,gclid:void 0,fbclid:void 0,ko_click_id:void 0,li_fat_id:void 0,msclkid:void 0,rtd_cid:void 0,ttclid:void 0,twclid:void 0,wbraid:void 0},w=function(){function e(){}return e.prototype.parse=function(){return n(this,void 0,void 0,(function(){return i(this,(function(e){return[2,t(t(t(t({},S),this.getUtmParam()),this.getReferrer()),this.getClickIds())]}))}))},e.prototype.getUtmParam=function(){var e=s();return{utm_campaign:e.utm_campaign,utm_content:e.utm_content,utm_id:e.utm_id,utm_medium:e.utm_medium,utm_source:e.utm_source,utm_term:e.utm_term}},e.prototype.getReferrer=function(){var e,t,r={referrer:void 0,referring_domain:void 0};try{r.referrer=document.referrer||void 0,r.referring_domain=null!==(t=null===(e=r.referrer)||void 0===e?void 0:e.split("/")[2])&&void 0!==t?t:void 0}catch(e){}return r},e.prototype.getClickIds=function(){var e,t=s();return(e={})[c]=t[c],e[d]=t[d],e[p]=t[p],e[v]=t[v],e[y]=t[y],e[h]=t[h],e[m]=t[m],e[_]=t[_],e[g]=t[g],e[b]=t[b],e[E]=t[E],e},e}();!function(e){e.SET="$set",e.SET_ONCE="$setOnce",e.ADD="$add",e.APPEND="$append",e.PREPEND="$prepend",e.REMOVE="$remove",e.PREINSERT="$preInsert",e.POSTINSERT="$postInsert",e.UNSET="$unset",e.CLEAR_ALL="$clearAll"}(u||(u={})),function(e){e.REVENUE_PRODUCT_ID="$productId",e.REVENUE_QUANTITY="$quantity",e.REVENUE_PRICE="$price",e.REVENUE_TYPE="$revenueType",e.REVENUE="$revenue"}(a||(a={})),function(e){e.IDENTIFY="$identify",e.GROUP_IDENTIFY="$groupidentify",e.REVENUE="revenue_amount"}(f||(f={}));var P="AMP",O=function(e){if(Object.keys(e).length>1e3)return!1;for(var t in e){var r=e[t];if(!T(t,r))return!1}return!0},T=function(e,t){var r,n;if("string"!=typeof e)return!1;if(Array.isArray(t)){var i=!0;try{for(var o=function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}(t),u=o.next();!u.done;u=o.next()){var a=u.value;if(Array.isArray(a))return!1;if("object"==typeof a)i=i&&O(a);else if(!["number","string"].includes(typeof a))return!1;if(!i)return!1}}catch(e){r={error:e}}finally{try{u&&!u.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}}else{if(null==t)return!1;if("object"==typeof t)return O(t);if(!["number","string","boolean"].includes(typeof t))return!1}return!0},R=function(){function e(){this._propertySet=new Set,this._properties={}}return e.prototype.getUserProperties=function(){return t({},this._properties)},e.prototype.set=function(e,t){return this._safeSet(u.SET,e,t),this},e.prototype.setOnce=function(e,t){return this._safeSet(u.SET_ONCE,e,t),this},e.prototype.append=function(e,t){return this._safeSet(u.APPEND,e,t),this},e.prototype.prepend=function(e,t){return this._safeSet(u.PREPEND,e,t),this},e.prototype.postInsert=function(e,t){return this._safeSet(u.POSTINSERT,e,t),this},e.prototype.preInsert=function(e,t){return this._safeSet(u.PREINSERT,e,t),this},e.prototype.remove=function(e,t){return this._safeSet(u.REMOVE,e,t),this},e.prototype.add=function(e,t){return this._safeSet(u.ADD,e,t),this},e.prototype.unset=function(e){return this._safeSet(u.UNSET,e,"-"),this},e.prototype.clearAll=function(){return this._properties={},this._properties[u.CLEAR_ALL]="-",this},e.prototype._safeSet=function(e,t,r){if(this._validate(e,t,r)){var n=this._properties[e];return void 0===n&&(n={},this._properties[e]=n),n[t]=r,this._propertySet.add(t),!0}return!1},e.prototype._validate=function(e,t,r){return void 0===this._properties[u.CLEAR_ALL]&&(!this._propertySet.has(t)&&(e===u.ADD?"number"==typeof r:e===u.UNSET||e===u.REMOVE||T(t,r)))},e}(),N=function(e){var t=e.split(".");return t.length<=2?e:t.slice(t.length-2,t.length).join(".")},I=function(e,t){return void 0===e&&(e=[]),void 0===t&&(t=""),e.some((function(e){return e instanceof RegExp?e.test(t):e===t}))},A=function(e,r){var n,i,u=t(t({},S),e),a=Object.entries(u).reduce((function(e,t){var n,i=o(t,2),u=i[0],a=i[1];return e.setOnce("initial_".concat(u),null!==(n=null!=a?a:r.initialEmptyValue)&&void 0!==n?n:"EMPTY"),a?e.set(u,a):e.unset(u)}),new R);return n=a,t(t({},i),{event_type:f.IDENTIFY,user_properties:n.getUserProperties()})},x=function(e){var u=this;void 0===e&&(e={});var a={name:"@amplitude/plugin-web-attribution-browser",type:"before",setup:function(u,a){var f;return n(this,void 0,void 0,(function(){var n,s,l,c,d,p,v;return i(this,(function(i){switch(i.label){case 0:return n=t({initialEmptyValue:"EMPTY",resetSessionOnNewCampaign:!1,excludeReferrers:(_=null===(f=u.cookieOptions)||void 0===f?void 0:f.domain,g=_,g?(g.startsWith(".")&&(g=g.substring(1)),[new RegExp("".concat(g.replace(".","\\."),"$"))]):[])},e),u.loggerProvider.log("Installing @amplitude/plugin-web-attribution-browser."),s=u.cookieStorage,y=u.apiKey,void 0===(h="MKTG")&&(h=""),void 0===m&&(m=10),l=[P,h,y.substring(0,m)].filter(Boolean).join("_"),[4,Promise.all([(new w).parse(),s.get(l)])];case 1:return c=o.apply(void 0,[i.sent(),2]),d=c[0],p=c[1],function(e,t,n){e.referrer;var i=e.referring_domain,o=r(e,["referrer","referring_domain"]),u=t||{};u.referrer;var a=u.referring_domain,f=r(u,["referrer","referring_domain"]);if(I(n.excludeReferrers,e.referring_domain))return!1;var s=JSON.stringify(o)!==JSON.stringify(f),l=N(i||"")!==N(a||"");return!t||s||l}(d,p,n)&&(n.resetSessionOnNewCampaign&&(a.setSessionId(Date.now()),u.loggerProvider.log("Created a new session for new campaign.")),u.loggerProvider.log("Tracking attribution."),v=A(d,n),a.track(v),s.set(l,d)),[2]}var y,h,m,_,g}))}))},execute:function(e){return n(u,void 0,void 0,(function(){return i(this,(function(t){return[2,e]}))}))}};return a};e.plugin=x,e.webAttributionPlugin=x,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
Binary file
|
package/lib/scripts/helpers.d.ts
CHANGED
|
@@ -2,5 +2,7 @@ import { Campaign } from '@amplitude/analytics-types';
|
|
|
2
2
|
import { Options } from './typings/web-attribution';
|
|
3
3
|
export declare const getStorageKey: (apiKey: string, postKey?: string, limit?: number) => string;
|
|
4
4
|
export declare const isNewCampaign: (current: Campaign, previous: Campaign | undefined, options: Options) => boolean;
|
|
5
|
+
export declare const isExcludedReferrer: (excludeReferrers?: (string | RegExp)[], referringDomain?: string) => boolean;
|
|
5
6
|
export declare const createCampaignEvent: (campaign: Campaign, options: Options) => import("@amplitude/analytics-types").IdentifyEvent;
|
|
7
|
+
export declare const getDefaultExcludedReferrers: (cookieDomain: string | undefined) => RegExp[];
|
|
6
8
|
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEpD,eAAO,MAAM,aAAa,WAAY,MAAM,6CAE3C,CAAC;AAYF,eAAO,MAAM,aAAa,YAAa,QAAQ,YAAY,QAAQ,GAAG,SAAS,WAAW,OAAO,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEpD,eAAO,MAAM,aAAa,WAAY,MAAM,6CAE3C,CAAC;AAYF,eAAO,MAAM,aAAa,YAAa,QAAQ,YAAY,QAAQ,GAAG,SAAS,WAAW,OAAO,YAYhG,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"}
|
package/lib/scripts/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,oBAAoB,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,oBAAoB,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
import { BeforePlugin
|
|
1
|
+
import { BeforePlugin } from '@amplitude/analytics-types';
|
|
2
2
|
export interface Options {
|
|
3
|
-
|
|
4
|
-
excludeReferrers?: string[];
|
|
3
|
+
excludeReferrers?: (string | RegExp)[];
|
|
5
4
|
initialEmptyValue?: string;
|
|
6
5
|
resetSessionOnNewCampaign?: boolean;
|
|
7
6
|
}
|
|
8
7
|
export interface CreateWebAttributionPlugin {
|
|
9
|
-
(client: BrowserClient, options?: Options): BeforePlugin;
|
|
10
8
|
(options?: Options): BeforePlugin;
|
|
11
9
|
}
|
|
12
|
-
export type CreateWebAttributionPluginParameters = [BrowserClient, Options?] | [Options?];
|
|
13
10
|
//# sourceMappingURL=web-attribution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-attribution.d.ts","sourceRoot":"","sources":["../../../src/typings/web-attribution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"web-attribution.d.ts","sourceRoot":"","sources":["../../../src/typings/web-attribution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,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;AAED,MAAM,WAAW,0BAA0B;IACzC,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;CACnC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-attribution.d.ts","sourceRoot":"","sources":["../../src/web-attribution.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"web-attribution.d.ts","sourceRoot":"","sources":["../../src/web-attribution.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAW,MAAM,2BAA2B,CAAC;AAEhF,eAAO,MAAM,oBAAoB,EAAE,0BAuClC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amplitude/plugin-web-attribution-browser",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0-beta.10",
|
|
4
4
|
"description": "",
|
|
5
5
|
"author": "Amplitude Inc",
|
|
6
6
|
"homepage": "https://github.com/amplitude/Amplitude-TypeScript",
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
"types": "lib/esm/index.d.ts",
|
|
11
11
|
"sideEffects": false,
|
|
12
12
|
"publishConfig": {
|
|
13
|
-
"access": "public"
|
|
13
|
+
"access": "public",
|
|
14
|
+
"tag": "latest"
|
|
14
15
|
},
|
|
15
16
|
"repository": {
|
|
16
17
|
"type": "git",
|
|
@@ -28,7 +29,6 @@
|
|
|
28
29
|
"lint": "yarn lint:eslint & yarn lint:prettier",
|
|
29
30
|
"lint:eslint": "eslint '{src,test}/**/*.ts'",
|
|
30
31
|
"lint:prettier": "prettier --check \"{src,test}/**/*.ts\"",
|
|
31
|
-
"publish": "node ../../scripts/publish/upload-to-s3.js",
|
|
32
32
|
"test": "jest",
|
|
33
33
|
"typecheck": "tsc -p ./tsconfig.json"
|
|
34
34
|
},
|
|
@@ -36,12 +36,12 @@
|
|
|
36
36
|
"url": "https://github.com/amplitude/Amplitude-TypeScript/issues"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@amplitude/analytics-client-common": "^
|
|
40
|
-
"@amplitude/analytics-types": "^
|
|
39
|
+
"@amplitude/analytics-client-common": "^2.0.0-beta.8",
|
|
40
|
+
"@amplitude/analytics-types": "^2.0.0-beta.8",
|
|
41
41
|
"tslib": "^2.4.1"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@amplitude/analytics-browser": "^
|
|
44
|
+
"@amplitude/analytics-browser": "^2.0.0-beta.10",
|
|
45
45
|
"@rollup/plugin-commonjs": "^23.0.4",
|
|
46
46
|
"@rollup/plugin-node-resolve": "^15.0.1",
|
|
47
47
|
"@rollup/plugin-typescript": "^10.0.1",
|
|
@@ -53,5 +53,5 @@
|
|
|
53
53
|
"files": [
|
|
54
54
|
"lib"
|
|
55
55
|
],
|
|
56
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "790489ad98a62bc8e8afa9ee749e113442e8beef"
|
|
57
57
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var webAttribution=function(e){"use strict";var t=function(){return t=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var i in t=arguments[r])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},t.apply(this,arguments)};function r(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(e);i<n.length;i++)t.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(r[n[i]]=e[n[i]])}return r}function n(e,t,r,n){return new(r||(r=Promise))((function(i,o){function u(e){try{l(n.next(e))}catch(e){o(e)}}function a(e){try{l(n.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(u,a)}l((n=n.apply(e,t||[])).next())}))}function i(e,t){var r,n,i,o,u={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(a){return function(l){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;o&&(o=0,a[0]&&(u=0)),u;)try{if(r=1,n&&(i=2&a[0]?n.return:a[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,a[1])).done)return i;switch(n=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return u.label++,{value:a[1],done:!1};case 5:u.label++,n=a[1],a=[0];continue;case 7:a=u.ops.pop(),u.trys.pop();continue;default:if(!(i=u.trys,(i=i.length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){u=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]<i[3])){u.label=a[1];break}if(6===a[0]&&u.label<i[1]){u.label=i[1],i=a;break}if(i&&u.label<i[2]){u.label=i[2],u.ops.push(a);break}i[2]&&u.ops.pop(),u.trys.pop();continue}a=t.call(e,u)}catch(e){a=[6,e],n=0}finally{r=i=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,l])}}}function o(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,o=r.call(e),u=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)u.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return u}var u,a,l,s,f=function(){var e,t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:void 0;return(null===(e=null==t?void 0:t.location)||void 0===e?void 0:e.search)?t.location.search.substring(1).split("&").filter(Boolean).reduce((function(e,t){var r=t.split("=",2),n=c(r[0]),i=c(r[1]);return i?(e[n]=i,e):e}),{}):{}},c=function(e){void 0===e&&(e="");try{return decodeURIComponent(e)}catch(e){return""}},d="dclid",p="fbclid",v="gbraid",y="gclid",b="ko_click_id",g="li_fat_id",h="msclkid",_="rtd_cid",m="ttclid",E="twclid",w="wbraid",S={utm_campaign:void 0,utm_content:void 0,utm_id:void 0,utm_medium:void 0,utm_source:void 0,utm_term:void 0,referrer:void 0,referring_domain:void 0,dclid:void 0,gbraid:void 0,gclid:void 0,fbclid:void 0,ko_click_id:void 0,li_fat_id:void 0,msclkid:void 0,rtd_cid:void 0,ttclid:void 0,twclid:void 0,wbraid:void 0},O=function(){function e(){}return e.prototype.parse=function(){return n(this,void 0,void 0,(function(){return i(this,(function(e){return[2,t(t(t(t({},S),this.getUtmParam()),this.getReferrer()),this.getClickIds())]}))}))},e.prototype.getUtmParam=function(){var e=f();return{utm_campaign:e.utm_campaign,utm_content:e.utm_content,utm_id:e.utm_id,utm_medium:e.utm_medium,utm_source:e.utm_source,utm_term:e.utm_term}},e.prototype.getReferrer=function(){var e,t,r={referrer:void 0,referring_domain:void 0};try{r.referrer=document.referrer||void 0,r.referring_domain=null!==(t=null===(e=r.referrer)||void 0===e?void 0:e.split("/")[2])&&void 0!==t?t:void 0}catch(e){}return r},e.prototype.getClickIds=function(){var e,t=f();return(e={})[d]=t[d],e[p]=t[p],e[v]=t[v],e[y]=t[y],e[b]=t[b],e[g]=t[g],e[h]=t[h],e[_]=t[_],e[m]=t[m],e[E]=t[E],e[w]=t[w],e},e}();!function(e){e.SET="$set",e.SET_ONCE="$setOnce",e.ADD="$add",e.APPEND="$append",e.PREPEND="$prepend",e.REMOVE="$remove",e.PREINSERT="$preInsert",e.POSTINSERT="$postInsert",e.UNSET="$unset",e.CLEAR_ALL="$clearAll"}(u||(u={})),function(e){e.REVENUE_PRODUCT_ID="$productId",e.REVENUE_QUANTITY="$quantity",e.REVENUE_PRICE="$price",e.REVENUE_TYPE="$revenueType",e.REVENUE="$revenue"}(a||(a={})),function(e){e.IDENTIFY="$identify",e.GROUP_IDENTIFY="$groupidentify",e.REVENUE="revenue_amount"}(l||(l={})),function(e){e.BEFORE="before",e.ENRICHMENT="enrichment",e.DESTINATION="destination"}(s||(s={}));var P="AMP",R=function(e){if(Object.keys(e).length>1e3)return!1;for(var t in e){var r=e[t];if(!T(t,r))return!1}return!0},T=function(e,t){var r,n;if("string"!=typeof e)return!1;if(Array.isArray(t)){var i=!0;try{for(var o=function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}(t),u=o.next();!u.done;u=o.next()){var a=u.value;if(Array.isArray(a))return!1;if("object"==typeof a)i=i&&R(a);else if(!["number","string"].includes(typeof a))return!1;if(!i)return!1}}catch(e){r={error:e}}finally{try{u&&!u.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}}else{if(null==t)return!1;if("object"==typeof t)return R(t);if(!["number","string","boolean"].includes(typeof t))return!1}return!0},N=function(){function e(){this._propertySet=new Set,this._properties={}}return e.prototype.getUserProperties=function(){return t({},this._properties)},e.prototype.set=function(e,t){return this._safeSet(u.SET,e,t),this},e.prototype.setOnce=function(e,t){return this._safeSet(u.SET_ONCE,e,t),this},e.prototype.append=function(e,t){return this._safeSet(u.APPEND,e,t),this},e.prototype.prepend=function(e,t){return this._safeSet(u.PREPEND,e,t),this},e.prototype.postInsert=function(e,t){return this._safeSet(u.POSTINSERT,e,t),this},e.prototype.preInsert=function(e,t){return this._safeSet(u.PREINSERT,e,t),this},e.prototype.remove=function(e,t){return this._safeSet(u.REMOVE,e,t),this},e.prototype.add=function(e,t){return this._safeSet(u.ADD,e,t),this},e.prototype.unset=function(e){return this._safeSet(u.UNSET,e,"-"),this},e.prototype.clearAll=function(){return this._properties={},this._properties[u.CLEAR_ALL]="-",this},e.prototype._safeSet=function(e,t,r){if(this._validate(e,t,r)){var n=this._properties[e];return void 0===n&&(n={},this._properties[e]=n),n[t]=r,this._propertySet.add(t),!0}return!1},e.prototype._validate=function(e,t,r){return void 0===this._properties[u.CLEAR_ALL]&&(!this._propertySet.has(t)&&(e===u.ADD?"number"==typeof r:e===u.UNSET||e===u.REMOVE||T(t,r)))},e}(),I=function(e,t,r){return void 0===t&&(t=""),void 0===r&&(r=10),[P,t,e.substring(0,r)].filter(Boolean).join("_")},A=function(e){var t=e.split(".");return t.length<=2?e:t.slice(t.length-2,t.length).join(".")},k=function(e,t,n){var i;e.referrer;var o=e.referring_domain,u=r(e,["referrer","referring_domain"]),a=t||{};a.referrer;var l=a.referring_domain,s=r(a,["referrer","referring_domain"]);if(e.referring_domain&&(null===(i=n.excludeReferrers)||void 0===i?void 0:i.includes(e.referring_domain)))return!1;var f=JSON.stringify(u)!==JSON.stringify(s),c=A(o||"")!==A(l||"");return!t||f||c},D=function(e,r){var n,i,u=t(t({},S),e),a=Object.entries(u).reduce((function(e,t){var n,i=o(t,2),u=i[0],a=i[1];return e.setOnce("initial_".concat(u),null!==(n=null!=a?a:r.initialEmptyValue)&&void 0!==n?n:"EMPTY"),a?e.set(u,a):e.unset(u)}),new N);return n=a,t(t({},i),{event_type:l.IDENTIFY,user_properties:n.getUserProperties()})},U=function(){for(var e,r,u=this,a=[],l=0;l<arguments.length;l++)a[l]=arguments[l];var f={},c=o(a,2),d=c[0],p=c[1];d&&"init"in d?(r=d,p&&(f=p)):d&&(f=d);var v=null!==(e=f.excludeReferrers)&&void 0!==e?e:[];"undefined"!=typeof location&&v.unshift(location.hostname),f=t(t({disabled:!1,initialEmptyValue:"EMPTY",resetSessionOnNewCampaign:!1},f),{excludeReferrers:v});var y={name:"web-attribution",type:s.BEFORE,setup:function(e,t){var u;return n(this,void 0,void 0,(function(){var n,a,l,s,c,p,v,y;return i(this,(function(i){switch(i.label){case 0:return(r=null!=r?r:t)?f.disabled?(e.loggerProvider.log("@amplitude/plugin-web-attribution-browser is disabled. Attribution is not tracked."),[2]):(e.loggerProvider.log("Installing @amplitude/plugin-web-attribution-browser."),t||(null===(u=e.attribution)||void 0===u?void 0:u.disabled)||(e.loggerProvider.warn("@amplitude/plugin-web-attribution-browser overrides web attribution behavior defined in @amplitude/analytics-browser. Resolve by disabling web attribution tracking in @amplitude/analytics-browser."),e.attribution={disabled:!0}),a=e.cookieStorage,l=I(e.apiKey,"MKTG"),[4,Promise.all([(new O).parse(),a.get(l)])]):(n=d?"Options":"undefined",e.loggerProvider.error("Argument of type '".concat(n,"' is not assignable to parameter of type 'BrowserClient'.")),[2]);case 1:return s=o.apply(void 0,[i.sent(),2]),c=s[0],p=s[1],(null!=(v=this.__pluginEnabledOverride)?v:k(c,p,f))&&(f.resetSessionOnNewCampaign&&(r.setSessionId(Date.now()),e.loggerProvider.log("Created a new session for new campaign.")),e.loggerProvider.log("Tracking attribution."),y=D(c,f),r.track(y),a.set(l,c)),[2]}}))}))},execute:function(e){return n(u,void 0,void 0,(function(){return i(this,(function(t){return[2,e]}))}))},__pluginEnabledOverride:void 0};return y},$=Object.freeze({__proto__:null});return e.Types=$,e.plugin=U,e.webAttributionPlugin=U,Object.defineProperty(e,"__esModule",{value:!0}),e}({});
|
|
Binary file
|