@qurvo/sdk-browser 0.0.13 → 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 +134 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +229 -14
- 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 ie=Object.create;var pt=Object.defineProperty;var se=Object.getOwnPropertyDescriptor;var ae=Object.getOwnPropertyNames;var oe=Object.getPrototypeOf,ue=Object.prototype.hasOwnProperty;var he=(e,t,r)=>t in e?pt(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 ae(t))!ue.call(e,i)&&i!==r&&pt(e,i,{get:()=>t[i],enumerable:!(n=se(t,i))||n.enumerable});return e};var le=(e,t,r)=>(r=e!=null?ie(oe(e)):{},fe(t||!e||!e.__esModule?pt(r,"default",{value:e,enumerable:!0}):r,e));var p=(e,t,r)=>he(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 qt=class extends Error{constructor(){super("Monthly event limit exceeded"),this.name="QuotaExceededError"}};J.QuotaExceededError=qt;var It=class extends Error{constructor(r,n){super(n);p(this,"statusCode");this.statusCode=r,this.name="NonRetryableError"}};J.NonRetryableError=It});var Yt=rt(st=>{"use strict";Object.defineProperty(st,"__esModule",{value:!0});st.EventQueue=void 0;var Ht=it(),Et=class{constructor(t,r,n,i=5e3,s=20,o=1e3,f=3e4,u,h){p(this,"transport");p(this,"endpoint");p(this,"apiKey");p(this,"flushInterval");p(this,"flushSize");p(this,"maxQueueSize");p(this,"sendTimeoutMs");p(this,"logger");p(this,"persistence");p(this,"queue",[]);p(this,"timer",null);p(this,"flushing",!1);p(this,"inFlightBatch",null);p(this,"failureCount",0);p(this,"retryAfter",0);p(this,"maxBackoffMs",3e4);if(this.transport=t,this.endpoint=r,this.apiKey=n,this.flushInterval=i,this.flushSize=s,this.maxQueueSize=o,this.sendTimeoutMs=f,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 Ht.QuotaExceededError?(this.queue.length=0,this.inFlightBatch=null,this.stop(),this.logger?.("quota exceeded, events dropped and queue stopped")):t instanceof Ht.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.inFlightBatch||[],...this.queue.splice(0)];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=Et});var Vt=rt(at=>{"use strict";Object.defineProperty(at,"__esModule",{value:!0});at.FetchTransport=void 0;var Jt=it(),At=class{constructor(t){p(this,"compress");this.compress=t}async send(t,r,n,i){let s=JSON.stringify(n),o={"x-api-key":r},f;this.compress&&!i?.keepalive?(f=await this.compress(s),o["Content-Type"]="text/plain",o["Content-Encoding"]="gzip"):(f=s,o["Content-Type"]="application/json");let u=await fetch(t,{method:"POST",headers:o,body:f,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 Jt.QuotaExceededError;let h=await u.text().catch(()=>"");throw u.status>=400&&u.status<500?new Jt.NonRetryableError(u.status,`HTTP ${u.status}: ${h}`):new Error(`HTTP ${u.status}: ${h}`)}};at.FetchTransport=At});var Xt=rt($=>{"use strict";Object.defineProperty($,"__esModule",{value:!0});$.FetchTransport=$.EventQueue=$.NonRetryableError=$.QuotaExceededError=void 0;var Wt=it();Object.defineProperty($,"QuotaExceededError",{enumerable:!0,get:function(){return Wt.QuotaExceededError}});Object.defineProperty($,"NonRetryableError",{enumerable:!0,get:function(){return Wt.NonRetryableError}});var Ie=Yt();Object.defineProperty($,"EventQueue",{enumerable:!0,get:function(){return Ie.EventQueue}});var Ee=Vt();Object.defineProperty($,"FetchTransport",{enumerable:!0,get:function(){return Ee.FetchTransport}})});var S=Uint8Array,E=Uint16Array,xt=Int32Array,zt=new S([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]),St=new S([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 S([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),bt=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 xt(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}},Rt=bt(zt,2),ce=Rt.b,yt=Rt.r;ce[28]=258,yt[258]=28;var Nt=bt(St,0),Te=Nt.b,Ot=Nt.r,mt=new E(32768);for(c=0;c<32768;++c)b=(c&43690)>>1|(c&21845)<<1,b=(b&52428)>>2|(b&13107)<<2,b=(b&61680)>>4|(b&3855)<<4,mt[c]=((b&65280)>>8|(b&255)<<8)>>1;var b,c,tt=(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 o=new E(t);for(i=1;i<t;++i)o[i]=o[i-1]+s[i-1]<<1;var f;if(r){f=new E(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)f[mt[g]>>u]=h}else for(f=new E(n),i=0;i<n;++i)e[i]&&(f[i]=mt[o[e[i]-1]++]>>15-e[i]);return f}),G=new S(288);for(c=0;c<144;++c)G[c]=8;var c;for(c=144;c<256;++c)G[c]=9;var c;for(c=256;c<280;++c)G[c]=7;var c;for(c=280;c<288;++c)G[c]=8;var c,nt=new S(32);for(c=0;c<32;++c)nt[c]=5;var c,ve=tt(G,9,0);var pe=tt(nt,5,0);var Qt=function(e){return(e+7)/8|0},Zt=function(e,t,r){return(t==null||t<0)&&(t=0),(r==null||r>e.length)&&(r=e.length),new S(e.subarray(t,r))};var R=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},gt=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:Gt,l:0};if(i==1){var o=new S(r[0].s+1);return o[r[0].s]=1,{t:o,l:1}}r.sort(function(A,T){return A.f-T.f}),r.push({s:-1,f:25001});var f=r[0],u=r[1],h=0,a=1,g=2;for(r[0]={s:-1,f:f.f+u.f,l:f,r:u};a!=i-1;)f=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:f.f+u.f,l:f,r:u};for(var w=s[0].s,n=1;n<i;++n)s[n].s>w&&(w=s[n].s);var x=new E(w+1),M=dt(r[a-1],x,0);if(M>t){var n=0,m=0,N=M-t,Z=1<<N;for(s.sort(function(T,z){return x[z.s]-x[T.s]||T.f-z.f});n<i;++n){var P=s[n].s;if(x[P]>t)m+=Z-(1<<M-x[P]),x[P]=t;else break}for(m>>=N;m>0;){var K=s[n].s;x[K]<t?m-=1<<t-x[K]++-1:++n}for(;n>=0&&m;--n){var F=s[n].s;x[F]==t&&(--x[F],++m)}M=t}return{t:new S(x),l:M}},dt=function(e,t,r){return e.s==-1?Math.max(dt(e.l,t,r+1),dt(e.r,t,r+1)):t[e.s]=r},Ut=function(e){for(var t=e.length;t&&!e[--t];);for(var r=new E(++t),n=0,i=e[0],s=1,o=function(u){r[n++]=u},f=1;f<=t;++f)if(e[f]==i&&f!=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[f]}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},Kt=function(e,t,r){var n=r.length,i=Qt(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},$t=function(e,t,r,n,i,s,o,f,u,h,a){R(t,a++,r),++i[256];for(var g=gt(i,15),w=g.t,x=g.l,M=gt(s,15),m=M.t,N=M.l,Z=Ut(w),P=Z.c,K=Z.n,F=Ut(m),A=F.c,T=F.n,z=new E(19),v=0;v<P.length;++v)++z[P[v]&31];for(var v=0;v<A.length;++v)++z[A[v]&31];for(var l=gt(z,7),q=l.t,j=l.l,I=19;I>4&&!q[kt[I-1]];--I);var L=h+5<<3,D=_(i,G)+_(s,nt)+o,B=_(i,w)+_(s,m)+o+14+3*I+_(z,q)+2*z[16]+3*z[17]+7*z[18];if(u>=0&&L<=D&&L<=B)return Kt(t,a,e.subarray(u,u+h));var k,y,C,Q;if(R(t,a,1+(B<D)),a+=2,B<D){k=tt(w,x,0),y=w,C=tt(m,N,0),Q=m;var ft=tt(q,j,0);R(t,a,K-257),R(t,a+5,T-1),R(t,a+10,I-4),a+=14;for(var v=0;v<I;++v)R(t,a+3*v,q[kt[v]]);a+=3*I;for(var O=[P,A],W=0;W<2;++W)for(var H=O[W],v=0;v<H.length;++v){var U=H[v]&31;R(t,a,ft[U]),a+=q[U],U>15&&(R(t,a,H[v]>>5&127),a+=H[v]>>12)}}else k=ve,y=G,C=pe,Q=nt;for(var v=0;v<f;++v){var d=n[v];if(d>255){var U=d>>18&31;X(t,a,k[U+257]),a+=y[U+257],U>7&&(R(t,a,d>>23&31),a+=zt[U]);var Y=d&31;X(t,a,C[Y]),a+=Q[Y],Y>3&&(X(t,a,d>>5&8191),a+=St[Y])}else X(t,a,k[d]),a+=y[d]}return X(t,a,k[256]),a+y[256]},ge=new xt([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Gt=new S(0),ye=function(e,t,r,n,i,s){var o=s.z||e.length,f=new S(n+o+5*(1+Math.ceil(o/7e3))+i),u=f.subarray(n,f.length-i),h=s.l,a=(s.r||0)&7;if(t){a&&(u[0]=s.r>>3);for(var g=ge[t-1],w=g>>13,x=g&8191,M=(1<<r)-1,m=s.p||new E(32768),N=s.h||new E(M+1),Z=Math.ceil(r/3),P=2*Z,K=function(vt){return(e[vt]^e[vt+1]<<Z^e[vt+2]<<P)&M},F=new xt(25e3),A=new E(288),T=new E(32),z=0,v=0,l=s.i||0,q=0,j=s.w||0,I=0;l+2<o;++l){var L=K(l),D=l&32767,B=N[L];if(m[D]=B,N[L]=D,j<=l){var k=o-l;if((z>7e3||q>24576)&&(k>423||!h)){a=$t(e,u,0,F,A,T,v,q,I,l-I,a),q=z=v=0,I=l;for(var y=0;y<286;++y)A[y]=0;for(var y=0;y<30;++y)T[y]=0}var C=2,Q=0,ft=x,O=D-B&32767;if(k>2&&L==K(l-O))for(var W=Math.min(w,k)-1,H=Math.min(32767,l),U=Math.min(258,k);O<=H&&--ft&&D!=B;){if(e[l+C]==e[l+C-O]){for(var d=0;d<U&&e[l+d]==e[l+d-O];++d);if(d>C){if(C=d,Q=O,d>W)break;for(var Y=Math.min(O,d-2),Tt=0,y=0;y<Y;++y){var lt=l-O+y&32767,ne=m[lt],Dt=lt-ne&32767;Dt>Tt&&(Tt=Dt,B=lt)}}}D=B,B=m[D],O+=D-B&32767}if(Q){F[q++]=268435456|yt[C]<<18|Ot[Q];var Bt=yt[C]&31,Ct=Ot[Q]&31;v+=zt[Bt]+St[Ct],++A[257+Bt],++T[Ct],j=l+C,++z}else F[q++]=e[l],++A[e[l]]}}for(l=Math.max(l,j);l<o;++l)F[q++]=e[l],++A[e[l]];a=$t(e,u,h,F,A,T,v,q,I,l-I,a),h||(s.r=a&7|u[a/8|0]<<3,a-=7,s.h=N,s.p=m,s.i=l,s.w=j)}else{for(var l=s.w||0;l<o+h;l+=65535){var ct=l+65535;ct>=o&&(u[a/8|0]=h,ct=o),a=Kt(u,a+1,e.subarray(l,ct))}s.i=o}return Zt(f,0,n+Qt(a)+i)},me=(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})(),de=function(){var e=-1;return{p:function(t){for(var r=e,n=0;n<t.length;++n)r=me[r&255^t[n]]^r>>>8;e=r},d:function(){return~e}}};var we=function(e,t,r,n,i){if(!i&&(i={l:1},t.dictionary)){var s=t.dictionary.subarray(-32768),o=new S(s.length+e.length);o.set(s),o.set(e,s.length),e=o,i.w=s.length}return ye(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 wt=function(e,t,r){for(;r;++t)e[t]=r,r>>>=8},xe=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&&wt(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 jt(e,t){t||(t={});var r=de(),n=e.length;r.p(e);var i=we(e,t,ze(t),8),s=i.length;return xe(i,t),wt(i,s-8,r.d()),wt(i,s-4,n),i}var Pt=typeof TextEncoder<"u"&&new TextEncoder,Se=typeof TextDecoder<"u"&&new TextDecoder,qe=0;try{Se.decode(Gt,{stream:!0}),qe=1}catch{}function Lt(e,t){if(t){for(var r=new S(e.length),n=0;n<e.length;++n)r[n]=e.charCodeAt(n);return r}if(Pt)return Pt.encode(e);for(var i=e.length,s=new S(e.length+(e.length>>1)),o=0,f=function(a){s[o++]=a},n=0;n<i;++n){if(o+5>s.length){var u=new S(o+8+(i-n<<1));u.set(s),s=u}var h=e.charCodeAt(n);h<128||t?f(h):h<2048?(f(192|h>>6),f(128|h&63)):h>55295&&h<57344?(h=65536+(h&1047552)|e.charCodeAt(++n)&1023,f(240|h>>18),f(128|h>>12&63),f(128|h>>6&63),f(128|h&63)):(f(224|h>>12),f(128|h>>6&63),f(128|h&63))}return Zt(s,0,o)}var ht=le(Xt());var _t="0.0.13";var Ae="@qurvo/sdk-browser",te="qurvo_anonymous_id",ee="qurvo_session_id",Mt="qurvo_user_id";function ut(e,t){try{return e.getItem(t)}catch{return null}}function et(e,t,r){try{e.setItem(t,r)}catch{}}function V(){return crypto.randomUUID?.()||Math.random().toString(36).substring(2)+Date.now().toString(36)}function Me(){let e=ut(sessionStorage,ee);return e||(e=V(),et(sessionStorage,ee,e)),e}function ot(){return{session_id:Me(),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:Ae,sdk_version:_t}}var Ft=class{constructor(){p(this,"queue",null);p(this,"userId",null);p(this,"initialized",!1)}init(t){if(this.initialized)return;t.distinctId?(this.userId=t.distinctId,et(localStorage,Mt,t.distinctId)):this.userId=ut(localStorage,Mt);let r=t.endpoint||"http://localhost:3001",n=async u=>{let h=jt(Lt(u),{mtime:0});return new Blob([h.buffer],{type:"text/plain"})},i=new ht.FetchTransport(n),s=this.userId?`qurvo_queue:${this.userId}`:"qurvo_queue",o=1440*60*1e3,f={save(u){if(u.length===0){try{localStorage.removeItem(s)}catch{}return}et(localStorage,s,JSON.stringify(u))},load(){let u=ut(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 ht.EventQueue(i,`${r}/v1/batch`,t.apiKey,t.flushInterval||3e3,t.flushSize||10,1e3,3e4,void 0,f),this.queue.start(),this.initialized=!0,t.autocapture!==!1&&this.setupAutocapture(),this.setupBeaconFlush(),this.page()}track(t,r){if(!this.queue)return;let n={event:t,distinct_id:this.userId||this.getAnonymousId(),anonymous_id:this.getAnonymousId(),properties:r,context:ot(),timestamp:new Date().toISOString(),event_id:V()};this.queue.enqueue(n)}identify(t,r){if(!this.queue)return;this.userId=t,et(localStorage,Mt,t);let n={event:"$identify",distinct_id:t,anonymous_id:this.getAnonymousId(),user_properties:r,context:ot(),timestamp:new Date().toISOString(),event_id:V()};this.queue.enqueue(n)}page(t){this.track("$pageview",t)}screen(t,r){this.track("$screen",{$screen_name:t,...r})}set(t){if(!this.queue)return;let r={event:"$set",distinct_id:this.userId||this.getAnonymousId(),anonymous_id:this.getAnonymousId(),user_properties:{$set:t},context:ot(),timestamp:new Date().toISOString(),event_id:V()};this.queue.enqueue(r)}setOnce(t){if(!this.queue)return;let r={event:"$set_once",distinct_id:this.userId||this.getAnonymousId(),anonymous_id:this.getAnonymousId(),user_properties:{$set_once:t},context:ot(),timestamp:new Date().toISOString(),event_id:V()};this.queue.enqueue(r)}reset(){this.userId=null}getAnonymousId(){let t=ut(localStorage,te);return t||(t=V(),et(localStorage,te,t)),t}setupAutocapture(){let t=history.pushState;history.pushState=(...n)=>{t.apply(history,n),this.page()};let r=history.replaceState;history.replaceState=(...n)=>{r.apply(history,n),this.page()},window.addEventListener("popstate",()=>{this.page()}),window.addEventListener("hashchange",()=>{this.page()})}setupBeaconFlush(){let t=()=>{this.track("$pageleave"),this.queue&&this.queue.size>0&&this.queue.flushForUnload()},r="onpagehide"in self?"pagehide":"beforeunload";window.addEventListener(r,t),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&t()})}},re=new Ft;globalThis.qurvo=re;})();
|
|
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;})();
|