@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.
@@ -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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"}
@@ -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&&gt(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;})();