@datalyr/web 1.6.5 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -5
- package/dist/attribution.d.ts +7 -0
- package/dist/attribution.d.ts.map +1 -1
- package/dist/attribution.test.d.ts +8 -0
- package/dist/attribution.test.d.ts.map +1 -0
- package/dist/auto-identify.d.ts +2 -1
- package/dist/auto-identify.d.ts.map +1 -1
- package/dist/config.d.ts +40 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.test.d.ts +2 -0
- package/dist/config.test.d.ts.map +1 -0
- package/dist/container.d.ts +10 -0
- package/dist/container.d.ts.map +1 -1
- package/dist/datalyr.cjs.js +712 -210
- package/dist/datalyr.cjs.js.map +1 -1
- package/dist/datalyr.esm.js +712 -210
- package/dist/datalyr.esm.js.map +1 -1
- package/dist/datalyr.esm.min.js +1 -1
- package/dist/datalyr.esm.min.js.map +1 -1
- package/dist/datalyr.js +712 -210
- package/dist/datalyr.js.map +1 -1
- package/dist/datalyr.min.js +1 -1
- package/dist/datalyr.min.js.map +1 -1
- package/dist/index.d.ts +20 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/queue.d.ts +32 -0
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.test.d.ts +8 -0
- package/dist/queue.test.d.ts.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @datalyr/web
|
|
2
2
|
|
|
3
|
-
Browser SDK for event tracking, user identity, and attribution. Version 1.
|
|
3
|
+
Browser SDK for event tracking, user identity, and attribution. Version 1.7.0.
|
|
4
4
|
|
|
5
5
|
## Table of Contents
|
|
6
6
|
|
|
@@ -116,7 +116,7 @@ Every event includes:
|
|
|
116
116
|
workspace_id: 'wk_xxxxx',
|
|
117
117
|
source: 'web',
|
|
118
118
|
timestamp: '2024-01-15T10:30:00Z',
|
|
119
|
-
sdk_version: '1.
|
|
119
|
+
sdk_version: '1.7.0',
|
|
120
120
|
sdk_name: 'datalyr-web-sdk'
|
|
121
121
|
}
|
|
122
122
|
```
|
|
@@ -187,7 +187,7 @@ datalyr.init({
|
|
|
187
187
|
// Auto-Identify (opt-in)
|
|
188
188
|
autoIdentify?: boolean, // Default: false - Automatically identify users
|
|
189
189
|
autoIdentifyForms?: boolean, // Default: true - Capture email from forms (when autoIdentify enabled)
|
|
190
|
-
autoIdentifyAPI?: boolean, // Default:
|
|
190
|
+
autoIdentifyAPI?: boolean, // Default: false - Capture email from API responses (off: same-origin scan can mis-identify; opt in explicitly)
|
|
191
191
|
autoIdentifyShopify?: boolean, // Default: true - Capture email from Shopify endpoints (when autoIdentify enabled)
|
|
192
192
|
autoIdentifyTrustedDomains?: string[], // Default: [] - Additional domains to trust for API capture
|
|
193
193
|
|
|
@@ -198,6 +198,21 @@ datalyr.init({
|
|
|
198
198
|
|
|
199
199
|
---
|
|
200
200
|
|
|
201
|
+
## Remote config (Identity Bridge)
|
|
202
|
+
|
|
203
|
+
These options can be controlled from the dashboard (**Settings → Identity & Attribution**) with **no code change** — they're delivered to the SDK at runtime in the `/container-scripts` response and merged in:
|
|
204
|
+
|
|
205
|
+
- `autoIdentify`, `autoIdentifyForms`, `autoIdentifyAPI`, `autoIdentifyShopify`
|
|
206
|
+
- `shopifyCartAttributes`
|
|
207
|
+
- `checkoutChampDomains`
|
|
208
|
+
- `respectGlobalPrivacyControl`, `respectDoNotTrack`, `privacyMode`
|
|
209
|
+
|
|
210
|
+
**Precedence, per key:** built-in default ← dashboard ← explicit `init()`. An explicit value in `init()` always wins, so you can pin a value in code and still manage everything else from the dashboard. Changes propagate in ~5 minutes (edge-cached). An older worker that doesn't send the `config` envelope is a no-op — built-in defaults stand.
|
|
211
|
+
|
|
212
|
+
> `platform` is **not** remote-configurable — set it at install time via the `data-platform` attribute. The CheckoutChamp behaviors run before the remote config loads, so a dashboard-set platform wouldn't drive them.
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
201
216
|
## API Reference
|
|
202
217
|
|
|
203
218
|
### Event Tracking
|
|
@@ -656,10 +671,10 @@ Returns an array of loaded script IDs.
|
|
|
656
671
|
getLoadedScripts(): string[]
|
|
657
672
|
```
|
|
658
673
|
|
|
659
|
-
|
|
674
|
+
The container is built into the `dl.js` tag — it loads your dashboard-configured pixels on init, so there's no separate container script to install:
|
|
660
675
|
|
|
661
676
|
```html
|
|
662
|
-
<script defer src="https://track.datalyr.com/
|
|
677
|
+
<script defer src="https://track.datalyr.com/dl.js"
|
|
663
678
|
data-workspace-id="YOUR_WORKSPACE_ID"></script>
|
|
664
679
|
```
|
|
665
680
|
|
package/dist/attribution.d.ts
CHANGED
|
@@ -78,6 +78,13 @@ export declare class AttributionManager {
|
|
|
78
78
|
* Determine medium from attribution data
|
|
79
79
|
*/
|
|
80
80
|
private determineMedium;
|
|
81
|
+
/**
|
|
82
|
+
* Whether two hosts share the same root domain (eTLD+1 approximation), so that
|
|
83
|
+
* cross-subdomain internal navigation (e.g. shop.example.com → checkout.example.com)
|
|
84
|
+
* is also treated as same-site. Not a full public-suffix parse — good enough to keep
|
|
85
|
+
* internal navs from being mis-classified as referral.
|
|
86
|
+
*/
|
|
87
|
+
private isSameRootDomain;
|
|
81
88
|
/**
|
|
82
89
|
* Extract hostname from URL
|
|
83
90
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../src/attribution.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEvD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,aAAa,CAAW;IAChC,OAAO,CAAC,gBAAgB,CAAuC;IAC/D,OAAO,CAAC,UAAU,CAA2E;IAE7F,OAAO,CAAC,SAAS,CAgBf;IAEF,OAAO,CAAC,sBAAsB,CAO5B;gBAEU,OAAO,GAAE;QACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB;IAMN;;;OAGG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,kBAAkB,IAAI,WAAW;
|
|
1
|
+
{"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../src/attribution.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEvD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,aAAa,CAAW;IAChC,OAAO,CAAC,gBAAgB,CAAuC;IAC/D,OAAO,CAAC,UAAU,CAA2E;IAE7F,OAAO,CAAC,SAAS,CAgBf;IAEF,OAAO,CAAC,sBAAsB,CAO5B;gBAEU,OAAO,GAAE;QACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB;IAMN;;;OAGG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,kBAAkB,IAAI,WAAW;IAoEjC;;;;;OAKG;IACH,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAwB/C;;;OAGG;IACH,aAAa,IAAI,WAAW,GAAG,IAAI;IASnC;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAQ9C;;;OAGG;IACH,YAAY,IAAI,WAAW,GAAG,IAAI;IASlC;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI;IAqBhE;;OAEG;IACH,UAAU,IAAI,UAAU,EAAE;IAI1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqExB;;;OAGG;IACH,OAAO,CAAC,UAAU;IAKlB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAiFzC;;OAEG;IACH,OAAO,CAAC,eAAe;IAuDvB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2BvB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAKvD;;OAEG;IACH,uBAAuB,IAAI,IAAI;CAYhC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attribution unit tests — the platform's core value, previously ZERO coverage.
|
|
3
|
+
* Pins the 1.7.1 fixes: last-touch survives internal navigation (incl. same-site
|
|
4
|
+
* referrer), every click ID is captured (not just the first), and the synthetic _fbp
|
|
5
|
+
* is Meta-conformant.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=attribution.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attribution.test.d.ts","sourceRoot":"","sources":["../src/attribution.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
package/dist/auto-identify.d.ts
CHANGED
|
@@ -30,11 +30,12 @@ export declare class AutoIdentifyManager {
|
|
|
30
30
|
private lastIdentifyTime;
|
|
31
31
|
private RATE_LIMIT_MS;
|
|
32
32
|
private shopifyCheckInterval?;
|
|
33
|
+
private destroyed;
|
|
33
34
|
constructor(config?: AutoIdentifyConfig);
|
|
34
35
|
/**
|
|
35
36
|
* Initialize auto-identify system
|
|
36
37
|
*/
|
|
37
|
-
initialize(identifyCallback: (email: string, source: string) => void): void
|
|
38
|
+
initialize(identifyCallback: (email: string, source: string) => void): Promise<void>;
|
|
38
39
|
/**
|
|
39
40
|
* Setup form monitoring for email capture
|
|
40
41
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-identify.d.ts","sourceRoot":"","sources":["../src/auto-identify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,UAAU,kBAAkB;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,gBAAgB,CAAC,CAA0C;IACnE,OAAO,CAAC,aAAa,CAAC,CAAsB;IAC5C,OAAO,CAAC,eAAe,CAAC,CAAuC;IAC/D,OAAO,CAAC,eAAe,CAAC,CAAuC;IAC/D,OAAO,CAAC,aAAa,CAA+D;IACpF,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,oBAAoB,CAAC,CAAiC;
|
|
1
|
+
{"version":3,"file":"auto-identify.d.ts","sourceRoot":"","sources":["../src/auto-identify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,UAAU,kBAAkB;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,gBAAgB,CAAC,CAA0C;IACnE,OAAO,CAAC,aAAa,CAAC,CAAsB;IAC5C,OAAO,CAAC,eAAe,CAAC,CAAuC;IAC/D,OAAO,CAAC,eAAe,CAAC,CAAuC;IAC/D,OAAO,CAAC,aAAa,CAA+D;IACpF,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,oBAAoB,CAAC,CAAiC;IAC9D,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,GAAE,kBAAuB;IAW3C;;OAEG;IACG,UAAU,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAiD1F;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuBzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAgD9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA2C5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA8B9B;;OAEG;IACH,OAAO,CAAC,SAAS;IAQjB;;OAEG;YACW,oBAAoB;IA0BlC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAwC5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAwBpB;;OAEG;YACW,eAAe;IAyC7B;;OAEG;IACH,OAAO,IAAI,IAAI;IAmCf;;OAEG;IACH,OAAO,CAAC,GAAG;CAKZ"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remote SDK config (Auto Identity Bridge).
|
|
3
|
+
*
|
|
4
|
+
* The `/container-scripts` response carries a `config` object — the workspace
|
|
5
|
+
* `sdk_config` with server-computed defaults already applied (e.g. auto-identify
|
|
6
|
+
* OFF for sensitive/health verticals). This module folds that remote config
|
|
7
|
+
* UNDER the caller's explicit init() options, so the dashboard controls behavior
|
|
8
|
+
* with zero snippet edits while explicit code always wins.
|
|
9
|
+
*
|
|
10
|
+
* Precedence per key: explicit init() value > remote config > built-in default
|
|
11
|
+
*/
|
|
12
|
+
import type { DatalyrConfig } from './types';
|
|
13
|
+
/** Subset of DatalyrConfig the worker may deliver via the config envelope. */
|
|
14
|
+
export interface SdkRemoteConfig {
|
|
15
|
+
autoIdentify?: boolean;
|
|
16
|
+
autoIdentifyForms?: boolean;
|
|
17
|
+
autoIdentifyAPI?: boolean;
|
|
18
|
+
autoIdentifyShopify?: boolean;
|
|
19
|
+
shopifyCartAttributes?: boolean;
|
|
20
|
+
checkoutChampDomains?: string[];
|
|
21
|
+
respectGlobalPrivacyControl?: boolean;
|
|
22
|
+
respectDoNotTrack?: boolean;
|
|
23
|
+
privacyMode?: 'standard' | 'strict';
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Fold `remote` into `config` IN PLACE. Precedence per key:
|
|
27
|
+
* explicit init() value > remote (dashboard) > built-in default
|
|
28
|
+
*
|
|
29
|
+
* `explicitKeys` = the keys the CALLER passed to init() (before built-in
|
|
30
|
+
* defaults were merged in). For any remote key NOT in that set, remote
|
|
31
|
+
* OVERRIDES the built-in default. This is essential because some keys
|
|
32
|
+
* (respectDoNotTrack, respectGlobalPrivacyControl, privacyMode) get a built-in
|
|
33
|
+
* default at init() and are therefore never `undefined` — a naive
|
|
34
|
+
* "fill-if-undefined" would silently ignore the dashboard for them.
|
|
35
|
+
*
|
|
36
|
+
* No-op when there's no remote config (older worker / container disabled /
|
|
37
|
+
* failed fetch) — built-in defaults then stand.
|
|
38
|
+
*/
|
|
39
|
+
export declare function applyRemoteConfig(config: DatalyrConfig, remote?: SdkRemoteConfig | null, explicitKeys?: ReadonlySet<string>): void;
|
|
40
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,8EAA8E;AAC9E,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAMhC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;CACrC;AAeD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EACrB,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI,EAC/B,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GACjC,IAAI,CAUN"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":""}
|
package/dist/container.d.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Container Script Manager
|
|
3
3
|
* Loads and manages third-party tracking scripts and pixels
|
|
4
4
|
*/
|
|
5
|
+
import type { SdkRemoteConfig } from './config';
|
|
5
6
|
/**
|
|
6
7
|
* Identity snapshot read at the moment a third-party pixel initializes.
|
|
7
8
|
* Aligns the browser Pixel's advanced matching with what CAPI sends server-side
|
|
@@ -57,6 +58,10 @@ export declare class ContainerManager {
|
|
|
57
58
|
private loadedScripts;
|
|
58
59
|
private sessionLoadedScripts;
|
|
59
60
|
private pixels;
|
|
61
|
+
/** SDK runtime config from the /container-scripts `config` envelope (the
|
|
62
|
+
* dashboard sdk_config + server-computed defaults). undefined if the worker
|
|
63
|
+
* doesn't send it — caller then falls back to built-in defaults. */
|
|
64
|
+
private remoteConfig?;
|
|
60
65
|
private workspaceId;
|
|
61
66
|
private endpoint;
|
|
62
67
|
private debug;
|
|
@@ -75,6 +80,11 @@ export declare class ContainerManager {
|
|
|
75
80
|
* Initialize container and load scripts
|
|
76
81
|
*/
|
|
77
82
|
init(): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* The SDK runtime config delivered by /container-scripts, or undefined if the
|
|
85
|
+
* response omitted it. The SDK merges this under explicit init() options.
|
|
86
|
+
*/
|
|
87
|
+
getRemoteConfig(): SdkRemoteConfig | undefined;
|
|
78
88
|
/**
|
|
79
89
|
* Load scripts by trigger type
|
|
80
90
|
*/
|
package/dist/container.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"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"}
|