@qurvo/sdk-browser 0.0.14 → 0.0.15
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/index.d.ts +121 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +138 -2
- package/dist/index.js.map +1 -1
- package/dist/index.test.d.ts +2 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +260 -0
- package/dist/index.test.js.map +1 -0
- package/dist/qurvo.iife.js +1 -1
- package/dist/qurvo.iife.js.map +4 -4
- package/dist/utm.d.ts +15 -0
- package/dist/utm.d.ts.map +1 -0
- package/dist/utm.js +45 -0
- package/dist/utm.js.map +1 -0
- package/dist/utm.test.d.ts +2 -0
- package/dist/utm.test.d.ts.map +1 -0
- package/dist/utm.test.js +59 -0
- package/dist/utm.test.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const vitest_1 = require("vitest");
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// Minimal browser stubs — we cannot import index.ts at module scope because
|
|
39
|
+
// it instantiates a singleton that touches `window`, `localStorage`, etc.
|
|
40
|
+
// We build the stubs first, then dynamic-import the module per test.
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
function createStorageStub() {
|
|
43
|
+
const store = new Map();
|
|
44
|
+
return {
|
|
45
|
+
getItem: (key) => store.get(key) ?? null,
|
|
46
|
+
setItem: (key, value) => { store.set(key, value); },
|
|
47
|
+
removeItem: (key) => { store.delete(key); },
|
|
48
|
+
clear: () => store.clear(),
|
|
49
|
+
get length() { return store.size; },
|
|
50
|
+
key: (i) => [...store.keys()][i] ?? null,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
let localStorageStub;
|
|
54
|
+
let sessionStorageStub;
|
|
55
|
+
let enqueueSpy;
|
|
56
|
+
let shutdownSpy;
|
|
57
|
+
let startSpy;
|
|
58
|
+
// Track all enqueued payloads for assertions
|
|
59
|
+
let enqueuedPayloads;
|
|
60
|
+
(0, vitest_1.beforeEach)(() => {
|
|
61
|
+
localStorageStub = createStorageStub();
|
|
62
|
+
sessionStorageStub = createStorageStub();
|
|
63
|
+
enqueueSpy = vitest_1.vi.fn();
|
|
64
|
+
shutdownSpy = vitest_1.vi.fn();
|
|
65
|
+
startSpy = vitest_1.vi.fn();
|
|
66
|
+
enqueuedPayloads = [];
|
|
67
|
+
// Capture enqueued payloads
|
|
68
|
+
enqueueSpy.mockImplementation((payload) => {
|
|
69
|
+
enqueuedPayloads.push(payload);
|
|
70
|
+
});
|
|
71
|
+
// Use vi.stubGlobal to safely override read-only browser globals
|
|
72
|
+
vitest_1.vi.stubGlobal('localStorage', localStorageStub);
|
|
73
|
+
vitest_1.vi.stubGlobal('sessionStorage', sessionStorageStub);
|
|
74
|
+
vitest_1.vi.stubGlobal('window', {
|
|
75
|
+
location: { href: 'http://test.local/', pathname: '/', search: '' },
|
|
76
|
+
screen: { width: 1920, height: 1080 },
|
|
77
|
+
addEventListener: vitest_1.vi.fn(),
|
|
78
|
+
removeEventListener: vitest_1.vi.fn(),
|
|
79
|
+
});
|
|
80
|
+
vitest_1.vi.stubGlobal('document', {
|
|
81
|
+
referrer: '',
|
|
82
|
+
title: 'Test',
|
|
83
|
+
visibilityState: 'visible',
|
|
84
|
+
addEventListener: vitest_1.vi.fn(),
|
|
85
|
+
removeEventListener: vitest_1.vi.fn(),
|
|
86
|
+
});
|
|
87
|
+
vitest_1.vi.stubGlobal('navigator', { language: 'en-US' });
|
|
88
|
+
vitest_1.vi.stubGlobal('Intl', {
|
|
89
|
+
DateTimeFormat: () => ({ resolvedOptions: () => ({ timeZone: 'UTC' }) }),
|
|
90
|
+
});
|
|
91
|
+
vitest_1.vi.stubGlobal('self', globalThis.window);
|
|
92
|
+
vitest_1.vi.stubGlobal('history', {
|
|
93
|
+
pushState: vitest_1.vi.fn(),
|
|
94
|
+
replaceState: vitest_1.vi.fn(),
|
|
95
|
+
});
|
|
96
|
+
vitest_1.vi.stubGlobal('Blob', class Blob {
|
|
97
|
+
parts;
|
|
98
|
+
options;
|
|
99
|
+
constructor(parts, options) {
|
|
100
|
+
this.parts = parts;
|
|
101
|
+
this.options = options;
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
vitest_1.vi.stubGlobal('crypto', {
|
|
105
|
+
randomUUID: () => `${Math.random().toString(36).slice(2)}-${Date.now()}`,
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
(0, vitest_1.afterEach)(() => {
|
|
109
|
+
vitest_1.vi.restoreAllMocks();
|
|
110
|
+
vitest_1.vi.unstubAllGlobals();
|
|
111
|
+
vitest_1.vi.resetModules();
|
|
112
|
+
});
|
|
113
|
+
// Helper: import fresh module (avoids singleton caching across tests)
|
|
114
|
+
async function loadSdk() {
|
|
115
|
+
// Mock sdk-core so we don't need real fetch/gzip
|
|
116
|
+
vitest_1.vi.doMock('@qurvo/sdk-core', () => ({
|
|
117
|
+
EventQueue: vitest_1.vi.fn().mockImplementation(() => ({
|
|
118
|
+
start: startSpy,
|
|
119
|
+
enqueue: enqueueSpy,
|
|
120
|
+
shutdown: shutdownSpy,
|
|
121
|
+
flushForUnload: vitest_1.vi.fn(),
|
|
122
|
+
get size() { return 0; },
|
|
123
|
+
})),
|
|
124
|
+
FetchTransport: vitest_1.vi.fn(),
|
|
125
|
+
}));
|
|
126
|
+
const mod = await Promise.resolve().then(() => __importStar(require('./index')));
|
|
127
|
+
return mod.qurvo;
|
|
128
|
+
}
|
|
129
|
+
// ───────────────────────────────────────────────────────────────────
|
|
130
|
+
// 1. init() — account switch resets anonymous_id
|
|
131
|
+
// ───────────────────────────────────────────────────────────────────
|
|
132
|
+
(0, vitest_1.describe)('init() account switch', () => {
|
|
133
|
+
(0, vitest_1.it)('resets anonymous_id when re-init with different distinctId', async () => {
|
|
134
|
+
const qurvo = await loadSdk();
|
|
135
|
+
qurvo.init({ apiKey: 'sk_test', distinctId: 'user-A', autocapture: false });
|
|
136
|
+
// Force an anonymous_id to be stored (trigger getAnonymousId via track)
|
|
137
|
+
qurvo.track('test_event');
|
|
138
|
+
const anonIdA = localStorageStub.getItem('qurvo_anonymous_id');
|
|
139
|
+
(0, vitest_1.expect)(anonIdA).toBeTruthy();
|
|
140
|
+
// Re-init with a different user
|
|
141
|
+
qurvo.init({ apiKey: 'sk_test', distinctId: 'user-B', autocapture: false });
|
|
142
|
+
// Trigger getAnonymousId via track (page() may be debounced for same URL)
|
|
143
|
+
qurvo.track('test_event_2');
|
|
144
|
+
// anonymous_id should have been cleared and regenerated
|
|
145
|
+
const anonIdB = localStorageStub.getItem('qurvo_anonymous_id');
|
|
146
|
+
(0, vitest_1.expect)(anonIdB).toBeTruthy();
|
|
147
|
+
(0, vitest_1.expect)(anonIdB).not.toBe(anonIdA);
|
|
148
|
+
});
|
|
149
|
+
(0, vitest_1.it)('cleans up stale queue key from previous user', async () => {
|
|
150
|
+
const qurvo = await loadSdk();
|
|
151
|
+
// Simulate existing queue data for user-A
|
|
152
|
+
localStorageStub.setItem('qurvo_queue:user-A', JSON.stringify([{ event: 'old' }]));
|
|
153
|
+
qurvo.init({ apiKey: 'sk_test', distinctId: 'user-A', autocapture: false });
|
|
154
|
+
// Re-init with different user
|
|
155
|
+
qurvo.init({ apiKey: 'sk_test', distinctId: 'user-B', autocapture: false });
|
|
156
|
+
// Previous queue key should be removed
|
|
157
|
+
(0, vitest_1.expect)(localStorageStub.getItem('qurvo_queue:user-A')).toBeNull();
|
|
158
|
+
});
|
|
159
|
+
(0, vitest_1.it)('does not reset when re-init with same distinctId', async () => {
|
|
160
|
+
const qurvo = await loadSdk();
|
|
161
|
+
qurvo.init({ apiKey: 'sk_test', distinctId: 'user-A', autocapture: false });
|
|
162
|
+
qurvo.track('test_event');
|
|
163
|
+
const anonIdA = localStorageStub.getItem('qurvo_anonymous_id');
|
|
164
|
+
// Re-init with same user — should be no-op
|
|
165
|
+
qurvo.init({ apiKey: 'sk_test', distinctId: 'user-A', autocapture: false });
|
|
166
|
+
// anonymous_id should stay the same
|
|
167
|
+
const anonIdAfter = localStorageStub.getItem('qurvo_anonymous_id');
|
|
168
|
+
(0, vitest_1.expect)(anonIdAfter).toBe(anonIdA);
|
|
169
|
+
});
|
|
170
|
+
(0, vitest_1.it)('stores new user_id after switch', async () => {
|
|
171
|
+
const qurvo = await loadSdk();
|
|
172
|
+
qurvo.init({ apiKey: 'sk_test', distinctId: 'user-A', autocapture: false });
|
|
173
|
+
(0, vitest_1.expect)(localStorageStub.getItem('qurvo_user_id')).toBe('user-A');
|
|
174
|
+
qurvo.init({ apiKey: 'sk_test', distinctId: 'user-B', autocapture: false });
|
|
175
|
+
(0, vitest_1.expect)(localStorageStub.getItem('qurvo_user_id')).toBe('user-B');
|
|
176
|
+
});
|
|
177
|
+
(0, vitest_1.it)('clears session_id on account switch', async () => {
|
|
178
|
+
const qurvo = await loadSdk();
|
|
179
|
+
qurvo.init({ apiKey: 'sk_test', distinctId: 'user-A', autocapture: false });
|
|
180
|
+
qurvo.track('test_event'); // triggers getSessionId
|
|
181
|
+
(0, vitest_1.expect)(sessionStorageStub.getItem('qurvo_session_id')).toBeTruthy();
|
|
182
|
+
const sessionA = sessionStorageStub.getItem('qurvo_session_id');
|
|
183
|
+
qurvo.init({ apiKey: 'sk_test', distinctId: 'user-B', autocapture: false });
|
|
184
|
+
qurvo.track('test_event'); // triggers getSessionId again
|
|
185
|
+
const sessionB = sessionStorageStub.getItem('qurvo_session_id');
|
|
186
|
+
// Session should have been reset and regenerated
|
|
187
|
+
(0, vitest_1.expect)(sessionB).toBeTruthy();
|
|
188
|
+
(0, vitest_1.expect)(sessionB).not.toBe(sessionA);
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
// ───────────────────────────────────────────────────────────────────
|
|
192
|
+
// 2. identify() — auto-reset on re-identify with different user
|
|
193
|
+
// ───────────────────────────────────────────────────────────────────
|
|
194
|
+
(0, vitest_1.describe)('identify() auto-reset', () => {
|
|
195
|
+
(0, vitest_1.it)('auto-resets when re-identifying as different user', async () => {
|
|
196
|
+
const qurvo = await loadSdk();
|
|
197
|
+
qurvo.init({ apiKey: 'sk_test', autocapture: false });
|
|
198
|
+
qurvo.identify('user-A');
|
|
199
|
+
// Capture the anonymous_id after first identify
|
|
200
|
+
const anonIdA = localStorageStub.getItem('qurvo_anonymous_id');
|
|
201
|
+
(0, vitest_1.expect)(anonIdA).toBeTruthy();
|
|
202
|
+
// Re-identify as different user — should auto-reset
|
|
203
|
+
qurvo.identify('user-B');
|
|
204
|
+
// anonymous_id should be regenerated (reset clears it, then getAnonymousId generates new)
|
|
205
|
+
const anonIdB = localStorageStub.getItem('qurvo_anonymous_id');
|
|
206
|
+
(0, vitest_1.expect)(anonIdB).toBeTruthy();
|
|
207
|
+
(0, vitest_1.expect)(anonIdB).not.toBe(anonIdA);
|
|
208
|
+
});
|
|
209
|
+
(0, vitest_1.it)('sends $identify event with correct distinct_id after auto-reset', async () => {
|
|
210
|
+
const qurvo = await loadSdk();
|
|
211
|
+
qurvo.init({ apiKey: 'sk_test', autocapture: false });
|
|
212
|
+
qurvo.identify('user-A');
|
|
213
|
+
enqueuedPayloads = [];
|
|
214
|
+
enqueueSpy.mockClear();
|
|
215
|
+
qurvo.identify('user-B');
|
|
216
|
+
// Should have enqueued a $identify event for user-B
|
|
217
|
+
(0, vitest_1.expect)(enqueueSpy).toHaveBeenCalledTimes(1);
|
|
218
|
+
const payload = enqueuedPayloads[0];
|
|
219
|
+
(0, vitest_1.expect)(payload.event).toBe('$identify');
|
|
220
|
+
(0, vitest_1.expect)(payload.distinct_id).toBe('user-B');
|
|
221
|
+
});
|
|
222
|
+
(0, vitest_1.it)('does not reset when re-identifying as same user', async () => {
|
|
223
|
+
const qurvo = await loadSdk();
|
|
224
|
+
qurvo.init({ apiKey: 'sk_test', autocapture: false });
|
|
225
|
+
qurvo.identify('user-A');
|
|
226
|
+
const anonIdA = localStorageStub.getItem('qurvo_anonymous_id');
|
|
227
|
+
// Re-identify as same user — should NOT reset
|
|
228
|
+
qurvo.identify('user-A');
|
|
229
|
+
const anonIdAfter = localStorageStub.getItem('qurvo_anonymous_id');
|
|
230
|
+
(0, vitest_1.expect)(anonIdAfter).toBe(anonIdA);
|
|
231
|
+
});
|
|
232
|
+
(0, vitest_1.it)('clears stored user_id and session during auto-reset', async () => {
|
|
233
|
+
const qurvo = await loadSdk();
|
|
234
|
+
qurvo.init({ apiKey: 'sk_test', autocapture: false });
|
|
235
|
+
qurvo.identify('user-A');
|
|
236
|
+
(0, vitest_1.expect)(localStorageStub.getItem('qurvo_user_id')).toBe('user-A');
|
|
237
|
+
qurvo.identify('user-B');
|
|
238
|
+
// After auto-reset + re-identify, user_id should be user-B
|
|
239
|
+
(0, vitest_1.expect)(localStorageStub.getItem('qurvo_user_id')).toBe('user-B');
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
// ───────────────────────────────────────────────────────────────────
|
|
243
|
+
// 3. reset() — basic behavior
|
|
244
|
+
// ───────────────────────────────────────────────────────────────────
|
|
245
|
+
(0, vitest_1.describe)('reset()', () => {
|
|
246
|
+
(0, vitest_1.it)('clears userId, anonymous_id, and session_id', async () => {
|
|
247
|
+
const qurvo = await loadSdk();
|
|
248
|
+
qurvo.init({ apiKey: 'sk_test', autocapture: false });
|
|
249
|
+
qurvo.identify('user-A');
|
|
250
|
+
qurvo.track('event'); // trigger anon id + session id creation
|
|
251
|
+
(0, vitest_1.expect)(localStorageStub.getItem('qurvo_user_id')).toBe('user-A');
|
|
252
|
+
(0, vitest_1.expect)(localStorageStub.getItem('qurvo_anonymous_id')).toBeTruthy();
|
|
253
|
+
(0, vitest_1.expect)(sessionStorageStub.getItem('qurvo_session_id')).toBeTruthy();
|
|
254
|
+
qurvo.reset();
|
|
255
|
+
(0, vitest_1.expect)(localStorageStub.getItem('qurvo_user_id')).toBeNull();
|
|
256
|
+
(0, vitest_1.expect)(localStorageStub.getItem('qurvo_anonymous_id')).toBeNull();
|
|
257
|
+
(0, vitest_1.expect)(sessionStorageStub.getItem('qurvo_session_id')).toBeNull();
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
package/dist/qurvo.iife.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(()=>{var se=Object.create;var gt=Object.defineProperty;var ae=Object.getOwnPropertyDescriptor;var oe=Object.getOwnPropertyNames;var ue=Object.getPrototypeOf,he=Object.prototype.hasOwnProperty;var le=(e,t,r)=>t in e?gt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var rt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var fe=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of oe(t))!he.call(e,i)&&i!==r&>(e,i,{get:()=>t[i],enumerable:!(n=ae(t,i))||n.enumerable});return e};var ce=(e,t,r)=>(r=e!=null?se(ue(e)):{},fe(t||!e||!e.__esModule?gt(r,"default",{value:e,enumerable:!0}):r,e));var c=(e,t,r)=>le(e,typeof t!="symbol"?t+"":t,r);var it=rt(J=>{"use strict";Object.defineProperty(J,"__esModule",{value:!0});J.NonRetryableError=J.QuotaExceededError=void 0;var Et=class extends Error{constructor(){super("Monthly event limit exceeded"),this.name="QuotaExceededError"}};J.QuotaExceededError=Et;var It=class extends Error{constructor(r,n){super(n);c(this,"statusCode");this.statusCode=r,this.name="NonRetryableError"}};J.NonRetryableError=It});var Wt=rt(st=>{"use strict";Object.defineProperty(st,"__esModule",{value:!0});st.EventQueue=void 0;var Vt=it(),At=class{constructor(t,r,n,i=5e3,s=20,o=1e3,l=3e4,u,h){c(this,"transport");c(this,"endpoint");c(this,"apiKey");c(this,"flushInterval");c(this,"flushSize");c(this,"maxQueueSize");c(this,"sendTimeoutMs");c(this,"logger");c(this,"persistence");c(this,"queue",[]);c(this,"timer",null);c(this,"flushing",!1);c(this,"inFlightBatch",null);c(this,"failureCount",0);c(this,"retryAfter",0);c(this,"maxBackoffMs",3e4);if(this.transport=t,this.endpoint=r,this.apiKey=n,this.flushInterval=i,this.flushSize=s,this.maxQueueSize=o,this.sendTimeoutMs=l,this.logger=u,this.persistence=h,this.persistence)try{let a=this.persistence.load();a.length>0&&(this.queue.push(...a),this.logger?.(`restored ${a.length} events from persistence`))}catch{this.logger?.("failed to restore persisted events")}}enqueue(t){this.queue.length>=this.maxQueueSize&&(this.queue.shift(),this.logger?.(`queue full (${this.maxQueueSize}), oldest event dropped`)),this.queue.push(t),this.persist(),this.queue.length>=this.flushSize&&this.flush()}start(){this.timer||(this.timer=setInterval(()=>this.flush(),this.flushInterval))}stop(){this.timer&&(clearInterval(this.timer),this.timer=null)}async flush(){if(!(this.flushing||this.queue.length===0)&&!(Date.now()<this.retryAfter)){this.flushing=!0,this.inFlightBatch=this.queue.splice(0,this.flushSize);try{let t=new AbortController,r=setTimeout(()=>t.abort(),this.sendTimeoutMs);try{if(await this.transport.send(this.endpoint,this.apiKey,{events:this.inFlightBatch,sent_at:new Date().toISOString()},{signal:t.signal}))this.failureCount=0,this.retryAfter=0;else{this.queue.unshift(...this.inFlightBatch),this.scheduleBackoff();let i=Math.min(1e3*Math.pow(2,this.failureCount-1),this.maxBackoffMs);this.logger?.(`flush failed, ${this.inFlightBatch.length} events re-queued, retry in ${i}ms`)}}finally{clearTimeout(r)}}catch(t){t instanceof Vt.QuotaExceededError?(this.queue.length=0,this.inFlightBatch=null,this.stop(),this.logger?.("quota exceeded, events dropped and queue stopped")):t instanceof Vt.NonRetryableError?this.logger?.(`non-retryable error (${t.statusCode}), ${this.inFlightBatch.length} events dropped`,t):(this.queue.unshift(...this.inFlightBatch),this.scheduleBackoff(),this.logger?.(`flush error, ${this.inFlightBatch.length} events re-queued`,t))}finally{this.inFlightBatch=null,this.flushing=!1,this.persist()}}}scheduleBackoff(){this.failureCount++;let t=Math.min(1e3*Math.pow(2,this.failureCount-1),this.maxBackoffMs);this.retryAfter=Date.now()+t}async flushAll(){for(this.retryAfter=0,this.failureCount=0;this.queue.length>0;){let t=this.queue.length;if(await this.flush(),this.queue.length>=t)break}}async shutdown(t=3e4){this.stop(),this.size!==0&&await Promise.race([this.flushAll(),new Promise(r=>setTimeout(r,t))])}flushForUnload(){let t=this.flushing?this.queue.splice(0):[...this.inFlightBatch||[],...this.queue.splice(0)];this.flushing||(this.inFlightBatch=null),this.persist(),t.length!==0&&this.transport.send(this.endpoint,this.apiKey,{events:t,sent_at:new Date().toISOString()},{keepalive:!0}).catch(()=>{})}get size(){return this.queue.length+(this.inFlightBatch?.length||0)}persist(){try{this.persistence?.save(this.queue)}catch{}}};st.EventQueue=At});var _t=rt(at=>{"use strict";Object.defineProperty(at,"__esModule",{value:!0});at.FetchTransport=void 0;var Xt=it(),Mt=class{constructor(t){c(this,"compress");this.compress=t}async send(t,r,n,i){let s=JSON.stringify(n),o={"x-api-key":r},l;this.compress&&!i?.keepalive?(l=await this.compress(s),o["Content-Type"]="text/plain",o["Content-Encoding"]="gzip"):(l=s,o["Content-Type"]="application/json");let u=await fetch(t,{method:"POST",headers:o,body:l,keepalive:i?.keepalive,signal:i?.signal});if(u.ok||u.status===202)return!0;if(u.status===429&&(await u.json().catch(()=>({})))?.quota_limited)throw new Xt.QuotaExceededError;let h=await u.text().catch(()=>"");throw u.status>=400&&u.status<500?new Xt.NonRetryableError(u.status,`HTTP ${u.status}: ${h}`):new Error(`HTTP ${u.status}: ${h}`)}};at.FetchTransport=Mt});var ee=rt(k=>{"use strict";Object.defineProperty(k,"__esModule",{value:!0});k.FetchTransport=k.EventQueue=k.NonRetryableError=k.QuotaExceededError=void 0;var te=it();Object.defineProperty(k,"QuotaExceededError",{enumerable:!0,get:function(){return te.QuotaExceededError}});Object.defineProperty(k,"NonRetryableError",{enumerable:!0,get:function(){return te.NonRetryableError}});var Ie=Wt();Object.defineProperty(k,"EventQueue",{enumerable:!0,get:function(){return Ie.EventQueue}});var Ae=_t();Object.defineProperty(k,"FetchTransport",{enumerable:!0,get:function(){return Ae.FetchTransport}})});var z=Uint8Array,I=Uint16Array,St=Int32Array,zt=new z([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),qt=new z([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),kt=new z([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Nt=function(e,t){for(var r=new I(31),n=0;n<31;++n)r[n]=t+=1<<e[n-1];for(var i=new St(r[30]),n=1;n<30;++n)for(var s=r[n];s<r[n+1];++s)i[s]=s-r[n]<<5|n;return{b:r,r:i}},Kt=Nt(zt,2),ve=Kt.b,mt=Kt.r;ve[28]=258,mt[258]=28;var Lt=Nt(qt,0),Ce=Lt.b,Rt=Lt.r,dt=new I(32768);for(v=0;v<32768;++v)$=(v&43690)>>1|(v&21845)<<1,$=($&52428)>>2|($&13107)<<2,$=($&61680)>>4|($&3855)<<4,dt[v]=(($&65280)>>8|($&255)<<8)>>1;var $,v,tt=(function(e,t,r){for(var n=e.length,i=0,s=new I(t);i<n;++i)e[i]&&++s[e[i]-1];var o=new I(t);for(i=1;i<t;++i)o[i]=o[i-1]+s[i-1]<<1;var l;if(r){l=new I(1<<t);var u=15-t;for(i=0;i<n;++i)if(e[i])for(var h=i<<4|e[i],a=t-e[i],g=o[e[i]-1]++<<a,w=g|(1<<a)-1;g<=w;++g)l[dt[g]>>u]=h}else for(l=new I(n),i=0;i<n;++i)e[i]&&(l[i]=dt[o[e[i]-1]++]>>15-e[i]);return l}),Z=new z(288);for(v=0;v<144;++v)Z[v]=8;var v;for(v=144;v<256;++v)Z[v]=9;var v;for(v=256;v<280;++v)Z[v]=7;var v;for(v=280;v<288;++v)Z[v]=8;var v,nt=new z(32);for(v=0;v<32;++v)nt[v]=5;var v,pe=tt(Z,9,0);var ge=tt(nt,5,0);var Zt=function(e){return(e+7)/8|0},Gt=function(e,t,r){return(t==null||t<0)&&(t=0),(r==null||r>e.length)&&(r=e.length),new z(e.subarray(t,r))};var b=function(e,t,r){r<<=t&7;var n=t/8|0;e[n]|=r,e[n+1]|=r>>8},X=function(e,t,r){r<<=t&7;var n=t/8|0;e[n]|=r,e[n+1]|=r>>8,e[n+2]|=r>>16},yt=function(e,t){for(var r=[],n=0;n<e.length;++n)e[n]&&r.push({s:n,f:e[n]});var i=r.length,s=r.slice();if(!i)return{t:Ht,l:0};if(i==1){var o=new z(r[0].s+1);return o[r[0].s]=1,{t:o,l:1}}r.sort(function(A,D){return A.f-D.f}),r.push({s:-1,f:25001});var l=r[0],u=r[1],h=0,a=1,g=2;for(r[0]={s:-1,f:l.f+u.f,l,r:u};a!=i-1;)l=r[r[h].f<r[g].f?h++:g++],u=r[h!=a&&r[h].f<r[g].f?h++:g++],r[a++]={s:-1,f:l.f+u.f,l,r:u};for(var w=s[0].s,n=1;n<i;++n)s[n].s>w&&(w=s[n].s);var x=new I(w+1),M=wt(r[a-1],x,0);if(M>t){var n=0,m=0,Q=M-t,K=1<<Q;for(s.sort(function(D,S){return x[S.s]-x[D.s]||D.f-S.f});n<i;++n){var R=s[n].s;if(x[R]>t)m+=K-(1<<M-x[R]),x[R]=t;else break}for(m>>=Q;m>0;){var L=s[n].s;x[L]<t?m-=1<<t-x[L]++-1:++n}for(;n>=0&&m;--n){var T=s[n].s;x[T]==t&&(--x[T],++m)}M=t}return{t:new z(x),l:M}},wt=function(e,t,r){return e.s==-1?Math.max(wt(e.l,t,r+1),wt(e.r,t,r+1)):t[e.s]=r},$t=function(e){for(var t=e.length;t&&!e[--t];);for(var r=new I(++t),n=0,i=e[0],s=1,o=function(u){r[n++]=u},l=1;l<=t;++l)if(e[l]==i&&l!=t)++s;else{if(!i&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(i),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(i);s=1,i=e[l]}return{c:r.subarray(0,n),n:t}},_=function(e,t){for(var r=0,n=0;n<t.length;++n)r+=e[n]*t[n];return r},jt=function(e,t,r){var n=r.length,i=Zt(t+2);e[i]=n&255,e[i+1]=n>>8,e[i+2]=e[i]^255,e[i+3]=e[i+1]^255;for(var s=0;s<n;++s)e[i+s+4]=r[s];return(i+4+n)*8},bt=function(e,t,r,n,i,s,o,l,u,h,a){b(t,a++,r),++i[256];for(var g=yt(i,15),w=g.t,x=g.l,M=yt(s,15),m=M.t,Q=M.l,K=$t(w),R=K.c,L=K.n,T=$t(m),A=T.c,D=T.n,S=new I(19),p=0;p<R.length;++p)++S[R[p]&31];for(var p=0;p<A.length;++p)++S[A[p]&31];for(var f=yt(S,7),q=f.t,G=f.l,E=19;E>4&&!q[kt[E-1]];--E);var j=h+5<<3,F=_(i,Z)+_(s,nt)+o,C=_(i,w)+_(s,m)+o+14+3*E+_(S,q)+2*S[16]+3*S[17]+7*S[18];if(u>=0&&j<=F&&j<=C)return jt(t,a,e.subarray(u,u+h));var P,y,B,N;if(b(t,a,1+(C<F)),a+=2,C<F){P=tt(w,x,0),y=w,B=tt(m,Q,0),N=m;var ft=tt(q,G,0);b(t,a,L-257),b(t,a+5,D-1),b(t,a+10,E-4),a+=14;for(var p=0;p<E;++p)b(t,a+3*p,q[kt[p]]);a+=3*E;for(var U=[R,A],W=0;W<2;++W)for(var H=U[W],p=0;p<H.length;++p){var O=H[p]&31;b(t,a,ft[O]),a+=q[O],O>15&&(b(t,a,H[p]>>5&127),a+=H[p]>>12)}}else P=pe,y=Z,B=ge,N=nt;for(var p=0;p<l;++p){var d=n[p];if(d>255){var O=d>>18&31;X(t,a,P[O+257]),a+=y[O+257],O>7&&(b(t,a,d>>23&31),a+=zt[O]);var Y=d&31;X(t,a,B[Y]),a+=N[Y],Y>3&&(X(t,a,d>>5&8191),a+=qt[Y])}else X(t,a,P[d]),a+=y[d]}return X(t,a,P[256]),a+y[256]},ye=new St([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Ht=new z(0),me=function(e,t,r,n,i,s){var o=s.z||e.length,l=new z(n+o+5*(1+Math.ceil(o/7e3))+i),u=l.subarray(n,l.length-i),h=s.l,a=(s.r||0)&7;if(t){a&&(u[0]=s.r>>3);for(var g=ye[t-1],w=g>>13,x=g&8191,M=(1<<r)-1,m=s.p||new I(32768),Q=s.h||new I(M+1),K=Math.ceil(r/3),R=2*K,L=function(pt){return(e[pt]^e[pt+1]<<K^e[pt+2]<<R)&M},T=new St(25e3),A=new I(288),D=new I(32),S=0,p=0,f=s.i||0,q=0,G=s.w||0,E=0;f+2<o;++f){var j=L(f),F=f&32767,C=Q[j];if(m[F]=C,Q[j]=F,G<=f){var P=o-f;if((S>7e3||q>24576)&&(P>423||!h)){a=bt(e,u,0,T,A,D,p,q,E,f-E,a),q=S=p=0,E=f;for(var y=0;y<286;++y)A[y]=0;for(var y=0;y<30;++y)D[y]=0}var B=2,N=0,ft=x,U=F-C&32767;if(P>2&&j==L(f-U))for(var W=Math.min(w,P)-1,H=Math.min(32767,f),O=Math.min(258,P);U<=H&&--ft&&F!=C;){if(e[f+B]==e[f+B-U]){for(var d=0;d<O&&e[f+d]==e[f+d-U];++d);if(d>B){if(B=d,N=U,d>W)break;for(var Y=Math.min(U,d-2),Bt=0,y=0;y<Y;++y){var ct=f-U+y&32767,ie=m[ct],Pt=ct-ie&32767;Pt>Bt&&(Bt=Pt,C=ct)}}}F=C,C=m[F],U+=F-C&32767}if(N){T[q++]=268435456|mt[B]<<18|Rt[N];var Ut=mt[B]&31,Ot=Rt[N]&31;p+=zt[Ut]+qt[Ot],++A[257+Ut],++D[Ot],G=f+B,++S}else T[q++]=e[f],++A[e[f]]}}for(f=Math.max(f,G);f<o;++f)T[q++]=e[f],++A[e[f]];a=bt(e,u,h,T,A,D,p,q,E,f-E,a),h||(s.r=a&7|u[a/8|0]<<3,a-=7,s.h=Q,s.p=m,s.i=f,s.w=G)}else{for(var f=s.w||0;f<o+h;f+=65535){var vt=f+65535;vt>=o&&(u[a/8|0]=h,vt=o),a=jt(u,a+1,e.subarray(f,vt))}s.i=o}return Gt(l,0,n+Zt(a)+i)},de=(function(){for(var e=new Int32Array(256),t=0;t<256;++t){for(var r=t,n=9;--n;)r=(r&1&&-306674912)^r>>>1;e[t]=r}return e})(),we=function(){var e=-1;return{p:function(t){for(var r=e,n=0;n<t.length;++n)r=de[r&255^t[n]]^r>>>8;e=r},d:function(){return~e}}};var xe=function(e,t,r,n,i){if(!i&&(i={l:1},t.dictionary)){var s=t.dictionary.subarray(-32768),o=new z(s.length+e.length);o.set(s),o.set(e,s.length),e=o,i.w=s.length}return me(e,t.level==null?6:t.level,t.mem==null?i.l?Math.ceil(Math.max(8,Math.min(13,Math.log(e.length)))*1.5):20:12+t.mem,r,n,i)};var xt=function(e,t,r){for(;r;++t)e[t]=r,r>>>=8},Se=function(e,t){var r=t.filename;if(e[0]=31,e[1]=139,e[2]=8,e[8]=t.level<2?4:t.level==9?2:0,e[9]=3,t.mtime!=0&&xt(e,4,Math.floor(new Date(t.mtime||Date.now())/1e3)),r){e[3]=8;for(var n=0;n<=r.length;++n)e[n+10]=r.charCodeAt(n)}};var ze=function(e){return 10+(e.filename?e.filename.length+1:0)};function Yt(e,t){t||(t={});var r=we(),n=e.length;r.p(e);var i=xe(e,t,ze(t),8),s=i.length;return Se(i,t),xt(i,s-8,r.d()),xt(i,s-4,n),i}var Qt=typeof TextEncoder<"u"&&new TextEncoder,qe=typeof TextDecoder<"u"&&new TextDecoder,Ee=0;try{qe.decode(Ht,{stream:!0}),Ee=1}catch{}function Jt(e,t){if(t){for(var r=new z(e.length),n=0;n<e.length;++n)r[n]=e.charCodeAt(n);return r}if(Qt)return Qt.encode(e);for(var i=e.length,s=new z(e.length+(e.length>>1)),o=0,l=function(a){s[o++]=a},n=0;n<i;++n){if(o+5>s.length){var u=new z(o+8+(i-n<<1));u.set(s),s=u}var h=e.charCodeAt(n);h<128||t?l(h):h<2048?(l(192|h>>6),l(128|h&63)):h>55295&&h<57344?(h=65536+(h&1047552)|e.charCodeAt(++n)&1023,l(240|h>>18),l(128|h>>12&63),l(128|h>>6&63),l(128|h&63)):(l(224|h>>12),l(128|h>>6&63),l(128|h&63))}return Gt(s,0,o)}var lt=ce(ee());var re="0.0.14";var Me="@qurvo/sdk-browser",Tt="qurvo_anonymous_id",Ft="qurvo_session_id",ot="qurvo_user_id",Te=50;function ht(e,t){try{return e.getItem(t)}catch{return null}}function et(e,t,r){try{e.setItem(t,r)}catch{}}function Dt(e,t){try{e.removeItem(t)}catch{}}function V(){return crypto.randomUUID?.()||Math.random().toString(36).substring(2)+Date.now().toString(36)}function De(){let e=ht(sessionStorage,Ft);return e||(e=V(),et(sessionStorage,Ft,e)),e}function ut(){return{session_id:De(),url:window.location.href,referrer:document.referrer,page_title:document.title,page_path:window.location.pathname,screen_width:window.screen.width,screen_height:window.screen.height,language:navigator.language,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,sdk_name:Me,sdk_version:re}}var Ct=class{constructor(){c(this,"queue",null);c(this,"userId",null);c(this,"initialized",!1);c(this,"lastPageUrl",null);c(this,"lastPageTime",0);c(this,"pageLeaveEmitted",!1);c(this,"listeners",[]);c(this,"originalPushState",null);c(this,"originalReplaceState",null)}init(t){if(this.initialized)return;t.distinctId?(this.userId=t.distinctId,et(localStorage,ot,t.distinctId)):this.userId=ht(localStorage,ot);let r=t.endpoint||"http://localhost:3001",n=async u=>{let h=Yt(Jt(u),{mtime:0});return new Blob([h.buffer],{type:"text/plain"})},i=new lt.FetchTransport(n),s=this.userId?`qurvo_queue:${this.userId}`:"qurvo_queue",o=1440*60*1e3,l={save(u){if(u.length===0){try{localStorage.removeItem(s)}catch{}return}et(localStorage,s,JSON.stringify(u))},load(){let u=ht(localStorage,s);if(!u)return[];try{let h=JSON.parse(u);if(!Array.isArray(h))return[];let a=Date.now()-o;return h.filter(g=>{let w=g?.timestamp;return w&&new Date(w).getTime()>a})}catch{return[]}}};this.queue=new lt.EventQueue(i,`${r}/v1/batch`,t.apiKey,t.flushInterval||3e3,t.flushSize||10,1e3,3e4,void 0,l),this.queue.start(),this.initialized=!0,t.autocapture!==!1&&this.setupAutocapture(),this.setupBeaconFlush(),this.page()}track(t,r){if(!this.queue){console.warn("[Qurvo] SDK not initialized. Call qurvo.init() first.");return}let n={event:t,distinct_id:this.userId||this.getAnonymousId(),anonymous_id:this.getAnonymousId(),properties:r,context:ut(),timestamp:new Date().toISOString(),event_id:V()};this.queue.enqueue(n)}identify(t,r){if(!this.queue){console.warn("[Qurvo] SDK not initialized. Call qurvo.init() first.");return}this.userId=t,et(localStorage,ot,t);let n={event:"$identify",distinct_id:t,anonymous_id:this.getAnonymousId(),user_properties:r,context:ut(),timestamp:new Date().toISOString(),event_id:V()};this.queue.enqueue(n)}page(t){if(!this.queue){console.warn("[Qurvo] SDK not initialized. Call qurvo.init() first.");return}let r=Date.now(),n=window.location.href;this.lastPageUrl===n&&r-this.lastPageTime<Te||(this.lastPageUrl=n,this.lastPageTime=r,this.pageLeaveEmitted=!1,this.track("$pageview",t))}screen(t,r){this.track("$screen",{$screen_name:t,...r})}set(t){if(!this.queue){console.warn("[Qurvo] SDK not initialized. Call qurvo.init() first.");return}let r={event:"$set",distinct_id:this.userId||this.getAnonymousId(),anonymous_id:this.getAnonymousId(),user_properties:{$set:t},context:ut(),timestamp:new Date().toISOString(),event_id:V()};this.queue.enqueue(r)}setOnce(t){if(!this.queue){console.warn("[Qurvo] SDK not initialized. Call qurvo.init() first.");return}let r={event:"$set_once",distinct_id:this.userId||this.getAnonymousId(),anonymous_id:this.getAnonymousId(),user_properties:{$set_once:t},context:ut(),timestamp:new Date().toISOString(),event_id:V()};this.queue.enqueue(r)}reset(){this.userId=null,Dt(localStorage,ot),Dt(localStorage,Tt),Dt(sessionStorage,Ft)}shutdown(){for(let{target:t,event:r,fn:n}of this.listeners)t.removeEventListener(r,n);this.listeners=[],this.originalPushState&&(history.pushState=this.originalPushState,this.originalPushState=null),this.originalReplaceState&&(history.replaceState=this.originalReplaceState,this.originalReplaceState=null),this.queue&&(this.queue.shutdown(),this.queue=null),this.initialized=!1}getAnonymousId(){let t=ht(localStorage,Tt);return t||(t=V(),et(localStorage,Tt,t)),t}addListener(t,r,n){t.addEventListener(r,n),this.listeners.push({target:t,event:r,fn:n})}setupAutocapture(){this.originalPushState=history.pushState;let t=this.originalPushState;history.pushState=(...n)=>{t.apply(history,n),this.page()},this.originalReplaceState=history.replaceState;let r=this.originalReplaceState;history.replaceState=(...n)=>{r.apply(history,n)},this.addListener(window,"popstate",()=>{this.page()}),this.addListener(window,"hashchange",()=>{this.page()})}setupBeaconFlush(){let t=()=>{this.pageLeaveEmitted||(this.track("$pageleave"),this.pageLeaveEmitted=!0),this.queue&&this.queue.size>0&&this.queue.flushForUnload()},r="onpagehide"in self?"pagehide":"beforeunload";this.addListener(window,r,t),this.addListener(document,"visibilitychange",()=>{document.visibilityState==="hidden"&&t()})}},ne=new Ct;globalThis.qurvo=ne;})();
|
|
1
|
+
"use strict";(()=>{var ae=Object.create;var dt=Object.defineProperty;var oe=Object.getOwnPropertyDescriptor;var ue=Object.getOwnPropertyNames;var he=Object.getPrototypeOf,le=Object.prototype.hasOwnProperty;var fe=(e,t,r)=>t in e?dt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var st=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var ce=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of ue(t))!le.call(e,i)&&i!==r&&dt(e,i,{get:()=>t[i],enumerable:!(n=oe(t,i))||n.enumerable});return e};var ve=(e,t,r)=>(r=e!=null?ae(he(e)):{},ce(t||!e||!e.__esModule?dt(r,"default",{value:e,enumerable:!0}):r,e));var c=(e,t,r)=>fe(e,typeof t!="symbol"?t+"":t,r);var ot=st(J=>{"use strict";Object.defineProperty(J,"__esModule",{value:!0});J.NonRetryableError=J.QuotaExceededError=void 0;var Mt=class extends Error{constructor(){super("Monthly event limit exceeded"),this.name="QuotaExceededError"}};J.QuotaExceededError=Mt;var Tt=class extends Error{constructor(r,n){super(n);c(this,"statusCode");this.statusCode=r,this.name="NonRetryableError"}};J.NonRetryableError=Tt});var Vt=st(ut=>{"use strict";Object.defineProperty(ut,"__esModule",{value:!0});ut.EventQueue=void 0;var _t=ot(),Dt=class{constructor(t,r,n,i=5e3,s=20,u=1e3,l=3e4,o,h){c(this,"transport");c(this,"endpoint");c(this,"apiKey");c(this,"flushInterval");c(this,"flushSize");c(this,"maxQueueSize");c(this,"sendTimeoutMs");c(this,"logger");c(this,"persistence");c(this,"queue",[]);c(this,"timer",null);c(this,"flushing",!1);c(this,"inFlightBatch",null);c(this,"failureCount",0);c(this,"retryAfter",0);c(this,"maxBackoffMs",3e4);if(this.transport=t,this.endpoint=r,this.apiKey=n,this.flushInterval=i,this.flushSize=s,this.maxQueueSize=u,this.sendTimeoutMs=l,this.logger=o,this.persistence=h,this.persistence)try{let a=this.persistence.load();a.length>0&&(this.queue.push(...a),this.logger?.(`restored ${a.length} events from persistence`))}catch{this.logger?.("failed to restore persisted events")}}enqueue(t){this.queue.length>=this.maxQueueSize&&(this.queue.shift(),this.logger?.(`queue full (${this.maxQueueSize}), oldest event dropped`)),this.queue.push(t),this.persist(),this.queue.length>=this.flushSize&&this.flush()}start(){this.timer||(this.timer=setInterval(()=>this.flush(),this.flushInterval))}stop(){this.timer&&(clearInterval(this.timer),this.timer=null)}async flush(){if(!(this.flushing||this.queue.length===0)&&!(Date.now()<this.retryAfter)){this.flushing=!0,this.inFlightBatch=this.queue.splice(0,this.flushSize);try{let t=new AbortController,r=setTimeout(()=>t.abort(),this.sendTimeoutMs);try{if(await this.transport.send(this.endpoint,this.apiKey,{events:this.inFlightBatch,sent_at:new Date().toISOString()},{signal:t.signal}))this.failureCount=0,this.retryAfter=0;else{this.queue.unshift(...this.inFlightBatch),this.scheduleBackoff();let i=Math.min(1e3*Math.pow(2,this.failureCount-1),this.maxBackoffMs);this.logger?.(`flush failed, ${this.inFlightBatch.length} events re-queued, retry in ${i}ms`)}}finally{clearTimeout(r)}}catch(t){t instanceof _t.QuotaExceededError?(this.queue.length=0,this.inFlightBatch=null,this.stop(),this.logger?.("quota exceeded, events dropped and queue stopped")):t instanceof _t.NonRetryableError?this.logger?.(`non-retryable error (${t.statusCode}), ${this.inFlightBatch.length} events dropped`,t):(this.queue.unshift(...this.inFlightBatch),this.scheduleBackoff(),this.logger?.(`flush error, ${this.inFlightBatch.length} events re-queued`,t))}finally{this.inFlightBatch=null,this.flushing=!1,this.persist()}}}scheduleBackoff(){this.failureCount++;let t=Math.min(1e3*Math.pow(2,this.failureCount-1),this.maxBackoffMs);this.retryAfter=Date.now()+t}async flushAll(){for(this.retryAfter=0,this.failureCount=0;this.queue.length>0;){let t=this.queue.length;if(await this.flush(),this.queue.length>=t)break}}async shutdown(t=3e4){this.stop(),this.size!==0&&await Promise.race([this.flushAll(),new Promise(r=>setTimeout(r,t))])}flushForUnload(){let t=this.flushing?this.queue.splice(0):[...this.inFlightBatch||[],...this.queue.splice(0)];this.flushing||(this.inFlightBatch=null),this.persist(),t.length!==0&&this.transport.send(this.endpoint,this.apiKey,{events:t,sent_at:new Date().toISOString()},{keepalive:!0}).catch(()=>{})}get size(){return this.queue.length+(this.inFlightBatch?.length||0)}persist(){try{this.persistence?.save(this.queue)}catch{}}};ut.EventQueue=Dt});var Xt=st(ht=>{"use strict";Object.defineProperty(ht,"__esModule",{value:!0});ht.FetchTransport=void 0;var Wt=ot(),Ut=class{constructor(t){c(this,"compress");this.compress=t}async send(t,r,n,i){let s=JSON.stringify(n),u={"x-api-key":r},l;this.compress&&!i?.keepalive?(l=await this.compress(s),u["Content-Type"]="text/plain",u["Content-Encoding"]="gzip"):(l=s,u["Content-Type"]="application/json");let o=await fetch(t,{method:"POST",headers:u,body:l,keepalive:i?.keepalive,signal:i?.signal});if(o.ok||o.status===202)return!0;if(o.status===429&&(await o.json().catch(()=>({})))?.quota_limited)throw new Wt.QuotaExceededError;let h=await o.text().catch(()=>"");throw o.status>=400&&o.status<500?new Wt.NonRetryableError(o.status,`HTTP ${o.status}: ${h}`):new Error(`HTTP ${o.status}: ${h}`)}};ht.FetchTransport=Ut});var ee=st(O=>{"use strict";Object.defineProperty(O,"__esModule",{value:!0});O.FetchTransport=O.EventQueue=O.NonRetryableError=O.QuotaExceededError=void 0;var te=ot();Object.defineProperty(O,"QuotaExceededError",{enumerable:!0,get:function(){return te.QuotaExceededError}});Object.defineProperty(O,"NonRetryableError",{enumerable:!0,get:function(){return te.NonRetryableError}});var Ae=Vt();Object.defineProperty(O,"EventQueue",{enumerable:!0,get:function(){return Ae.EventQueue}});var Me=Xt();Object.defineProperty(O,"FetchTransport",{enumerable:!0,get:function(){return Me.FetchTransport}})});var z=Uint8Array,E=Uint16Array,It=Int32Array,Et=new z([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),At=new z([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Ot=new z([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Kt=function(e,t){for(var r=new E(31),n=0;n<31;++n)r[n]=t+=1<<e[n-1];for(var i=new It(r[30]),n=1;n<30;++n)for(var s=r[n];s<r[n+1];++s)i[s]=s-r[n]<<5|n;return{b:r,r:i}},Lt=Kt(Et,2),pe=Lt.b,St=Lt.r;pe[28]=258,St[258]=28;var Nt=Kt(At,0),Be=Nt.b,Rt=Nt.r,xt=new E(32768);for(v=0;v<32768;++v)$=(v&43690)>>1|(v&21845)<<1,$=($&52428)>>2|($&13107)<<2,$=($&61680)>>4|($&3855)<<4,xt[v]=(($&65280)>>8|($&255)<<8)>>1;var $,v,et=(function(e,t,r){for(var n=e.length,i=0,s=new E(t);i<n;++i)e[i]&&++s[e[i]-1];var u=new E(t);for(i=1;i<t;++i)u[i]=u[i-1]+s[i-1]<<1;var l;if(r){l=new E(1<<t);var o=15-t;for(i=0;i<n;++i)if(e[i])for(var h=i<<4|e[i],a=t-e[i],g=u[e[i]-1]++<<a,w=g|(1<<a)-1;g<=w;++g)l[xt[g]>>o]=h}else for(l=new E(n),i=0;i<n;++i)e[i]&&(l[i]=xt[u[e[i]-1]++]>>15-e[i]);return l}),Z=new z(288);for(v=0;v<144;++v)Z[v]=8;var v;for(v=144;v<256;++v)Z[v]=9;var v;for(v=256;v<280;++v)Z[v]=7;var v;for(v=280;v<288;++v)Z[v]=8;var v,at=new z(32);for(v=0;v<32;++v)at[v]=5;var v,ge=et(Z,9,0);var ye=et(at,5,0);var Zt=function(e){return(e+7)/8|0},Gt=function(e,t,r){return(t==null||t<0)&&(t=0),(r==null||r>e.length)&&(r=e.length),new z(e.subarray(t,r))};var b=function(e,t,r){r<<=t&7;var n=t/8|0;e[n]|=r,e[n+1]|=r>>8},X=function(e,t,r){r<<=t&7;var n=t/8|0;e[n]|=r,e[n+1]|=r>>8,e[n+2]|=r>>16},wt=function(e,t){for(var r=[],n=0;n<e.length;++n)e[n]&&r.push({s:n,f:e[n]});var i=r.length,s=r.slice();if(!i)return{t:Ht,l:0};if(i==1){var u=new z(r[0].s+1);return u[r[0].s]=1,{t:u,l:1}}r.sort(function(A,D){return A.f-D.f}),r.push({s:-1,f:25001});var l=r[0],o=r[1],h=0,a=1,g=2;for(r[0]={s:-1,f:l.f+o.f,l,r:o};a!=i-1;)l=r[r[h].f<r[g].f?h++:g++],o=r[h!=a&&r[h].f<r[g].f?h++:g++],r[a++]={s:-1,f:l.f+o.f,l,r:o};for(var w=s[0].s,n=1;n<i;++n)s[n].s>w&&(w=s[n].s);var S=new E(w+1),M=zt(r[a-1],S,0);if(M>t){var n=0,m=0,Q=M-t,L=1<<Q;for(s.sort(function(D,x){return S[x.s]-S[D.s]||D.f-x.f});n<i;++n){var R=s[n].s;if(S[R]>t)m+=L-(1<<M-S[R]),S[R]=t;else break}for(m>>=Q;m>0;){var N=s[n].s;S[N]<t?m-=1<<t-S[N]++-1:++n}for(;n>=0&&m;--n){var T=s[n].s;S[T]==t&&(--S[T],++m)}M=t}return{t:new z(S),l:M}},zt=function(e,t,r){return e.s==-1?Math.max(zt(e.l,t,r+1),zt(e.r,t,r+1)):t[e.s]=r},$t=function(e){for(var t=e.length;t&&!e[--t];);for(var r=new E(++t),n=0,i=e[0],s=1,u=function(o){r[n++]=o},l=1;l<=t;++l)if(e[l]==i&&l!=t)++s;else{if(!i&&s>2){for(;s>138;s-=138)u(32754);s>2&&(u(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(u(i),--s;s>6;s-=6)u(8304);s>2&&(u(s-3<<5|8208),s=0)}for(;s--;)u(i);s=1,i=e[l]}return{c:r.subarray(0,n),n:t}},tt=function(e,t){for(var r=0,n=0;n<t.length;++n)r+=e[n]*t[n];return r},jt=function(e,t,r){var n=r.length,i=Zt(t+2);e[i]=n&255,e[i+1]=n>>8,e[i+2]=e[i]^255,e[i+3]=e[i+1]^255;for(var s=0;s<n;++s)e[i+s+4]=r[s];return(i+4+n)*8},bt=function(e,t,r,n,i,s,u,l,o,h,a){b(t,a++,r),++i[256];for(var g=wt(i,15),w=g.t,S=g.l,M=wt(s,15),m=M.t,Q=M.l,L=$t(w),R=L.c,N=L.n,T=$t(m),A=T.c,D=T.n,x=new E(19),p=0;p<R.length;++p)++x[R[p]&31];for(var p=0;p<A.length;++p)++x[A[p]&31];for(var f=wt(x,7),q=f.t,G=f.l,I=19;I>4&&!q[Ot[I-1]];--I);var j=h+5<<3,U=tt(i,Z)+tt(s,at)+u,F=tt(i,w)+tt(s,m)+u+14+3*I+tt(x,q)+2*x[16]+3*x[17]+7*x[18];if(o>=0&&j<=U&&j<=F)return jt(t,a,e.subarray(o,o+h));var C,y,P,K;if(b(t,a,1+(F<U)),a+=2,F<U){C=et(w,S,0),y=w,P=et(m,Q,0),K=m;var pt=et(q,G,0);b(t,a,N-257),b(t,a+5,D-1),b(t,a+10,I-4),a+=14;for(var p=0;p<I;++p)b(t,a+3*p,q[Ot[p]]);a+=3*I;for(var B=[R,A],W=0;W<2;++W)for(var H=B[W],p=0;p<H.length;++p){var k=H[p]&31;b(t,a,pt[k]),a+=q[k],k>15&&(b(t,a,H[p]>>5&127),a+=H[p]>>12)}}else C=ge,y=Z,P=ye,K=at;for(var p=0;p<l;++p){var d=n[p];if(d>255){var k=d>>18&31;X(t,a,C[k+257]),a+=y[k+257],k>7&&(b(t,a,d>>23&31),a+=Et[k]);var Y=d&31;X(t,a,P[Y]),a+=K[Y],Y>3&&(X(t,a,d>>5&8191),a+=At[Y])}else X(t,a,C[d]),a+=y[d]}return X(t,a,C[256]),a+y[256]},me=new It([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Ht=new z(0),de=function(e,t,r,n,i,s){var u=s.z||e.length,l=new z(n+u+5*(1+Math.ceil(u/7e3))+i),o=l.subarray(n,l.length-i),h=s.l,a=(s.r||0)&7;if(t){a&&(o[0]=s.r>>3);for(var g=me[t-1],w=g>>13,S=g&8191,M=(1<<r)-1,m=s.p||new E(32768),Q=s.h||new E(M+1),L=Math.ceil(r/3),R=2*L,N=function(mt){return(e[mt]^e[mt+1]<<L^e[mt+2]<<R)&M},T=new It(25e3),A=new E(288),D=new E(32),x=0,p=0,f=s.i||0,q=0,G=s.w||0,I=0;f+2<u;++f){var j=N(f),U=f&32767,F=Q[j];if(m[U]=F,Q[j]=U,G<=f){var C=u-f;if((x>7e3||q>24576)&&(C>423||!h)){a=bt(e,o,0,T,A,D,p,q,I,f-I,a),q=x=p=0,I=f;for(var y=0;y<286;++y)A[y]=0;for(var y=0;y<30;++y)D[y]=0}var P=2,K=0,pt=S,B=U-F&32767;if(C>2&&j==N(f-B))for(var W=Math.min(w,C)-1,H=Math.min(32767,f),k=Math.min(258,C);B<=H&&--pt&&U!=F;){if(e[f+P]==e[f+P-B]){for(var d=0;d<k&&e[f+d]==e[f+d-B];++d);if(d>P){if(P=d,K=B,d>W)break;for(var Y=Math.min(B,d-2),Pt=0,y=0;y<Y;++y){var gt=f-B+y&32767,se=m[gt],Ct=gt-se&32767;Ct>Pt&&(Pt=Ct,F=gt)}}}U=F,F=m[U],B+=U-F&32767}if(K){T[q++]=268435456|St[P]<<18|Rt[K];var Bt=St[P]&31,kt=Rt[K]&31;p+=Et[Bt]+At[kt],++A[257+Bt],++D[kt],G=f+P,++x}else T[q++]=e[f],++A[e[f]]}}for(f=Math.max(f,G);f<u;++f)T[q++]=e[f],++A[e[f]];a=bt(e,o,h,T,A,D,p,q,I,f-I,a),h||(s.r=a&7|o[a/8|0]<<3,a-=7,s.h=Q,s.p=m,s.i=f,s.w=G)}else{for(var f=s.w||0;f<u+h;f+=65535){var yt=f+65535;yt>=u&&(o[a/8|0]=h,yt=u),a=jt(o,a+1,e.subarray(f,yt))}s.i=u}return Gt(l,0,n+Zt(a)+i)},we=(function(){for(var e=new Int32Array(256),t=0;t<256;++t){for(var r=t,n=9;--n;)r=(r&1&&-306674912)^r>>>1;e[t]=r}return e})(),Se=function(){var e=-1;return{p:function(t){for(var r=e,n=0;n<t.length;++n)r=we[r&255^t[n]]^r>>>8;e=r},d:function(){return~e}}};var xe=function(e,t,r,n,i){if(!i&&(i={l:1},t.dictionary)){var s=t.dictionary.subarray(-32768),u=new z(s.length+e.length);u.set(s),u.set(e,s.length),e=u,i.w=s.length}return de(e,t.level==null?6:t.level,t.mem==null?i.l?Math.ceil(Math.max(8,Math.min(13,Math.log(e.length)))*1.5):20:12+t.mem,r,n,i)};var qt=function(e,t,r){for(;r;++t)e[t]=r,r>>>=8},ze=function(e,t){var r=t.filename;if(e[0]=31,e[1]=139,e[2]=8,e[8]=t.level<2?4:t.level==9?2:0,e[9]=3,t.mtime!=0&&qt(e,4,Math.floor(new Date(t.mtime||Date.now())/1e3)),r){e[3]=8;for(var n=0;n<=r.length;++n)e[n+10]=r.charCodeAt(n)}};var qe=function(e){return 10+(e.filename?e.filename.length+1:0)};function Yt(e,t){t||(t={});var r=Se(),n=e.length;r.p(e);var i=xe(e,t,qe(t),8),s=i.length;return ze(i,t),qt(i,s-8,r.d()),qt(i,s-4,n),i}var Qt=typeof TextEncoder<"u"&&new TextEncoder,Ie=typeof TextDecoder<"u"&&new TextDecoder,Ee=0;try{Ie.decode(Ht,{stream:!0}),Ee=1}catch{}function Jt(e,t){if(t){for(var r=new z(e.length),n=0;n<e.length;++n)r[n]=e.charCodeAt(n);return r}if(Qt)return Qt.encode(e);for(var i=e.length,s=new z(e.length+(e.length>>1)),u=0,l=function(a){s[u++]=a},n=0;n<i;++n){if(u+5>s.length){var o=new z(u+8+(i-n<<1));o.set(s),s=o}var h=e.charCodeAt(n);h<128||t?l(h):h<2048?(l(192|h>>6),l(128|h&63)):h>55295&&h<57344?(h=65536+(h&1047552)|e.charCodeAt(++n)&1023,l(240|h>>18),l(128|h>>12&63),l(128|h>>6&63),l(128|h&63)):(l(224|h>>12),l(128|h>>6&63),l(128|h&63))}return Gt(s,0,u)}var vt=ve(ee());var re="0.0.15";var Te=["utm_source","utm_medium","utm_campaign","utm_term","utm_content"];function De(e){if(!e)return{};let t;try{t=new URLSearchParams(e)}catch{return{}}let r={};for(let n of Te){let i=t.get(n);i&&(r[n]=i)}return r}function ne(){return typeof window>"u"?{}:De(window.location.search)}var Ue="@qurvo/sdk-browser",lt="qurvo_anonymous_id",ct="qurvo_session_id",rt="qurvo_user_id",Fe=50;function nt(e,t){try{return e.getItem(t)}catch{return null}}function it(e,t,r){try{e.setItem(t,r)}catch{}}function _(e,t){try{e.removeItem(t)}catch{}}function V(){return crypto.randomUUID?.()||Math.random().toString(36).substring(2)+Date.now().toString(36)}function Pe(){let e=nt(sessionStorage,ct);return e||(e=V(),it(sessionStorage,ct,e)),e}function ft(){return{session_id:Pe(),url:window.location.href,referrer:document.referrer,page_title:document.title,page_path:window.location.pathname,screen_width:window.screen.width,screen_height:window.screen.height,language:navigator.language,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,sdk_name:Ue,sdk_version:re}}var Ft=class{constructor(){c(this,"queue",null);c(this,"userId",null);c(this,"initialized",!1);c(this,"lastPageUrl",null);c(this,"lastPageTime",0);c(this,"pageLeaveEmitted",!1);c(this,"listeners",[]);c(this,"originalPushState",null);c(this,"originalReplaceState",null)}init(t){if(this.initialized&&t.distinctId){let o=nt(localStorage,rt);if(o&&o!==t.distinctId)_(localStorage,`qurvo_queue:${o}`),_(localStorage,lt),_(sessionStorage,ct),this.shutdown();else return}else if(this.initialized)return;t.distinctId?(this.userId=t.distinctId,it(localStorage,rt,t.distinctId)):this.userId=nt(localStorage,rt);let r=t.endpoint||"http://localhost:3001",n=async o=>{let h=Yt(Jt(o),{mtime:0});return new Blob([h.buffer],{type:"text/plain"})},i=new vt.FetchTransport(n),s=this.userId?`qurvo_queue:${this.userId}`:"qurvo_queue",u=1440*60*1e3,l={save(o){if(o.length===0){try{localStorage.removeItem(s)}catch{}return}it(localStorage,s,JSON.stringify(o))},load(){let o=nt(localStorage,s);if(!o)return[];try{let h=JSON.parse(o);if(!Array.isArray(h))return[];let a=Date.now()-u;return h.filter(g=>{let w=g?.timestamp;return w&&new Date(w).getTime()>a})}catch{return[]}}};this.queue=new vt.EventQueue(i,`${r}/v1/batch`,t.apiKey,t.flushInterval||3e3,t.flushSize||10,1e3,3e4,void 0,l),this.queue.start(),this.initialized=!0,t.autocapture!==!1&&this.setupAutocapture(),this.setupBeaconFlush(),this.page()}track(t,r){if(!this.queue){console.warn("[Qurvo] SDK not initialized. Call qurvo.init() first.");return}let n=ne(),i=Object.keys(n).length>0?{...n,...r}:r,s={event:t,distinct_id:this.userId||this.getAnonymousId(),anonymous_id:this.getAnonymousId(),properties:i,context:ft(),timestamp:new Date().toISOString(),event_id:V()};this.queue.enqueue(s)}identify(t,r){if(!this.queue){console.warn("[Qurvo] SDK not initialized. Call qurvo.init() first.");return}this.userId&&this.userId!==t&&this.reset(),this.userId=t,it(localStorage,rt,t);let n={event:"$identify",distinct_id:t,anonymous_id:this.getAnonymousId(),user_properties:r,context:ft(),timestamp:new Date().toISOString(),event_id:V()};this.queue.enqueue(n)}page(t){if(!this.queue){console.warn("[Qurvo] SDK not initialized. Call qurvo.init() first.");return}let r=Date.now(),n=window.location.href;this.lastPageUrl===n&&r-this.lastPageTime<Fe||(this.lastPageUrl=n,this.lastPageTime=r,this.pageLeaveEmitted=!1,this.track("$pageview",t))}screen(t,r){this.track("$screen",{$screen_name:t,...r})}set(t){if(!this.queue){console.warn("[Qurvo] SDK not initialized. Call qurvo.init() first.");return}let r={event:"$set",distinct_id:this.userId||this.getAnonymousId(),anonymous_id:this.getAnonymousId(),user_properties:{$set:t},context:ft(),timestamp:new Date().toISOString(),event_id:V()};this.queue.enqueue(r)}setOnce(t){if(!this.queue){console.warn("[Qurvo] SDK not initialized. Call qurvo.init() first.");return}let r={event:"$set_once",distinct_id:this.userId||this.getAnonymousId(),anonymous_id:this.getAnonymousId(),user_properties:{$set_once:t},context:ft(),timestamp:new Date().toISOString(),event_id:V()};this.queue.enqueue(r)}reset(){this.userId=null,_(localStorage,rt),_(localStorage,lt),_(sessionStorage,ct)}shutdown(){for(let{target:t,event:r,fn:n}of this.listeners)t.removeEventListener(r,n);this.listeners=[],this.originalPushState&&(history.pushState=this.originalPushState,this.originalPushState=null),this.originalReplaceState&&(history.replaceState=this.originalReplaceState,this.originalReplaceState=null),this.queue&&(this.queue.shutdown(),this.queue=null),this.initialized=!1}getAnonymousId(){let t=nt(localStorage,lt);return t||(t=V(),it(localStorage,lt,t)),t}addListener(t,r,n){t.addEventListener(r,n),this.listeners.push({target:t,event:r,fn:n})}setupAutocapture(){this.originalPushState=history.pushState;let t=this.originalPushState;history.pushState=(...n)=>{t.apply(history,n),this.page()},this.originalReplaceState=history.replaceState;let r=this.originalReplaceState;history.replaceState=(...n)=>{r.apply(history,n)},this.addListener(window,"popstate",()=>{this.page()}),this.addListener(window,"hashchange",()=>{this.page()})}setupBeaconFlush(){let t=()=>{this.pageLeaveEmitted||(this.track("$pageleave"),this.pageLeaveEmitted=!0),this.queue&&this.queue.size>0&&this.queue.flushForUnload()},r="onpagehide"in self?"pagehide":"beforeunload";this.addListener(window,r,t),this.addListener(document,"visibilitychange",()=>{document.visibilityState==="hidden"&&t()})}},ie=new Ft;globalThis.qurvo=ie;})();
|