@gurulu/web 1.0.0 → 1.0.2
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/dist/core.d.ts +1 -0
- package/dist/core.d.ts.map +1 -1
- package/dist/crypto.d.ts +6 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/fingerprint.d.ts +31 -0
- package/dist/fingerprint.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/replay.d.ts +97 -0
- package/dist/replay.d.ts.map +1 -0
- package/dist/t.js +7 -7
- package/dist/t.js.map +3 -3
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/core.d.ts
CHANGED
package/dist/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAiB7C,OAAO,KAAK,EAIV,WAAW,EAEZ,MAAM,YAAY,CAAC;AA8BpB,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,iBAAiB,CAAwC;IACjE,OAAO,EAAG,aAAa,CAAC;IAExB;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAiB7C,OAAO,KAAK,EAIV,WAAW,EAEZ,MAAM,YAAY,CAAC;AA8BpB,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,iBAAiB,CAAwC;IACjE,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,EAAG,aAAa,CAAC;IAExB;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IA+E7B,sEAAsE;IACtE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAInE,gEAAgE;IAChE,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI;IAQnC;;;OAGG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BjF,mEAAmE;IACnE,KAAK,IAAI,IAAI;IAeb,uCAAuC;IACjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,8DAA8D;IAC9D,MAAM,IAAI,IAAI;IAId,0BAA0B;IAC1B,KAAK,IAAI,IAAI;IAMb,OAAO,CAAC,UAAU;IAkClB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,YAAY;CAcrB"}
|
package/dist/crypto.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAc9D"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface FingerprintComponents {
|
|
2
|
+
ua: string;
|
|
3
|
+
screen: string;
|
|
4
|
+
language: string;
|
|
5
|
+
/** Minutes. */
|
|
6
|
+
tz_offset: number;
|
|
7
|
+
canvas_hash: string;
|
|
8
|
+
audio_hash: string;
|
|
9
|
+
}
|
|
10
|
+
export interface DeviceHint {
|
|
11
|
+
ua_hash: string;
|
|
12
|
+
screen_hash?: string;
|
|
13
|
+
audio_hash?: string;
|
|
14
|
+
tz_offset?: number;
|
|
15
|
+
language?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Compute device fingerprint hint. Returns `null` in non-browser env or when
|
|
19
|
+
* SubtleCrypto unavailable. localStorage cache hit on second call.
|
|
20
|
+
*
|
|
21
|
+
* Caller responsibility — guard with consent check (`categories.fingerprint`).
|
|
22
|
+
*/
|
|
23
|
+
export declare function computeFingerprint(): Promise<DeviceHint | null>;
|
|
24
|
+
/**
|
|
25
|
+
* Sync cache read — `computeFingerprint()` warm path için. SDK init'te
|
|
26
|
+
* async `computeFingerprint()` cache'i populate eder; sonraki sync track
|
|
27
|
+
* çağrılarında bu helper sıfır maliyetle hint döndürür.
|
|
28
|
+
*/
|
|
29
|
+
export declare function readFingerprintCacheSync(): DeviceHint | null;
|
|
30
|
+
export declare function clearFingerprintCache(): void;
|
|
31
|
+
//# sourceMappingURL=fingerprint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID;;;;;GAKG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA0CrE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,UAAU,GAAG,IAAI,CAW5D;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAO5C"}
|
package/dist/index.js
CHANGED
|
@@ -1171,6 +1171,7 @@ class Gurulu {
|
|
|
1171
1171
|
session = null;
|
|
1172
1172
|
anonymousId = null;
|
|
1173
1173
|
autocaptureHandle = null;
|
|
1174
|
+
testMode = false;
|
|
1174
1175
|
consent;
|
|
1175
1176
|
init(opts) {
|
|
1176
1177
|
if (this.initialized) {
|
|
@@ -1182,6 +1183,7 @@ class Gurulu {
|
|
|
1182
1183
|
if (typeof window === "undefined")
|
|
1183
1184
|
return;
|
|
1184
1185
|
this.opts = opts;
|
|
1186
|
+
this.testMode = opts.test_mode === true;
|
|
1185
1187
|
this.anonymousId = getOrCreateAnonymousId();
|
|
1186
1188
|
this.session = resolveSession();
|
|
1187
1189
|
this.consent = new GuruluConsent({
|
|
@@ -1320,6 +1322,8 @@ class Gurulu {
|
|
|
1320
1322
|
const consent = this.snapshotConsent();
|
|
1321
1323
|
if (consent)
|
|
1322
1324
|
event.consent_state = consent;
|
|
1325
|
+
if (this.testMode)
|
|
1326
|
+
event.test_mode = true;
|
|
1323
1327
|
this.queue.enqueue(event);
|
|
1324
1328
|
}
|
|
1325
1329
|
snapshotConsent() {
|
package/dist/replay.d.ts
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
export type ReplayCaptureMode = 'always_on' | 'sampled' | 'triggered';
|
|
2
|
+
export interface ReplaySettings {
|
|
3
|
+
capture_mode: ReplayCaptureMode;
|
|
4
|
+
/** 0..1 — only used when capture_mode = 'sampled'. */
|
|
5
|
+
sample_rate: number;
|
|
6
|
+
capture_console: boolean;
|
|
7
|
+
capture_network: boolean;
|
|
8
|
+
capture_custom_events: boolean;
|
|
9
|
+
/** rrweb `maskAllInputs`. */
|
|
10
|
+
privacy_mask_inputs: boolean;
|
|
11
|
+
/** Banner_required → require explicit `consent.replay === true`. */
|
|
12
|
+
consent_required: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface ReplayConsentState {
|
|
15
|
+
/** Explicit replay opt-in. Falsy → if `consent_required` is true, no capture. */
|
|
16
|
+
replay?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface ReplayConfig {
|
|
19
|
+
workspaceId: string;
|
|
20
|
+
apiKey: string;
|
|
21
|
+
/** Default: 'https://ingest.gurulu.io'. */
|
|
22
|
+
ingestBaseUrl: string;
|
|
23
|
+
anonymousId: string;
|
|
24
|
+
sessionId: string;
|
|
25
|
+
/** Optional initial consent snapshot. */
|
|
26
|
+
consent?: ReplayConsentState;
|
|
27
|
+
/** SDK version for chunk metadata. */
|
|
28
|
+
sdkVersion?: string;
|
|
29
|
+
/** Default settings override — Agent A backend fetch wires real endpoint here. */
|
|
30
|
+
settingsOverride?: ReplaySettings;
|
|
31
|
+
/** Test seam — settings fetcher (default reads sessionStorage cache + hard-coded defaults). */
|
|
32
|
+
fetchSettings?: () => Promise<ReplaySettings>;
|
|
33
|
+
/** Test seam — transport. */
|
|
34
|
+
fetchImpl?: typeof fetch;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* GuruluReplay — orchestrates rrweb capture + chunk flush. One instance per
|
|
38
|
+
* Gurulu SDK lifecycle; `stop()` on `reset()/logout()`.
|
|
39
|
+
*/
|
|
40
|
+
export declare class GuruluReplay {
|
|
41
|
+
private config;
|
|
42
|
+
private stopFn;
|
|
43
|
+
private buffer;
|
|
44
|
+
private chunkSeq;
|
|
45
|
+
private flushTimer;
|
|
46
|
+
private settings;
|
|
47
|
+
private rrweb;
|
|
48
|
+
private sessionStartedAt;
|
|
49
|
+
private lastChunkEndOffset;
|
|
50
|
+
private hasConsoleError;
|
|
51
|
+
private hasConversion;
|
|
52
|
+
private networkOriginals;
|
|
53
|
+
private consoleOriginals;
|
|
54
|
+
private windowErrorHandler;
|
|
55
|
+
private started;
|
|
56
|
+
private debug;
|
|
57
|
+
constructor(config: ReplayConfig, opts?: {
|
|
58
|
+
debug?: boolean;
|
|
59
|
+
});
|
|
60
|
+
/** Begin capture — async (rrweb dynamic import + settings fetch). Idempotent. */
|
|
61
|
+
start(): Promise<void>;
|
|
62
|
+
/** Annotate a tracked event into the replay stream. */
|
|
63
|
+
annotateCustomEvent(eventName: string, properties: Record<string, unknown>): void;
|
|
64
|
+
/** Mark conversion — next chunk carries `has_conversion: true`. */
|
|
65
|
+
markConversion(): void;
|
|
66
|
+
/** Mark error — next chunk carries `has_console_error: true`. */
|
|
67
|
+
markError(): void;
|
|
68
|
+
/** Stop capture + final flush. */
|
|
69
|
+
stop(): void;
|
|
70
|
+
private shouldCapture;
|
|
71
|
+
private resolveSettings;
|
|
72
|
+
private cachedDefaults;
|
|
73
|
+
private loadRrweb;
|
|
74
|
+
private attachConsoleCapture;
|
|
75
|
+
private detachConsoleCapture;
|
|
76
|
+
private attachNetworkCapture;
|
|
77
|
+
private detachNetworkCapture;
|
|
78
|
+
private flush;
|
|
79
|
+
private warn;
|
|
80
|
+
}
|
|
81
|
+
declare function safeStringify(v: unknown): string;
|
|
82
|
+
/**
|
|
83
|
+
* gzip string → Uint8Array via CompressionStream API. Modern browsers only
|
|
84
|
+
* (Chrome 80+/Firefox 113+/Safari 16.4+). Legacy fallback out of scope.
|
|
85
|
+
*/
|
|
86
|
+
declare function gzipString(input: string): Promise<Uint8Array>;
|
|
87
|
+
declare function base64FromBytes(bytes: Uint8Array): string;
|
|
88
|
+
export declare const __test__: {
|
|
89
|
+
DEFAULT_SETTINGS: ReplaySettings;
|
|
90
|
+
REPLAY_SETTINGS_CACHE_KEY: string;
|
|
91
|
+
REPLAY_SETTINGS_TTL_MS: number;
|
|
92
|
+
gzipString: typeof gzipString;
|
|
93
|
+
base64FromBytes: typeof base64FromBytes;
|
|
94
|
+
safeStringify: typeof safeStringify;
|
|
95
|
+
};
|
|
96
|
+
export {};
|
|
97
|
+
//# sourceMappingURL=replay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"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"}
|
package/dist/t.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
class
|
|
2
|
-
<div style="margin-bottom:12px;font-weight:600;">${
|
|
3
|
-
<div style="margin-bottom:16px;color:#a3a3a3;">${
|
|
1
|
+
class Q{workspaceId;apiUrl;fetchImpl;storage;autoBanner;locale;anonymousIdValue;bannerConfigCache=null;bannerEl=null;constructor(u){this.workspaceId=u.workspaceId,this.apiUrl=(u.apiUrl??"https://api.gurulu.io").replace(/\/+$/,""),this.fetchImpl=u.fetchImpl??(typeof fetch<"u"?fetch.bind(globalThis):Xu),this.storage=u.storage??(typeof globalThis<"u"&&"localStorage"in globalThis?globalThis.localStorage:null),this.autoBanner=u.autoBanner??!0,this.locale=u.locale??Vu(),this.anonymousIdValue=u.anonymousId??this.loadOrCreateAnonId()}async init(){if(typeof window>"u")return;try{let m=await this.fetchImpl(`${this.apiUrl}/v1/consent/banner-config?workspace_id=${encodeURIComponent(this.workspaceId)}`,{method:"GET",credentials:"omit"});if(!m.ok)return;this.bannerConfigCache=await m.json()}catch{return}if(!this.getState()&&this.autoBanner&&this.bannerConfigCache?.mode==="banner_required")this.showBanner()}getState(){if(!this.storage)return null;try{let u=this.storage.getItem(this.storageKey());if(!u)return null;let m=JSON.parse(u);if(m.expiresAt&&new Date(m.expiresAt).getTime()<Date.now())return this.storage.removeItem(this.storageKey()),null;return m}catch{return null}}async setState(u){let m=this.getState()?.categories,n={necessary:!0,analytics:u.analytics??m?.analytics??!1,marketing:u.marketing??m?.marketing??!1,functional:u.functional??m?.functional??!1,personalization:u.personalization??m?.personalization??!1},_=new Date,A=this.bannerConfigCache?.renewal_months??13,C=new Date(_);C.setMonth(C.getMonth()+A);let c={workspaceId:this.workspaceId,anonymousId:this.anonymousIdValue,categories:n,grantedAt:_.toISOString(),expiresAt:C.toISOString(),source:"sdk_api"};if(this.storage)try{this.storage.setItem(this.storageKey(),JSON.stringify(c))}catch{}try{await this.fetchImpl(`${this.apiUrl}/v1/consent/state`,{method:"POST",credentials:"omit",headers:{"content-type":"application/json"},body:JSON.stringify({workspace_id:this.workspaceId,anonymous_id:this.anonymousIdValue,necessary:n.necessary,analytics:n.analytics,marketing:n.marketing,functional:n.functional,personalization:n.personalization,source:"sdk_api"})})}catch{}}showBanner(){if(typeof document>"u")return;if(this.bannerEl)return;let u=this.bannerConfigCache?.banner_config??{},m=this.bannerText(),n=u.brand?.primary_color??"#fafafa",_=u.position??"bottom",A=document.createElement("div");A.setAttribute("data-gurulu-consent-banner",""),A.setAttribute("role","dialog"),A.setAttribute("aria-label",m.heading),A.style.cssText=qu(_),A.innerHTML=Eu(m,n);let C=A.querySelector("[data-gurulu-accept]"),c=A.querySelector("[data-gurulu-reject]");C?.addEventListener("click",()=>{this.setState({analytics:!0,marketing:!0,functional:!0,personalization:!0}),this.hideBanner()}),c?.addEventListener("click",()=>{this.setState({analytics:!1,marketing:!1,functional:!1,personalization:!1}),this.hideBanner()}),document.body.appendChild(A),this.bannerEl=A}hideBanner(){if(this.bannerEl?.parentNode)this.bannerEl.parentNode.removeChild(this.bannerEl);this.bannerEl=null}buildIngestHeader(){let u=this.getState();if(!u)return JSON.stringify({necessary:!0});return JSON.stringify(u.categories)}getAnonymousId(){return this.anonymousIdValue}storageKey(){return`gurulu_consent_${this.workspaceId}`}loadOrCreateAnonId(){if(!this.storage)return G();try{let u=this.storage.getItem("gurulu_anon_id");if(u)return u;let m=G();return this.storage.setItem("gurulu_anon_id",m),m}catch{return G()}}bannerText(){let m=this.bannerConfigCache?.banner_config?.text_overrides?.[this.locale];if(this.locale==="tr")return{heading:m?.heading??"Çerezleri tercih et",body:m?.body??"Deneyimini iyileştirmek için analytics + pazarlama çerezleri kullanıyoruz.",accept:m?.accept??"Tümünü kabul et",reject:m?.reject??"Sadece gerekli olanlar"};return{heading:m?.heading??"Manage cookies",body:m?.body??"We use analytics and marketing cookies to improve your experience.",accept:m?.accept??"Accept all",reject:m?.reject??"Necessary only"}}}function qu(u){switch(u){case"top":return"position:fixed;z-index:2147483647;background:#141414;color:#fafafa;border:1px solid #262626;border-radius:8px;padding:16px;font-family:-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;box-shadow:0 4px 24px rgba(0,0,0,0.4);max-width:480px;top:16px;left:50%;transform:translateX(-50%);";case"bottom-left":return"position:fixed;z-index:2147483647;background:#141414;color:#fafafa;border:1px solid #262626;border-radius:8px;padding:16px;font-family:-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;box-shadow:0 4px 24px rgba(0,0,0,0.4);max-width:480px;bottom:16px;left:16px;";case"bottom-right":return"position:fixed;z-index:2147483647;background:#141414;color:#fafafa;border:1px solid #262626;border-radius:8px;padding:16px;font-family:-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;box-shadow:0 4px 24px rgba(0,0,0,0.4);max-width:480px;bottom:16px;right:16px;";case"modal":return"position:fixed;z-index:2147483647;background:#141414;color:#fafafa;border:1px solid #262626;border-radius:8px;padding:16px;font-family:-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;box-shadow:0 4px 24px rgba(0,0,0,0.4);max-width:480px;top:50%;left:50%;transform:translate(-50%,-50%);";default:return"position:fixed;z-index:2147483647;background:#141414;color:#fafafa;border:1px solid #262626;border-radius:8px;padding:16px;font-family:-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;box-shadow:0 4px 24px rgba(0,0,0,0.4);max-width:480px;bottom:16px;left:50%;transform:translateX(-50%);"}}function Eu(u,m){return`
|
|
2
|
+
<div style="margin-bottom:12px;font-weight:600;">${M(u.heading)}</div>
|
|
3
|
+
<div style="margin-bottom:16px;color:#a3a3a3;">${M(u.body)}</div>
|
|
4
4
|
<div style="display:flex;gap:8px;flex-wrap:wrap;">
|
|
5
|
-
<button data-gurulu-accept type="button" style="background:${
|
|
6
|
-
<button data-gurulu-reject type="button" style="background:transparent;color:#fafafa;border:1px solid #404040;padding:8px 16px;border-radius:6px;cursor:pointer;">${
|
|
5
|
+
<button data-gurulu-accept type="button" style="background:${Nu(m)};color:#0a0a0a;border:none;padding:8px 16px;border-radius:6px;font-weight:600;cursor:pointer;">${M(u.accept)}</button>
|
|
6
|
+
<button data-gurulu-reject type="button" style="background:transparent;color:#fafafa;border:1px solid #404040;padding:8px 16px;border-radius:6px;cursor:pointer;">${M(u.reject)}</button>
|
|
7
7
|
</div>
|
|
8
|
-
`}function J(u){return u.replace(/[&<>"']/g,(m)=>{switch(m){case"&":return"&";case"<":return"<";case">":return">";case'"':return""";case"'":return"'";default:return m}})}function tu(u){return u.replace(/[^a-zA-Z0-9#()_\-., ]/g,"")}function Eu(){if(typeof navigator>"u")return"en";let u=(navigator.language??"").toLowerCase();if(u.startsWith("tr"))return"tr";if(u.startsWith("zh"))return"zh";if(u.startsWith("ar"))return"ar";return"en"}function B(){if(typeof crypto<"u"&&typeof crypto.randomUUID==="function")return`anon_${crypto.randomUUID()}`;return`anon_${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`}async function Nu(){throw Error("fetch not available — provide opts.fetchImpl")}var Vu=new Set(["A","BUTTON"]),Xu=/\.(pdf|zip|dmg|exe|tar|gz|rar|7z|mp3|mp4|csv|xlsx?|docx?|pptx?)(\?|$)/i;function $u(u){let m=u;while(m){if(m.hasAttribute?.("data-gurulu-no-track"))return!1;m=m.parentElement}return!0}function Ju(u){let m=u;while(m){if(!m.tagName){m=m.parentElement;continue}if(Vu.has(m.tagName))return m;if(m.getAttribute?.("role")==="button")return m;if(m.tagName==="INPUT"){let n=m.type?.toLowerCase();if(n==="submit"||n==="button")return m}m=m.parentElement}return null}function Mu(u){let m={};if(!u.attributes)return m;for(let n=0;n<u.attributes.length;n+=1){let _=u.attributes.item(n);if(!_)continue;if(_.name.startsWith("data-gurulu-prop-")){let A=_.name.slice(17);m[A]=_.value}}return m}function d(u){if(typeof document>"u")return{stop:()=>{return}};let m=(n)=>{let _=Ju(n.target);if(!_||!$u(_))return;let A={element_tag:_.tagName.toLowerCase()};if(_.id)A.element_id=_.id;if(_.className&&typeof _.className==="string")A.element_class=_.className.slice(0,256);let l=(_.textContent??"").trim().slice(0,200);if(l)A.element_text=l;if(_.tagName==="A"){let c=_.href;if(c){A.href=c;try{let D=new URL(c).hostname;if(typeof window<"u"&&D!==window.location.hostname)A.is_outbound=!0}catch{}if(Xu.test(c))A.is_download=!0}}let C=_.getAttribute?.("data-gurulu-event");if(C)A.custom_event=C,A.custom_props=Mu(_);u(A)};return document.addEventListener("click",m,!0),{stop(){document.removeEventListener("click",m,!0)}}}var Qu=new Set(["password","tel"]);function f(u){if(u.tagName!=="INPUT")return!1;let m=u,n=(m.type??"").toLowerCase();if(Qu.has(n))return!0;if((m.autocomplete??"").toLowerCase().startsWith("cc-"))return!0;return!1}function i(u){let m=u;while(m){if(m.hasAttribute?.("data-gurulu-no-track"))return!1;m=m.parentElement}return!0}function Zu(u){let m=u;while(m){if(m.tagName==="FORM")return m;m=m.parentElement}return null}function x(u){let m={count:u.elements?.length??0};if(u.id)m.id=u.id;if(u.name)m.name=u.name;return m}function w(u){if(typeof document>"u")return{stop:()=>{return}};let m=new WeakSet,n=(A)=>{let l=A.target;if(!l)return;if(f(l))return;if(!i(l))return;let C=Zu(l);if(!C||m.has(C))return;m.add(C);let c=x(C),D={field_count:c.count};if(c.id)D.form_id=c.id;if(c.name)D.form_name=c.name;u.onStart(D)},_=(A)=>{let l=A.target;if(!l||l.tagName!=="FORM")return;if(!i(l))return;let C=x(l),c=[],D=l.elements;for(let z=0;z<D.length;z+=1){let H=D[z];if(!H)continue;if(f(H))continue;if(!("value"in H))continue;if(typeof H.value==="string"&&H.value.length>0&&H.name)c.push(H.name)}let j={field_count:C.count};if(C.id)j.form_id=C.id;if(C.name)j.form_name=C.name;if(c.length>0)j.filled_fields=c;u.onSubmit(j)};return document.addEventListener("focus",n,!0),document.addEventListener("submit",_,!0),{stop(){document.removeEventListener("focus",n,!0),document.removeEventListener("submit",_,!0)}}}function g(u){if(typeof window>"u"||typeof document>"u")return{stop:()=>{return}};let m=window.location.pathname+window.location.search;function n(){let C=window.location.pathname+window.location.search;if(C===m)return;m=C,u(window.location.href,document.title,document.referrer)}u(window.location.href,document.title,document.referrer);let _=()=>n();window.addEventListener("popstate",_);let A=history.pushState.bind(history),l=history.replaceState.bind(history);return history.pushState=function(...c){let D=A(...c);return queueMicrotask(n),D},history.replaceState=function(...c){let D=l(...c);return queueMicrotask(n),D},{stop(){window.removeEventListener("popstate",_),history.pushState=A,history.replaceState=l}}}var Fu=[25,50,75,90];function y(u){if(typeof window>"u"||typeof document>"u")return{stop:()=>{return}};let m=new Set,n=0,_=()=>{n=0;let{documentElement:l,body:C}=document;if(!l||!C)return;let c=window.scrollY??l.scrollTop??0,D=window.innerHeight??l.clientHeight??0,j=Math.max(C.scrollHeight??0,l.scrollHeight??0);if(j<=D)return;let z=(c+D)/j*100;for(let H of Fu)if(z>=H&&!m.has(H))m.add(H),u({depth_percent:H})},A=()=>{if(n!==0)return;n=requestAnimationFrame(_)};return window.addEventListener("scroll",A,{passive:!0}),{stop(){if(window.removeEventListener("scroll",A),n!==0)cancelAnimationFrame(n)}}}var Bu={LCP:[2500,4000],FID:[100,300],INP:[200,500],CLS:[0.1,0.25],TTFB:[800,1800],FCP:[1800,3000]};function E(u,m){let[n,_]=Bu[u];if(m<=n)return"good";if(m<=_)return"needs-improvement";return"poor"}function Q(u,m,n){if(typeof PerformanceObserver>"u")return null;try{let _=new PerformanceObserver((A)=>n(A.getEntries()));return _.observe({type:u,buffered:m}),_}catch{return null}}function O(u){if(typeof window>"u")return{stop:()=>{return}};let m=[];try{let S=performance.getEntriesByType("navigation")[0];if(S&&S.responseStart>0)u({metric:"TTFB",value:S.responseStart,rating:E("TTFB",S.responseStart)});let T=performance.getEntriesByName("first-contentful-paint")[0];if(T)u({metric:"FCP",value:T.startTime,rating:E("FCP",T.startTime)})}catch{}let n=0,_=Q("largest-contentful-paint",!0,(S)=>{let T=S[S.length-1];if(T)n=T.startTime});if(_)m.push(_);let A=Q("first-input",!0,(S)=>{let T=S[0];if(T){let b=T.processingStart-T.startTime;u({metric:"FID",value:b,rating:E("FID",b)})}});if(A)m.push(A);let l=0,C=Q("event",!0,(S)=>{for(let T of S){let b=T.duration;if(b>l)l=b}});if(C)m.push(C);let c=0,D=Q("layout-shift",!0,(S)=>{for(let T of S){let b=T;if(!b.hadRecentInput)c+=b.value}});if(D)m.push(D);let j=()=>{if(n>0)u({metric:"LCP",value:n,rating:E("LCP",n)});if(l>0)u({metric:"INP",value:l,rating:E("INP",l)});if(c>0)u({metric:"CLS",value:c,rating:E("CLS",c)});n=0,l=0,c=0},z=null,H=null;if(typeof document<"u")z=()=>{if(document.visibilityState==="hidden")j()},H=j,document.addEventListener("visibilitychange",z),window.addEventListener("pagehide",H);return{stop(){for(let S of m)try{S.disconnect()}catch{}if(typeof document<"u"&&z)document.removeEventListener("visibilitychange",z);if(typeof window<"u"&&H)window.removeEventListener("pagehide",H)}}}var Gu={page_view:!0,click:!0,form_started:!0,form_submitted:!0,scroll_depth:!0,web_vitals:!0,outbound_link_click:!0,download_click:!0,js_error:!1,console_error:!1,network_error:!1};function k(u,m){if(u===!1)return{stopAll:()=>{return}};let n={...Gu,...u??{}},_=[];if(n.page_view)_.push(g(m.pageView));if(n.click)_.push(d(m.click));if(n.form_started||n.form_submitted)_.push(w({onStart:n.form_started?m.formStarted:()=>{return},onSubmit:n.form_submitted?m.formSubmitted:()=>{return}}));if(n.scroll_depth)_.push(y(m.scrollDepth));if(n.web_vitals)_.push(O(m.webVital));return{stopAll(){for(let A of _)try{A.stop()}catch{}}}}function N(){return typeof window<"u"&&typeof document<"u"}function R(){if(typeof crypto<"u"&&typeof crypto.randomUUID==="function")return crypto.randomUUID();return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}function I(u){if(!N())return null;try{return window.localStorage.getItem(u)}catch{return null}}function Z(u,m){if(!N())return;try{window.localStorage.setItem(u,m)}catch{}}function r(u){if(!N())return;try{window.localStorage.removeItem(u)}catch{}}function Ru(u){if(!N())return null;let m=document.cookie??"";for(let n of m.split(";")){let[_,A]=n.trim().split("=");if(_===u&&A!==void 0)return decodeURIComponent(A)}return null}function G(u,m,n=365){if(!N())return;let _=new Date(Date.now()+n*86400000).toUTCString(),A=window.location.hostname,l=A.split("."),C=l.length>=2?`.${l.slice(-2).join(".")}`:A;try{document.cookie=`${u}=${encodeURIComponent(m)}; path=/; domain=${C}; expires=${_}; SameSite=Lax`}catch{}}function v(){let u=I("gurulu_aid")??Ru("gurulu_aid_mirror");if(u)return Z("gurulu_aid",u),G("gurulu_aid_mirror",u),u;let m=R();return Z("gurulu_aid",m),G("gurulu_aid_mirror",m),m}function p(u){Z("gurulu_pid",u)}function a(){return I("gurulu_pid")}function e(){r("gurulu_pid"),r("gurulu_aid");let u=R();return Z("gurulu_aid",u),G("gurulu_aid_mirror",u),u}function s(){return R()}class q extends Error{code;constructor(u,m){super(m);this.code=u,this.name="SDKError"}}class uu extends q{constructor(u){super("SDK_INIT",u);this.name="InitError"}}class t extends q{status;constructor(u,m){super("SDK_NETWORK",u);if(this.name="NetworkError",m!==void 0)this.status=m}}class mu extends q{constructor(u){super("SDK_QUEUE_FULL",u);this.name="QueueFullError"}}class _u extends q{constructor(){super("SDK_OPTED_OUT","tracking disabled — gurulu.optOut() in effect");this.name="OptedOutError"}}class nu extends q{constructor(){super("SDK_CONSENT_BLOCKED","event queued — awaiting consent grant");this.name="ConsentBlockedError"}}var Wu=65536;function Au(u,m){let n=new Headers({"content-type":"application/json",authorization:`Bearer ${u.workspaceKey}`,"x-gurulu-sdk":`@gurulu/web@${u.sdkVersion}`});if(m)for(let[_,A]of Object.entries(m))n.set(_,A);return n}async function lu(u,m,n){let _=u.fetchImpl??(typeof fetch<"u"?fetch.bind(globalThis):null);if(!_)throw new t("fetch unavailable");let A=`${u.endpoint}/v1/ingest/batch`,l=await _(A,{method:"POST",keepalive:!0,credentials:"omit",headers:Au(u,n),body:JSON.stringify(m)});if(!l.ok)throw new t(`ingest ${l.status}`,l.status)}function Cu(u,m){if(typeof navigator>"u"||typeof navigator.sendBeacon!=="function")return!1;let n=`${u.endpoint}/v1/ingest/batch?wk=${encodeURIComponent(u.workspaceKey)}&sdk=${encodeURIComponent(u.sdkVersion)}`;try{let _=JSON.stringify(m);if(_.length>=Wu)return!1;let A=new Blob([_],{type:"application/json"});return navigator.sendBeacon(n,A)}catch{return!1}}async function cu(u,m){let n=u.fetchImpl??(typeof fetch<"u"?fetch.bind(globalThis):null);if(!n)throw new t("fetch unavailable");let _=await n(`${u.endpoint}/v1/ingest/identify`,{method:"POST",keepalive:!0,credentials:"omit",headers:Au(u),body:JSON.stringify(m)});if(!_.ok)throw new t(`identify ${_.status}`,_.status)}var Y="gurulu_queue";function L(){return typeof window<"u"}function Yu(){if(!L())return[];try{let u=window.localStorage.getItem(Y);if(!u)return[];let m=JSON.parse(u);return Array.isArray(m)?m:[]}catch{return[]}}function W(u){if(!L())return;try{if(u.length===0)window.localStorage.removeItem(Y);else window.localStorage.setItem(Y,JSON.stringify(u))}catch{}}class P{opts;buffer;timer=null;flushing=!1;constructor(u){if(this.opts=u,this.buffer=Yu(),this.scheduleNext(),this.installUnloadHooks(),this.buffer.length>0)this.scheduleImmediate()}enqueue(u){if(this.buffer.push(u),W(this.buffer),this.buffer.length>=this.opts.maxQueueSize)this.flush();else this.scheduleNext()}size(){return this.buffer.length}async flush(){if(this.flushing||this.buffer.length===0)return;this.flushing=!0;let u=this.buffer.slice(0);try{await this.sendWithRetry(u),this.buffer=this.buffer.slice(u.length),W(this.buffer)}catch(m){if(this.opts.debug&&typeof console<"u")console.warn("[gurulu] flush failed, retain queue",m)}finally{this.flushing=!1}}flushBeacon(){if(this.buffer.length===0)return;if(Cu(this.opts.transport,{events:this.buffer}))this.buffer=[],W(this.buffer)}scheduleNext(){if(this.timer!==null)return;this.timer=setTimeout(()=>{this.timer=null,this.flush()},this.opts.flushIntervalMs)}scheduleImmediate(){if(this.timer!==null)clearTimeout(this.timer),this.timer=null;this.timer=setTimeout(()=>{this.timer=null,this.flush()},50)}async sendWithRetry(u){let m=0,n=3;while(m<n)try{await lu(this.opts.transport,{events:u});return}catch(_){if(m+=1,m>=n)throw _;let A=2**m*1000;await new Promise((l)=>setTimeout(l,A))}}installUnloadHooks(){if(!L()||typeof document>"u")return;let u=()=>{if(document.visibilityState==="hidden")this.flushBeacon()};try{document.addEventListener("visibilitychange",u),window.addEventListener("pagehide",()=>this.flushBeacon())}catch{}}}function Du(){return typeof window<"u"}function Lu(){if(typeof crypto<"u"&&typeof crypto.randomUUID==="function")return crypto.randomUUID();return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}function X(u){if(!Du())return null;try{return window.localStorage.getItem(u)}catch{return null}}function V(u,m){if(!Du())return;try{window.localStorage.setItem(u,m)}catch{}}function F(u=Date.now()){let m=X("gurulu_sid"),n=Number(X("gurulu_session_started_at")??"0"),_=Number(X("gurulu_last_event_at")??"0");if(m&&n&&u-_<1800000)return V("gurulu_last_event_at",String(u)),{session_id:m,session_started_at:n,is_new:!1};let A=Lu();return V("gurulu_sid",A),V("gurulu_session_started_at",String(u)),V("gurulu_last_event_at",String(u)),{session_id:A,session_started_at:u,is_new:!0}}function Hu(u,m){let n={},_={};if(!u)return{utm:n,click_id:_};let A;try{A=new URL(u)}catch{return{utm:n,click_id:_}}let l=A.searchParams,C=l.get("utm_source");if(C)n.source=C;let c=l.get("utm_medium");if(c)n.medium=c;let D=l.get("utm_campaign");if(D)n.campaign=D;let j=l.get("utm_term");if(j)n.term=j;let z=l.get("utm_content");if(z)n.content=z;let H=l.get("gclid");if(H)_.gclid=H;let S=l.get("fbclid");if(S)_.fbclid=S;let T=l.get("ttclid");if(T)_.ttclid=T;let b=l.get("li_fat_id");if(b)_.li_fat_id=b;return{utm:n,click_id:_}}function Su(u){if(X("gurulu_first_source"))return;V("gurulu_first_source",JSON.stringify(u))}function Tu(){let u=X("gurulu_first_source");if(!u)return null;try{return JSON.parse(u)}catch{return null}}var K="0.1.0",ju="https://ingest.gurulu.io",Pu="https://api.gurulu.io",o="gurulu_opt_out";function zu(){if(typeof window>"u")return!1;try{return window.localStorage.getItem(o)==="1"}catch{return!1}}function bu(u){if(typeof window>"u")return;try{if(u)window.localStorage.setItem(o,"1");else window.localStorage.removeItem(o)}catch{}}function Ku(){return new Date().toISOString()}class ${initialized=!1;opts=null;queue=null;session=null;anonymousId=null;autocaptureHandle=null;consent;init(u){if(this.initialized){if(u.debug&&typeof console<"u")console.warn("[gurulu] init() already called — ignoring");return}if(typeof window>"u")return;this.opts=u,this.anonymousId=v(),this.session=F(),this.consent=new M({workspaceId:u.workspaceKey,apiUrl:u.apiUrl??Pu,anonymousId:this.anonymousId,autoBanner:u.consent_mode==="banner_required"}),this.consent.init();let m={endpoint:u.endpoint??ju,workspaceKey:u.workspaceKey,sdkVersion:K};this.queue=new P({transport:m,flushIntervalMs:u.flush_interval_ms??5000,maxQueueSize:u.max_queue_size??50,...u.debug?{debug:!0}:{}});let n=Hu(window.location.href,document.referrer);if(Object.keys(n.utm).length>0||Object.keys(n.click_id).length>0){let _={utm:n.utm,click_id:n.click_id,referrer:document.referrer,landing_url:window.location.href,captured_at:Date.now()};Su(_)}this.autocaptureHandle=k(u.autocapture,{pageView:(_,A,l)=>this.queueEvent("page_view","interaction",{url:_,title:A,referrer:l}),click:(_)=>{let A=_.custom_event??"element_clicked",l={element_tag:_.element_tag,..._.element_id?{element_id:_.element_id}:{},..._.element_class?{element_class:_.element_class}:{},..._.element_text?{element_text:_.element_text}:{},..._.href?{href:_.href}:{},..._.is_outbound?{is_outbound:!0}:{},..._.is_download?{is_download:!0}:{},..._.custom_props??{}};this.queueEvent(A,"interaction",l)},formStarted:(_)=>this.queueEvent("form_started","interaction",_),formSubmitted:(_)=>this.queueEvent("form_submitted","interaction",_),scrollDepth:(_)=>this.queueEvent("scroll_depth","interaction",_),webVital:(_)=>this.queueEvent("web_vital","interaction",_)}),this.initialized=!0}track(u,m){this.queueEvent(u,"interaction",m)}page(u){if(!this.initialized||typeof window>"u")return;let m=u?.url??window.location.href,n=u?.title??document.title,_=u?.referrer??document.referrer;this.queueEvent("page_view","interaction",{url:m,title:n,referrer:_})}async identify(u,m){if(!this.initialized||zu())return;if(p(u),!this.opts)return;try{await cu({endpoint:this.opts.endpoint??ju,workspaceKey:this.opts.workspaceKey,sdkVersion:K},{anonymous_id:this.anonymousId,external_user_id:u,...m?.email?{email:m.email}:{},...m?.phone?{phone:m.phone}:{},...m?{traits:m}:{}})}catch(n){if(this.opts?.debug&&typeof console<"u")console.warn("[gurulu] identify failed",n)}}reset(){if(this.anonymousId=e(),typeof window<"u")try{window.localStorage.removeItem("gurulu_sid"),window.localStorage.removeItem("gurulu_session_started_at"),window.localStorage.removeItem("gurulu_last_event_at"),window.localStorage.removeItem("gurulu_first_source")}catch{}this.session=F()}async flush(){await this.queue?.flush()}optOut(){bu(!0)}optIn(){bu(!1)}queueEvent(u,m,n){if(!this.initialized||!this.queue||zu())return;if(!this.consentAllowsAnalytics()&&this.opts?.consent_mode==="banner_required")return;this.session=F();let _={anonymous_id:this.anonymousId??"anon_unknown",event_id:s(),event_key:u,event_type:m,occurred_at:Ku(),producer:"script",producer_version:K,...this.session?{session_id:this.session.session_id}:{}},A=a();if(A)_.person_id=A;if(n&&Object.keys(n).length>0)_.properties=n;let l=this.buildContext();if(l)_.context=l;let C=this.snapshotConsent();if(C)_.consent_state=C;this.queue.enqueue(_)}snapshotConsent(){let u=this.consent?.getState();if(!u)return;return{necessary:u.categories.necessary,analytics:u.categories.analytics,marketing:u.categories.marketing,functional:u.categories.functional,personalization:u.categories.personalization}}consentAllowsAnalytics(){let u=this.consent?.getState();if(!u)return!1;return u.categories.analytics===!0}buildContext(){if(typeof window>"u")return;let u={url:window.location.href,referrer:document.referrer,page_title:document.title,user_agent:navigator.userAgent,domain:window.location.hostname},m=Tu();if(m?.utm&&Object.keys(m.utm).length>0)u.utm=m.utm;if(m?.click_id&&Object.keys(m.click_id).length>0)u.click_id=m.click_id;return u}}var ou="0.1.0",h=new $;function Tm(){return new $}var U={init:(u)=>h.init(u),track:(u,m)=>h.track(u,m),identify:(u,m)=>h.identify(u,m),page:(u)=>h.page(u),reset:()=>h.reset(),flush:()=>h.flush(),optOut:()=>h.optOut(),optIn:()=>h.optIn(),get consent(){return h.consent},VERSION:ou};function Uu(){if(typeof document>"u")return;let u=document.currentScript,m=!u?document.querySelector("script[data-workspace]"):u;if(!m)return;let n=m.getAttribute("data-workspace");if(!n)return;let _={workspaceKey:n},A=m.getAttribute("data-endpoint");if(A)_.endpoint=A;let l=m.getAttribute("data-api-url");if(l)_.apiUrl=l;let C=m.getAttribute("data-consent");if(C==="banner_required"||C==="allow_by_default")_.consent_mode=C;let c=m.getAttribute("data-allowlist");if(c)_.cross_domain_allowlist=c.split(",").map((D)=>D.trim());if(U.init(_),typeof window<"u")window.gurulu=U}Uu();var qm=U;export{qm as default,Tm as createGurulu,Uu as autoBootstrap,ou as VERSION,q as SDKError,mu as QueueFullError,_u as OptedOutError,t as NetworkError,uu as InitError,M as GuruluConsent,$ as Gurulu,nu as ConsentBlockedError};
|
|
8
|
+
`}function M(u){return u.replace(/[&<>"']/g,(m)=>{switch(m){case"&":return"&";case"<":return"<";case">":return">";case'"':return""";case"'":return"'";default:return m}})}function Nu(u){return u.replace(/[^a-zA-Z0-9#()_\-., ]/g,"")}function Vu(){if(typeof navigator>"u")return"en";let u=(navigator.language??"").toLowerCase();if(u.startsWith("tr"))return"tr";if(u.startsWith("zh"))return"zh";if(u.startsWith("ar"))return"ar";return"en"}function G(){if(typeof crypto<"u"&&typeof crypto.randomUUID==="function")return`anon_${crypto.randomUUID()}`;return`anon_${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`}async function Xu(){throw Error("fetch not available — provide opts.fetchImpl")}var $u=new Set(["A","BUTTON"]),hu=/\.(pdf|zip|dmg|exe|tar|gz|rar|7z|mp3|mp4|csv|xlsx?|docx?|pptx?)(\?|$)/i;function Ju(u){let m=u;while(m){if(m.hasAttribute?.("data-gurulu-no-track"))return!1;m=m.parentElement}return!0}function Mu(u){let m=u;while(m){if(!m.tagName){m=m.parentElement;continue}if($u.has(m.tagName))return m;if(m.getAttribute?.("role")==="button")return m;if(m.tagName==="INPUT"){let n=m.type?.toLowerCase();if(n==="submit"||n==="button")return m}m=m.parentElement}return null}function Qu(u){let m={};if(!u.attributes)return m;for(let n=0;n<u.attributes.length;n+=1){let _=u.attributes.item(n);if(!_)continue;if(_.name.startsWith("data-gurulu-prop-")){let A=_.name.slice(17);m[A]=_.value}}return m}function f(u){if(typeof document>"u")return{stop:()=>{return}};let m=(n)=>{let _=Mu(n.target);if(!_||!Ju(_))return;let A={element_tag:_.tagName.toLowerCase()};if(_.id)A.element_id=_.id;if(_.className&&typeof _.className==="string")A.element_class=_.className.slice(0,256);let C=(_.textContent??"").trim().slice(0,200);if(C)A.element_text=C;if(_.tagName==="A"){let l=_.href;if(l){A.href=l;try{let D=new URL(l).hostname;if(typeof window<"u"&&D!==window.location.hostname)A.is_outbound=!0}catch{}if(hu.test(l))A.is_download=!0}}let c=_.getAttribute?.("data-gurulu-event");if(c)A.custom_event=c,A.custom_props=Qu(_);u(A)};return document.addEventListener("click",m,!0),{stop(){document.removeEventListener("click",m,!0)}}}var Zu=new Set(["password","tel"]);function i(u){if(u.tagName!=="INPUT")return!1;let m=u,n=(m.type??"").toLowerCase();if(Zu.has(n))return!0;if((m.autocomplete??"").toLowerCase().startsWith("cc-"))return!0;return!1}function w(u){let m=u;while(m){if(m.hasAttribute?.("data-gurulu-no-track"))return!1;m=m.parentElement}return!0}function Fu(u){let m=u;while(m){if(m.tagName==="FORM")return m;m=m.parentElement}return null}function d(u){let m={count:u.elements?.length??0};if(u.id)m.id=u.id;if(u.name)m.name=u.name;return m}function o(u){if(typeof document>"u")return{stop:()=>{return}};let m=new WeakSet,n=(A)=>{let C=A.target;if(!C)return;if(i(C))return;if(!w(C))return;let c=Fu(C);if(!c||m.has(c))return;m.add(c);let l=d(c),D={field_count:l.count};if(l.id)D.form_id=l.id;if(l.name)D.form_name=l.name;u.onStart(D)},_=(A)=>{let C=A.target;if(!C||C.tagName!=="FORM")return;if(!w(C))return;let c=d(C),l=[],D=C.elements;for(let z=0;z<D.length;z+=1){let H=D[z];if(!H)continue;if(i(H))continue;if(!("value"in H))continue;if(typeof H.value==="string"&&H.value.length>0&&H.name)l.push(H.name)}let j={field_count:c.count};if(c.id)j.form_id=c.id;if(c.name)j.form_name=c.name;if(l.length>0)j.filled_fields=l;u.onSubmit(j)};return document.addEventListener("focus",n,!0),document.addEventListener("submit",_,!0),{stop(){document.removeEventListener("focus",n,!0),document.removeEventListener("submit",_,!0)}}}function g(u){if(typeof window>"u"||typeof document>"u")return{stop:()=>{return}};let m=window.location.pathname+window.location.search;function n(){let c=window.location.pathname+window.location.search;if(c===m)return;m=c,u(window.location.href,document.title,document.referrer)}u(window.location.href,document.title,document.referrer);let _=()=>n();window.addEventListener("popstate",_);let A=history.pushState.bind(history),C=history.replaceState.bind(history);return history.pushState=function(...l){let D=A(...l);return queueMicrotask(n),D},history.replaceState=function(...l){let D=C(...l);return queueMicrotask(n),D},{stop(){window.removeEventListener("popstate",_),history.pushState=A,history.replaceState=C}}}var Bu=[25,50,75,90];function O(u){if(typeof window>"u"||typeof document>"u")return{stop:()=>{return}};let m=new Set,n=0,_=()=>{n=0;let{documentElement:C,body:c}=document;if(!C||!c)return;let l=window.scrollY??C.scrollTop??0,D=window.innerHeight??C.clientHeight??0,j=Math.max(c.scrollHeight??0,C.scrollHeight??0);if(j<=D)return;let z=(l+D)/j*100;for(let H of Bu)if(z>=H&&!m.has(H))m.add(H),u({depth_percent:H})},A=()=>{if(n!==0)return;n=requestAnimationFrame(_)};return window.addEventListener("scroll",A,{passive:!0}),{stop(){if(window.removeEventListener("scroll",A),n!==0)cancelAnimationFrame(n)}}}var Gu={LCP:[2500,4000],FID:[100,300],INP:[200,500],CLS:[0.1,0.25],TTFB:[800,1800],FCP:[1800,3000]};function V(u,m){let[n,_]=Gu[u];if(m<=n)return"good";if(m<=_)return"needs-improvement";return"poor"}function Z(u,m,n){if(typeof PerformanceObserver>"u")return null;try{let _=new PerformanceObserver((A)=>n(A.getEntries()));return _.observe({type:u,buffered:m}),_}catch{return null}}function k(u){if(typeof window>"u")return{stop:()=>{return}};let m=[];try{let S=performance.getEntriesByType("navigation")[0];if(S&&S.responseStart>0)u({metric:"TTFB",value:S.responseStart,rating:V("TTFB",S.responseStart)});let T=performance.getEntriesByName("first-contentful-paint")[0];if(T)u({metric:"FCP",value:T.startTime,rating:V("FCP",T.startTime)})}catch{}let n=0,_=Z("largest-contentful-paint",!0,(S)=>{let T=S[S.length-1];if(T)n=T.startTime});if(_)m.push(_);let A=Z("first-input",!0,(S)=>{let T=S[0];if(T){let b=T.processingStart-T.startTime;u({metric:"FID",value:b,rating:V("FID",b)})}});if(A)m.push(A);let C=0,c=Z("event",!0,(S)=>{for(let T of S){let b=T.duration;if(b>C)C=b}});if(c)m.push(c);let l=0,D=Z("layout-shift",!0,(S)=>{for(let T of S){let b=T;if(!b.hadRecentInput)l+=b.value}});if(D)m.push(D);let j=()=>{if(n>0)u({metric:"LCP",value:n,rating:V("LCP",n)});if(C>0)u({metric:"INP",value:C,rating:V("INP",C)});if(l>0)u({metric:"CLS",value:l,rating:V("CLS",l)});n=0,C=0,l=0},z=null,H=null;if(typeof document<"u")z=()=>{if(document.visibilityState==="hidden")j()},H=j,document.addEventListener("visibilitychange",z),window.addEventListener("pagehide",H);return{stop(){for(let S of m)try{S.disconnect()}catch{}if(typeof document<"u"&&z)document.removeEventListener("visibilitychange",z);if(typeof window<"u"&&H)window.removeEventListener("pagehide",H)}}}var Ru={page_view:!0,click:!0,form_started:!0,form_submitted:!0,scroll_depth:!0,web_vitals:!0,outbound_link_click:!0,download_click:!0,js_error:!1,console_error:!1,network_error:!1};function y(u,m){if(u===!1)return{stopAll:()=>{return}};let n={...Ru,...u??{}},_=[];if(n.page_view)_.push(g(m.pageView));if(n.click)_.push(f(m.click));if(n.form_started||n.form_submitted)_.push(o({onStart:n.form_started?m.formStarted:()=>{return},onSubmit:n.form_submitted?m.formSubmitted:()=>{return}}));if(n.scroll_depth)_.push(O(m.scrollDepth));if(n.web_vitals)_.push(k(m.webVital));return{stopAll(){for(let A of _)try{A.stop()}catch{}}}}function X(){return typeof window<"u"&&typeof document<"u"}function W(){if(typeof crypto<"u"&&typeof crypto.randomUUID==="function")return crypto.randomUUID();return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}function I(u){if(!X())return null;try{return window.localStorage.getItem(u)}catch{return null}}function F(u,m){if(!X())return;try{window.localStorage.setItem(u,m)}catch{}}function r(u){if(!X())return;try{window.localStorage.removeItem(u)}catch{}}function Wu(u){if(!X())return null;let m=document.cookie??"";for(let n of m.split(";")){let[_,A]=n.trim().split("=");if(_===u&&A!==void 0)return decodeURIComponent(A)}return null}function R(u,m,n=365){if(!X())return;let _=new Date(Date.now()+n*86400000).toUTCString(),A=window.location.hostname,C=A.split("."),c=C.length>=2?`.${C.slice(-2).join(".")}`:A;try{document.cookie=`${u}=${encodeURIComponent(m)}; path=/; domain=${c}; expires=${_}; SameSite=Lax`}catch{}}function v(){let u=I("gurulu_aid")??Wu("gurulu_aid_mirror");if(u)return F("gurulu_aid",u),R("gurulu_aid_mirror",u),u;let m=W();return F("gurulu_aid",m),R("gurulu_aid_mirror",m),m}function p(u){F("gurulu_pid",u)}function a(){return I("gurulu_pid")}function e(){r("gurulu_pid"),r("gurulu_aid");let u=W();return F("gurulu_aid",u),R("gurulu_aid_mirror",u),u}function s(){return W()}class E extends Error{code;constructor(u,m){super(m);this.code=u,this.name="SDKError"}}class uu extends E{constructor(u){super("SDK_INIT",u);this.name="InitError"}}class N extends E{status;constructor(u,m){super("SDK_NETWORK",u);if(this.name="NetworkError",m!==void 0)this.status=m}}class mu extends E{constructor(u){super("SDK_QUEUE_FULL",u);this.name="QueueFullError"}}class _u extends E{constructor(){super("SDK_OPTED_OUT","tracking disabled — gurulu.optOut() in effect");this.name="OptedOutError"}}class nu extends E{constructor(){super("SDK_CONSENT_BLOCKED","event queued — awaiting consent grant");this.name="ConsentBlockedError"}}var tu=65536;function Au(u,m){let n=new Headers({"content-type":"application/json",authorization:`Bearer ${u.workspaceKey}`,"x-gurulu-sdk":`@gurulu/web@${u.sdkVersion}`});if(m)for(let[_,A]of Object.entries(m))n.set(_,A);return n}async function Cu(u,m,n){let _=u.fetchImpl??(typeof fetch<"u"?fetch.bind(globalThis):null);if(!_)throw new N("fetch unavailable");let A=`${u.endpoint}/v1/ingest/batch`,C=await _(A,{method:"POST",keepalive:!0,credentials:"omit",headers:Au(u,n),body:JSON.stringify(m)});if(!C.ok)throw new N(`ingest ${C.status}`,C.status)}function cu(u,m){if(typeof navigator>"u"||typeof navigator.sendBeacon!=="function")return!1;let n=`${u.endpoint}/v1/ingest/batch?wk=${encodeURIComponent(u.workspaceKey)}&sdk=${encodeURIComponent(u.sdkVersion)}`;try{let _=JSON.stringify(m);if(_.length>=tu)return!1;let A=new Blob([_],{type:"application/json"});return navigator.sendBeacon(n,A)}catch{return!1}}async function lu(u,m){let n=u.fetchImpl??(typeof fetch<"u"?fetch.bind(globalThis):null);if(!n)throw new N("fetch unavailable");let _=await n(`${u.endpoint}/v1/ingest/identify`,{method:"POST",keepalive:!0,credentials:"omit",headers:Au(u),body:JSON.stringify(m)});if(!_.ok)throw new N(`identify ${_.status}`,_.status)}var Y="gurulu_queue";function L(){return typeof window<"u"}function Yu(){if(!L())return[];try{let u=window.localStorage.getItem(Y);if(!u)return[];let m=JSON.parse(u);return Array.isArray(m)?m:[]}catch{return[]}}function t(u){if(!L())return;try{if(u.length===0)window.localStorage.removeItem(Y);else window.localStorage.setItem(Y,JSON.stringify(u))}catch{}}class P{opts;buffer;timer=null;flushing=!1;constructor(u){if(this.opts=u,this.buffer=Yu(),this.scheduleNext(),this.installUnloadHooks(),this.buffer.length>0)this.scheduleImmediate()}enqueue(u){if(this.buffer.push(u),t(this.buffer),this.buffer.length>=this.opts.maxQueueSize)this.flush();else this.scheduleNext()}size(){return this.buffer.length}async flush(){if(this.flushing||this.buffer.length===0)return;this.flushing=!0;let u=this.buffer.slice(0);try{await this.sendWithRetry(u),this.buffer=this.buffer.slice(u.length),t(this.buffer)}catch(m){if(this.opts.debug&&typeof console<"u")console.warn("[gurulu] flush failed, retain queue",m)}finally{this.flushing=!1}}flushBeacon(){if(this.buffer.length===0)return;if(cu(this.opts.transport,{events:this.buffer}))this.buffer=[],t(this.buffer)}scheduleNext(){if(this.timer!==null)return;this.timer=setTimeout(()=>{this.timer=null,this.flush()},this.opts.flushIntervalMs)}scheduleImmediate(){if(this.timer!==null)clearTimeout(this.timer),this.timer=null;this.timer=setTimeout(()=>{this.timer=null,this.flush()},50)}async sendWithRetry(u){let m=0,n=3;while(m<n)try{await Cu(this.opts.transport,{events:u});return}catch(_){if(m+=1,m>=n)throw _;let A=2**m*1000;await new Promise((C)=>setTimeout(C,A))}}installUnloadHooks(){if(!L()||typeof document>"u")return;let u=()=>{if(document.visibilityState==="hidden")this.flushBeacon()};try{document.addEventListener("visibilitychange",u),window.addEventListener("pagehide",()=>this.flushBeacon())}catch{}}}function Du(){return typeof window<"u"}function Lu(){if(typeof crypto<"u"&&typeof crypto.randomUUID==="function")return crypto.randomUUID();return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}function h(u){if(!Du())return null;try{return window.localStorage.getItem(u)}catch{return null}}function $(u,m){if(!Du())return;try{window.localStorage.setItem(u,m)}catch{}}function B(u=Date.now()){let m=h("gurulu_sid"),n=Number(h("gurulu_session_started_at")??"0"),_=Number(h("gurulu_last_event_at")??"0");if(m&&n&&u-_<1800000)return $("gurulu_last_event_at",String(u)),{session_id:m,session_started_at:n,is_new:!1};let A=Lu();return $("gurulu_sid",A),$("gurulu_session_started_at",String(u)),$("gurulu_last_event_at",String(u)),{session_id:A,session_started_at:u,is_new:!0}}function Hu(u,m){let n={},_={};if(!u)return{utm:n,click_id:_};let A;try{A=new URL(u)}catch{return{utm:n,click_id:_}}let C=A.searchParams,c=C.get("utm_source");if(c)n.source=c;let l=C.get("utm_medium");if(l)n.medium=l;let D=C.get("utm_campaign");if(D)n.campaign=D;let j=C.get("utm_term");if(j)n.term=j;let z=C.get("utm_content");if(z)n.content=z;let H=C.get("gclid");if(H)_.gclid=H;let S=C.get("fbclid");if(S)_.fbclid=S;let T=C.get("ttclid");if(T)_.ttclid=T;let b=C.get("li_fat_id");if(b)_.li_fat_id=b;return{utm:n,click_id:_}}function Su(u){if(h("gurulu_first_source"))return;$("gurulu_first_source",JSON.stringify(u))}function Tu(){let u=h("gurulu_first_source");if(!u)return null;try{return JSON.parse(u)}catch{return null}}var K="0.1.0",ju="https://ingest.gurulu.io",Pu="https://api.gurulu.io",U="gurulu_opt_out";function zu(){if(typeof window>"u")return!1;try{return window.localStorage.getItem(U)==="1"}catch{return!1}}function bu(u){if(typeof window>"u")return;try{if(u)window.localStorage.setItem(U,"1");else window.localStorage.removeItem(U)}catch{}}function Ku(){return new Date().toISOString()}class J{initialized=!1;opts=null;queue=null;session=null;anonymousId=null;autocaptureHandle=null;testMode=!1;consent;init(u){if(this.initialized){if(u.debug&&typeof console<"u")console.warn("[gurulu] init() already called — ignoring");return}if(typeof window>"u")return;this.opts=u,this.testMode=u.test_mode===!0,this.anonymousId=v(),this.session=B(),this.consent=new Q({workspaceId:u.workspaceKey,apiUrl:u.apiUrl??Pu,anonymousId:this.anonymousId,autoBanner:u.consent_mode==="banner_required"}),this.consent.init();let m={endpoint:u.endpoint??ju,workspaceKey:u.workspaceKey,sdkVersion:K};this.queue=new P({transport:m,flushIntervalMs:u.flush_interval_ms??5000,maxQueueSize:u.max_queue_size??50,...u.debug?{debug:!0}:{}});let n=Hu(window.location.href,document.referrer);if(Object.keys(n.utm).length>0||Object.keys(n.click_id).length>0){let _={utm:n.utm,click_id:n.click_id,referrer:document.referrer,landing_url:window.location.href,captured_at:Date.now()};Su(_)}this.autocaptureHandle=y(u.autocapture,{pageView:(_,A,C)=>this.queueEvent("page_view","interaction",{url:_,title:A,referrer:C}),click:(_)=>{let A=_.custom_event??"element_clicked",C={element_tag:_.element_tag,..._.element_id?{element_id:_.element_id}:{},..._.element_class?{element_class:_.element_class}:{},..._.element_text?{element_text:_.element_text}:{},..._.href?{href:_.href}:{},..._.is_outbound?{is_outbound:!0}:{},..._.is_download?{is_download:!0}:{},..._.custom_props??{}};this.queueEvent(A,"interaction",C)},formStarted:(_)=>this.queueEvent("form_started","interaction",_),formSubmitted:(_)=>this.queueEvent("form_submitted","interaction",_),scrollDepth:(_)=>this.queueEvent("scroll_depth","interaction",_),webVital:(_)=>this.queueEvent("web_vital","interaction",_)}),this.initialized=!0}track(u,m){this.queueEvent(u,"interaction",m)}page(u){if(!this.initialized||typeof window>"u")return;let m=u?.url??window.location.href,n=u?.title??document.title,_=u?.referrer??document.referrer;this.queueEvent("page_view","interaction",{url:m,title:n,referrer:_})}async identify(u,m){if(!this.initialized||zu())return;if(p(u),!this.opts)return;try{await lu({endpoint:this.opts.endpoint??ju,workspaceKey:this.opts.workspaceKey,sdkVersion:K},{anonymous_id:this.anonymousId,external_user_id:u,...m?.email?{email:m.email}:{},...m?.phone?{phone:m.phone}:{},...m?{traits:m}:{}})}catch(n){if(this.opts?.debug&&typeof console<"u")console.warn("[gurulu] identify failed",n)}}reset(){if(this.anonymousId=e(),typeof window<"u")try{window.localStorage.removeItem("gurulu_sid"),window.localStorage.removeItem("gurulu_session_started_at"),window.localStorage.removeItem("gurulu_last_event_at"),window.localStorage.removeItem("gurulu_first_source")}catch{}this.session=B()}async flush(){await this.queue?.flush()}optOut(){bu(!0)}optIn(){bu(!1)}queueEvent(u,m,n){if(!this.initialized||!this.queue||zu())return;if(!this.consentAllowsAnalytics()&&this.opts?.consent_mode==="banner_required")return;this.session=B();let _={anonymous_id:this.anonymousId??"anon_unknown",event_id:s(),event_key:u,event_type:m,occurred_at:Ku(),producer:"script",producer_version:K,...this.session?{session_id:this.session.session_id}:{}},A=a();if(A)_.person_id=A;if(n&&Object.keys(n).length>0)_.properties=n;let C=this.buildContext();if(C)_.context=C;let c=this.snapshotConsent();if(c)_.consent_state=c;if(this.testMode)_.test_mode=!0;this.queue.enqueue(_)}snapshotConsent(){let u=this.consent?.getState();if(!u)return;return{necessary:u.categories.necessary,analytics:u.categories.analytics,marketing:u.categories.marketing,functional:u.categories.functional,personalization:u.categories.personalization}}consentAllowsAnalytics(){let u=this.consent?.getState();if(!u)return!1;return u.categories.analytics===!0}buildContext(){if(typeof window>"u")return;let u={url:window.location.href,referrer:document.referrer,page_title:document.title,user_agent:navigator.userAgent,domain:window.location.hostname},m=Tu();if(m?.utm&&Object.keys(m.utm).length>0)u.utm=m.utm;if(m?.click_id&&Object.keys(m.click_id).length>0)u.click_id=m.click_id;return u}}var Uu="0.1.0",q=new J;function Tm(){return new J}var x={init:(u)=>q.init(u),track:(u,m)=>q.track(u,m),identify:(u,m)=>q.identify(u,m),page:(u)=>q.page(u),reset:()=>q.reset(),flush:()=>q.flush(),optOut:()=>q.optOut(),optIn:()=>q.optIn(),get consent(){return q.consent},VERSION:Uu};function xu(){if(typeof document>"u")return;let u=document.currentScript,m=!u?document.querySelector("script[data-workspace]"):u;if(!m)return;let n=m.getAttribute("data-workspace");if(!n)return;let _={workspaceKey:n},A=m.getAttribute("data-endpoint");if(A)_.endpoint=A;let C=m.getAttribute("data-api-url");if(C)_.apiUrl=C;let c=m.getAttribute("data-consent");if(c==="banner_required"||c==="allow_by_default")_.consent_mode=c;let l=m.getAttribute("data-allowlist");if(l)_.cross_domain_allowlist=l.split(",").map((D)=>D.trim());if(x.init(_),typeof window<"u")window.gurulu=x}xu();var Em=x;export{Em as default,Tm as createGurulu,xu as autoBootstrap,Uu as VERSION,E as SDKError,mu as QueueFullError,_u as OptedOutError,N as NetworkError,uu as InitError,Q as GuruluConsent,J as Gurulu,nu as ConsentBlockedError};
|
|
9
9
|
|
|
10
|
-
//# debugId=
|
|
10
|
+
//# debugId=399296B48A9012C664756E2164756E21
|
package/dist/t.js.map
CHANGED
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
"// @gurulu/web transport — fetch keepalive (primary) + sendBeacon (unload fallback).\n// 3rd-party context: credentials: 'omit', custom auth via Bearer header.\n//\n// Spec § 4.5.\n\nimport { NetworkError } from './errors.ts';\n\nconst BEACON_SIZE_LIMIT = 65536; // 64KB\n\nexport interface TransportConfig {\n endpoint: string;\n workspaceKey: string;\n sdkVersion: string;\n /** Optional override (tests). */\n fetchImpl?: typeof fetch;\n}\n\nfunction buildHeaders(cfg: TransportConfig, extra?: Record<string, string>): Headers {\n const h = new Headers({\n 'content-type': 'application/json',\n authorization: `Bearer ${cfg.workspaceKey}`,\n 'x-gurulu-sdk': `@gurulu/web@${cfg.sdkVersion}`,\n });\n if (extra) {\n for (const [k, v] of Object.entries(extra)) h.set(k, v);\n }\n return h;\n}\n\n/**\n * Send batch to /v1/ingest/batch via fetch keepalive.\n * Throws NetworkError on non-2xx. Caller handles retry/backoff.\n */\nexport async function sendBatch(\n cfg: TransportConfig,\n body: unknown,\n extraHeaders?: Record<string, string>,\n): Promise<void> {\n const f = cfg.fetchImpl ?? (typeof fetch !== 'undefined' ? fetch.bind(globalThis) : null);\n if (!f) throw new NetworkError('fetch unavailable');\n const url = `${cfg.endpoint}/v1/ingest/batch`;\n const res = await f(url, {\n method: 'POST',\n keepalive: true,\n credentials: 'omit',\n headers: buildHeaders(cfg, extraHeaders),\n body: JSON.stringify(body),\n });\n if (!res.ok) throw new NetworkError(`ingest ${res.status}`, res.status);\n}\n\n/** sendBeacon for `pagehide`/`beforeunload`. Sync best-effort. */\nexport function sendBeaconBatch(cfg: TransportConfig, body: unknown): boolean {\n if (typeof navigator === 'undefined' || typeof navigator.sendBeacon !== 'function') return false;\n const url = `${cfg.endpoint}/v1/ingest/batch?wk=${encodeURIComponent(cfg.workspaceKey)}&sdk=${encodeURIComponent(cfg.sdkVersion)}`;\n try {\n const payload = JSON.stringify(body);\n if (payload.length >= BEACON_SIZE_LIMIT) return false;\n const blob = new Blob([payload], { type: 'application/json' });\n return navigator.sendBeacon(url, blob);\n } catch {\n return false;\n }\n}\n\n/** Identify call → /v1/ingest/identify. */\nexport async function sendIdentify(cfg: TransportConfig, body: unknown): Promise<void> {\n const f = cfg.fetchImpl ?? (typeof fetch !== 'undefined' ? fetch.bind(globalThis) : null);\n if (!f) throw new NetworkError('fetch unavailable');\n const res = await f(`${cfg.endpoint}/v1/ingest/identify`, {\n method: 'POST',\n keepalive: true,\n credentials: 'omit',\n headers: buildHeaders(cfg),\n body: JSON.stringify(body),\n });\n if (!res.ok) throw new NetworkError(`identify ${res.status}`, res.status);\n}\n",
|
|
15
15
|
"// @gurulu/web batch queue — localStorage backed + 3x exponential retry.\n//\n// Spec § 4.5 — max 50 events, 5s auto-flush, sendBeacon fallback on unload.\n\nimport { sendBatch, sendBeaconBatch, type TransportConfig } from './transport.ts';\nimport type { OutgoingEvent } from './types.ts';\n\nconst QUEUE_KEY = 'gurulu_queue';\n\nfunction hasWindow(): boolean {\n return typeof window !== 'undefined';\n}\n\nfunction loadPersisted(): OutgoingEvent[] {\n if (!hasWindow()) return [];\n try {\n const raw = window.localStorage.getItem(QUEUE_KEY);\n if (!raw) return [];\n const arr = JSON.parse(raw);\n return Array.isArray(arr) ? (arr as OutgoingEvent[]) : [];\n } catch {\n return [];\n }\n}\n\nfunction persist(events: OutgoingEvent[]): void {\n if (!hasWindow()) return;\n try {\n if (events.length === 0) window.localStorage.removeItem(QUEUE_KEY);\n else window.localStorage.setItem(QUEUE_KEY, JSON.stringify(events));\n } catch {\n /* quota — silently drop persist */\n }\n}\n\nexport interface QueueOptions {\n transport: TransportConfig;\n flushIntervalMs: number;\n maxQueueSize: number;\n debug?: boolean;\n}\n\nexport class EventQueue {\n private readonly opts: QueueOptions;\n private buffer: OutgoingEvent[];\n private timer: ReturnType<typeof setTimeout> | null = null;\n private flushing = false;\n\n constructor(opts: QueueOptions) {\n this.opts = opts;\n this.buffer = loadPersisted();\n this.scheduleNext();\n this.installUnloadHooks();\n // Best-effort drain any persisted backlog on startup.\n if (this.buffer.length > 0) this.scheduleImmediate();\n }\n\n enqueue(event: OutgoingEvent): void {\n this.buffer.push(event);\n persist(this.buffer);\n if (this.buffer.length >= this.opts.maxQueueSize) {\n void this.flush();\n } else {\n this.scheduleNext();\n }\n }\n\n size(): number {\n return this.buffer.length;\n }\n\n /** Manual flush — caller may await. */\n async flush(): Promise<void> {\n if (this.flushing || this.buffer.length === 0) return;\n this.flushing = true;\n const batch = this.buffer.slice(0);\n try {\n await this.sendWithRetry(batch);\n this.buffer = this.buffer.slice(batch.length);\n persist(this.buffer);\n } catch (err) {\n // Persisted in `buffer` — next flush re-attempts.\n if (this.opts.debug && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn('[gurulu] flush failed, retain queue', err);\n }\n } finally {\n this.flushing = false;\n }\n }\n\n /** Unload-path: synchronous best-effort via sendBeacon. */\n flushBeacon(): void {\n if (this.buffer.length === 0) return;\n const sent = sendBeaconBatch(this.opts.transport, { events: this.buffer });\n if (sent) {\n this.buffer = [];\n persist(this.buffer);\n }\n }\n\n private scheduleNext(): void {\n if (this.timer !== null) return;\n this.timer = setTimeout(() => {\n this.timer = null;\n void this.flush();\n }, this.opts.flushIntervalMs);\n }\n\n private scheduleImmediate(): void {\n if (this.timer !== null) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n this.timer = setTimeout(() => {\n this.timer = null;\n void this.flush();\n }, 50);\n }\n\n private async sendWithRetry(batch: OutgoingEvent[]): Promise<void> {\n let attempt = 0;\n const max = 3;\n while (attempt < max) {\n try {\n await sendBatch(this.opts.transport, { events: batch });\n return;\n } catch (err) {\n attempt += 1;\n if (attempt >= max) throw err;\n const backoff = 2 ** attempt * 1000;\n await new Promise((r) => setTimeout(r, backoff));\n }\n }\n }\n\n private installUnloadHooks(): void {\n if (!hasWindow() || typeof document === 'undefined') return;\n const onHidden = (): void => {\n if (document.visibilityState === 'hidden') this.flushBeacon();\n };\n try {\n document.addEventListener('visibilitychange', onHidden);\n window.addEventListener('pagehide', () => this.flushBeacon());\n } catch {\n /* DOM unavailable */\n }\n }\n}\n",
|
|
16
16
|
"// @gurulu/web session resolution — 30 min idle timeout + UTM/click_id first-touch.\n//\n// Spec § 3.1 — gurulu_sid + gurulu_session_started_at + gurulu_first_source.\n\nimport type { ClickIdContext, SourceTouch, UTMContext } from './types.ts';\n\nconst SESSION_KEY = 'gurulu_sid';\nconst SESSION_STARTED_KEY = 'gurulu_session_started_at';\nconst LAST_EVENT_KEY = 'gurulu_last_event_at';\nconst FIRST_SOURCE_KEY = 'gurulu_first_source';\nconst SESSION_TIMEOUT_MS = 30 * 60 * 1000;\n\nfunction hasWindow(): boolean {\n return typeof window !== 'undefined';\n}\n\nfunction uuid(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n}\n\nfunction readLs(key: string): string | null {\n if (!hasWindow()) return null;\n try {\n return window.localStorage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction writeLs(key: string, value: string): void {\n if (!hasWindow()) return;\n try {\n window.localStorage.setItem(key, value);\n } catch {\n /* noop */\n }\n}\n\nexport interface SessionState {\n session_id: string;\n session_started_at: number;\n is_new: boolean;\n}\n\nexport function resolveSession(now = Date.now()): SessionState {\n const existing = readLs(SESSION_KEY);\n const startedAt = Number(readLs(SESSION_STARTED_KEY) ?? '0');\n const lastEvent = Number(readLs(LAST_EVENT_KEY) ?? '0');\n\n if (existing && startedAt && now - lastEvent < SESSION_TIMEOUT_MS) {\n writeLs(LAST_EVENT_KEY, String(now));\n return { session_id: existing, session_started_at: startedAt, is_new: false };\n }\n const fresh = uuid();\n writeLs(SESSION_KEY, fresh);\n writeLs(SESSION_STARTED_KEY, String(now));\n writeLs(LAST_EVENT_KEY, String(now));\n return { session_id: fresh, session_started_at: now, is_new: true };\n}\n\nexport function newSession(now = Date.now()): SessionState {\n const fresh = uuid();\n writeLs(SESSION_KEY, fresh);\n writeLs(SESSION_STARTED_KEY, String(now));\n writeLs(LAST_EVENT_KEY, String(now));\n return { session_id: fresh, session_started_at: now, is_new: true };\n}\n\nexport function parseUrlContext(\n href: string | undefined,\n referrer: string | undefined,\n): {\n utm: UTMContext;\n click_id: ClickIdContext;\n} {\n const utm: UTMContext = {};\n const clickId: ClickIdContext = {};\n if (!href) return { utm, click_id: clickId };\n let url: URL;\n try {\n url = new URL(href);\n } catch {\n return { utm, click_id: clickId };\n }\n const p = url.searchParams;\n const s = p.get('utm_source');\n if (s) utm.source = s;\n const m = p.get('utm_medium');\n if (m) utm.medium = m;\n const c = p.get('utm_campaign');\n if (c) utm.campaign = c;\n const t = p.get('utm_term');\n if (t) utm.term = t;\n const ct = p.get('utm_content');\n if (ct) utm.content = ct;\n const gclid = p.get('gclid');\n if (gclid) clickId.gclid = gclid;\n const fbclid = p.get('fbclid');\n if (fbclid) clickId.fbclid = fbclid;\n const ttclid = p.get('ttclid');\n if (ttclid) clickId.ttclid = ttclid;\n const li = p.get('li_fat_id');\n if (li) clickId.li_fat_id = li;\n void referrer; // reserved for referrer-source classifier (future)\n return { utm, click_id: clickId };\n}\n\nexport function preserveFirstSource(touch: SourceTouch): void {\n if (readLs(FIRST_SOURCE_KEY)) return;\n writeLs(FIRST_SOURCE_KEY, JSON.stringify(touch));\n}\n\nexport function getFirstSource(): SourceTouch | null {\n const raw = readLs(FIRST_SOURCE_KEY);\n if (!raw) return null;\n try {\n return JSON.parse(raw) as SourceTouch;\n } catch {\n return null;\n }\n}\n",
|
|
17
|
-
"// @gurulu/web core — main Gurulu SDK class.\n// Spec: docs/specs/07-sdk-web.md\n//\n// Lifecycle:\n// const sdk = createGurulu();\n// sdk.init({ workspaceKey: 'pk_xxx' });\n// sdk.track('button_clicked', { ... });\n// sdk.identify('user_42', { email: '...' });\n// sdk.reset(); // logout\n// sdk.flush(); // unload edge\n//\n// Zero runtime dep — all transport via native fetch + sendBeacon.\n\nimport { startAutocapture } from './autocapture/index.ts';\nimport { GuruluConsent } from './consent.ts';\nimport {\n clearIdentity,\n getOrCreateAnonymousId,\n getPersonId,\n newEventId,\n setPersonId,\n} from './identity.ts';\nimport { EventQueue } from './queue.ts';\nimport {\n getFirstSource,\n parseUrlContext,\n preserveFirstSource,\n resolveSession,\n type SessionState,\n} from './session.ts';\nimport { sendIdentify, type TransportConfig } from './transport.ts';\nimport type {\n ConsentCategoriesState,\n EventContext,\n EventType,\n InitOptions,\n OutgoingEvent,\n} from './types.ts';\n\nconst SDK_VERSION = '0.1.0';\nconst DEFAULT_ENDPOINT = 'https://ingest.gurulu.io';\nconst DEFAULT_API_URL = 'https://api.gurulu.io';\nconst OPT_OUT_KEY = 'gurulu_opt_out';\n\nfunction isOptedOut(): boolean {\n if (typeof window === 'undefined') return false;\n try {\n return window.localStorage.getItem(OPT_OUT_KEY) === '1';\n } catch {\n return false;\n }\n}\n\nfunction setOptOut(flag: boolean): void {\n if (typeof window === 'undefined') return;\n try {\n if (flag) window.localStorage.setItem(OPT_OUT_KEY, '1');\n else window.localStorage.removeItem(OPT_OUT_KEY);\n } catch {\n /* noop */\n }\n}\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nexport interface PageOverride {\n url?: string;\n title?: string;\n referrer?: string;\n}\n\nexport class Gurulu {\n private initialized = false;\n private opts: InitOptions | null = null;\n private queue: EventQueue | null = null;\n private session: SessionState | null = null;\n private anonymousId: string | null = null;\n private autocaptureHandle: { stopAll: () => void } | null = null;\n consent!: GuruluConsent;\n\n /**\n * 1-line init. Idempotent — second call no-ops with debug warning.\n */\n init(opts: InitOptions): void {\n if (this.initialized) {\n if (opts.debug && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn('[gurulu] init() already called — ignoring');\n }\n return;\n }\n if (typeof window === 'undefined') return; // SSR no-op\n\n this.opts = opts;\n this.anonymousId = getOrCreateAnonymousId();\n this.session = resolveSession();\n this.consent = new GuruluConsent({\n workspaceId: opts.workspaceKey,\n apiUrl: opts.apiUrl ?? DEFAULT_API_URL,\n anonymousId: this.anonymousId,\n autoBanner: opts.consent_mode === 'banner_required',\n });\n // Fire consent banner-config (best-effort, async).\n void this.consent.init();\n\n const transport: TransportConfig = {\n endpoint: opts.endpoint ?? DEFAULT_ENDPOINT,\n workspaceKey: opts.workspaceKey,\n sdkVersion: SDK_VERSION,\n };\n this.queue = new EventQueue({\n transport,\n flushIntervalMs: opts.flush_interval_ms ?? 5000,\n maxQueueSize: opts.max_queue_size ?? 50,\n ...(opts.debug ? { debug: true } : {}),\n });\n\n // First-touch UTM preserve.\n const ctx = parseUrlContext(window.location.href, document.referrer);\n if (Object.keys(ctx.utm).length > 0 || Object.keys(ctx.click_id).length > 0) {\n const touch = {\n utm: ctx.utm,\n click_id: ctx.click_id,\n referrer: document.referrer,\n landing_url: window.location.href,\n captured_at: Date.now(),\n };\n preserveFirstSource(touch);\n }\n\n // Wire autocapture.\n this.autocaptureHandle = startAutocapture(opts.autocapture, {\n pageView: (url, title, referrer) =>\n this.queueEvent('page_view', 'interaction', { url, title, referrer }),\n click: (payload) => {\n const ev = payload.custom_event ?? 'element_clicked';\n const props: Record<string, unknown> = {\n element_tag: payload.element_tag,\n ...(payload.element_id ? { element_id: payload.element_id } : {}),\n ...(payload.element_class ? { element_class: payload.element_class } : {}),\n ...(payload.element_text ? { element_text: payload.element_text } : {}),\n ...(payload.href ? { href: payload.href } : {}),\n ...(payload.is_outbound ? { is_outbound: true } : {}),\n ...(payload.is_download ? { is_download: true } : {}),\n ...(payload.custom_props ?? {}),\n };\n this.queueEvent(ev, 'interaction', props);\n },\n formStarted: (p) =>\n this.queueEvent('form_started', 'interaction', p as unknown as Record<string, unknown>),\n formSubmitted: (p) =>\n this.queueEvent('form_submitted', 'interaction', p as unknown as Record<string, unknown>),\n scrollDepth: (p) =>\n this.queueEvent('scroll_depth', 'interaction', p as unknown as Record<string, unknown>),\n webVital: (p) =>\n this.queueEvent('web_vital', 'interaction', p as unknown as Record<string, unknown>),\n });\n\n this.initialized = true;\n }\n\n /** Manual `track()` — typed via codegen (`@gurulu/web/generated`). */\n track(eventKey: string, properties?: Record<string, unknown>): void {\n this.queueEvent(eventKey, 'interaction', properties);\n }\n\n /** Manual `page()` — SPA route helper for non-history flows. */\n page(override?: PageOverride): void {\n if (!this.initialized || typeof window === 'undefined') return;\n const url = override?.url ?? window.location.href;\n const title = override?.title ?? document.title;\n const referrer = override?.referrer ?? document.referrer;\n this.queueEvent('page_view', 'interaction', { url, title, referrer });\n }\n\n /**\n * Identify — anonymous → person merge.\n * Stores person_id locally + best-effort POST /v1/ingest/identify.\n */\n async identify(personId: string, traits?: Record<string, unknown>): Promise<void> {\n if (!this.initialized || isOptedOut()) return;\n setPersonId(personId);\n if (!this.opts) return;\n try {\n await sendIdentify(\n {\n endpoint: this.opts.endpoint ?? DEFAULT_ENDPOINT,\n workspaceKey: this.opts.workspaceKey,\n sdkVersion: SDK_VERSION,\n },\n {\n anonymous_id: this.anonymousId,\n external_user_id: personId,\n ...(traits?.email ? { email: traits.email } : {}),\n ...(traits?.phone ? { phone: traits.phone } : {}),\n ...(traits ? { traits } : {}),\n },\n );\n } catch (err) {\n if (this.opts?.debug && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn('[gurulu] identify failed', err);\n }\n }\n }\n\n /** Logout — wipes person_id, rotates anonymous_id, new session. */\n reset(): void {\n this.anonymousId = clearIdentity();\n if (typeof window !== 'undefined') {\n try {\n window.localStorage.removeItem('gurulu_sid');\n window.localStorage.removeItem('gurulu_session_started_at');\n window.localStorage.removeItem('gurulu_last_event_at');\n window.localStorage.removeItem('gurulu_first_source');\n } catch {\n /* noop */\n }\n }\n this.session = resolveSession();\n }\n\n /** Manual flush — caller may await. */\n async flush(): Promise<void> {\n await this.queue?.flush();\n }\n\n /** Tracking opt-out — all subsequent track/identify no-op. */\n optOut(): void {\n setOptOut(true);\n }\n\n /** Re-enable tracking. */\n optIn(): void {\n setOptOut(false);\n }\n\n // ───────────────────────── internal ──────────────────────────────\n\n private queueEvent(\n eventKey: string,\n eventType: EventType,\n properties?: Record<string, unknown>,\n ): void {\n if (!this.initialized || !this.queue || isOptedOut()) return;\n if (!this.consentAllowsAnalytics() && this.opts?.consent_mode === 'banner_required') {\n // Drop pre-consent in banner_required mode; SDK queue still captures\n // necessary events post-consent.\n return;\n }\n this.session = resolveSession();\n const event: OutgoingEvent = {\n anonymous_id: this.anonymousId ?? 'anon_unknown',\n event_id: newEventId(),\n event_key: eventKey,\n event_type: eventType,\n occurred_at: nowIso(),\n producer: 'script',\n producer_version: SDK_VERSION,\n ...(this.session ? { session_id: this.session.session_id } : {}),\n };\n const pid = getPersonId();\n if (pid) event.person_id = pid;\n if (properties && Object.keys(properties).length > 0) event.properties = properties;\n const ctx = this.buildContext();\n if (ctx) event.context = ctx;\n const consent = this.snapshotConsent();\n if (consent) event.consent_state = consent;\n this.queue.enqueue(event);\n }\n\n private snapshotConsent(): ConsentCategoriesState | undefined {\n const snap = this.consent?.getState();\n if (!snap) return undefined;\n return {\n necessary: snap.categories.necessary,\n analytics: snap.categories.analytics,\n marketing: snap.categories.marketing,\n functional: snap.categories.functional,\n personalization: snap.categories.personalization,\n };\n }\n\n private consentAllowsAnalytics(): boolean {\n const snap = this.consent?.getState();\n if (!snap) return false;\n return snap.categories.analytics === true;\n }\n\n private buildContext(): EventContext | undefined {\n if (typeof window === 'undefined') return undefined;\n const ctx: EventContext = {\n url: window.location.href,\n referrer: document.referrer,\n page_title: document.title,\n user_agent: navigator.userAgent,\n domain: window.location.hostname,\n };\n const first = getFirstSource();\n if (first?.utm && Object.keys(first.utm).length > 0) ctx.utm = first.utm;\n if (first?.click_id && Object.keys(first.click_id).length > 0) ctx.click_id = first.click_id;\n return ctx;\n }\n}\n",
|
|
17
|
+
"// @gurulu/web core — main Gurulu SDK class.\n// Spec: docs/specs/07-sdk-web.md\n//\n// Lifecycle:\n// const sdk = createGurulu();\n// sdk.init({ workspaceKey: 'pk_xxx' });\n// sdk.track('button_clicked', { ... });\n// sdk.identify('user_42', { email: '...' });\n// sdk.reset(); // logout\n// sdk.flush(); // unload edge\n//\n// Zero runtime dep — all transport via native fetch + sendBeacon.\n\nimport { startAutocapture } from './autocapture/index.ts';\nimport { GuruluConsent } from './consent.ts';\nimport {\n clearIdentity,\n getOrCreateAnonymousId,\n getPersonId,\n newEventId,\n setPersonId,\n} from './identity.ts';\nimport { EventQueue } from './queue.ts';\nimport {\n getFirstSource,\n parseUrlContext,\n preserveFirstSource,\n resolveSession,\n type SessionState,\n} from './session.ts';\nimport { sendIdentify, type TransportConfig } from './transport.ts';\nimport type {\n ConsentCategoriesState,\n EventContext,\n EventType,\n InitOptions,\n OutgoingEvent,\n} from './types.ts';\n\nconst SDK_VERSION = '0.1.0';\nconst DEFAULT_ENDPOINT = 'https://ingest.gurulu.io';\nconst DEFAULT_API_URL = 'https://api.gurulu.io';\nconst OPT_OUT_KEY = 'gurulu_opt_out';\n\nfunction isOptedOut(): boolean {\n if (typeof window === 'undefined') return false;\n try {\n return window.localStorage.getItem(OPT_OUT_KEY) === '1';\n } catch {\n return false;\n }\n}\n\nfunction setOptOut(flag: boolean): void {\n if (typeof window === 'undefined') return;\n try {\n if (flag) window.localStorage.setItem(OPT_OUT_KEY, '1');\n else window.localStorage.removeItem(OPT_OUT_KEY);\n } catch {\n /* noop */\n }\n}\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nexport interface PageOverride {\n url?: string;\n title?: string;\n referrer?: string;\n}\n\nexport class Gurulu {\n private initialized = false;\n private opts: InitOptions | null = null;\n private queue: EventQueue | null = null;\n private session: SessionState | null = null;\n private anonymousId: string | null = null;\n private autocaptureHandle: { stopAll: () => void } | null = null;\n private testMode = false;\n consent!: GuruluConsent;\n\n /**\n * 1-line init. Idempotent — second call no-ops with debug warning.\n */\n init(opts: InitOptions): void {\n if (this.initialized) {\n if (opts.debug && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn('[gurulu] init() already called — ignoring');\n }\n return;\n }\n if (typeof window === 'undefined') return; // SSR no-op\n\n this.opts = opts;\n this.testMode = opts.test_mode === true;\n this.anonymousId = getOrCreateAnonymousId();\n this.session = resolveSession();\n this.consent = new GuruluConsent({\n workspaceId: opts.workspaceKey,\n apiUrl: opts.apiUrl ?? DEFAULT_API_URL,\n anonymousId: this.anonymousId,\n autoBanner: opts.consent_mode === 'banner_required',\n });\n // Fire consent banner-config (best-effort, async).\n void this.consent.init();\n\n const transport: TransportConfig = {\n endpoint: opts.endpoint ?? DEFAULT_ENDPOINT,\n workspaceKey: opts.workspaceKey,\n sdkVersion: SDK_VERSION,\n };\n this.queue = new EventQueue({\n transport,\n flushIntervalMs: opts.flush_interval_ms ?? 5000,\n maxQueueSize: opts.max_queue_size ?? 50,\n ...(opts.debug ? { debug: true } : {}),\n });\n\n // First-touch UTM preserve.\n const ctx = parseUrlContext(window.location.href, document.referrer);\n if (Object.keys(ctx.utm).length > 0 || Object.keys(ctx.click_id).length > 0) {\n const touch = {\n utm: ctx.utm,\n click_id: ctx.click_id,\n referrer: document.referrer,\n landing_url: window.location.href,\n captured_at: Date.now(),\n };\n preserveFirstSource(touch);\n }\n\n // Wire autocapture.\n this.autocaptureHandle = startAutocapture(opts.autocapture, {\n pageView: (url, title, referrer) =>\n this.queueEvent('page_view', 'interaction', { url, title, referrer }),\n click: (payload) => {\n const ev = payload.custom_event ?? 'element_clicked';\n const props: Record<string, unknown> = {\n element_tag: payload.element_tag,\n ...(payload.element_id ? { element_id: payload.element_id } : {}),\n ...(payload.element_class ? { element_class: payload.element_class } : {}),\n ...(payload.element_text ? { element_text: payload.element_text } : {}),\n ...(payload.href ? { href: payload.href } : {}),\n ...(payload.is_outbound ? { is_outbound: true } : {}),\n ...(payload.is_download ? { is_download: true } : {}),\n ...(payload.custom_props ?? {}),\n };\n this.queueEvent(ev, 'interaction', props);\n },\n formStarted: (p) =>\n this.queueEvent('form_started', 'interaction', p as unknown as Record<string, unknown>),\n formSubmitted: (p) =>\n this.queueEvent('form_submitted', 'interaction', p as unknown as Record<string, unknown>),\n scrollDepth: (p) =>\n this.queueEvent('scroll_depth', 'interaction', p as unknown as Record<string, unknown>),\n webVital: (p) =>\n this.queueEvent('web_vital', 'interaction', p as unknown as Record<string, unknown>),\n });\n\n this.initialized = true;\n }\n\n /** Manual `track()` — typed via codegen (`@gurulu/web/generated`). */\n track(eventKey: string, properties?: Record<string, unknown>): void {\n this.queueEvent(eventKey, 'interaction', properties);\n }\n\n /** Manual `page()` — SPA route helper for non-history flows. */\n page(override?: PageOverride): void {\n if (!this.initialized || typeof window === 'undefined') return;\n const url = override?.url ?? window.location.href;\n const title = override?.title ?? document.title;\n const referrer = override?.referrer ?? document.referrer;\n this.queueEvent('page_view', 'interaction', { url, title, referrer });\n }\n\n /**\n * Identify — anonymous → person merge.\n * Stores person_id locally + best-effort POST /v1/ingest/identify.\n */\n async identify(personId: string, traits?: Record<string, unknown>): Promise<void> {\n if (!this.initialized || isOptedOut()) return;\n setPersonId(personId);\n if (!this.opts) return;\n try {\n await sendIdentify(\n {\n endpoint: this.opts.endpoint ?? DEFAULT_ENDPOINT,\n workspaceKey: this.opts.workspaceKey,\n sdkVersion: SDK_VERSION,\n },\n {\n anonymous_id: this.anonymousId,\n external_user_id: personId,\n ...(traits?.email ? { email: traits.email } : {}),\n ...(traits?.phone ? { phone: traits.phone } : {}),\n ...(traits ? { traits } : {}),\n },\n );\n } catch (err) {\n if (this.opts?.debug && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn('[gurulu] identify failed', err);\n }\n }\n }\n\n /** Logout — wipes person_id, rotates anonymous_id, new session. */\n reset(): void {\n this.anonymousId = clearIdentity();\n if (typeof window !== 'undefined') {\n try {\n window.localStorage.removeItem('gurulu_sid');\n window.localStorage.removeItem('gurulu_session_started_at');\n window.localStorage.removeItem('gurulu_last_event_at');\n window.localStorage.removeItem('gurulu_first_source');\n } catch {\n /* noop */\n }\n }\n this.session = resolveSession();\n }\n\n /** Manual flush — caller may await. */\n async flush(): Promise<void> {\n await this.queue?.flush();\n }\n\n /** Tracking opt-out — all subsequent track/identify no-op. */\n optOut(): void {\n setOptOut(true);\n }\n\n /** Re-enable tracking. */\n optIn(): void {\n setOptOut(false);\n }\n\n // ───────────────────────── internal ──────────────────────────────\n\n private queueEvent(\n eventKey: string,\n eventType: EventType,\n properties?: Record<string, unknown>,\n ): void {\n if (!this.initialized || !this.queue || isOptedOut()) return;\n if (!this.consentAllowsAnalytics() && this.opts?.consent_mode === 'banner_required') {\n // Drop pre-consent in banner_required mode; SDK queue still captures\n // necessary events post-consent.\n return;\n }\n this.session = resolveSession();\n const event: OutgoingEvent = {\n anonymous_id: this.anonymousId ?? 'anon_unknown',\n event_id: newEventId(),\n event_key: eventKey,\n event_type: eventType,\n occurred_at: nowIso(),\n producer: 'script',\n producer_version: SDK_VERSION,\n ...(this.session ? { session_id: this.session.session_id } : {}),\n };\n const pid = getPersonId();\n if (pid) event.person_id = pid;\n if (properties && Object.keys(properties).length > 0) event.properties = properties;\n const ctx = this.buildContext();\n if (ctx) event.context = ctx;\n const consent = this.snapshotConsent();\n if (consent) event.consent_state = consent;\n // Opt-in test_mode flag — only attach when true so prod payloads stay lean.\n if (this.testMode) event.test_mode = true;\n this.queue.enqueue(event);\n }\n\n private snapshotConsent(): ConsentCategoriesState | undefined {\n const snap = this.consent?.getState();\n if (!snap) return undefined;\n return {\n necessary: snap.categories.necessary,\n analytics: snap.categories.analytics,\n marketing: snap.categories.marketing,\n functional: snap.categories.functional,\n personalization: snap.categories.personalization,\n };\n }\n\n private consentAllowsAnalytics(): boolean {\n const snap = this.consent?.getState();\n if (!snap) return false;\n return snap.categories.analytics === true;\n }\n\n private buildContext(): EventContext | undefined {\n if (typeof window === 'undefined') return undefined;\n const ctx: EventContext = {\n url: window.location.href,\n referrer: document.referrer,\n page_title: document.title,\n user_agent: navigator.userAgent,\n domain: window.location.hostname,\n };\n const first = getFirstSource();\n if (first?.utm && Object.keys(first.utm).length > 0) ctx.utm = first.utm;\n if (first?.click_id && Object.keys(first.click_id).length > 0) ctx.click_id = first.click_id;\n return ctx;\n }\n}\n",
|
|
18
18
|
"// @gurulu/web — Modül 11 browser SDK. PUBLIC NPM + CDN `t.js` (apps/cdn).\n//\n// Spec: docs/specs/07-sdk-web.md\n// Install (1-line script):\n// <script src=\"https://cdn.gurulu.io/t.js\" data-workspace=\"pk_xxx\" defer></script>\n//\n// npm:\n// import gurulu, { GuruluEvents } from '@gurulu/web';\n// gurulu.init({ workspaceKey: 'pk_xxx' });\n// gurulu.track('button_clicked', { ... });\n//\n// Sprint F1.3: core + queue + transport + identity + session + autocapture\n// (page/click/form/scroll/web-vitals) + script-tag bootstrap. Zero runtime\n// dep (M11 K28). SSR-safe.\n\nexport const VERSION = '0.1.0';\n\nexport {\n type BannerConfig,\n type BannerConfigResponse,\n type ConsentCategories,\n type ConsentSnapshot,\n GuruluConsent,\n type GuruluConsentOptions,\n} from './consent.ts';\n\nexport { Gurulu, type PageOverride } from './core.ts';\nexport {\n ConsentBlockedError,\n InitError,\n NetworkError,\n OptedOutError,\n QueueFullError,\n SDKError,\n} from './errors.ts';\nexport type {\n AutocaptureConfig,\n ClickIdContext,\n ConsentCategoriesState,\n EventContext,\n EventProducer,\n EventType,\n InitOptions,\n OutgoingEvent,\n UTMContext,\n} from './types.ts';\n\nimport { Gurulu } from './core.ts';\nimport type { InitOptions } from './types.ts';\n\n/** Singleton — matches `window.gurulu` global behaviour. */\nconst singleton = new Gurulu();\n\nexport interface GuruluPublicSDK {\n init: (opts: InitOptions) => void;\n track: (eventKey: string, properties?: Record<string, unknown>) => void;\n identify: (personId: string, traits?: Record<string, unknown>) => Promise<void>;\n page: (override?: Parameters<Gurulu['page']>[0]) => void;\n reset: () => void;\n flush: () => Promise<void>;\n optOut: () => void;\n optIn: () => void;\n consent: Gurulu['consent'];\n VERSION: string;\n}\n\n/**\n * Factory — `createGurulu()` returns an isolated instance (multi-tenant SDK or\n * test harness). For 99% of consumers, prefer the default singleton via the\n * default export below.\n */\nexport function createGurulu(): Gurulu {\n return new Gurulu();\n}\n\nconst publicSdk = {\n init: (opts: InitOptions) => singleton.init(opts),\n track: (eventKey: string, properties?: Record<string, unknown>) =>\n singleton.track(eventKey, properties),\n identify: (personId: string, traits?: Record<string, unknown>) =>\n singleton.identify(personId, traits),\n page: (override?: Parameters<Gurulu['page']>[0]) => singleton.page(override),\n reset: () => singleton.reset(),\n flush: () => singleton.flush(),\n optOut: () => singleton.optOut(),\n optIn: () => singleton.optIn(),\n get consent() {\n return singleton.consent;\n },\n VERSION,\n};\n\n/**\n * Script-tag auto-init — reads `<script data-workspace=\"pk_xxx\" ...>` and\n * runs `init()` automatically. No-op in non-browser environments and when\n * the script is loaded via ESM import (no `data-workspace` attr).\n */\nexport function autoBootstrap(): void {\n if (typeof document === 'undefined') return;\n const script = document.currentScript as HTMLScriptElement | null;\n const fallback = !script\n ? (document.querySelector('script[data-workspace]') as HTMLScriptElement | null)\n : script;\n if (!fallback) return;\n const workspaceKey = fallback.getAttribute('data-workspace');\n if (!workspaceKey) return;\n const opts: InitOptions = { workspaceKey };\n const endpoint = fallback.getAttribute('data-endpoint');\n if (endpoint) opts.endpoint = endpoint;\n const apiUrl = fallback.getAttribute('data-api-url');\n if (apiUrl) opts.apiUrl = apiUrl;\n const consentMode = fallback.getAttribute('data-consent');\n if (consentMode === 'banner_required' || consentMode === 'allow_by_default') {\n opts.consent_mode = consentMode;\n }\n const allowlist = fallback.getAttribute('data-allowlist');\n if (allowlist) opts.cross_domain_allowlist = allowlist.split(',').map((s) => s.trim());\n publicSdk.init(opts);\n if (typeof window !== 'undefined') {\n (window as unknown as { gurulu: typeof publicSdk }).gurulu = publicSdk;\n }\n}\n\n// Side-effect: auto-bootstrap when running as the CDN `t.js` build target.\n// In ESM consumer mode (`import gurulu from '@gurulu/web'`), `currentScript`\n// is null + no `data-workspace` attribute, so this is a safe no-op.\nautoBootstrap();\n\nexport default publicSdk;\n"
|
|
19
19
|
],
|
|
20
|
-
"mappings": "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",
|
|
21
|
-
"debugId": "
|
|
20
|
+
"mappings": "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",
|
|
21
|
+
"debugId": "399296B48A9012C664756E2164756E21",
|
|
22
22
|
"names": []
|
|
23
23
|
}
|
package/dist/types.d.ts
CHANGED
|
@@ -43,6 +43,8 @@ export interface OutgoingEvent {
|
|
|
43
43
|
properties?: Record<string, unknown>;
|
|
44
44
|
context?: EventContext;
|
|
45
45
|
consent_state?: ConsentCategoriesState;
|
|
46
|
+
/** Opt-in test event flag — playground toolbar sets true, omitted = prod. */
|
|
47
|
+
test_mode?: boolean;
|
|
46
48
|
}
|
|
47
49
|
/** Autocapture togglemap — defaults to "all on" except opt-in fields. */
|
|
48
50
|
export interface AutocaptureConfig {
|
|
@@ -75,6 +77,13 @@ export interface InitOptions {
|
|
|
75
77
|
cross_domain_allowlist?: string[];
|
|
76
78
|
/** Debug logger (no-op by default). */
|
|
77
79
|
debug?: boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Opt-in test event mode — every emitted event carries `test_mode: true`.
|
|
82
|
+
* Pipeline preserves the flag in `source_context.test_mode` so dashboard
|
|
83
|
+
* live-feed can filter via `?test_mode=true` and isolate playground traffic
|
|
84
|
+
* from production. Default false.
|
|
85
|
+
*/
|
|
86
|
+
test_mode?: boolean;
|
|
78
87
|
}
|
|
79
88
|
export interface IdentityState {
|
|
80
89
|
anonymous_id: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE7D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,GAAG,KAAK,CAAC;AAElF,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,SAAS,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,aAAa,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,aAAa,CAAC,EAAE,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE7D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,GAAG,KAAK,CAAC;AAElF,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,SAAS,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,aAAa,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,6EAA6E;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,iBAAiB,GAAG,KAAK,CAAC;IACxC,wFAAwF;IACxF,YAAY,CAAC,EAAE,iBAAiB,GAAG,kBAAkB,CAAC;IACtD,sCAAsC;IACtC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,uCAAuC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB"}
|