@cityflo/truesight-web-sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +86 -0
- package/dist/anonymous-id.d.ts +2 -0
- package/dist/compression.d.ts +2 -0
- package/dist/config.d.ts +16 -0
- package/dist/device-context.d.ts +4 -0
- package/dist/encryption.d.ts +9 -0
- package/dist/event-model.d.ts +30 -0
- package/dist/event-queue.d.ts +18 -0
- package/dist/flush-scheduler.d.ts +22 -0
- package/dist/index.d.ts +42 -0
- package/dist/logger.d.ts +11 -0
- package/dist/network-client.d.ts +3 -0
- package/dist/truesight.cjs.js +2 -0
- package/dist/truesight.cjs.js.map +1 -0
- package/dist/truesight.d.ts +38 -0
- package/dist/truesight.esm.js +2 -0
- package/dist/truesight.esm.js.map +1 -0
- package/dist/truesight.umd.js +2 -0
- package/dist/truesight.umd.js.map +1 -0
- package/package.json +59 -0
package/README.md
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# @truesight/web-sdk
|
|
2
|
+
|
|
3
|
+
TrueSight Web Analytics SDK for browser-based applications.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @truesight/web-sdk
|
|
9
|
+
# or
|
|
10
|
+
pnpm add @truesight/web-sdk
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
### ES Module
|
|
16
|
+
```typescript
|
|
17
|
+
import { init, track, identify, screen, reset } from '@truesight/web-sdk';
|
|
18
|
+
|
|
19
|
+
// Initialize
|
|
20
|
+
init({
|
|
21
|
+
apiKey: 'ts_live_...',
|
|
22
|
+
endpoint: 'https://your-ingestion-api.com',
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// Track events
|
|
26
|
+
track('Button Clicked', { button_id: 'checkout', value: 42.99 });
|
|
27
|
+
|
|
28
|
+
// Identify user
|
|
29
|
+
identify('user-123', {
|
|
30
|
+
email: 'user@example.com',
|
|
31
|
+
mobile_number: '1234567890',
|
|
32
|
+
plan: 'premium',
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// Screen view
|
|
36
|
+
screen('Home Page');
|
|
37
|
+
|
|
38
|
+
// Reset (logout)
|
|
39
|
+
reset();
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Script Tag (UMD)
|
|
43
|
+
```html
|
|
44
|
+
<script src="https://cdn.example.com/truesight.umd.js"></script>
|
|
45
|
+
<script>
|
|
46
|
+
TrueSight.init({ apiKey: 'ts_live_...', endpoint: '...' });
|
|
47
|
+
TrueSight.track('Page Viewed');
|
|
48
|
+
</script>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Features
|
|
52
|
+
|
|
53
|
+
- Encrypted IndexedDB event queue (AES-256-GCM via Web Crypto API)
|
|
54
|
+
- zstd compression (via fzstd WebAssembly, ~25KB)
|
|
55
|
+
- Automatic flush on tab hide (visibilitychange) and page unload (sendBeacon fallback)
|
|
56
|
+
- Exponential backoff retry
|
|
57
|
+
- Anonymous ID persistence
|
|
58
|
+
- Zero required dependencies (fzstd is the only dep)
|
|
59
|
+
|
|
60
|
+
## Configuration
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
init({
|
|
64
|
+
apiKey: 'ts_live_...',
|
|
65
|
+
endpoint: 'https://your-api.com',
|
|
66
|
+
options: {
|
|
67
|
+
flushInterval: 30000, // 30 seconds (default)
|
|
68
|
+
maxBatchSize: 20, // events per batch (default)
|
|
69
|
+
maxQueueSize: 1000, // soft limit (default)
|
|
70
|
+
debug: false, // enable debug logging
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## API
|
|
76
|
+
|
|
77
|
+
| Method | Description |
|
|
78
|
+
|--------|-------------|
|
|
79
|
+
| `init(config)` | Initialize the SDK |
|
|
80
|
+
| `track(event, properties?)` | Track a custom event |
|
|
81
|
+
| `identify(userId, traits?)` | Set the user identity |
|
|
82
|
+
| `screen(name, properties?)` | Track a screen/page view |
|
|
83
|
+
| `flush()` | Manually flush the event queue |
|
|
84
|
+
| `reset()` | Clear user state, generate new anonymous ID |
|
|
85
|
+
| `setMobileNumber(number)` | Set 10-digit mobile number |
|
|
86
|
+
| `setEmail(email)` | Set user email |
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface Config {
|
|
2
|
+
apiKey: string;
|
|
3
|
+
endpoint: string;
|
|
4
|
+
flushInterval: number;
|
|
5
|
+
maxBatchSize: number;
|
|
6
|
+
maxQueueSize: number;
|
|
7
|
+
maxQueueHard: number;
|
|
8
|
+
maxEventSize: number;
|
|
9
|
+
debug: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare const DEFAULT_CONFIG: Omit<Config, 'apiKey' | 'endpoint'>;
|
|
12
|
+
export declare function buildConfig(init: {
|
|
13
|
+
apiKey: string;
|
|
14
|
+
endpoint: string;
|
|
15
|
+
options?: Partial<Config>;
|
|
16
|
+
}): Config;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function deriveKey(apiKey: string): Promise<CryptoKey>;
|
|
2
|
+
export interface EncryptedData {
|
|
3
|
+
iv: string;
|
|
4
|
+
ciphertext: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function encrypt(data: string, key: CryptoKey): Promise<EncryptedData>;
|
|
7
|
+
export declare function decrypt(encrypted: EncryptedData, key: CryptoKey): Promise<string>;
|
|
8
|
+
/** Clear the cached key (used in reset/testing). */
|
|
9
|
+
export declare function clearKeyCache(): void;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type EventType = 'track' | 'identify' | 'screen';
|
|
2
|
+
export interface DeviceContext {
|
|
3
|
+
app_version: string;
|
|
4
|
+
os_name: string;
|
|
5
|
+
os_version: string;
|
|
6
|
+
device_model: string;
|
|
7
|
+
device_id: string;
|
|
8
|
+
network_type: string;
|
|
9
|
+
locale: string;
|
|
10
|
+
timezone: string;
|
|
11
|
+
sdk_version: string;
|
|
12
|
+
screen_width: number;
|
|
13
|
+
screen_height: number;
|
|
14
|
+
}
|
|
15
|
+
export interface TrueSightEvent {
|
|
16
|
+
event_id: string;
|
|
17
|
+
event_name: string;
|
|
18
|
+
event_type: EventType;
|
|
19
|
+
user_id: string | null;
|
|
20
|
+
anonymous_id: string;
|
|
21
|
+
mobile_number: string | null;
|
|
22
|
+
email: string | null;
|
|
23
|
+
client_timestamp: string;
|
|
24
|
+
properties: Record<string, unknown>;
|
|
25
|
+
context: DeviceContext;
|
|
26
|
+
}
|
|
27
|
+
export interface BatchPayload {
|
|
28
|
+
batch: TrueSightEvent[];
|
|
29
|
+
sent_at: string;
|
|
30
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { TrueSightEvent } from './event-model.js';
|
|
2
|
+
export declare class EventQueue {
|
|
3
|
+
private db;
|
|
4
|
+
private apiKey;
|
|
5
|
+
private maxQueueHard;
|
|
6
|
+
private sequence;
|
|
7
|
+
constructor(apiKey: string, maxQueueHard: number);
|
|
8
|
+
open(): Promise<void>;
|
|
9
|
+
private getStore;
|
|
10
|
+
enqueue(event: TrueSightEvent): Promise<void>;
|
|
11
|
+
dequeue(count: number): Promise<TrueSightEvent[]>;
|
|
12
|
+
private getOldest;
|
|
13
|
+
remove(ids: string[]): Promise<void>;
|
|
14
|
+
size(): Promise<number>;
|
|
15
|
+
clear(): Promise<void>;
|
|
16
|
+
private evictOldest;
|
|
17
|
+
close(): void;
|
|
18
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Config } from './config.js';
|
|
2
|
+
import { EventQueue } from './event-queue.js';
|
|
3
|
+
export declare class FlushScheduler {
|
|
4
|
+
private config;
|
|
5
|
+
private queue;
|
|
6
|
+
private timerId;
|
|
7
|
+
private flushPromise;
|
|
8
|
+
private isFlushing;
|
|
9
|
+
private networkDebounceTimer;
|
|
10
|
+
private boundVisibilityHandler;
|
|
11
|
+
private boundBeforeUnloadHandler;
|
|
12
|
+
private boundOnlineHandler;
|
|
13
|
+
constructor(config: Config, queue: EventQueue);
|
|
14
|
+
start(): void;
|
|
15
|
+
stop(): void;
|
|
16
|
+
/** Schedule a flush, preventing concurrent flushes via promise chaining. */
|
|
17
|
+
scheduleFlush(): void;
|
|
18
|
+
/** Manually trigger flush and return the promise. */
|
|
19
|
+
flush(): Promise<void>;
|
|
20
|
+
private doFlush;
|
|
21
|
+
private flushWithBeacon;
|
|
22
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { TrueSightSDK } from './truesight.js';
|
|
2
|
+
export type { Config } from './config.js';
|
|
3
|
+
export type { EventType, DeviceContext, TrueSightEvent, BatchPayload, } from './event-model.js';
|
|
4
|
+
export { TrueSightSDK } from './truesight.js';
|
|
5
|
+
declare const instance: TrueSightSDK;
|
|
6
|
+
/**
|
|
7
|
+
* Initialize the TrueSight SDK.
|
|
8
|
+
*/
|
|
9
|
+
export declare const init: (initConfig: {
|
|
10
|
+
apiKey: string;
|
|
11
|
+
endpoint: string;
|
|
12
|
+
options?: Partial<import("./config.js").Config>;
|
|
13
|
+
}) => Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Track a custom event.
|
|
16
|
+
*/
|
|
17
|
+
export declare const track: (eventName: string, properties?: Record<string, unknown>) => Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Identify a user with traits.
|
|
20
|
+
*/
|
|
21
|
+
export declare const identify: (userId: string, traits?: Record<string, unknown>) => Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Track a screen view.
|
|
24
|
+
*/
|
|
25
|
+
export declare const screen: (screenName: string, properties?: Record<string, unknown>) => Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Manually flush the event queue.
|
|
28
|
+
*/
|
|
29
|
+
export declare const flush: () => Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Reset user state and generate new anonymous ID.
|
|
32
|
+
*/
|
|
33
|
+
export declare const reset: () => Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Set mobile number for all future events.
|
|
36
|
+
*/
|
|
37
|
+
export declare const setMobileNumber: (number: string) => void;
|
|
38
|
+
/**
|
|
39
|
+
* Set email for all future events.
|
|
40
|
+
*/
|
|
41
|
+
export declare const setEmail: (email: string) => void;
|
|
42
|
+
export default instance;
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
2
|
+
export declare class Logger {
|
|
3
|
+
private level;
|
|
4
|
+
constructor(debug?: boolean);
|
|
5
|
+
setDebug(debug: boolean): void;
|
|
6
|
+
debug(...args: unknown[]): void;
|
|
7
|
+
info(...args: unknown[]): void;
|
|
8
|
+
warn(...args: unknown[]): void;
|
|
9
|
+
error(...args: unknown[]): void;
|
|
10
|
+
}
|
|
11
|
+
export declare const logger: Logger;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { BatchPayload } from './event-model.js';
|
|
2
|
+
export declare function sendBatch(endpoint: string, apiKey: string, payload: BatchPayload, compressPayload?: boolean): Promise<Response>;
|
|
3
|
+
export declare function sendBeacon(endpoint: string, apiKey: string, payload: BatchPayload): boolean;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e={flushInterval:3e4,maxBatchSize:20,maxQueueSize:1e3,maxQueueHard:5e3,maxEventSize:32768,debug:!1};const t=(new TextEncoder).encode("truesight-web-sdk-v1");let n=null,i=null;function r(){if(void 0!==globalThis.crypto&&globalThis.crypto.subtle)return globalThis.crypto.subtle;throw new Error("Web Crypto API is not available")}async function s(e){const s=e+("undefined"!=typeof window?window.location.origin:"unknown");if(n&&i===s)return n;const o=r(),a=(new TextEncoder).encode(s),u=await o.digest("SHA-256",a),l=await o.importKey("raw",u,"PBKDF2",!1,["deriveKey"]),d=await o.deriveKey({name:"PBKDF2",salt:t,iterations:1e5,hash:"SHA-256"},l,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return n=d,i=s,d}function o(e){const t=new Uint8Array(e);let n="";for(let e=0;e<t.byteLength;e++)n+=String.fromCharCode(t[e]);return btoa(n)}function a(e){const t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n.buffer}async function u(e,t){const n=r(),i=new TextEncoder,s=(a=new Uint8Array(12),globalThis.crypto.getRandomValues(a));var a;const u=await n.encrypt({name:"AES-GCM",iv:s},t,i.encode(e));return{iv:o(s.buffer),ciphertext:o(u)}}async function l(e,t){const n=r(),i=new Uint8Array(a(e.iv)),s=a(e.ciphertext),o=await n.decrypt({name:"AES-GCM",iv:i},t,s);return(new TextDecoder).decode(o)}const d=0,c=1,h=2,f=3,m="[TrueSight]";const w=new class{constructor(e=!1){this.level=e?d:h}setDebug(e){this.level=e?d:h}debug(...e){this.level<=d&&console.debug(m,...e)}info(...e){this.level<=c&&console.info(m,...e)}warn(...e){this.level<=h&&console.warn(m,...e)}error(...e){this.level<=f&&console.error(m,...e)}},y="events";class b{constructor(e,t){this.db=null,this.sequence=0,this.apiKey=e,this.maxQueueHard=t}async open(){return new Promise((e,t)=>{const n=indexedDB.open("truesight_events",1);n.onupgradeneeded=()=>{const e=n.result;if(!e.objectStoreNames.contains(y)){e.createObjectStore(y,{keyPath:"event_id"}).createIndex("timestamp","timestamp",{unique:!1})}},n.onsuccess=()=>{this.db=n.result,w.debug("IndexedDB opened successfully"),e()},n.onerror=()=>{w.error("Failed to open IndexedDB",n.error),t(n.error)}})}getStore(e){if(!this.db)throw new Error("Database not opened. Call open() first.");return this.db.transaction(y,e).objectStore(y)}async enqueue(e){const t=await this.size();t>=this.maxQueueHard&&(w.warn(`Queue at hard limit (${t}/${this.maxQueueHard}), evicting oldest 500 events`),await this.evictOldest(500));const n=await s(this.apiKey),i=await u(JSON.stringify(e),n),r={event_id:e.event_id,timestamp:1e3*Date.now()+this.sequence++,encrypted:i};return new Promise((t,n)=>{const i=this.getStore("readwrite").put(r);i.onsuccess=()=>{w.debug(`Event enqueued: ${e.event_id}`),t()},i.onerror=()=>{w.error("Failed to enqueue event",i.error),n(i.error)}})}async dequeue(e){const t=await s(this.apiKey),n=await this.getOldest(e),i=[];for(const e of n)try{const n=await l(e.encrypted,t);i.push(JSON.parse(n))}catch(t){w.error("Failed to decrypt event",e.event_id,t),await this.remove([e.event_id])}return i}getOldest(e){return new Promise((t,n)=>{const i=this.getStore("readonly").index("timestamp").openCursor(null,"next"),r=[];i.onsuccess=()=>{const n=i.result;n&&r.length<e?(r.push(n.value),n.continue()):t(r)},i.onerror=()=>{n(i.error)}})}async remove(e){if(0!==e.length)return new Promise((t,n)=>{if(!this.db)return void n(new Error("Database not opened"));const i=this.db.transaction(y,"readwrite"),r=i.objectStore(y);for(const t of e)r.delete(t);i.oncomplete=()=>{w.debug(`Removed ${e.length} events from queue`),t()},i.onerror=()=>{w.error("Failed to remove events",i.error),n(i.error)}})}async size(){return new Promise((e,t)=>{const n=this.getStore("readonly").count();n.onsuccess=()=>{e(n.result)},n.onerror=()=>{t(n.error)}})}async clear(){return new Promise((e,t)=>{const n=this.getStore("readwrite").clear();n.onsuccess=()=>{w.debug("Event queue cleared"),e()},n.onerror=()=>{t(n.error)}})}async evictOldest(e){const t=(await this.getOldest(e)).map(e=>e.event_id);await this.remove(t)}close(){this.db&&(this.db.close(),this.db=null)}}let g=null,p=!1,v=!0;async function S(e){const t=await async function(){if(g)return g;if(p)return null;p=!0;try{return g=await import("fzstd"),w.debug("fzstd loaded successfully"),g}catch(e){return w.warn("fzstd not available, compression disabled",e),v=!1,null}}();if(!t)throw new Error("zstd compression not available");try{return"compress"in t?t.compress(e):(v=!1,e)}catch(t){return w.warn("Compression failed, falling back to uncompressed",t),v=!1,e}}function x(e){const t=1e3*Math.pow(2,e);return Math.min(t,6e4)}function I(e){return 429===e||e>=500&&e<600}function E(e){return new Promise(t=>setTimeout(t,e))}class T{constructor(e,t){this.timerId=null,this.flushPromise=Promise.resolve(),this.isFlushing=!1,this.networkDebounceTimer=null,this.boundVisibilityHandler=null,this.boundBeforeUnloadHandler=null,this.boundOnlineHandler=null,this.config=e,this.queue=t}start(){this.timerId?w.warn("Flush scheduler already started"):(this.timerId=setInterval(()=>{this.scheduleFlush()},this.config.flushInterval),"undefined"!=typeof document&&(this.boundVisibilityHandler=()=>{"hidden"===document.visibilityState&&this.flushWithBeacon()},document.addEventListener("visibilitychange",this.boundVisibilityHandler)),"undefined"!=typeof window&&(this.boundBeforeUnloadHandler=()=>{this.flushWithBeacon()},window.addEventListener("beforeunload",this.boundBeforeUnloadHandler)),"undefined"!=typeof window&&(this.boundOnlineHandler=()=>{this.networkDebounceTimer&&clearTimeout(this.networkDebounceTimer),this.networkDebounceTimer=setTimeout(()=>{w.debug("Network restored, flushing"),this.scheduleFlush(),this.networkDebounceTimer=null},2e3)},window.addEventListener("online",this.boundOnlineHandler)),w.debug("Flush scheduler started"))}stop(){this.timerId&&(clearInterval(this.timerId),this.timerId=null),this.networkDebounceTimer&&(clearTimeout(this.networkDebounceTimer),this.networkDebounceTimer=null),"undefined"!=typeof document&&this.boundVisibilityHandler&&(document.removeEventListener("visibilitychange",this.boundVisibilityHandler),this.boundVisibilityHandler=null),"undefined"!=typeof window&&(this.boundBeforeUnloadHandler&&(window.removeEventListener("beforeunload",this.boundBeforeUnloadHandler),this.boundBeforeUnloadHandler=null),this.boundOnlineHandler&&(window.removeEventListener("online",this.boundOnlineHandler),this.boundOnlineHandler=null)),w.debug("Flush scheduler stopped")}scheduleFlush(){this.flushPromise=this.flushPromise.then(()=>this.doFlush())}async flush(){return new Promise(e=>{this.flushPromise=this.flushPromise.then(async()=>{await this.doFlush(),e()})})}async doFlush(){if(!this.isFlushing){this.isFlushing=!0;try{const e=await this.queue.size();if(0===e)return void w.debug("Nothing to flush");const t=Math.min(this.config.maxBatchSize,e),n=await this.queue.dequeue(t);if(0===n.length)return;const i={batch:n,sent_at:(new Date).toISOString()},r=await async function(e,t,n,i=!0){const r=JSON.stringify(n),s=new TextEncoder;let o=r,a=null;if(i&&v)try{const e=await S(s.encode(r));o=new Blob([e.buffer],{type:"application/octet-stream"}),a="zstd"}catch{w.warn("Compression failed, sending uncompressed"),o=r}const u={"Content-Type":"application/json","X-API-Key":t};a&&(u["Content-Encoding"]=a);let l=null,d=null;for(let t=0;t<=10;t++){try{const i=await fetch(e,{method:"POST",headers:u,body:o});if(i.ok)return w.debug(`Batch sent successfully: ${n.batch.length} events`),i;if(d=i,!I(i.status))return w.error(`Non-retryable HTTP error: ${i.status} ${i.statusText}`),i;w.warn(`Retryable HTTP error: ${i.status}, attempt ${t+1}/10`)}catch(e){l=e,w.warn(`Network error on attempt ${t+1}/10:`,e)}if(t<10){const e=x(t);w.debug(`Backing off for ${e}ms`),await E(e)}}if(d)return d;throw l||new Error("sendBatch failed after all retries")}(this.config.endpoint,this.config.apiKey,i);if(r.ok){const e=n.map(e=>e.event_id);await this.queue.remove(e),w.debug(`Flushed ${n.length} events successfully`)}else w.error(`Flush failed with status: ${r.status}`)}catch(e){w.error("Flush error:",e)}finally{this.isFlushing=!1}}}async flushWithBeacon(){try{const e=await this.queue.size();if(0===e)return;const t=Math.min(this.config.maxBatchSize,e),n=await this.queue.dequeue(t);if(0===n.length)return;const i={batch:n,sent_at:(new Date).toISOString()},r=function(e,t,n){try{const i=JSON.stringify(n),r=new Blob([i],{type:"application/json"}),s=new URL(e);s.searchParams.set("api_key",t);const o=navigator.sendBeacon(s.toString(),r);return o?w.debug(`Beacon sent: ${n.batch.length} events`):w.warn("sendBeacon returned false"),o}catch(e){return w.error("sendBeacon failed:",e),!1}}(this.config.endpoint,this.config.apiKey,i);if(r){const e=n.map(e=>e.event_id);await this.queue.remove(e)}}catch(e){w.error("Beacon flush error:",e)}}}function z(e){const t=[["Chrome",/Chrome\/(\d+[\d.]*)/],["Firefox",/Firefox\/(\d+[\d.]*)/],["Safari",/Version\/(\d+[\d.]*).*Safari/],["Edge",/Edg\/(\d+[\d.]*)/],["Opera",/OPR\/(\d+[\d.]*)/]];for(const[n,i]of t){const t=e.match(i);if(t)return`${n} ${t[1]}`}return"Unknown"}function _(e){return/Tablet|iPad/i.test(e)?"Tablet":/Mobile|Android|iPhone|iPod/i.test(e)?"Mobile":"Desktop"}let D=null;async function q(){if(D)return D;const e="undefined"!=typeof navigator?navigator.userAgent:"Unknown",t="undefined"!=typeof navigator?navigator:null,n=await async function(){const e=[];"undefined"!=typeof screen&&e.push(`${screen.width}x${screen.height}x${screen.colorDepth}`);try{e.push(Intl.DateTimeFormat().resolvedOptions().timeZone)}catch{e.push("unknown-tz")}"undefined"!=typeof navigator&&e.push(navigator.language);try{if("undefined"!=typeof document){const t=document.createElement("canvas"),n=t.getContext("2d");n&&(t.width=200,t.height=50,n.textBaseline="top",n.font="14px Arial",n.fillStyle="#f60",n.fillRect(0,0,200,50),n.fillStyle="#069",n.fillText("TrueSight fingerprint",2,15),e.push(t.toDataURL()))}}catch{e.push("no-canvas")}const t=(new TextEncoder).encode(e.join("|")),n=await crypto.subtle.digest("SHA-256",t),i=new Uint8Array(n);return Array.from(i).map(e=>e.toString(16).padStart(2,"0")).join("")}();return D={app_version:"undefined"!=typeof document&&document.querySelector("meta[name=version]")?.getAttribute("content")||"unknown",os_name:"Web",os_version:z(e),device_model:_(e),device_id:n,network_type:t?.connection?.effectiveType||"unknown",locale:t?.language||"unknown",timezone:(()=>{try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return"unknown"}})(),sdk_version:"0.1.0",screen_width:"undefined"!=typeof screen?screen.width:0,screen_height:"undefined"!=typeof screen?screen.height:0},D}const k="truesight_anonymous_id";function B(){return crypto.randomUUID()}function H(){try{return"undefined"!=typeof localStorage?localStorage:null}catch{return null}}async function O(e,t){const n=H();if(!n)return;const i=await s(t),r=await u(e,i);n.setItem(k,JSON.stringify(r))}async function P(e){const t=await async function(e){try{const t=H();if(!t)return null;const n=t.getItem(k);if(!n)return null;const i=JSON.parse(n),r=await s(e);return await l(i,r)}catch{return null}}(e);if(t)return t;const n=B();return await O(n,e),n}class F{constructor(){this.initialized=!1,this.userId=null,this.anonymousId="",this.mobileNumber=null,this.email=null,this.traits={}}async init(t){if(this.initialized)w.warn("TrueSight already initialized");else{if(!t.apiKey)throw new Error("apiKey is required");if(!t.endpoint)throw new Error("endpoint is required");this.config=function(t){return{apiKey:t.apiKey,endpoint:t.endpoint,...e,...t.options}}(t),w.setDebug(this.config.debug),this.anonymousId=await P(this.config.apiKey),this.queue=new b(this.config.apiKey,this.config.maxQueueHard),await this.queue.open(),this.scheduler=new T(this.config,this.queue),this.scheduler.start(),this.initialized=!0,w.info("TrueSight SDK initialized")}}async track(e,t={}){this.ensureInitialized(),e?await this.enqueueEvent("track",e,t):w.warn("track() called with empty event name")}async identify(e,t={}){this.ensureInitialized(),e?(this.userId=e,this.traits={...this.traits,...t},"string"==typeof t.mobile_number&&t.mobile_number&&(this.mobileNumber=t.mobile_number),"string"==typeof t.email&&t.email&&(this.email=t.email),await this.enqueueEvent("identify","identify",t)):w.warn("identify() called with empty userId")}async screen(e,t={}){this.ensureInitialized(),e?await this.enqueueEvent("screen","$screen",{screen_name:e,...t}):w.warn("screen() called with empty screen name")}async flush(){this.ensureInitialized(),await this.scheduler.flush()}async reset(){this.ensureInitialized(),this.userId=null,this.mobileNumber=null,this.email=null,this.traits={},this.anonymousId=await async function(e){const t=B();return await O(t,e),t}(this.config.apiKey),w.debug("SDK state reset")}setMobileNumber(e){this.ensureInitialized();const t=e.replace(/\D/g,"");10===t.length?(this.mobileNumber=t,w.debug("Mobile number set")):w.warn(`Invalid mobile number: expected 10 digits, got ${t.length}`)}setEmail(e){this.ensureInitialized(),this.email=e,w.debug("Email set")}isInitialized(){return this.initialized}getUserId(){return this.userId}getAnonymousId(){return this.anonymousId}getMobileNumber(){return this.mobileNumber}getEmail(){return this.email}destroy(){this.scheduler&&this.scheduler.stop(),this.queue&&this.queue.close(),this.initialized=!1,this.userId=null,this.anonymousId="",this.mobileNumber=null,this.email=null,this.traits={},n=null,i=null,D=null,w.debug("SDK destroyed")}ensureInitialized(){if(!this.initialized)throw new Error("TrueSight SDK not initialized. Call init() first.")}async enqueueEvent(e,t,n){const i=await q(),r={event_id:crypto.randomUUID(),event_name:t,event_type:e,user_id:this.userId,anonymous_id:this.anonymousId,mobile_number:this.mobileNumber,email:this.email,client_timestamp:(new Date).toISOString(),properties:n,context:i},s=JSON.stringify(r);if(s.length>this.config.maxEventSize)return void w.warn(`Event exceeds maxEventSize (${s.length} > ${this.config.maxEventSize}), dropping`);const o=await this.queue.size();o>=this.config.maxQueueSize&&(w.warn(`Queue at soft limit (${o}/${this.config.maxQueueSize}), triggering flush`),this.scheduler.scheduleFlush()),await this.queue.enqueue(r),w.debug(`Event queued: ${e} - ${t}`)}}const $=new F,K=$.init.bind($),N=$.track.bind($),A=$.identify.bind($),U=$.screen.bind($),C=$.flush.bind($),M=$.reset.bind($),Q=$.setMobileNumber.bind($),j=$.setEmail.bind($);exports.TrueSightSDK=F,exports.default=$,exports.flush=C,exports.identify=A,exports.init=K,exports.reset=M,exports.screen=U,exports.setEmail=j,exports.setMobileNumber=Q,exports.track=N;
|
|
2
|
+
//# sourceMappingURL=truesight.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truesight.cjs.js","sources":["../src/config.ts","../src/encryption.ts","../src/logger.ts","../src/event-queue.ts","../src/compression.ts","../src/network-client.ts","../src/flush-scheduler.ts","../src/device-context.ts","../src/anonymous-id.ts","../src/truesight.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null],"names":["DEFAULT_CONFIG","flushInterval","maxBatchSize","maxQueueSize","maxQueueHard","maxEventSize","debug","SALT","TextEncoder","encode","cachedKey","cachedKeySource","getCrypto","globalThis","crypto","subtle","Error","async","deriveKey","apiKey","keySource","window","location","origin","keyData","hashBuffer","digest","baseKey","importKey","derivedKey","name","salt","iterations","hash","length","arrayBufferToBase64","buffer","bytes","Uint8Array","binary","i","byteLength","String","fromCharCode","btoa","base64ToArrayBuffer","base64","atob","charCodeAt","encrypt","data","key","encoder","iv","array","getRandomValues","ciphertext","decrypt","encrypted","decrypted","TextDecoder","decode","LOG_LEVELS","PREFIX","logger","constructor","this","level","setDebug","args","console","info","warn","error","STORE_NAME","EventQueue","db","sequence","open","Promise","resolve","reject","request","indexedDB","onupgradeneeded","result","objectStoreNames","contains","createObjectStore","keyPath","createIndex","unique","onsuccess","onerror","getStore","mode","transaction","objectStore","enqueue","event","currentSize","size","evictOldest","JSON","stringify","stored","event_id","timestamp","Date","now","put","dequeue","count","storedEvents","getOldest","events","json","push","parse","err","remove","index","openCursor","results","cursor","value","continue","ids","tx","store","id","delete","oncomplete","clear","map","e","close","fzstdModule","loadAttempted","isSupported","compress","mod","import","loadFzstd","calculateBackoff","attempt","backoff","Math","pow","min","isRetryableStatus","status","sleep","ms","setTimeout","FlushScheduler","config","queue","timerId","flushPromise","isFlushing","networkDebounceTimer","boundVisibilityHandler","boundBeforeUnloadHandler","boundOnlineHandler","start","setInterval","scheduleFlush","document","visibilityState","flushWithBeacon","addEventListener","clearTimeout","stop","clearInterval","removeEventListener","then","doFlush","flush","queueSize","batchSize","payload","batch","sent_at","toISOString","response","endpoint","compressPayload","jsonStr","body","contentEncoding","compressionSupported","compressed","Blob","type","headers","lastError","lastResponse","fetch","method","ok","statusText","sendBatch","success","blob","url","URL","searchParams","set","navigator","sendBeacon","toString","parseBrowserVersion","ua","patterns","regex","match","detectDeviceModel","test","cachedContext","getDeviceContext","userAgent","nav","deviceId","components","screen","width","height","colorDepth","Intl","DateTimeFormat","resolvedOptions","timeZone","language","canvas","createElement","ctx","getContext","textBaseline","font","fillStyle","fillRect","fillText","toDataURL","join","hashArray","Array","from","b","padStart","generateDeviceId","app_version","querySelector","getAttribute","os_name","os_version","device_model","device_id","network_type","connection","effectiveType","locale","timezone","sdk_version","screen_width","screen_height","STORAGE_KEY","generateUUIDv4","randomUUID","getStorage","localStorage","writeEncrypted","storage","setItem","getOrCreateAnonymousId","existing","raw","getItem","readEncrypted","newId","TrueSightSDK","initialized","userId","anonymousId","mobileNumber","email","traits","init","initConfig","options","buildConfig","scheduler","track","eventName","properties","ensureInitialized","enqueueEvent","identify","mobile_number","screenName","screen_name","reset","resetAnonymousId","setMobileNumber","number","digits","replace","setEmail","isInitialized","getUserId","getAnonymousId","getMobileNumber","getEmail","destroy","eventType","context","event_name","event_type","user_id","anonymous_id","client_timestamp","serialized","instance","bind"],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Config } from './config.js';
|
|
2
|
+
export declare class TrueSightSDK {
|
|
3
|
+
private initialized;
|
|
4
|
+
private config;
|
|
5
|
+
private queue;
|
|
6
|
+
private scheduler;
|
|
7
|
+
private userId;
|
|
8
|
+
private anonymousId;
|
|
9
|
+
private mobileNumber;
|
|
10
|
+
private email;
|
|
11
|
+
private traits;
|
|
12
|
+
init(initConfig: {
|
|
13
|
+
apiKey: string;
|
|
14
|
+
endpoint: string;
|
|
15
|
+
options?: Partial<Config>;
|
|
16
|
+
}): Promise<void>;
|
|
17
|
+
track(eventName: string, properties?: Record<string, unknown>): Promise<void>;
|
|
18
|
+
identify(userId: string, traits?: Record<string, unknown>): Promise<void>;
|
|
19
|
+
screen(screenName: string, properties?: Record<string, unknown>): Promise<void>;
|
|
20
|
+
flush(): Promise<void>;
|
|
21
|
+
reset(): Promise<void>;
|
|
22
|
+
setMobileNumber(number: string): void;
|
|
23
|
+
setEmail(email: string): void;
|
|
24
|
+
/** Check if SDK is initialized (useful for testing). */
|
|
25
|
+
isInitialized(): boolean;
|
|
26
|
+
/** Get current user ID (useful for testing). */
|
|
27
|
+
getUserId(): string | null;
|
|
28
|
+
/** Get current anonymous ID (useful for testing). */
|
|
29
|
+
getAnonymousId(): string;
|
|
30
|
+
/** Get current mobile number (useful for testing). */
|
|
31
|
+
getMobileNumber(): string | null;
|
|
32
|
+
/** Get current email (useful for testing). */
|
|
33
|
+
getEmail(): string | null;
|
|
34
|
+
/** Destroy SDK instance (stop scheduler, close DB). */
|
|
35
|
+
destroy(): void;
|
|
36
|
+
private ensureInitialized;
|
|
37
|
+
private enqueueEvent;
|
|
38
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e={flushInterval:3e4,maxBatchSize:20,maxQueueSize:1e3,maxQueueHard:5e3,maxEventSize:32768,debug:!1};const t=(new TextEncoder).encode("truesight-web-sdk-v1");let n=null,i=null;function r(){if(void 0!==globalThis.crypto&&globalThis.crypto.subtle)return globalThis.crypto.subtle;throw new Error("Web Crypto API is not available")}async function s(e){const s=e+("undefined"!=typeof window?window.location.origin:"unknown");if(n&&i===s)return n;const o=r(),a=(new TextEncoder).encode(s),u=await o.digest("SHA-256",a),l=await o.importKey("raw",u,"PBKDF2",!1,["deriveKey"]),d=await o.deriveKey({name:"PBKDF2",salt:t,iterations:1e5,hash:"SHA-256"},l,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return n=d,i=s,d}function o(e){const t=new Uint8Array(e);let n="";for(let e=0;e<t.byteLength;e++)n+=String.fromCharCode(t[e]);return btoa(n)}function a(e){const t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n.buffer}async function u(e,t){const n=r(),i=new TextEncoder,s=(a=new Uint8Array(12),globalThis.crypto.getRandomValues(a));var a;const u=await n.encrypt({name:"AES-GCM",iv:s},t,i.encode(e));return{iv:o(s.buffer),ciphertext:o(u)}}async function l(e,t){const n=r(),i=new Uint8Array(a(e.iv)),s=a(e.ciphertext),o=await n.decrypt({name:"AES-GCM",iv:i},t,s);return(new TextDecoder).decode(o)}const d=0,c=1,h=2,f=3,m="[TrueSight]";const w=new class{constructor(e=!1){this.level=e?d:h}setDebug(e){this.level=e?d:h}debug(...e){this.level<=d&&console.debug(m,...e)}info(...e){this.level<=c&&console.info(m,...e)}warn(...e){this.level<=h&&console.warn(m,...e)}error(...e){this.level<=f&&console.error(m,...e)}},y="events";class b{constructor(e,t){this.db=null,this.sequence=0,this.apiKey=e,this.maxQueueHard=t}async open(){return new Promise((e,t)=>{const n=indexedDB.open("truesight_events",1);n.onupgradeneeded=()=>{const e=n.result;if(!e.objectStoreNames.contains(y)){e.createObjectStore(y,{keyPath:"event_id"}).createIndex("timestamp","timestamp",{unique:!1})}},n.onsuccess=()=>{this.db=n.result,w.debug("IndexedDB opened successfully"),e()},n.onerror=()=>{w.error("Failed to open IndexedDB",n.error),t(n.error)}})}getStore(e){if(!this.db)throw new Error("Database not opened. Call open() first.");return this.db.transaction(y,e).objectStore(y)}async enqueue(e){const t=await this.size();t>=this.maxQueueHard&&(w.warn(`Queue at hard limit (${t}/${this.maxQueueHard}), evicting oldest 500 events`),await this.evictOldest(500));const n=await s(this.apiKey),i=await u(JSON.stringify(e),n),r={event_id:e.event_id,timestamp:1e3*Date.now()+this.sequence++,encrypted:i};return new Promise((t,n)=>{const i=this.getStore("readwrite").put(r);i.onsuccess=()=>{w.debug(`Event enqueued: ${e.event_id}`),t()},i.onerror=()=>{w.error("Failed to enqueue event",i.error),n(i.error)}})}async dequeue(e){const t=await s(this.apiKey),n=await this.getOldest(e),i=[];for(const e of n)try{const n=await l(e.encrypted,t);i.push(JSON.parse(n))}catch(t){w.error("Failed to decrypt event",e.event_id,t),await this.remove([e.event_id])}return i}getOldest(e){return new Promise((t,n)=>{const i=this.getStore("readonly").index("timestamp").openCursor(null,"next"),r=[];i.onsuccess=()=>{const n=i.result;n&&r.length<e?(r.push(n.value),n.continue()):t(r)},i.onerror=()=>{n(i.error)}})}async remove(e){if(0!==e.length)return new Promise((t,n)=>{if(!this.db)return void n(new Error("Database not opened"));const i=this.db.transaction(y,"readwrite"),r=i.objectStore(y);for(const t of e)r.delete(t);i.oncomplete=()=>{w.debug(`Removed ${e.length} events from queue`),t()},i.onerror=()=>{w.error("Failed to remove events",i.error),n(i.error)}})}async size(){return new Promise((e,t)=>{const n=this.getStore("readonly").count();n.onsuccess=()=>{e(n.result)},n.onerror=()=>{t(n.error)}})}async clear(){return new Promise((e,t)=>{const n=this.getStore("readwrite").clear();n.onsuccess=()=>{w.debug("Event queue cleared"),e()},n.onerror=()=>{t(n.error)}})}async evictOldest(e){const t=(await this.getOldest(e)).map(e=>e.event_id);await this.remove(t)}close(){this.db&&(this.db.close(),this.db=null)}}let g=null,p=!1,v=!0;async function S(e){const t=await async function(){if(g)return g;if(p)return null;p=!0;try{return g=await import("fzstd"),w.debug("fzstd loaded successfully"),g}catch(e){return w.warn("fzstd not available, compression disabled",e),v=!1,null}}();if(!t)throw new Error("zstd compression not available");try{return"compress"in t?t.compress(e):(v=!1,e)}catch(t){return w.warn("Compression failed, falling back to uncompressed",t),v=!1,e}}function I(e){const t=1e3*Math.pow(2,e);return Math.min(t,6e4)}function x(e){return 429===e||e>=500&&e<600}function E(e){return new Promise(t=>setTimeout(t,e))}class z{constructor(e,t){this.timerId=null,this.flushPromise=Promise.resolve(),this.isFlushing=!1,this.networkDebounceTimer=null,this.boundVisibilityHandler=null,this.boundBeforeUnloadHandler=null,this.boundOnlineHandler=null,this.config=e,this.queue=t}start(){this.timerId?w.warn("Flush scheduler already started"):(this.timerId=setInterval(()=>{this.scheduleFlush()},this.config.flushInterval),"undefined"!=typeof document&&(this.boundVisibilityHandler=()=>{"hidden"===document.visibilityState&&this.flushWithBeacon()},document.addEventListener("visibilitychange",this.boundVisibilityHandler)),"undefined"!=typeof window&&(this.boundBeforeUnloadHandler=()=>{this.flushWithBeacon()},window.addEventListener("beforeunload",this.boundBeforeUnloadHandler)),"undefined"!=typeof window&&(this.boundOnlineHandler=()=>{this.networkDebounceTimer&&clearTimeout(this.networkDebounceTimer),this.networkDebounceTimer=setTimeout(()=>{w.debug("Network restored, flushing"),this.scheduleFlush(),this.networkDebounceTimer=null},2e3)},window.addEventListener("online",this.boundOnlineHandler)),w.debug("Flush scheduler started"))}stop(){this.timerId&&(clearInterval(this.timerId),this.timerId=null),this.networkDebounceTimer&&(clearTimeout(this.networkDebounceTimer),this.networkDebounceTimer=null),"undefined"!=typeof document&&this.boundVisibilityHandler&&(document.removeEventListener("visibilitychange",this.boundVisibilityHandler),this.boundVisibilityHandler=null),"undefined"!=typeof window&&(this.boundBeforeUnloadHandler&&(window.removeEventListener("beforeunload",this.boundBeforeUnloadHandler),this.boundBeforeUnloadHandler=null),this.boundOnlineHandler&&(window.removeEventListener("online",this.boundOnlineHandler),this.boundOnlineHandler=null)),w.debug("Flush scheduler stopped")}scheduleFlush(){this.flushPromise=this.flushPromise.then(()=>this.doFlush())}async flush(){return new Promise(e=>{this.flushPromise=this.flushPromise.then(async()=>{await this.doFlush(),e()})})}async doFlush(){if(!this.isFlushing){this.isFlushing=!0;try{const e=await this.queue.size();if(0===e)return void w.debug("Nothing to flush");const t=Math.min(this.config.maxBatchSize,e),n=await this.queue.dequeue(t);if(0===n.length)return;const i={batch:n,sent_at:(new Date).toISOString()},r=await async function(e,t,n,i=!0){const r=JSON.stringify(n),s=new TextEncoder;let o=r,a=null;if(i&&v)try{const e=await S(s.encode(r));o=new Blob([e.buffer],{type:"application/octet-stream"}),a="zstd"}catch{w.warn("Compression failed, sending uncompressed"),o=r}const u={"Content-Type":"application/json","X-API-Key":t};a&&(u["Content-Encoding"]=a);let l=null,d=null;for(let t=0;t<=10;t++){try{const i=await fetch(e,{method:"POST",headers:u,body:o});if(i.ok)return w.debug(`Batch sent successfully: ${n.batch.length} events`),i;if(d=i,!x(i.status))return w.error(`Non-retryable HTTP error: ${i.status} ${i.statusText}`),i;w.warn(`Retryable HTTP error: ${i.status}, attempt ${t+1}/10`)}catch(e){l=e,w.warn(`Network error on attempt ${t+1}/10:`,e)}if(t<10){const e=I(t);w.debug(`Backing off for ${e}ms`),await E(e)}}if(d)return d;throw l||new Error("sendBatch failed after all retries")}(this.config.endpoint,this.config.apiKey,i);if(r.ok){const e=n.map(e=>e.event_id);await this.queue.remove(e),w.debug(`Flushed ${n.length} events successfully`)}else w.error(`Flush failed with status: ${r.status}`)}catch(e){w.error("Flush error:",e)}finally{this.isFlushing=!1}}}async flushWithBeacon(){try{const e=await this.queue.size();if(0===e)return;const t=Math.min(this.config.maxBatchSize,e),n=await this.queue.dequeue(t);if(0===n.length)return;const i={batch:n,sent_at:(new Date).toISOString()},r=function(e,t,n){try{const i=JSON.stringify(n),r=new Blob([i],{type:"application/json"}),s=new URL(e);s.searchParams.set("api_key",t);const o=navigator.sendBeacon(s.toString(),r);return o?w.debug(`Beacon sent: ${n.batch.length} events`):w.warn("sendBeacon returned false"),o}catch(e){return w.error("sendBeacon failed:",e),!1}}(this.config.endpoint,this.config.apiKey,i);if(r){const e=n.map(e=>e.event_id);await this.queue.remove(e)}}catch(e){w.error("Beacon flush error:",e)}}}function T(e){const t=[["Chrome",/Chrome\/(\d+[\d.]*)/],["Firefox",/Firefox\/(\d+[\d.]*)/],["Safari",/Version\/(\d+[\d.]*).*Safari/],["Edge",/Edg\/(\d+[\d.]*)/],["Opera",/OPR\/(\d+[\d.]*)/]];for(const[n,i]of t){const t=e.match(i);if(t)return`${n} ${t[1]}`}return"Unknown"}function _(e){return/Tablet|iPad/i.test(e)?"Tablet":/Mobile|Android|iPhone|iPod/i.test(e)?"Mobile":"Desktop"}let q=null;async function D(){if(q)return q;const e="undefined"!=typeof navigator?navigator.userAgent:"Unknown",t="undefined"!=typeof navigator?navigator:null,n=await async function(){const e=[];"undefined"!=typeof screen&&e.push(`${screen.width}x${screen.height}x${screen.colorDepth}`);try{e.push(Intl.DateTimeFormat().resolvedOptions().timeZone)}catch{e.push("unknown-tz")}"undefined"!=typeof navigator&&e.push(navigator.language);try{if("undefined"!=typeof document){const t=document.createElement("canvas"),n=t.getContext("2d");n&&(t.width=200,t.height=50,n.textBaseline="top",n.font="14px Arial",n.fillStyle="#f60",n.fillRect(0,0,200,50),n.fillStyle="#069",n.fillText("TrueSight fingerprint",2,15),e.push(t.toDataURL()))}}catch{e.push("no-canvas")}const t=(new TextEncoder).encode(e.join("|")),n=await crypto.subtle.digest("SHA-256",t),i=new Uint8Array(n);return Array.from(i).map(e=>e.toString(16).padStart(2,"0")).join("")}();return q={app_version:"undefined"!=typeof document&&document.querySelector("meta[name=version]")?.getAttribute("content")||"unknown",os_name:"Web",os_version:T(e),device_model:_(e),device_id:n,network_type:t?.connection?.effectiveType||"unknown",locale:t?.language||"unknown",timezone:(()=>{try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return"unknown"}})(),sdk_version:"0.1.0",screen_width:"undefined"!=typeof screen?screen.width:0,screen_height:"undefined"!=typeof screen?screen.height:0},q}const k="truesight_anonymous_id";function B(){return crypto.randomUUID()}function H(){try{return"undefined"!=typeof localStorage?localStorage:null}catch{return null}}async function F(e,t){const n=H();if(!n)return;const i=await s(t),r=await u(e,i);n.setItem(k,JSON.stringify(r))}async function O(e){const t=await async function(e){try{const t=H();if(!t)return null;const n=t.getItem(k);if(!n)return null;const i=JSON.parse(n),r=await s(e);return await l(i,r)}catch{return null}}(e);if(t)return t;const n=B();return await F(n,e),n}class P{constructor(){this.initialized=!1,this.userId=null,this.anonymousId="",this.mobileNumber=null,this.email=null,this.traits={}}async init(t){if(this.initialized)w.warn("TrueSight already initialized");else{if(!t.apiKey)throw new Error("apiKey is required");if(!t.endpoint)throw new Error("endpoint is required");this.config=function(t){return{apiKey:t.apiKey,endpoint:t.endpoint,...e,...t.options}}(t),w.setDebug(this.config.debug),this.anonymousId=await O(this.config.apiKey),this.queue=new b(this.config.apiKey,this.config.maxQueueHard),await this.queue.open(),this.scheduler=new z(this.config,this.queue),this.scheduler.start(),this.initialized=!0,w.info("TrueSight SDK initialized")}}async track(e,t={}){this.ensureInitialized(),e?await this.enqueueEvent("track",e,t):w.warn("track() called with empty event name")}async identify(e,t={}){this.ensureInitialized(),e?(this.userId=e,this.traits={...this.traits,...t},"string"==typeof t.mobile_number&&t.mobile_number&&(this.mobileNumber=t.mobile_number),"string"==typeof t.email&&t.email&&(this.email=t.email),await this.enqueueEvent("identify","identify",t)):w.warn("identify() called with empty userId")}async screen(e,t={}){this.ensureInitialized(),e?await this.enqueueEvent("screen","$screen",{screen_name:e,...t}):w.warn("screen() called with empty screen name")}async flush(){this.ensureInitialized(),await this.scheduler.flush()}async reset(){this.ensureInitialized(),this.userId=null,this.mobileNumber=null,this.email=null,this.traits={},this.anonymousId=await async function(e){const t=B();return await F(t,e),t}(this.config.apiKey),w.debug("SDK state reset")}setMobileNumber(e){this.ensureInitialized();const t=e.replace(/\D/g,"");10===t.length?(this.mobileNumber=t,w.debug("Mobile number set")):w.warn(`Invalid mobile number: expected 10 digits, got ${t.length}`)}setEmail(e){this.ensureInitialized(),this.email=e,w.debug("Email set")}isInitialized(){return this.initialized}getUserId(){return this.userId}getAnonymousId(){return this.anonymousId}getMobileNumber(){return this.mobileNumber}getEmail(){return this.email}destroy(){this.scheduler&&this.scheduler.stop(),this.queue&&this.queue.close(),this.initialized=!1,this.userId=null,this.anonymousId="",this.mobileNumber=null,this.email=null,this.traits={},n=null,i=null,q=null,w.debug("SDK destroyed")}ensureInitialized(){if(!this.initialized)throw new Error("TrueSight SDK not initialized. Call init() first.")}async enqueueEvent(e,t,n){const i=await D(),r={event_id:crypto.randomUUID(),event_name:t,event_type:e,user_id:this.userId,anonymous_id:this.anonymousId,mobile_number:this.mobileNumber,email:this.email,client_timestamp:(new Date).toISOString(),properties:n,context:i},s=JSON.stringify(r);if(s.length>this.config.maxEventSize)return void w.warn(`Event exceeds maxEventSize (${s.length} > ${this.config.maxEventSize}), dropping`);const o=await this.queue.size();o>=this.config.maxQueueSize&&(w.warn(`Queue at soft limit (${o}/${this.config.maxQueueSize}), triggering flush`),this.scheduler.scheduleFlush()),await this.queue.enqueue(r),w.debug(`Event queued: ${e} - ${t}`)}}const $=new P,K=$.init.bind($),N=$.track.bind($),A=$.identify.bind($),U=$.screen.bind($),C=$.flush.bind($),M=$.reset.bind($),Q=$.setMobileNumber.bind($),L=$.setEmail.bind($);export{P as TrueSightSDK,$ as default,C as flush,A as identify,K as init,M as reset,U as screen,L as setEmail,Q as setMobileNumber,N as track};
|
|
2
|
+
//# sourceMappingURL=truesight.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truesight.esm.js","sources":["../src/config.ts","../src/encryption.ts","../src/logger.ts","../src/event-queue.ts","../src/compression.ts","../src/network-client.ts","../src/flush-scheduler.ts","../src/device-context.ts","../src/anonymous-id.ts","../src/truesight.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null],"names":["DEFAULT_CONFIG","flushInterval","maxBatchSize","maxQueueSize","maxQueueHard","maxEventSize","debug","SALT","TextEncoder","encode","cachedKey","cachedKeySource","getCrypto","globalThis","crypto","subtle","Error","async","deriveKey","apiKey","keySource","window","location","origin","keyData","hashBuffer","digest","baseKey","importKey","derivedKey","name","salt","iterations","hash","length","arrayBufferToBase64","buffer","bytes","Uint8Array","binary","i","byteLength","String","fromCharCode","btoa","base64ToArrayBuffer","base64","atob","charCodeAt","encrypt","data","key","encoder","iv","array","getRandomValues","ciphertext","decrypt","encrypted","decrypted","TextDecoder","decode","LOG_LEVELS","PREFIX","logger","constructor","this","level","setDebug","args","console","info","warn","error","STORE_NAME","EventQueue","db","sequence","open","Promise","resolve","reject","request","indexedDB","onupgradeneeded","result","objectStoreNames","contains","createObjectStore","keyPath","createIndex","unique","onsuccess","onerror","getStore","mode","transaction","objectStore","enqueue","event","currentSize","size","evictOldest","JSON","stringify","stored","event_id","timestamp","Date","now","put","dequeue","count","storedEvents","getOldest","events","json","push","parse","err","remove","index","openCursor","results","cursor","value","continue","ids","tx","store","id","delete","oncomplete","clear","map","e","close","fzstdModule","loadAttempted","isSupported","compress","mod","import","loadFzstd","calculateBackoff","attempt","backoff","Math","pow","min","isRetryableStatus","status","sleep","ms","setTimeout","FlushScheduler","config","queue","timerId","flushPromise","isFlushing","networkDebounceTimer","boundVisibilityHandler","boundBeforeUnloadHandler","boundOnlineHandler","start","setInterval","scheduleFlush","document","visibilityState","flushWithBeacon","addEventListener","clearTimeout","stop","clearInterval","removeEventListener","then","doFlush","flush","queueSize","batchSize","payload","batch","sent_at","toISOString","response","endpoint","compressPayload","jsonStr","body","contentEncoding","compressionSupported","compressed","Blob","type","headers","lastError","lastResponse","fetch","method","ok","statusText","sendBatch","success","blob","url","URL","searchParams","set","navigator","sendBeacon","toString","parseBrowserVersion","ua","patterns","regex","match","detectDeviceModel","test","cachedContext","getDeviceContext","userAgent","nav","deviceId","components","screen","width","height","colorDepth","Intl","DateTimeFormat","resolvedOptions","timeZone","language","canvas","createElement","ctx","getContext","textBaseline","font","fillStyle","fillRect","fillText","toDataURL","join","hashArray","Array","from","b","padStart","generateDeviceId","app_version","querySelector","getAttribute","os_name","os_version","device_model","device_id","network_type","connection","effectiveType","locale","timezone","sdk_version","screen_width","screen_height","STORAGE_KEY","generateUUIDv4","randomUUID","getStorage","localStorage","writeEncrypted","storage","setItem","getOrCreateAnonymousId","existing","raw","getItem","readEncrypted","newId","TrueSightSDK","initialized","userId","anonymousId","mobileNumber","email","traits","init","initConfig","options","buildConfig","scheduler","track","eventName","properties","ensureInitialized","enqueueEvent","identify","mobile_number","screenName","screen_name","reset","resetAnonymousId","setMobileNumber","number","digits","replace","setEmail","isInitialized","getUserId","getAnonymousId","getMobileNumber","getEmail","destroy","eventType","context","event_name","event_type","user_id","anonymous_id","client_timestamp","serialized","instance","bind"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TrueSight={})}(this,function(e){"use strict";const t={flushInterval:3e4,maxBatchSize:20,maxQueueSize:1e3,maxQueueHard:5e3,maxEventSize:32768,debug:!1};const n=(new TextEncoder).encode("truesight-web-sdk-v1");let i=null,r=null;function s(){if(void 0!==globalThis.crypto&&globalThis.crypto.subtle)return globalThis.crypto.subtle;throw new Error("Web Crypto API is not available")}async function o(e){const t=e+("undefined"!=typeof window?window.location.origin:"unknown");if(i&&r===t)return i;const o=s(),a=(new TextEncoder).encode(t),u=await o.digest("SHA-256",a),l=await o.importKey("raw",u,"PBKDF2",!1,["deriveKey"]),h=await o.deriveKey({name:"PBKDF2",salt:n,iterations:1e5,hash:"SHA-256"},l,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return i=h,r=t,h}function a(e){const t=new Uint8Array(e);let n="";for(let e=0;e<t.byteLength;e++)n+=String.fromCharCode(t[e]);return btoa(n)}function u(e){const t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n.buffer}async function l(e,t){const n=s(),i=new TextEncoder,r=(o=new Uint8Array(12),globalThis.crypto.getRandomValues(o));var o;const u=await n.encrypt({name:"AES-GCM",iv:r},t,i.encode(e));return{iv:a(r.buffer),ciphertext:a(u)}}async function h(e,t){const n=s(),i=new Uint8Array(u(e.iv)),r=u(e.ciphertext),o=await n.decrypt({name:"AES-GCM",iv:i},t,r);return(new TextDecoder).decode(o)}const c=0,d=1,f=2,b=3,y="[TrueSight]";const m=new class{constructor(e=!1){this.level=e?c:f}setDebug(e){this.level=e?c:f}debug(...e){this.level<=c&&console.debug(y,...e)}info(...e){this.level<=d&&console.info(y,...e)}warn(...e){this.level<=f&&console.warn(y,...e)}error(...e){this.level<=b&&console.error(y,...e)}},w="events";class g{constructor(e,t){this.db=null,this.sequence=0,this.apiKey=e,this.maxQueueHard=t}async open(){return new Promise((e,t)=>{const n=indexedDB.open("truesight_events",1);n.onupgradeneeded=()=>{const e=n.result;if(!e.objectStoreNames.contains(w)){e.createObjectStore(w,{keyPath:"event_id"}).createIndex("timestamp","timestamp",{unique:!1})}},n.onsuccess=()=>{this.db=n.result,m.debug("IndexedDB opened successfully"),e()},n.onerror=()=>{m.error("Failed to open IndexedDB",n.error),t(n.error)}})}getStore(e){if(!this.db)throw new Error("Database not opened. Call open() first.");return this.db.transaction(w,e).objectStore(w)}async enqueue(e){const t=await this.size();t>=this.maxQueueHard&&(m.warn(`Queue at hard limit (${t}/${this.maxQueueHard}), evicting oldest 500 events`),await this.evictOldest(500));const n=await o(this.apiKey),i=await l(JSON.stringify(e),n),r={event_id:e.event_id,timestamp:1e3*Date.now()+this.sequence++,encrypted:i};return new Promise((t,n)=>{const i=this.getStore("readwrite").put(r);i.onsuccess=()=>{m.debug(`Event enqueued: ${e.event_id}`),t()},i.onerror=()=>{m.error("Failed to enqueue event",i.error),n(i.error)}})}async dequeue(e){const t=await o(this.apiKey),n=await this.getOldest(e),i=[];for(const e of n)try{const n=await h(e.encrypted,t);i.push(JSON.parse(n))}catch(t){m.error("Failed to decrypt event",e.event_id,t),await this.remove([e.event_id])}return i}getOldest(e){return new Promise((t,n)=>{const i=this.getStore("readonly").index("timestamp").openCursor(null,"next"),r=[];i.onsuccess=()=>{const n=i.result;n&&r.length<e?(r.push(n.value),n.continue()):t(r)},i.onerror=()=>{n(i.error)}})}async remove(e){if(0!==e.length)return new Promise((t,n)=>{if(!this.db)return void n(new Error("Database not opened"));const i=this.db.transaction(w,"readwrite"),r=i.objectStore(w);for(const t of e)r.delete(t);i.oncomplete=()=>{m.debug(`Removed ${e.length} events from queue`),t()},i.onerror=()=>{m.error("Failed to remove events",i.error),n(i.error)}})}async size(){return new Promise((e,t)=>{const n=this.getStore("readonly").count();n.onsuccess=()=>{e(n.result)},n.onerror=()=>{t(n.error)}})}async clear(){return new Promise((e,t)=>{const n=this.getStore("readwrite").clear();n.onsuccess=()=>{m.debug("Event queue cleared"),e()},n.onerror=()=>{t(n.error)}})}async evictOldest(e){const t=(await this.getOldest(e)).map(e=>e.event_id);await this.remove(t)}close(){this.db&&(this.db.close(),this.db=null)}}let p=null,v=!1,S=!0;async function I(e){const t=await async function(){if(p)return p;if(v)return null;v=!0;try{return p=await Promise.resolve().then(function(){return pe}),m.debug("fzstd loaded successfully"),p}catch(e){return m.warn("fzstd not available, compression disabled",e),S=!1,null}}();if(!t)throw new Error("zstd compression not available");try{return"compress"in t?t.compress(e):(S=!1,e)}catch(t){return m.warn("Compression failed, falling back to uncompressed",t),S=!1,e}}function E(e){const t=1e3*Math.pow(2,e);return Math.min(t,6e4)}function T(e){return 429===e||e>=500&&e<600}function z(e){return new Promise(t=>setTimeout(t,e))}class x{constructor(e,t){this.timerId=null,this.flushPromise=Promise.resolve(),this.isFlushing=!1,this.networkDebounceTimer=null,this.boundVisibilityHandler=null,this.boundBeforeUnloadHandler=null,this.boundOnlineHandler=null,this.config=e,this.queue=t}start(){this.timerId?m.warn("Flush scheduler already started"):(this.timerId=setInterval(()=>{this.scheduleFlush()},this.config.flushInterval),"undefined"!=typeof document&&(this.boundVisibilityHandler=()=>{"hidden"===document.visibilityState&&this.flushWithBeacon()},document.addEventListener("visibilitychange",this.boundVisibilityHandler)),"undefined"!=typeof window&&(this.boundBeforeUnloadHandler=()=>{this.flushWithBeacon()},window.addEventListener("beforeunload",this.boundBeforeUnloadHandler)),"undefined"!=typeof window&&(this.boundOnlineHandler=()=>{this.networkDebounceTimer&&clearTimeout(this.networkDebounceTimer),this.networkDebounceTimer=setTimeout(()=>{m.debug("Network restored, flushing"),this.scheduleFlush(),this.networkDebounceTimer=null},2e3)},window.addEventListener("online",this.boundOnlineHandler)),m.debug("Flush scheduler started"))}stop(){this.timerId&&(clearInterval(this.timerId),this.timerId=null),this.networkDebounceTimer&&(clearTimeout(this.networkDebounceTimer),this.networkDebounceTimer=null),"undefined"!=typeof document&&this.boundVisibilityHandler&&(document.removeEventListener("visibilitychange",this.boundVisibilityHandler),this.boundVisibilityHandler=null),"undefined"!=typeof window&&(this.boundBeforeUnloadHandler&&(window.removeEventListener("beforeunload",this.boundBeforeUnloadHandler),this.boundBeforeUnloadHandler=null),this.boundOnlineHandler&&(window.removeEventListener("online",this.boundOnlineHandler),this.boundOnlineHandler=null)),m.debug("Flush scheduler stopped")}scheduleFlush(){this.flushPromise=this.flushPromise.then(()=>this.doFlush())}async flush(){return new Promise(e=>{this.flushPromise=this.flushPromise.then(async()=>{await this.doFlush(),e()})})}async doFlush(){if(!this.isFlushing){this.isFlushing=!0;try{const e=await this.queue.size();if(0===e)return void m.debug("Nothing to flush");const t=Math.min(this.config.maxBatchSize,e),n=await this.queue.dequeue(t);if(0===n.length)return;const i={batch:n,sent_at:(new Date).toISOString()},r=await async function(e,t,n,i=!0){const r=JSON.stringify(n),s=new TextEncoder;let o=r,a=null;if(i&&S)try{const e=await I(s.encode(r));o=new Blob([e.buffer],{type:"application/octet-stream"}),a="zstd"}catch{m.warn("Compression failed, sending uncompressed"),o=r}const u={"Content-Type":"application/json","X-API-Key":t};a&&(u["Content-Encoding"]=a);let l=null,h=null;for(let t=0;t<=10;t++){try{const i=await fetch(e,{method:"POST",headers:u,body:o});if(i.ok)return m.debug(`Batch sent successfully: ${n.batch.length} events`),i;if(h=i,!T(i.status))return m.error(`Non-retryable HTTP error: ${i.status} ${i.statusText}`),i;m.warn(`Retryable HTTP error: ${i.status}, attempt ${t+1}/10`)}catch(e){l=e,m.warn(`Network error on attempt ${t+1}/10:`,e)}if(t<10){const e=E(t);m.debug(`Backing off for ${e}ms`),await z(e)}}if(h)return h;throw l||new Error("sendBatch failed after all retries")}(this.config.endpoint,this.config.apiKey,i);if(r.ok){const e=n.map(e=>e.event_id);await this.queue.remove(e),m.debug(`Flushed ${n.length} events successfully`)}else m.error(`Flush failed with status: ${r.status}`)}catch(e){m.error("Flush error:",e)}finally{this.isFlushing=!1}}}async flushWithBeacon(){try{const e=await this.queue.size();if(0===e)return;const t=Math.min(this.config.maxBatchSize,e),n=await this.queue.dequeue(t);if(0===n.length)return;const i={batch:n,sent_at:(new Date).toISOString()},r=function(e,t,n){try{const i=JSON.stringify(n),r=new Blob([i],{type:"application/json"}),s=new URL(e);s.searchParams.set("api_key",t);const o=navigator.sendBeacon(s.toString(),r);return o?m.debug(`Beacon sent: ${n.batch.length} events`):m.warn("sendBeacon returned false"),o}catch(e){return m.error("sendBeacon failed:",e),!1}}(this.config.endpoint,this.config.apiKey,i);if(r){const e=n.map(e=>e.event_id);await this.queue.remove(e)}}catch(e){m.error("Beacon flush error:",e)}}}function _(e){const t=[["Chrome",/Chrome\/(\d+[\d.]*)/],["Firefox",/Firefox\/(\d+[\d.]*)/],["Safari",/Version\/(\d+[\d.]*).*Safari/],["Edge",/Edg\/(\d+[\d.]*)/],["Opera",/OPR\/(\d+[\d.]*)/]];for(const[n,i]of t){const t=e.match(i);if(t)return`${n} ${t[1]}`}return"Unknown"}function k(e){return/Tablet|iPad/i.test(e)?"Tablet":/Mobile|Android|iPhone|iPod/i.test(e)?"Mobile":"Desktop"}let D=null;async function q(){if(D)return D;const e="undefined"!=typeof navigator?navigator.userAgent:"Unknown",t="undefined"!=typeof navigator?navigator:null,n=await async function(){const e=[];"undefined"!=typeof screen&&e.push(`${screen.width}x${screen.height}x${screen.colorDepth}`);try{e.push(Intl.DateTimeFormat().resolvedOptions().timeZone)}catch{e.push("unknown-tz")}"undefined"!=typeof navigator&&e.push(navigator.language);try{if("undefined"!=typeof document){const t=document.createElement("canvas"),n=t.getContext("2d");n&&(t.width=200,t.height=50,n.textBaseline="top",n.font="14px Arial",n.fillStyle="#f60",n.fillRect(0,0,200,50),n.fillStyle="#069",n.fillText("TrueSight fingerprint",2,15),e.push(t.toDataURL()))}}catch{e.push("no-canvas")}const t=(new TextEncoder).encode(e.join("|")),n=await crypto.subtle.digest("SHA-256",t),i=new Uint8Array(n);return Array.from(i).map(e=>e.toString(16).padStart(2,"0")).join("")}();return D={app_version:"undefined"!=typeof document&&document.querySelector("meta[name=version]")?.getAttribute("content")||"unknown",os_name:"Web",os_version:_(e),device_model:k(e),device_id:n,network_type:t?.connection?.effectiveType||"unknown",locale:t?.language||"unknown",timezone:(()=>{try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return"unknown"}})(),sdk_version:"0.1.0",screen_width:"undefined"!=typeof screen?screen.width:0,screen_height:"undefined"!=typeof screen?screen.height:0},D}const B="truesight_anonymous_id";function F(){return crypto.randomUUID()}function O(){try{return"undefined"!=typeof localStorage?localStorage:null}catch{return null}}async function H(e,t){const n=O();if(!n)return;const i=await o(t),r=await l(e,i);n.setItem(B,JSON.stringify(r))}async function P(e){const t=await async function(e){try{const t=O();if(!t)return null;const n=t.getItem(B);if(!n)return null;const i=JSON.parse(n),r=await o(e);return await h(i,r)}catch{return null}}(e);if(t)return t;const n=F();return await H(n,e),n}class ${constructor(){this.initialized=!1,this.userId=null,this.anonymousId="",this.mobileNumber=null,this.email=null,this.traits={}}async init(e){if(this.initialized)m.warn("TrueSight already initialized");else{if(!e.apiKey)throw new Error("apiKey is required");if(!e.endpoint)throw new Error("endpoint is required");this.config=function(e){return{apiKey:e.apiKey,endpoint:e.endpoint,...t,...e.options}}(e),m.setDebug(this.config.debug),this.anonymousId=await P(this.config.apiKey),this.queue=new g(this.config.apiKey,this.config.maxQueueHard),await this.queue.open(),this.scheduler=new x(this.config,this.queue),this.scheduler.start(),this.initialized=!0,m.info("TrueSight SDK initialized")}}async track(e,t={}){this.ensureInitialized(),e?await this.enqueueEvent("track",e,t):m.warn("track() called with empty event name")}async identify(e,t={}){this.ensureInitialized(),e?(this.userId=e,this.traits={...this.traits,...t},"string"==typeof t.mobile_number&&t.mobile_number&&(this.mobileNumber=t.mobile_number),"string"==typeof t.email&&t.email&&(this.email=t.email),await this.enqueueEvent("identify","identify",t)):m.warn("identify() called with empty userId")}async screen(e,t={}){this.ensureInitialized(),e?await this.enqueueEvent("screen","$screen",{screen_name:e,...t}):m.warn("screen() called with empty screen name")}async flush(){this.ensureInitialized(),await this.scheduler.flush()}async reset(){this.ensureInitialized(),this.userId=null,this.mobileNumber=null,this.email=null,this.traits={},this.anonymousId=await async function(e){const t=F();return await H(t,e),t}(this.config.apiKey),m.debug("SDK state reset")}setMobileNumber(e){this.ensureInitialized();const t=e.replace(/\D/g,"");10===t.length?(this.mobileNumber=t,m.debug("Mobile number set")):m.warn(`Invalid mobile number: expected 10 digits, got ${t.length}`)}setEmail(e){this.ensureInitialized(),this.email=e,m.debug("Email set")}isInitialized(){return this.initialized}getUserId(){return this.userId}getAnonymousId(){return this.anonymousId}getMobileNumber(){return this.mobileNumber}getEmail(){return this.email}destroy(){this.scheduler&&this.scheduler.stop(),this.queue&&this.queue.close(),this.initialized=!1,this.userId=null,this.anonymousId="",this.mobileNumber=null,this.email=null,this.traits={},i=null,r=null,D=null,m.debug("SDK destroyed")}ensureInitialized(){if(!this.initialized)throw new Error("TrueSight SDK not initialized. Call init() first.")}async enqueueEvent(e,t,n){const i=await q(),r={event_id:crypto.randomUUID(),event_name:t,event_type:e,user_id:this.userId,anonymous_id:this.anonymousId,mobile_number:this.mobileNumber,email:this.email,client_timestamp:(new Date).toISOString(),properties:n,context:i},s=JSON.stringify(r);if(s.length>this.config.maxEventSize)return void m.warn(`Event exceeds maxEventSize (${s.length} > ${this.config.maxEventSize}), dropping`);const o=await this.queue.size();o>=this.config.maxQueueSize&&(m.warn(`Queue at soft limit (${o}/${this.config.maxQueueSize}), triggering flush`),this.scheduler.scheduleFlush()),await this.queue.enqueue(r),m.debug(`Event queued: ${e} - ${t}`)}}const A=new $,K=A.init.bind(A),N=A.track.bind(A),U=A.identify.bind(A),C=A.screen.bind(A),M=A.flush.bind(A),j=A.reset.bind(A),L=A.setMobileNumber.bind(A),Q=A.setEmail.bind(A);var V=ArrayBuffer,W=Uint8Array,J=Uint16Array,R=Int16Array,G=Int32Array,Z=function(e,t,n){if(W.prototype.slice)return W.prototype.slice.call(e,t,n);(null==t||t<0)&&(t=0),(null==n||n>e.length)&&(n=e.length);var i=new W(n-t);return i.set(e.subarray(t,n)),i},X=function(e,t,n,i){if(W.prototype.fill)return W.prototype.fill.call(e,t,n,i);for((null==n||n<0)&&(n=0),(null==i||i>e.length)&&(i=e.length);n<i;++n)e[n]=t;return e},Y=function(e,t,n,i){if(W.prototype.copyWithin)return W.prototype.copyWithin.call(e,t,n,i);for((null==n||n<0)&&(n=0),(null==i||i>e.length)&&(i=e.length);n<i;)e[t++]=e[n++]},ee=["invalid zstd data","window size too large (>2046MB)","invalid block type","FSE accuracy too high","match distance too far back","unexpected EOF"],te=function(e,t,n){var i=new Error(t||ee[e]);if(i.code=e,Error.captureStackTrace&&Error.captureStackTrace(i,te),!n)throw i;return i},ne=function(e,t,n){for(var i=0,r=0;i<n;++i)r|=e[t++]<<(i<<3);return r},ie=function(e,t){var n,i,r=e[0]|e[1]<<8|e[2]<<16;if(3126568==r&&253==e[3]){var s=e[4],o=s>>5&1,a=s>>2&1,u=3&s,l=s>>6;8&s&&te(0);var h=6-o,c=3==u?4:u,d=ne(e,h,c),f=l?1<<l:o,b=ne(e,h+=c,f)+(1==l&&256),y=b;if(!o){var m=1<<10+(e[5]>>3);y=m+(m>>3)*(7&e[5])}y>2145386496&&te(1);var w=new W((1==t?b||y:t?0:y)+12);return w[0]=1,w[4]=4,w[8]=8,{b:h+f,y:0,l:0,d:d,w:t&&1!=t?t:w.subarray(12),e:y,o:new G(w.buffer,0,3),u:b,c:a,m:Math.min(131072,y)}}if(25481893==(r>>4|e[3]<<20))return(((n=e)[i=4]|n[i+1]<<8|n[i+2]<<16|n[i+3]<<24)>>>0)+8;te(0)},re=function(e){for(var t=0;1<<t<=e;++t);return t-1},se=function(e,t,n){var i=4+(t<<3),r=5+(15&e[t]);r>n&&te(3);for(var s=1<<r,o=s,a=-1,u=-1,l=-1,h=s,c=new V(512+(s<<2)),d=new R(c,0,256),f=new J(c,0,256),b=new J(c,512,s),y=512+(s<<1),m=new W(c,y,s),w=new W(c,y+s);a<255&&o>0;){var g=re(o+1),p=i>>3,v=(1<<g+1)-1,S=(e[p]|e[p+1]<<8|e[p+2]<<16)>>(7&i)&v,I=(1<<g)-1,E=v-o-1,T=S&I;if(T<E?(i+=g,S=T):(i+=g+1,S>I&&(S-=E)),d[++a]=--S,-1==S?(o+=S,m[--h]=a):o-=S,!S)do{var z=i>>3;u=(e[z]|e[z+1]<<8)>>(7&i)&3,i+=2,a+=u}while(3==u)}(a>255||o)&&te(0);for(var x=0,_=(s>>1)+(s>>3)+3,k=s-1,D=0;D<=a;++D){var q=d[D];if(q<1)f[D]=-q;else for(l=0;l<q;++l){m[x]=D;do{x=x+_&k}while(x>=h)}}for(x&&te(0),l=0;l<s;++l){var B=f[m[l]]++,F=w[l]=r-re(B);b[l]=(B<<F)-s}return[i+7>>3,{b:r,s:m,n:w,t:b}]},oe=se(new W([81,16,99,140,49,198,24,99,12,33,196,24,99,102,102,134,70,146,4]),0,6)[1],ae=se(new W([33,20,196,24,99,140,33,132,16,66,8,33,132,16,66,8,33,68,68,68,68,68,68,68,68,36,9]),0,6)[1],ue=se(new W([32,132,16,66,102,70,68,68,68,68,36,73,2]),0,5)[1],le=function(e,t){for(var n=e.length,i=new G(n),r=0;r<n;++r)i[r]=t,t+=1<<e[r];return i},he=new W(new G([0,0,0,0,16843009,50528770,134678020,202050057,269422093]).buffer,0,36),ce=le(he,0),de=new W(new G([0,0,0,0,0,0,0,0,16843009,50528770,117769220,185207048,252579084,16]).buffer,0,53),fe=le(de,3),be=function(e,t,n){var i=e.length,r=t.length,s=e[i-1],o=(1<<n.b)-1,a=-n.b;s||te(0);for(var u=0,l=n.b,h=(i<<3)-8+re(s)-l,c=-1;h>a&&c<r;){var d=h>>3;u=(u<<l|(e[d]|e[d+1]<<8|e[d+2]<<16)>>(7&h))&o,t[++c]=n.s[u],h-=l=n.n[u]}h==a&&c+1==r||te(0)},ye=function(e,t,n){var i=6,r=t.length+3>>2,s=r<<1,o=r+s;be(e.subarray(i,i+=e[0]|e[1]<<8),t.subarray(0,r),n),be(e.subarray(i,i+=e[2]|e[3]<<8),t.subarray(r,s),n),be(e.subarray(i,i+=e[4]|e[5]<<8),t.subarray(s,o),n),be(e.subarray(i),t.subarray(o),n)},me=function(e,t,n){var i,r=t.b,s=e[r],o=s>>1&3;t.l=1&s;var a=s>>3|e[r+1]<<5|e[r+2]<<13,u=(r+=3)+a;if(1==o){if(r>=e.length)return;return t.b=r+1,n?(X(n,e[r],t.y,t.y+=a),n):X(new W(a),e[r])}if(!(u>e.length)){if(0==o)return t.b=u,n?(n.set(e.subarray(r,u),t.y),t.y+=a,n):Z(e,r,u);if(2==o){var l=e[r],h=3&l,c=l>>2&3,d=l>>4,f=0,b=0;h<2?1&c?d|=e[++r]<<4|(2&c&&e[++r]<<12):d=l>>3:(b=c,c<2?(d|=(63&e[++r])<<4,f=e[r]>>6|e[++r]<<2):2==c?(d|=e[++r]<<4|(3&e[++r])<<12,f=e[r]>>2|e[++r]<<6):(d|=e[++r]<<4|(63&e[++r])<<12,f=e[r]>>6|e[++r]<<2|e[++r]<<10)),++r;var y=n?n.subarray(t.y,t.y+t.m):new W(t.m),m=y.length-d;if(0==h)y.set(e.subarray(r,r+=d),m);else if(1==h)X(y,e[r++],m);else{var w=t.h;if(2==h){var g=function(e,t){var n=0,i=-1,r=new W(292),s=e[t],o=r.subarray(0,256),a=r.subarray(256,268),u=new J(r.buffer,268);if(s<128){var l=se(e,t+1,6),h=l[0],c=l[1],d=h<<3,f=e[t+=s];f||te(0);for(var b=0,y=0,m=c.b,w=m,g=(++t<<3)-8+re(f);!((g-=m)<d);){var p=g>>3;if(b+=(e[p]|e[p+1]<<8)>>(7&g)&(1<<m)-1,o[++i]=c.s[b],(g-=w)<d)break;y+=(e[p=g>>3]|e[p+1]<<8)>>(7&g)&(1<<w)-1,o[++i]=c.s[y],m=c.n[b],b=c.t[b],w=c.n[y],y=c.t[y]}++i>255&&te(0)}else{for(i=s-127;n<i;n+=2){var v=e[++t];o[n]=v>>4,o[n+1]=15&v}++t}var S=0;for(n=0;n<i;++n)(z=o[n])>11&&te(0),S+=z&&1<<z-1;var I=re(S)+1,E=1<<I,T=E-S;for(T&T-1&&te(0),o[i++]=re(T)+1,n=0;n<i;++n){var z=o[n];++a[o[n]=z&&I+1-z]}var x=new W(E<<1),_=x.subarray(0,E),k=x.subarray(E);for(u[I]=0,n=I;n>0;--n){var D=u[n];X(k,n,D,u[n-1]=D+a[n]*(1<<I-n))}for(u[0]!=E&&te(0),n=0;n<i;++n){var q=o[n];if(q){var B=u[q];X(_,n,B,u[q]=B+(1<<I-q))}}return[t,{n:k,b:I,s:_}]}(e,r);f+=r-(r=g[0]),t.h=w=g[1]}else w||te(0);(b?ye:be)(e.subarray(r,r+=f),y.subarray(m),w)}var p=e[r++];if(p){255==p?p=32512+(e[r++]|e[r++]<<8):p>127&&(p=p-128<<8|e[r++]);var v=e[r++];3&v&&te(0);for(var S=[ae,ue,oe],I=2;I>-1;--I){var E=v>>2+(I<<1)&3;if(1==E){var T=new W([0,0,e[r++]]);S[I]={s:T.subarray(2,3),n:T.subarray(0,1),t:new J(T.buffer,0,1),b:0}}else 2==E?(r=(i=se(e,r,9-(1&I)))[0],S[I]=i[1]):3==E&&(t.t||te(0),S[I]=t.t[I])}var z=t.t=S,x=z[0],_=z[1],k=z[2],D=e[u-1];D||te(0);var q=(u<<3)-8+re(D)-k.b,B=q>>3,F=0,O=(e[B]|e[B+1]<<8)>>(7&q)&(1<<k.b)-1,H=(e[B=(q-=_.b)>>3]|e[B+1]<<8)>>(7&q)&(1<<_.b)-1,P=(e[B=(q-=x.b)>>3]|e[B+1]<<8)>>(7&q)&(1<<x.b)-1;for(++p;--p;){var $=k.s[O],A=k.n[O],K=x.s[P],N=x.n[P],U=_.s[H],C=_.n[H],M=1<<U,j=M+((e[B=(q-=U)>>3]|e[B+1]<<8|e[B+2]<<16|e[B+3]<<24)>>>(7&q)&M-1);B=(q-=de[K])>>3;var L=fe[K]+((e[B]|e[B+1]<<8|e[B+2]<<16)>>(7&q)&(1<<de[K])-1);B=(q-=he[$])>>3;var Q=ce[$]+((e[B]|e[B+1]<<8|e[B+2]<<16)>>(7&q)&(1<<he[$])-1);if(B=(q-=A)>>3,O=k.t[O]+((e[B]|e[B+1]<<8)>>(7&q)&(1<<A)-1),B=(q-=N)>>3,P=x.t[P]+((e[B]|e[B+1]<<8)>>(7&q)&(1<<N)-1),B=(q-=C)>>3,H=_.t[H]+((e[B]|e[B+1]<<8)>>(7&q)&(1<<C)-1),j>3)t.o[2]=t.o[1],t.o[1]=t.o[0],t.o[0]=j-=3;else{var V=j-(0!=Q);V?(j=3==V?t.o[0]-1:t.o[V],V>1&&(t.o[2]=t.o[1]),t.o[1]=t.o[0],t.o[0]=j):j=t.o[0]}for(I=0;I<Q;++I)y[F+I]=y[m+I];m+=Q;var R=(F+=Q)-j;if(R<0){var G=-R,Y=t.e+R;G>L&&(G=L);for(I=0;I<G;++I)y[F+I]=t.w[Y+I];F+=G,L-=G,R=0}for(I=0;I<L;++I)y[F+I]=y[R+I];F+=L}if(F!=m)for(;m<y.length;)y[F++]=y[m++];else F=y.length;n?t.y+=F:y=Z(y,0,F)}else if(n){if(t.y+=d,m)for(I=0;I<d;++I)y[I]=y[m+I]}else m&&(y=Z(y,m));return t.b=u,y}te(2)}},we=function(e,t){if(1==e.length)return e[0];for(var n=new W(t),i=0,r=0;i<e.length;++i){var s=e[i];n.set(s,r),r+=s.length}return n};var ge=function(){function e(e){this.ondata=e,this.c=[],this.l=0,this.z=0}return e.prototype.push=function(e,t){if("number"==typeof this.s){var n=Math.min(e.length,this.s);e=e.subarray(n),this.s-=n}var i=e.length+this.l;if(!this.s){if(t){if(!i)return void this.ondata(new W(0),!0);i<5&&te(5)}else if(i<18)return this.c.push(e),void(this.l=i);if(this.l&&(this.c.push(e),e=we(this.c,i),this.c=[],this.l=0),"number"==typeof(this.s=ie(e)))return this.push(e,t)}if("number"!=typeof this.s){if(i<(this.z||3))return t&&te(5),this.c.push(e),void(this.l=i);if(this.l&&(this.c.push(e),e=we(this.c,i),this.c=[],this.l=0),!this.z&&i<(this.z=2&e[this.s.b]?4:3+(e[this.s.b]>>3|e[this.s.b+1]<<5|e[this.s.b+2]<<13)))return t&&te(5),this.c.push(e),void(this.l=i);for(this.z=0;;){var r=me(e,this.s);if(!r){t&&te(5);var s=e.subarray(this.s.b);return this.s.b=0,this.c.push(s),void(this.l+=s.length)}if(this.ondata(r,!1),Y(this.s.w,0,r.length),this.s.w.set(r,this.s.w.length-r.length),this.s.l){var o=e.subarray(this.s.b);return this.s=4*this.s.c,void this.push(o,t)}}}else t&&te(5)},e}(),pe=Object.freeze({__proto__:null,Decompress:ge,ZstdErrorCode:{InvalidData:0,WindowSizeTooLarge:1,InvalidBlockType:2,FSEAccuracyTooHigh:3,DistanceTooFarBack:4,UnexpectedEOF:5},decompress:function(e,t){for(var n=[],i=+!t,r=0,s=0;e.length;){var o=ie(e,i||t);if("object"==typeof o){for(i?(t=null,o.w.length==o.u&&(n.push(t=o.w),s+=o.u)):(n.push(t),o.e=0);!o.l;){var a=me(e,o,t);a||te(5),t?o.e=o.y:(n.push(a),s+=a.length,Y(o.w,0,a.length),o.w.set(a,o.w.length-a.length))}r=o.b+4*o.c}else r=o;e=e.subarray(r)}return we(n,s)}});e.TrueSightSDK=$,e.default=A,e.flush=M,e.identify=U,e.init=K,e.reset=j,e.screen=C,e.setEmail=Q,e.setMobileNumber=L,e.track=N,Object.defineProperty(e,"__esModule",{value:!0})});
|
|
2
|
+
//# sourceMappingURL=truesight.umd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truesight.umd.js","sources":["../src/config.ts","../src/encryption.ts","../src/logger.ts","../src/event-queue.ts","../src/compression.ts","../src/network-client.ts","../src/flush-scheduler.ts","../src/device-context.ts","../src/anonymous-id.ts","../src/truesight.ts","../src/index.ts","../../../node_modules/.pnpm/fzstd@0.1.1/node_modules/fzstd/esm/index.mjs"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,"// Some numerical data is initialized as -1 even when it doesn't need initialization to help the JIT infer types\n// aliases for shorter compressed code (most minifers don't do this)\nvar ab = ArrayBuffer, u8 = Uint8Array, u16 = Uint16Array, i16 = Int16Array, u32 = Uint32Array, i32 = Int32Array;\nvar slc = function (v, s, e) {\n if (u8.prototype.slice)\n return u8.prototype.slice.call(v, s, e);\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new u8(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar fill = function (v, n, s, e) {\n if (u8.prototype.fill)\n return u8.prototype.fill.call(v, n, s, e);\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n for (; s < e; ++s)\n v[s] = n;\n return v;\n};\nvar cpw = function (v, t, s, e) {\n if (u8.prototype.copyWithin)\n return u8.prototype.copyWithin.call(v, t, s, e);\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n while (s < e) {\n v[t++] = v[s++];\n }\n};\n/**\n * Codes for errors generated within this library\n */\nexport var ZstdErrorCode = {\n InvalidData: 0,\n WindowSizeTooLarge: 1,\n InvalidBlockType: 2,\n FSEAccuracyTooHigh: 3,\n DistanceTooFarBack: 4,\n UnexpectedEOF: 5\n};\n// error codes\nvar ec = [\n 'invalid zstd data',\n 'window size too large (>2046MB)',\n 'invalid block type',\n 'FSE accuracy too high',\n 'match distance too far back',\n 'unexpected EOF'\n];\nvar err = function (ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n};\nvar rb = function (d, b, n) {\n var i = 0, o = 0;\n for (; i < n; ++i)\n o |= d[b++] << (i << 3);\n return o;\n};\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\n// read Zstandard frame header\nvar rzfh = function (dat, w) {\n var n3 = dat[0] | (dat[1] << 8) | (dat[2] << 16);\n if (n3 == 0x2FB528 && dat[3] == 253) {\n // Zstandard\n var flg = dat[4];\n // single segment checksum dict flag frame content flag\n var ss = (flg >> 5) & 1, cc = (flg >> 2) & 1, df = flg & 3, fcf = flg >> 6;\n if (flg & 8)\n err(0);\n // byte\n var bt = 6 - ss;\n // dict bytes\n var db = df == 3 ? 4 : df;\n // dictionary id\n var di = rb(dat, bt, db);\n bt += db;\n // frame size bytes\n var fsb = fcf ? (1 << fcf) : ss;\n // frame source size\n var fss = rb(dat, bt, fsb) + ((fcf == 1) && 256);\n // window size\n var ws = fss;\n if (!ss) {\n // window descriptor\n var wb = 1 << (10 + (dat[5] >> 3));\n ws = wb + (wb >> 3) * (dat[5] & 7);\n }\n if (ws > 2145386496)\n err(1);\n var buf = new u8((w == 1 ? (fss || ws) : w ? 0 : ws) + 12);\n buf[0] = 1, buf[4] = 4, buf[8] = 8;\n return {\n b: bt + fsb,\n y: 0,\n l: 0,\n d: di,\n w: (w && w != 1) ? w : buf.subarray(12),\n e: ws,\n o: new i32(buf.buffer, 0, 3),\n u: fss,\n c: cc,\n m: Math.min(131072, ws)\n };\n }\n else if (((n3 >> 4) | (dat[3] << 20)) == 0x184D2A5) {\n // skippable\n return b4(dat, 4) + 8;\n }\n err(0);\n};\n// most significant bit for nonzero\nvar msb = function (val) {\n var bits = 0;\n for (; (1 << bits) <= val; ++bits)\n ;\n return bits - 1;\n};\n// read finite state entropy\nvar rfse = function (dat, bt, mal) {\n // table pos\n var tpos = (bt << 3) + 4;\n // accuracy log\n var al = (dat[bt] & 15) + 5;\n if (al > mal)\n err(3);\n // size\n var sz = 1 << al;\n // probabilities symbols repeat index high threshold\n var probs = sz, sym = -1, re = -1, i = -1, ht = sz;\n // optimization: single allocation is much faster\n var buf = new ab(512 + (sz << 2));\n var freq = new i16(buf, 0, 256);\n // same view as freq\n var dstate = new u16(buf, 0, 256);\n var nstate = new u16(buf, 512, sz);\n var bb1 = 512 + (sz << 1);\n var syms = new u8(buf, bb1, sz);\n var nbits = new u8(buf, bb1 + sz);\n while (sym < 255 && probs > 0) {\n var bits = msb(probs + 1);\n var cbt = tpos >> 3;\n // mask\n var msk = (1 << (bits + 1)) - 1;\n var val = ((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (tpos & 7)) & msk;\n // mask (1 fewer bit)\n var msk1fb = (1 << bits) - 1;\n // max small value\n var msv = msk - probs - 1;\n // small value\n var sval = val & msk1fb;\n if (sval < msv)\n tpos += bits, val = sval;\n else {\n tpos += bits + 1;\n if (val > msk1fb)\n val -= msv;\n }\n freq[++sym] = --val;\n if (val == -1) {\n probs += val;\n syms[--ht] = sym;\n }\n else\n probs -= val;\n if (!val) {\n do {\n // repeat byte\n var rbt = tpos >> 3;\n re = ((dat[rbt] | (dat[rbt + 1] << 8)) >> (tpos & 7)) & 3;\n tpos += 2;\n sym += re;\n } while (re == 3);\n }\n }\n if (sym > 255 || probs)\n err(0);\n var sympos = 0;\n // sym step (coprime with sz - formula from zstd source)\n var sstep = (sz >> 1) + (sz >> 3) + 3;\n // sym mask\n var smask = sz - 1;\n for (var s = 0; s <= sym; ++s) {\n var sf = freq[s];\n if (sf < 1) {\n dstate[s] = -sf;\n continue;\n }\n // This is split into two loops in zstd to avoid branching, but as JS is higher-level that is unnecessary\n for (i = 0; i < sf; ++i) {\n syms[sympos] = s;\n do {\n sympos = (sympos + sstep) & smask;\n } while (sympos >= ht);\n }\n }\n // After spreading symbols, should be zero again\n if (sympos)\n err(0);\n for (i = 0; i < sz; ++i) {\n // next state\n var ns = dstate[syms[i]]++;\n // num bits\n var nb = nbits[i] = al - msb(ns);\n nstate[i] = (ns << nb) - sz;\n }\n return [(tpos + 7) >> 3, {\n b: al,\n s: syms,\n n: nbits,\n t: nstate\n }];\n};\n// read huffman\nvar rhu = function (dat, bt) {\n // index weight count\n var i = 0, wc = -1;\n // buffer header byte\n var buf = new u8(292), hb = dat[bt];\n // huffman weights\n var hw = buf.subarray(0, 256);\n // rank count\n var rc = buf.subarray(256, 268);\n // rank index\n var ri = new u16(buf.buffer, 268);\n // NOTE: at this point bt is 1 less than expected\n if (hb < 128) {\n // end byte, fse decode table\n var _a = rfse(dat, bt + 1, 6), ebt = _a[0], fdt = _a[1];\n bt += hb;\n var epos = ebt << 3;\n // last byte\n var lb = dat[bt];\n if (!lb)\n err(0);\n // state1 state2 state1 bits state2 bits\n var st1 = 0, st2 = 0, btr1 = fdt.b, btr2 = btr1;\n // fse pos\n // pre-increment to account for original deficit of 1\n var fpos = (++bt << 3) - 8 + msb(lb);\n for (;;) {\n fpos -= btr1;\n if (fpos < epos)\n break;\n var cbt = fpos >> 3;\n st1 += ((dat[cbt] | (dat[cbt + 1] << 8)) >> (fpos & 7)) & ((1 << btr1) - 1);\n hw[++wc] = fdt.s[st1];\n fpos -= btr2;\n if (fpos < epos)\n break;\n cbt = fpos >> 3;\n st2 += ((dat[cbt] | (dat[cbt + 1] << 8)) >> (fpos & 7)) & ((1 << btr2) - 1);\n hw[++wc] = fdt.s[st2];\n btr1 = fdt.n[st1];\n st1 = fdt.t[st1];\n btr2 = fdt.n[st2];\n st2 = fdt.t[st2];\n }\n if (++wc > 255)\n err(0);\n }\n else {\n wc = hb - 127;\n for (; i < wc; i += 2) {\n var byte = dat[++bt];\n hw[i] = byte >> 4;\n hw[i + 1] = byte & 15;\n }\n ++bt;\n }\n // weight exponential sum\n var wes = 0;\n for (i = 0; i < wc; ++i) {\n var wt = hw[i];\n // bits must be at most 11, same as weight\n if (wt > 11)\n err(0);\n wes += wt && (1 << (wt - 1));\n }\n // max bits\n var mb = msb(wes) + 1;\n // table size\n var ts = 1 << mb;\n // remaining sum\n var rem = ts - wes;\n // must be power of 2\n if (rem & (rem - 1))\n err(0);\n hw[wc++] = msb(rem) + 1;\n for (i = 0; i < wc; ++i) {\n var wt = hw[i];\n ++rc[hw[i] = wt && (mb + 1 - wt)];\n }\n // huf buf\n var hbuf = new u8(ts << 1);\n // symbols num bits\n var syms = hbuf.subarray(0, ts), nb = hbuf.subarray(ts);\n ri[mb] = 0;\n for (i = mb; i > 0; --i) {\n var pv = ri[i];\n fill(nb, i, pv, ri[i - 1] = pv + rc[i] * (1 << (mb - i)));\n }\n if (ri[0] != ts)\n err(0);\n for (i = 0; i < wc; ++i) {\n var bits = hw[i];\n if (bits) {\n var code = ri[bits];\n fill(syms, i, code, ri[bits] = code + (1 << (mb - bits)));\n }\n }\n return [bt, {\n n: nb,\n b: mb,\n s: syms\n }];\n};\n// Tables generated using this:\n// https://gist.github.com/101arrowz/a979452d4355992cbf8f257cbffc9edd\n// default literal length table\nvar dllt = /*#__PURE__*/ rfse(/*#__PURE__*/ new u8([\n 81, 16, 99, 140, 49, 198, 24, 99, 12, 33, 196, 24, 99, 102, 102, 134, 70, 146, 4\n]), 0, 6)[1];\n// default match length table\nvar dmlt = /*#__PURE__*/ rfse(/*#__PURE__*/ new u8([\n 33, 20, 196, 24, 99, 140, 33, 132, 16, 66, 8, 33, 132, 16, 66, 8, 33, 68, 68, 68, 68, 68, 68, 68, 68, 36, 9\n]), 0, 6)[1];\n// default offset code table\nvar doct = /*#__PURE__ */ rfse(/*#__PURE__*/ new u8([\n 32, 132, 16, 66, 102, 70, 68, 68, 68, 68, 36, 73, 2\n]), 0, 5)[1];\n// bits to baseline\nvar b2bl = function (b, s) {\n var len = b.length, bl = new i32(len);\n for (var i = 0; i < len; ++i) {\n bl[i] = s;\n s += 1 << b[i];\n }\n return bl;\n};\n// literal length bits\nvar llb = /*#__PURE__ */ new u8(( /*#__PURE__ */new i32([\n 0, 0, 0, 0, 16843009, 50528770, 134678020, 202050057, 269422093\n])).buffer, 0, 36);\n// literal length baseline\nvar llbl = /*#__PURE__ */ b2bl(llb, 0);\n// match length bits\nvar mlb = /*#__PURE__ */ new u8(( /*#__PURE__ */new i32([\n 0, 0, 0, 0, 0, 0, 0, 0, 16843009, 50528770, 117769220, 185207048, 252579084, 16\n])).buffer, 0, 53);\n// match length baseline\nvar mlbl = /*#__PURE__ */ b2bl(mlb, 3);\n// decode huffman stream\nvar dhu = function (dat, out, hu) {\n var len = dat.length, ss = out.length, lb = dat[len - 1], msk = (1 << hu.b) - 1, eb = -hu.b;\n if (!lb)\n err(0);\n var st = 0, btr = hu.b, pos = (len << 3) - 8 + msb(lb) - btr, i = -1;\n for (; pos > eb && i < ss;) {\n var cbt = pos >> 3;\n var val = (dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (pos & 7);\n st = ((st << btr) | val) & msk;\n out[++i] = hu.s[st];\n pos -= (btr = hu.n[st]);\n }\n if (pos != eb || i + 1 != ss)\n err(0);\n};\n// decode huffman stream 4x\n// TODO: use workers to parallelize\nvar dhu4 = function (dat, out, hu) {\n var bt = 6;\n var ss = out.length, sz1 = (ss + 3) >> 2, sz2 = sz1 << 1, sz3 = sz1 + sz2;\n dhu(dat.subarray(bt, bt += dat[0] | (dat[1] << 8)), out.subarray(0, sz1), hu);\n dhu(dat.subarray(bt, bt += dat[2] | (dat[3] << 8)), out.subarray(sz1, sz2), hu);\n dhu(dat.subarray(bt, bt += dat[4] | (dat[5] << 8)), out.subarray(sz2, sz3), hu);\n dhu(dat.subarray(bt), out.subarray(sz3), hu);\n};\n// read Zstandard block\nvar rzb = function (dat, st, out) {\n var _a;\n var bt = st.b;\n // byte 0 block type\n var b0 = dat[bt], btype = (b0 >> 1) & 3;\n st.l = b0 & 1;\n var sz = (b0 >> 3) | (dat[bt + 1] << 5) | (dat[bt + 2] << 13);\n // end byte for block\n var ebt = (bt += 3) + sz;\n if (btype == 1) {\n if (bt >= dat.length)\n return;\n st.b = bt + 1;\n if (out) {\n fill(out, dat[bt], st.y, st.y += sz);\n return out;\n }\n return fill(new u8(sz), dat[bt]);\n }\n if (ebt > dat.length)\n return;\n if (btype == 0) {\n st.b = ebt;\n if (out) {\n out.set(dat.subarray(bt, ebt), st.y);\n st.y += sz;\n return out;\n }\n return slc(dat, bt, ebt);\n }\n if (btype == 2) {\n // byte 3 lit btype size format\n var b3 = dat[bt], lbt = b3 & 3, sf = (b3 >> 2) & 3;\n // lit src size lit cmp sz 4 streams\n var lss = b3 >> 4, lcs = 0, s4 = 0;\n if (lbt < 2) {\n if (sf & 1)\n lss |= (dat[++bt] << 4) | ((sf & 2) && (dat[++bt] << 12));\n else\n lss = b3 >> 3;\n }\n else {\n s4 = sf;\n if (sf < 2)\n lss |= ((dat[++bt] & 63) << 4), lcs = (dat[bt] >> 6) | (dat[++bt] << 2);\n else if (sf == 2)\n lss |= (dat[++bt] << 4) | ((dat[++bt] & 3) << 12), lcs = (dat[bt] >> 2) | (dat[++bt] << 6);\n else\n lss |= (dat[++bt] << 4) | ((dat[++bt] & 63) << 12), lcs = (dat[bt] >> 6) | (dat[++bt] << 2) | (dat[++bt] << 10);\n }\n ++bt;\n // add literals to end - can never overlap with backreferences because unused literals always appended\n var buf = out ? out.subarray(st.y, st.y + st.m) : new u8(st.m);\n // starting point for literals\n var spl = buf.length - lss;\n if (lbt == 0)\n buf.set(dat.subarray(bt, bt += lss), spl);\n else if (lbt == 1)\n fill(buf, dat[bt++], spl);\n else {\n // huffman table\n var hu = st.h;\n if (lbt == 2) {\n var hud = rhu(dat, bt);\n // subtract description length\n lcs += bt - (bt = hud[0]);\n st.h = hu = hud[1];\n }\n else if (!hu)\n err(0);\n (s4 ? dhu4 : dhu)(dat.subarray(bt, bt += lcs), buf.subarray(spl), hu);\n }\n // num sequences\n var ns = dat[bt++];\n if (ns) {\n if (ns == 255)\n ns = (dat[bt++] | (dat[bt++] << 8)) + 0x7F00;\n else if (ns > 127)\n ns = ((ns - 128) << 8) | dat[bt++];\n // symbol compression modes\n var scm = dat[bt++];\n if (scm & 3)\n err(0);\n var dts = [dmlt, doct, dllt];\n for (var i = 2; i > -1; --i) {\n var md = (scm >> ((i << 1) + 2)) & 3;\n if (md == 1) {\n // rle buf\n var rbuf = new u8([0, 0, dat[bt++]]);\n dts[i] = {\n s: rbuf.subarray(2, 3),\n n: rbuf.subarray(0, 1),\n t: new u16(rbuf.buffer, 0, 1),\n b: 0\n };\n }\n else if (md == 2) {\n // accuracy log 8 for offsets, 9 for others\n _a = rfse(dat, bt, 9 - (i & 1)), bt = _a[0], dts[i] = _a[1];\n }\n else if (md == 3) {\n if (!st.t)\n err(0);\n dts[i] = st.t[i];\n }\n }\n var _b = st.t = dts, mlt = _b[0], oct = _b[1], llt = _b[2];\n var lb = dat[ebt - 1];\n if (!lb)\n err(0);\n var spos = (ebt << 3) - 8 + msb(lb) - llt.b, cbt = spos >> 3, oubt = 0;\n var lst = ((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << llt.b) - 1);\n cbt = (spos -= oct.b) >> 3;\n var ost = ((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << oct.b) - 1);\n cbt = (spos -= mlt.b) >> 3;\n var mst = ((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << mlt.b) - 1);\n for (++ns; --ns;) {\n var llc = llt.s[lst];\n var lbtr = llt.n[lst];\n var mlc = mlt.s[mst];\n var mbtr = mlt.n[mst];\n var ofc = oct.s[ost];\n var obtr = oct.n[ost];\n cbt = (spos -= ofc) >> 3;\n var ofp = 1 << ofc;\n var off = ofp + (((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16) | (dat[cbt + 3] << 24)) >>> (spos & 7)) & (ofp - 1));\n cbt = (spos -= mlb[mlc]) >> 3;\n var ml = mlbl[mlc] + (((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (spos & 7)) & ((1 << mlb[mlc]) - 1));\n cbt = (spos -= llb[llc]) >> 3;\n var ll = llbl[llc] + (((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (spos & 7)) & ((1 << llb[llc]) - 1));\n cbt = (spos -= lbtr) >> 3;\n lst = llt.t[lst] + (((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << lbtr) - 1));\n cbt = (spos -= mbtr) >> 3;\n mst = mlt.t[mst] + (((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << mbtr) - 1));\n cbt = (spos -= obtr) >> 3;\n ost = oct.t[ost] + (((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << obtr) - 1));\n if (off > 3) {\n st.o[2] = st.o[1];\n st.o[1] = st.o[0];\n st.o[0] = off -= 3;\n }\n else {\n var idx = off - (ll != 0);\n if (idx) {\n off = idx == 3 ? st.o[0] - 1 : st.o[idx];\n if (idx > 1)\n st.o[2] = st.o[1];\n st.o[1] = st.o[0];\n st.o[0] = off;\n }\n else\n off = st.o[0];\n }\n for (var i = 0; i < ll; ++i) {\n buf[oubt + i] = buf[spl + i];\n }\n oubt += ll, spl += ll;\n var stin = oubt - off;\n if (stin < 0) {\n var len = -stin;\n var bs = st.e + stin;\n if (len > ml)\n len = ml;\n for (var i = 0; i < len; ++i) {\n buf[oubt + i] = st.w[bs + i];\n }\n oubt += len, ml -= len, stin = 0;\n }\n for (var i = 0; i < ml; ++i) {\n buf[oubt + i] = buf[stin + i];\n }\n oubt += ml;\n }\n if (oubt != spl) {\n while (spl < buf.length) {\n buf[oubt++] = buf[spl++];\n }\n }\n else\n oubt = buf.length;\n if (out)\n st.y += oubt;\n else\n buf = slc(buf, 0, oubt);\n }\n else if (out) {\n st.y += lss;\n if (spl) {\n for (var i = 0; i < lss; ++i) {\n buf[i] = buf[spl + i];\n }\n }\n }\n else if (spl)\n buf = slc(buf, spl);\n st.b = ebt;\n return buf;\n }\n err(2);\n};\n// concat\nvar cct = function (bufs, ol) {\n if (bufs.length == 1)\n return bufs[0];\n var buf = new u8(ol);\n for (var i = 0, b = 0; i < bufs.length; ++i) {\n var chk = bufs[i];\n buf.set(chk, b);\n b += chk.length;\n }\n return buf;\n};\n/**\n * Decompresses Zstandard data\n * @param dat The input data\n * @param buf The output buffer. If unspecified, the function will allocate\n * exactly enough memory to fit the decompressed data. If your\n * data has multiple frames and you know the output size, specifying\n * it will yield better performance.\n * @returns The decompressed data\n */\nexport function decompress(dat, buf) {\n var bufs = [], nb = +!buf;\n var bt = 0, ol = 0;\n for (; dat.length;) {\n var st = rzfh(dat, nb || buf);\n if (typeof st == 'object') {\n if (nb) {\n buf = null;\n if (st.w.length == st.u) {\n bufs.push(buf = st.w);\n ol += st.u;\n }\n }\n else {\n bufs.push(buf);\n st.e = 0;\n }\n for (; !st.l;) {\n var blk = rzb(dat, st, buf);\n if (!blk)\n err(5);\n if (buf)\n st.e = st.y;\n else {\n bufs.push(blk);\n ol += blk.length;\n cpw(st.w, 0, blk.length);\n st.w.set(blk, st.w.length - blk.length);\n }\n }\n bt = st.b + (st.c * 4);\n }\n else\n bt = st;\n dat = dat.subarray(bt);\n }\n return cct(bufs, ol);\n}\n/**\n * Decompressor for Zstandard streamed data\n */\nvar Decompress = /*#__PURE__*/ (function () {\n /**\n * Creates a Zstandard decompressor\n * @param ondata The handler for stream data\n */\n function Decompress(ondata) {\n this.ondata = ondata;\n this.c = [];\n this.l = 0;\n this.z = 0;\n }\n /**\n * Pushes data to be decompressed\n * @param chunk The chunk of data to push\n * @param final Whether or not this is the last chunk in the stream\n */\n Decompress.prototype.push = function (chunk, final) {\n if (typeof this.s == 'number') {\n var sub = Math.min(chunk.length, this.s);\n chunk = chunk.subarray(sub);\n this.s -= sub;\n }\n var sl = chunk.length;\n var ncs = sl + this.l;\n if (!this.s) {\n if (final) {\n if (!ncs) {\n this.ondata(new u8(0), true);\n return;\n }\n // min for frame + one block\n if (ncs < 5)\n err(5);\n }\n else if (ncs < 18) {\n this.c.push(chunk);\n this.l = ncs;\n return;\n }\n if (this.l) {\n this.c.push(chunk);\n chunk = cct(this.c, ncs);\n this.c = [];\n this.l = 0;\n }\n if (typeof (this.s = rzfh(chunk)) == 'number')\n return this.push(chunk, final);\n }\n if (typeof this.s != 'number') {\n if (ncs < (this.z || 3)) {\n if (final)\n err(5);\n this.c.push(chunk);\n this.l = ncs;\n return;\n }\n if (this.l) {\n this.c.push(chunk);\n chunk = cct(this.c, ncs);\n this.c = [];\n this.l = 0;\n }\n if (!this.z && ncs < (this.z = (chunk[this.s.b] & 2) ? 4 : 3 + ((chunk[this.s.b] >> 3) | (chunk[this.s.b + 1] << 5) | (chunk[this.s.b + 2] << 13)))) {\n if (final)\n err(5);\n this.c.push(chunk);\n this.l = ncs;\n return;\n }\n else\n this.z = 0;\n for (;;) {\n var blk = rzb(chunk, this.s);\n if (!blk) {\n if (final)\n err(5);\n var adc = chunk.subarray(this.s.b);\n this.s.b = 0;\n this.c.push(adc), this.l += adc.length;\n return;\n }\n else {\n this.ondata(blk, false);\n cpw(this.s.w, 0, blk.length);\n this.s.w.set(blk, this.s.w.length - blk.length);\n }\n if (this.s.l) {\n var rest = chunk.subarray(this.s.b);\n this.s = this.s.c * 4;\n this.push(rest, final);\n return;\n }\n }\n }\n else if (final)\n err(5);\n };\n return Decompress;\n}());\nexport { Decompress };\n"],"names":["DEFAULT_CONFIG","flushInterval","maxBatchSize","maxQueueSize","maxQueueHard","maxEventSize","debug","SALT","TextEncoder","encode","cachedKey","cachedKeySource","getCrypto","globalThis","crypto","subtle","Error","async","deriveKey","apiKey","keySource","window","location","origin","keyData","hashBuffer","digest","baseKey","importKey","derivedKey","name","salt","iterations","hash","length","arrayBufferToBase64","buffer","bytes","Uint8Array","binary","i","byteLength","String","fromCharCode","btoa","base64ToArrayBuffer","base64","atob","charCodeAt","encrypt","data","key","encoder","iv","array","getRandomValues","ciphertext","decrypt","encrypted","decrypted","TextDecoder","decode","LOG_LEVELS","PREFIX","logger","constructor","this","level","setDebug","args","console","info","warn","error","STORE_NAME","EventQueue","db","sequence","open","Promise","resolve","reject","request","indexedDB","onupgradeneeded","result","objectStoreNames","contains","createObjectStore","keyPath","createIndex","unique","onsuccess","onerror","getStore","mode","transaction","objectStore","enqueue","event","currentSize","size","evictOldest","JSON","stringify","stored","event_id","timestamp","Date","now","put","dequeue","count","storedEvents","getOldest","events","json","push","parse","err","remove","index","openCursor","results","cursor","value","continue","ids","tx","store","id","delete","oncomplete","clear","map","e","close","fzstdModule","loadAttempted","isSupported","compress","mod","then","loadFzstd","calculateBackoff","attempt","backoff","Math","pow","min","isRetryableStatus","status","sleep","ms","setTimeout","FlushScheduler","config","queue","timerId","flushPromise","isFlushing","networkDebounceTimer","boundVisibilityHandler","boundBeforeUnloadHandler","boundOnlineHandler","start","setInterval","scheduleFlush","document","visibilityState","flushWithBeacon","addEventListener","clearTimeout","stop","clearInterval","removeEventListener","doFlush","flush","queueSize","batchSize","payload","batch","sent_at","toISOString","response","endpoint","compressPayload","jsonStr","body","contentEncoding","compressionSupported","compressed","Blob","type","headers","lastError","lastResponse","fetch","method","ok","statusText","sendBatch","success","blob","url","URL","searchParams","set","navigator","sendBeacon","toString","parseBrowserVersion","ua","patterns","regex","match","detectDeviceModel","test","cachedContext","getDeviceContext","userAgent","nav","deviceId","components","screen","width","height","colorDepth","Intl","DateTimeFormat","resolvedOptions","timeZone","language","canvas","createElement","ctx","getContext","textBaseline","font","fillStyle","fillRect","fillText","toDataURL","join","hashArray","Array","from","b","padStart","generateDeviceId","app_version","querySelector","getAttribute","os_name","os_version","device_model","device_id","network_type","connection","effectiveType","locale","timezone","sdk_version","screen_width","screen_height","STORAGE_KEY","generateUUIDv4","randomUUID","getStorage","localStorage","writeEncrypted","storage","setItem","getOrCreateAnonymousId","existing","raw","getItem","readEncrypted","newId","TrueSightSDK","initialized","userId","anonymousId","mobileNumber","email","traits","init","initConfig","options","buildConfig","scheduler","track","eventName","properties","ensureInitialized","enqueueEvent","identify","mobile_number","screenName","screen_name","reset","resetAnonymousId","setMobileNumber","number","digits","replace","setEmail","isInitialized","getUserId","getAnonymousId","getMobileNumber","getEmail","destroy","eventType","context","event_name","event_type","user_id","anonymous_id","client_timestamp","serialized","instance","bind","ab","ArrayBuffer","u8","u16","Uint16Array","i16","Int16Array","i32","Int32Array","slc","v","s","prototype","slice","call","n","subarray","fill","cpw","t","copyWithin","ec","ind","msg","nt","code","captureStackTrace","rb","d","o","rzfh","dat","w","n3","flg","ss","cc","df","fcf","bt","di","fsb","fss","ws","wb","buf","y","l","u","c","m","msb","val","bits","rfse","mal","tpos","al","sz","probs","sym","re","ht","freq","dstate","nstate","bb1","syms","nbits","cbt","msk","msk1fb","msv","sval","rbt","sympos","sstep","smask","sf","ns","nb","dllt","dmlt","doct","b2bl","len","bl","llb","llbl","mlb","mlbl","dhu","out","hu","lb","eb","st","btr","pos","dhu4","sz1","sz2","sz3","rzb","_a","b0","btype","ebt","b3","lbt","lss","lcs","s4","spl","h","hud","wc","hb","hw","rc","ri","fdt","epos","st1","st2","btr1","btr2","fpos","byte","wes","wt","mb","ts","rem","hbuf","pv","rhu","scm","dts","md","rbuf","_b","mlt","oct","llt","spos","oubt","lst","ost","mst","llc","lbtr","mlc","mbtr","ofc","obtr","ofp","off","ml","ll","idx","stin","bs","cct","bufs","ol","chk","Decompress","ondata","z","chunk","final","sub","ncs","blk","adc","rest","InvalidData","WindowSizeTooLarge","InvalidBlockType","FSEAccuracyTooHigh","DistanceTooFarBack","UnexpectedEOF"],"mappings":"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","x_google_ignoreList":[11]}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cityflo/truesight-web-sdk",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "TrueSight Web Analytics SDK",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/truesight.cjs.js",
|
|
7
|
+
"module": "dist/truesight.esm.js",
|
|
8
|
+
"browser": "dist/truesight.umd.js",
|
|
9
|
+
"types": "dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"import": "./dist/truesight.esm.js",
|
|
13
|
+
"require": "./dist/truesight.cjs.js",
|
|
14
|
+
"types": "./dist/index.d.ts"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"sideEffects": false,
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "rollup -c",
|
|
23
|
+
"test": "vitest run",
|
|
24
|
+
"test:watch": "vitest",
|
|
25
|
+
"typecheck": "tsc --noEmit",
|
|
26
|
+
"lint": "eslint src/",
|
|
27
|
+
"prepublishOnly": "npm run build"
|
|
28
|
+
},
|
|
29
|
+
"keywords": [
|
|
30
|
+
"analytics",
|
|
31
|
+
"truesight",
|
|
32
|
+
"event-tracking",
|
|
33
|
+
"cityflo"
|
|
34
|
+
],
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"repository": {
|
|
37
|
+
"type": "git",
|
|
38
|
+
"url": "https://github.com/cityflo/cf-true-sight.git",
|
|
39
|
+
"directory": "sdks/web"
|
|
40
|
+
},
|
|
41
|
+
"publishConfig": {
|
|
42
|
+
"access": "public"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"fzstd": "^0.1.1"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/node": "^22.0.0",
|
|
49
|
+
"fake-indexeddb": "^6.0.0",
|
|
50
|
+
"rollup": "^4.0.0",
|
|
51
|
+
"@rollup/plugin-typescript": "^12.0.0",
|
|
52
|
+
"@rollup/plugin-node-resolve": "^16.0.0",
|
|
53
|
+
"@rollup/plugin-commonjs": "^28.0.0",
|
|
54
|
+
"@rollup/plugin-terser": "^0.4.0",
|
|
55
|
+
"tslib": "^2.6.0",
|
|
56
|
+
"typescript": "^5.6.0",
|
|
57
|
+
"vitest": "^2.0.0"
|
|
58
|
+
}
|
|
59
|
+
}
|