@abto-app/event 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/LICENSE +21 -0
- package/README.md +273 -0
- package/dist/autocapture.d.ts +68 -0
- package/dist/autocapture.d.ts.map +1 -0
- package/dist/autocapture.js +269 -0
- package/dist/autocapture.js.map +1 -0
- package/dist/click-signals.d.ts +18 -0
- package/dist/click-signals.d.ts.map +1 -0
- package/dist/click-signals.js +66 -0
- package/dist/click-signals.js.map +1 -0
- package/dist/client.d.ts +37 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +439 -0
- package/dist/client.js.map +1 -0
- package/dist/context.d.ts +52 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +146 -0
- package/dist/context.js.map +1 -0
- package/dist/elements-chain.d.ts +8 -0
- package/dist/elements-chain.d.ts.map +1 -0
- package/dist/elements-chain.js +84 -0
- package/dist/elements-chain.js.map +1 -0
- package/dist/event-registry.d.ts +37 -0
- package/dist/event-registry.d.ts.map +1 -0
- package/dist/event-registry.js +59 -0
- package/dist/event-registry.js.map +1 -0
- package/dist/events.generated.d.ts +769 -0
- package/dist/events.generated.d.ts.map +1 -0
- package/dist/events.generated.js +3 -0
- package/dist/events.generated.js.map +1 -0
- package/dist/identity.d.ts +44 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +148 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/privacy.d.ts +46 -0
- package/dist/privacy.d.ts.map +1 -0
- package/dist/privacy.js +140 -0
- package/dist/privacy.js.map +1 -0
- package/dist/scroll-depth.d.ts +24 -0
- package/dist/scroll-depth.d.ts.map +1 -0
- package/dist/scroll-depth.js +74 -0
- package/dist/scroll-depth.js.map +1 -0
- package/dist/system-events.generated.d.ts +17 -0
- package/dist/system-events.generated.d.ts.map +1 -0
- package/dist/system-events.generated.js +29 -0
- package/dist/system-events.generated.js.map +1 -0
- package/dist/transport.d.ts +27 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +264 -0
- package/dist/transport.js.map +1 -0
- package/dist/types.d.ts +156 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/uuid.d.ts +12 -0
- package/dist/uuid.d.ts.map +1 -0
- package/dist/uuid.js +39 -0
- package/dist/uuid.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll-depth.js","sourceRoot":"","sources":["../src/scroll-depth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const ABTO_SCHEMA_VERSION: "2026-07-15";
|
|
2
|
+
export declare const ABTO_EVENT_NAME_MAX_LENGTH: 200;
|
|
3
|
+
export declare const BROWSER_SYSTEM_EVENT_WIRE_NAMES: {
|
|
4
|
+
readonly $pageview: "pageview";
|
|
5
|
+
readonly $pageleave: "pageleave";
|
|
6
|
+
readonly $autocapture: "interaction_autocaptured";
|
|
7
|
+
readonly $rageclick: "interaction_rageclick";
|
|
8
|
+
readonly $dead_click: "interaction_deadclick";
|
|
9
|
+
readonly $ai_prompt_submitted: "llm_prompt_submitted";
|
|
10
|
+
readonly $ai_response_rendered: "llm_response_rendered";
|
|
11
|
+
readonly $ai_response_interacted: "llm_response_interacted";
|
|
12
|
+
};
|
|
13
|
+
export declare const BROWSER_SYSTEM_EVENTS: readonly ["$pageview", "$pageleave", "$autocapture", "$rageclick", "$dead_click", "$ai_prompt_submitted", "$ai_response_rendered", "$ai_response_interacted"];
|
|
14
|
+
export type BrowserSystemEventName = (typeof BROWSER_SYSTEM_EVENTS)[number];
|
|
15
|
+
export type BrowserSystemEventWireName = (typeof BROWSER_SYSTEM_EVENT_WIRE_NAMES)[BrowserSystemEventName];
|
|
16
|
+
export declare function toBrowserSystemEventWireName(name: string): string;
|
|
17
|
+
//# sourceMappingURL=system-events.generated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-events.generated.d.ts","sourceRoot":"","sources":["../src/system-events.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,EAAG,YAAqB,CAAC;AACzD,eAAO,MAAM,0BAA0B,EAAG,GAAY,CAAC;AAEvD,eAAO,MAAM,+BAA+B;;;;;;;;;CASlC,CAAC;AAEX,eAAO,MAAM,qBAAqB,+JASxB,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5E,MAAM,MAAM,0BAA0B,GACpC,CAAC,OAAO,+BAA+B,CAAC,CAAC,sBAAsB,CAAC,CAAC;AAEnE,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// GENERATED FILE — DO NOT EDIT.
|
|
2
|
+
export const ABTO_SCHEMA_VERSION = "2026-07-15";
|
|
3
|
+
export const ABTO_EVENT_NAME_MAX_LENGTH = 200;
|
|
4
|
+
export const BROWSER_SYSTEM_EVENT_WIRE_NAMES = {
|
|
5
|
+
"$pageview": "pageview",
|
|
6
|
+
"$pageleave": "pageleave",
|
|
7
|
+
"$autocapture": "interaction_autocaptured",
|
|
8
|
+
"$rageclick": "interaction_rageclick",
|
|
9
|
+
"$dead_click": "interaction_deadclick",
|
|
10
|
+
"$ai_prompt_submitted": "llm_prompt_submitted",
|
|
11
|
+
"$ai_response_rendered": "llm_response_rendered",
|
|
12
|
+
"$ai_response_interacted": "llm_response_interacted"
|
|
13
|
+
};
|
|
14
|
+
export const BROWSER_SYSTEM_EVENTS = [
|
|
15
|
+
"$pageview",
|
|
16
|
+
"$pageleave",
|
|
17
|
+
"$autocapture",
|
|
18
|
+
"$rageclick",
|
|
19
|
+
"$dead_click",
|
|
20
|
+
"$ai_prompt_submitted",
|
|
21
|
+
"$ai_response_rendered",
|
|
22
|
+
"$ai_response_interacted"
|
|
23
|
+
];
|
|
24
|
+
export function toBrowserSystemEventWireName(name) {
|
|
25
|
+
if (!Object.prototype.hasOwnProperty.call(BROWSER_SYSTEM_EVENT_WIRE_NAMES, name))
|
|
26
|
+
return name;
|
|
27
|
+
return BROWSER_SYSTEM_EVENT_WIRE_NAMES[name];
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=system-events.generated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-events.generated.js","sourceRoot":"","sources":["../src/system-events.generated.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAqB,CAAC;AACzD,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAY,CAAC;AAEvD,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,WAAW,EAAE,UAAU;IACvB,YAAY,EAAE,WAAW;IACzB,cAAc,EAAE,0BAA0B;IAC1C,YAAY,EAAE,uBAAuB;IACrC,aAAa,EAAE,uBAAuB;IACtC,sBAAsB,EAAE,sBAAsB;IAC9C,uBAAuB,EAAE,uBAAuB;IAChD,yBAAyB,EAAE,yBAAyB;CAC5C,CAAC;AAEX,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,WAAW;IACX,YAAY;IACZ,cAAc;IACd,YAAY;IACZ,aAAa;IACb,sBAAsB;IACtB,uBAAuB;IACvB,yBAAyB;CACjB,CAAC;AAMX,MAAM,UAAU,4BAA4B,CAAC,IAAY;IACvD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9F,OAAO,+BAA+B,CAAC,IAA8B,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CapturedEvent, ResolvedConfig } from './types.js';
|
|
2
|
+
export declare class Transport {
|
|
3
|
+
private queue;
|
|
4
|
+
private timer;
|
|
5
|
+
private flushPromise;
|
|
6
|
+
private retryAttempt;
|
|
7
|
+
private disposed;
|
|
8
|
+
private detachLifecycle;
|
|
9
|
+
private readonly cfg;
|
|
10
|
+
private readonly storage;
|
|
11
|
+
private readonly outboxKey;
|
|
12
|
+
constructor(cfg: ResolvedConfig);
|
|
13
|
+
enqueue(event: CapturedEvent): void;
|
|
14
|
+
flush(useKeepalive?: boolean): Promise<void>;
|
|
15
|
+
shutdown(): void;
|
|
16
|
+
discard(): void;
|
|
17
|
+
private armTimer;
|
|
18
|
+
private flushBatch;
|
|
19
|
+
private selectBatch;
|
|
20
|
+
private acknowledge;
|
|
21
|
+
private scheduleRetry;
|
|
22
|
+
private trimQueue;
|
|
23
|
+
private readOutbox;
|
|
24
|
+
private persist;
|
|
25
|
+
private installLifecycleHooks;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA6FhE,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,GAAG,EAAE,cAAc;IAS/B,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAS7B,KAAK,CAAC,YAAY,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAchD,QAAQ,IAAI,IAAI;IAQhB,OAAO,IAAI,IAAI;IAQf,OAAO,CAAC,QAAQ;YAQF,UAAU;IA6CxB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,qBAAqB;CAa9B"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { toBrowserSystemEventWireName } from './system-events.generated.js';
|
|
2
|
+
const MAX_BUFFER = 1000;
|
|
3
|
+
const MAX_BATCH_SIZE = 100;
|
|
4
|
+
const MAX_KEEPALIVE_BYTES = 60 * 1024;
|
|
5
|
+
const RETRY_BASE_MS = 1000;
|
|
6
|
+
const RETRY_MAX_MS = 60000;
|
|
7
|
+
const METRIC_ABSOLUTE_LIMIT = 1e38;
|
|
8
|
+
const METRIC_MAX_FRACTION_DIGITS = 12;
|
|
9
|
+
const MAX_SCALE_LENGTH = 16;
|
|
10
|
+
function optionalString(value) {
|
|
11
|
+
return typeof value === 'string' && value !== '' ? value : undefined;
|
|
12
|
+
}
|
|
13
|
+
function optionalScale(value) {
|
|
14
|
+
const scale = optionalString(value);
|
|
15
|
+
return scale !== undefined && scale.length <= MAX_SCALE_LENGTH ? scale : undefined;
|
|
16
|
+
}
|
|
17
|
+
function isCollectorMetricValue(value) {
|
|
18
|
+
if (typeof value !== 'number' || !Number.isFinite(value) || Math.abs(value) >= METRIC_ABSOLUTE_LIMIT) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
const [coefficient, exponentText] = Math.abs(value).toString().toLowerCase().split('e');
|
|
22
|
+
const fractionDigits = (coefficient?.split('.')[1] ?? '').replace(/0+$/, '').length;
|
|
23
|
+
const exponent = exponentText === undefined ? 0 : Number(exponentText);
|
|
24
|
+
return Math.max(0, fractionDigits - exponent) <= METRIC_MAX_FRACTION_DIGITS;
|
|
25
|
+
}
|
|
26
|
+
function toBackendEvent(event) {
|
|
27
|
+
const deviceId = optionalString(event.properties.$device_id) ?? event.distinct_id;
|
|
28
|
+
const sessionId = optionalString(event.properties.$session_id);
|
|
29
|
+
const traceId = optionalString(event.properties.$trace_id);
|
|
30
|
+
const value = isCollectorMetricValue(event.properties.value)
|
|
31
|
+
? event.properties.value
|
|
32
|
+
: undefined;
|
|
33
|
+
const scale = optionalScale(event.properties.scale);
|
|
34
|
+
return {
|
|
35
|
+
event_id: event.uuid,
|
|
36
|
+
device_id: deviceId,
|
|
37
|
+
...(sessionId === undefined ? {} : { session_id: sessionId }),
|
|
38
|
+
...(traceId === undefined ? {} : { trace_id: traceId }),
|
|
39
|
+
event_name: toBrowserSystemEventWireName(event.event),
|
|
40
|
+
...(value === undefined ? {} : { value }),
|
|
41
|
+
...(scale === undefined ? {} : { scale }),
|
|
42
|
+
occurred_at: event.timestamp,
|
|
43
|
+
extra_json: event.properties,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function resolveStorage() {
|
|
47
|
+
try {
|
|
48
|
+
return globalThis.localStorage;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function isCapturedEvent(value) {
|
|
55
|
+
if (value === null || typeof value !== 'object')
|
|
56
|
+
return false;
|
|
57
|
+
const event = value;
|
|
58
|
+
return (typeof event.uuid === 'string' &&
|
|
59
|
+
typeof event.event === 'string' &&
|
|
60
|
+
typeof event.timestamp === 'string' &&
|
|
61
|
+
typeof event.distinct_id === 'string' &&
|
|
62
|
+
event.properties !== null &&
|
|
63
|
+
typeof event.properties === 'object');
|
|
64
|
+
}
|
|
65
|
+
function byteLength(value) {
|
|
66
|
+
return new TextEncoder().encode(value).byteLength;
|
|
67
|
+
}
|
|
68
|
+
function isTransientStatus(status) {
|
|
69
|
+
return status === 408 || status === 429 || status >= 500;
|
|
70
|
+
}
|
|
71
|
+
export class Transport {
|
|
72
|
+
constructor(cfg) {
|
|
73
|
+
this.timer = null;
|
|
74
|
+
this.flushPromise = null;
|
|
75
|
+
this.retryAttempt = 0;
|
|
76
|
+
this.disposed = false;
|
|
77
|
+
this.cfg = cfg;
|
|
78
|
+
this.storage = resolveStorage();
|
|
79
|
+
this.outboxKey = `abto:outbox:v1:${encodeURIComponent(cfg.projectKey)}`;
|
|
80
|
+
this.queue = this.readOutbox();
|
|
81
|
+
this.installLifecycleHooks();
|
|
82
|
+
if (this.queue.length > 0 && !this.cfg.disabled)
|
|
83
|
+
this.armTimer();
|
|
84
|
+
}
|
|
85
|
+
enqueue(event) {
|
|
86
|
+
if (this.cfg.disabled || this.disposed)
|
|
87
|
+
return;
|
|
88
|
+
this.queue.push(event);
|
|
89
|
+
this.trimQueue();
|
|
90
|
+
this.persist();
|
|
91
|
+
if (this.queue.length >= this.cfg.batchSize)
|
|
92
|
+
void this.flush();
|
|
93
|
+
else
|
|
94
|
+
this.armTimer();
|
|
95
|
+
}
|
|
96
|
+
async flush(useKeepalive = false) {
|
|
97
|
+
if (this.flushPromise !== null)
|
|
98
|
+
return this.flushPromise;
|
|
99
|
+
if (this.timer !== null) {
|
|
100
|
+
clearTimeout(this.timer);
|
|
101
|
+
this.timer = null;
|
|
102
|
+
}
|
|
103
|
+
if (this.queue.length === 0 || this.cfg.disabled)
|
|
104
|
+
return;
|
|
105
|
+
this.flushPromise = this.flushBatch(useKeepalive).finally(() => {
|
|
106
|
+
this.flushPromise = null;
|
|
107
|
+
});
|
|
108
|
+
return this.flushPromise;
|
|
109
|
+
}
|
|
110
|
+
shutdown() {
|
|
111
|
+
this.disposed = true;
|
|
112
|
+
if (this.timer !== null)
|
|
113
|
+
clearTimeout(this.timer);
|
|
114
|
+
this.timer = null;
|
|
115
|
+
this.detachLifecycle?.();
|
|
116
|
+
this.detachLifecycle = undefined;
|
|
117
|
+
}
|
|
118
|
+
discard() {
|
|
119
|
+
this.queue = [];
|
|
120
|
+
this.retryAttempt = 0;
|
|
121
|
+
if (this.timer !== null)
|
|
122
|
+
clearTimeout(this.timer);
|
|
123
|
+
this.timer = null;
|
|
124
|
+
this.persist();
|
|
125
|
+
}
|
|
126
|
+
armTimer(delay = this.cfg.flushIntervalMs) {
|
|
127
|
+
if (this.disposed || this.timer !== null)
|
|
128
|
+
return;
|
|
129
|
+
this.timer = setTimeout(() => {
|
|
130
|
+
this.timer = null;
|
|
131
|
+
void this.flush();
|
|
132
|
+
}, delay);
|
|
133
|
+
}
|
|
134
|
+
async flushBatch(useKeepalive) {
|
|
135
|
+
const batch = this.selectBatch();
|
|
136
|
+
const body = JSON.stringify({ batch: batch.map(toBackendEvent) });
|
|
137
|
+
const safeForKeepalive = byteLength(body) <= MAX_KEEPALIVE_BYTES;
|
|
138
|
+
try {
|
|
139
|
+
const response = await fetch(this.cfg.endpoint, {
|
|
140
|
+
method: 'POST',
|
|
141
|
+
// sendBeacon cannot expose Analytics' per-event 202 result. Keep the
|
|
142
|
+
// durable outbox until a response-capable unload request acknowledges it.
|
|
143
|
+
keepalive: useKeepalive && safeForKeepalive,
|
|
144
|
+
headers: {
|
|
145
|
+
'content-type': 'application/json',
|
|
146
|
+
authorization: `Bearer ${this.cfg.apiKey}`,
|
|
147
|
+
},
|
|
148
|
+
body,
|
|
149
|
+
});
|
|
150
|
+
if (!response.ok) {
|
|
151
|
+
if (isTransientStatus(response.status))
|
|
152
|
+
this.scheduleRetry();
|
|
153
|
+
else
|
|
154
|
+
this.acknowledge(batch.map((event) => event.uuid));
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const result = await readBatchResponse(response);
|
|
158
|
+
if (result.results === undefined) {
|
|
159
|
+
this.acknowledge(batch.map((event) => event.uuid));
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
const acknowledged = [];
|
|
163
|
+
let retry = false;
|
|
164
|
+
for (const event of batch) {
|
|
165
|
+
const eventResult = result.results[event.uuid];
|
|
166
|
+
if (shouldRetry(eventResult))
|
|
167
|
+
retry = true;
|
|
168
|
+
else
|
|
169
|
+
acknowledged.push(event.uuid);
|
|
170
|
+
}
|
|
171
|
+
this.acknowledge(acknowledged, false);
|
|
172
|
+
if (retry)
|
|
173
|
+
this.scheduleRetry();
|
|
174
|
+
else if (this.queue.length > 0)
|
|
175
|
+
this.armTimer(0);
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
this.scheduleRetry();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
selectBatch() {
|
|
182
|
+
const maxCount = Math.max(1, Math.min(this.cfg.batchSize, MAX_BATCH_SIZE));
|
|
183
|
+
const selected = [];
|
|
184
|
+
for (const event of this.queue.slice(0, maxCount)) {
|
|
185
|
+
const candidate = [...selected, event];
|
|
186
|
+
const body = JSON.stringify({ batch: candidate.map(toBackendEvent) });
|
|
187
|
+
if (selected.length > 0 && byteLength(body) > MAX_KEEPALIVE_BYTES)
|
|
188
|
+
break;
|
|
189
|
+
selected.push(event);
|
|
190
|
+
}
|
|
191
|
+
return selected;
|
|
192
|
+
}
|
|
193
|
+
acknowledge(uuids, scheduleNext = true) {
|
|
194
|
+
const acknowledged = new Set(uuids);
|
|
195
|
+
this.queue = this.queue.filter((event) => !acknowledged.has(event.uuid));
|
|
196
|
+
// Per-event retry만 받은 batch는 진전이 없으므로 backoff 단계를 유지한다.
|
|
197
|
+
if (acknowledged.size > 0)
|
|
198
|
+
this.retryAttempt = 0;
|
|
199
|
+
this.persist();
|
|
200
|
+
if (scheduleNext && this.queue.length > 0)
|
|
201
|
+
this.armTimer(0);
|
|
202
|
+
}
|
|
203
|
+
scheduleRetry() {
|
|
204
|
+
const delay = Math.min(RETRY_BASE_MS * 2 ** this.retryAttempt, RETRY_MAX_MS);
|
|
205
|
+
this.retryAttempt += 1;
|
|
206
|
+
this.armTimer(delay);
|
|
207
|
+
}
|
|
208
|
+
trimQueue() {
|
|
209
|
+
if (this.queue.length > MAX_BUFFER)
|
|
210
|
+
this.queue = this.queue.slice(-MAX_BUFFER);
|
|
211
|
+
}
|
|
212
|
+
readOutbox() {
|
|
213
|
+
if (this.storage === undefined)
|
|
214
|
+
return [];
|
|
215
|
+
try {
|
|
216
|
+
const raw = this.storage.getItem(this.outboxKey);
|
|
217
|
+
if (raw === null)
|
|
218
|
+
return [];
|
|
219
|
+
const parsed = JSON.parse(raw);
|
|
220
|
+
return Array.isArray(parsed) ? parsed.filter(isCapturedEvent).slice(-MAX_BUFFER) : [];
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
return [];
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
persist() {
|
|
227
|
+
try {
|
|
228
|
+
this.storage?.setItem(this.outboxKey, JSON.stringify(this.queue));
|
|
229
|
+
}
|
|
230
|
+
catch {
|
|
231
|
+
// Quota/security failures degrade to the in-memory queue.
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
installLifecycleHooks() {
|
|
235
|
+
if (typeof document === 'undefined')
|
|
236
|
+
return;
|
|
237
|
+
const onHide = () => {
|
|
238
|
+
if (document.visibilityState === 'hidden')
|
|
239
|
+
void this.flush(true);
|
|
240
|
+
};
|
|
241
|
+
const onPageHide = () => void this.flush(true);
|
|
242
|
+
document.addEventListener('visibilitychange', onHide);
|
|
243
|
+
window.addEventListener('pagehide', onPageHide);
|
|
244
|
+
this.detachLifecycle = () => {
|
|
245
|
+
document.removeEventListener('visibilitychange', onHide);
|
|
246
|
+
window.removeEventListener('pagehide', onPageHide);
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
async function readBatchResponse(response) {
|
|
251
|
+
try {
|
|
252
|
+
const parsed = await response.json();
|
|
253
|
+
if (parsed !== null && typeof parsed === 'object')
|
|
254
|
+
return parsed;
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
// Empty 2xx responses acknowledge the whole batch.
|
|
258
|
+
}
|
|
259
|
+
return {};
|
|
260
|
+
}
|
|
261
|
+
function shouldRetry(result) {
|
|
262
|
+
return result === undefined || result.result === 'retry';
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import type { AIInteractionType, AIPromptSubmittedProps, AIResponseInteractedProps, AIResponseRenderedProps, AutocaptureEventType, AutocaptureProps, CaptureMode, DeadClickProps, DerivedTextMeta, Environment, MaskMode, PageleaveProps, PageviewProps, RageclickProps, ScrollDepthProps, SensitiveCategory as ContractSensitiveCategory, TokenBucket } from './events.generated.js';
|
|
2
|
+
import type { CustomEventPayloadMap, EventRegistry, InferCustomEventProperties } from './event-registry.js';
|
|
3
|
+
import { ABTO_SCHEMA_VERSION, BROWSER_SYSTEM_EVENTS, BROWSER_SYSTEM_EVENT_WIRE_NAMES, type BrowserSystemEventName, type BrowserSystemEventWireName } from './system-events.generated.js';
|
|
4
|
+
export type { AIInteractionType, AutocaptureEventType, CaptureMode, DerivedTextMeta, Environment, MaskMode, ScrollDepthProps, TokenBucket, EventRegistry, InferCustomEventProperties, };
|
|
5
|
+
export { ABTO_SCHEMA_VERSION, BROWSER_SYSTEM_EVENTS, BROWSER_SYSTEM_EVENT_WIRE_NAMES, type BrowserSystemEventName, type BrowserSystemEventWireName, };
|
|
6
|
+
export type SensitiveCategory = ContractSensitiveCategory | null;
|
|
7
|
+
export interface BrowserSystemEventPropsMap {
|
|
8
|
+
$pageview: PageviewProps;
|
|
9
|
+
$pageleave: PageleaveProps;
|
|
10
|
+
$autocapture: AutocaptureProps;
|
|
11
|
+
$rageclick: RageclickProps;
|
|
12
|
+
$dead_click: DeadClickProps;
|
|
13
|
+
$ai_prompt_submitted: AIPromptSubmittedProps;
|
|
14
|
+
$ai_response_rendered: AIResponseRenderedProps;
|
|
15
|
+
$ai_response_interacted: AIResponseInteractedProps;
|
|
16
|
+
}
|
|
17
|
+
export type JsonScalar = string | number | boolean | null;
|
|
18
|
+
export type JsonValue = JsonScalar | JsonScalar[] | Record<string, JsonScalar>;
|
|
19
|
+
export type CustomEventProperties = Record<string, JsonValue>;
|
|
20
|
+
export interface CapturedEvent<E extends string = string> {
|
|
21
|
+
uuid: string;
|
|
22
|
+
event: E;
|
|
23
|
+
timestamp: string;
|
|
24
|
+
distinct_id: string;
|
|
25
|
+
properties: CustomEventProperties;
|
|
26
|
+
set?: CustomEventProperties;
|
|
27
|
+
set_once?: CustomEventProperties;
|
|
28
|
+
}
|
|
29
|
+
export interface AbtoBrowserConfig<R extends EventRegistry = EventRegistry> {
|
|
30
|
+
projectKey: string;
|
|
31
|
+
apiHost?: string;
|
|
32
|
+
endpoint?: string;
|
|
33
|
+
environment?: Environment;
|
|
34
|
+
appVersion?: string;
|
|
35
|
+
events?: R;
|
|
36
|
+
debug?: boolean;
|
|
37
|
+
capture?: {
|
|
38
|
+
prompt?: CaptureMode;
|
|
39
|
+
response?: CaptureMode;
|
|
40
|
+
/** Raw DOM text/value is masked by default. Use data-abto-include for explicit opt-in. */
|
|
41
|
+
mask?: MaskMode;
|
|
42
|
+
};
|
|
43
|
+
autocapture?: {
|
|
44
|
+
enabled?: boolean;
|
|
45
|
+
};
|
|
46
|
+
export?: {
|
|
47
|
+
flushIntervalMs?: number;
|
|
48
|
+
maxBatchSize?: number;
|
|
49
|
+
disabled?: boolean;
|
|
50
|
+
};
|
|
51
|
+
identity?: {
|
|
52
|
+
sessionIdleMs?: number;
|
|
53
|
+
sessionMaxAgeMs?: number;
|
|
54
|
+
};
|
|
55
|
+
hashSalt?: string;
|
|
56
|
+
}
|
|
57
|
+
export interface ResolvedConfig<R extends EventRegistry = EventRegistry> {
|
|
58
|
+
endpoint: string;
|
|
59
|
+
apiKey: string;
|
|
60
|
+
projectKey: string;
|
|
61
|
+
apiHost: string;
|
|
62
|
+
environment: Environment;
|
|
63
|
+
appVersion: string;
|
|
64
|
+
events: R;
|
|
65
|
+
debug: boolean;
|
|
66
|
+
capturePrompt: CaptureMode;
|
|
67
|
+
captureResponse: CaptureMode;
|
|
68
|
+
mask: MaskMode;
|
|
69
|
+
autocapture: boolean;
|
|
70
|
+
batchSize: number;
|
|
71
|
+
flushIntervalMs: number;
|
|
72
|
+
sessionIdleMs: number;
|
|
73
|
+
sessionMaxAgeMs: number;
|
|
74
|
+
disabled: boolean;
|
|
75
|
+
hashSalt: string;
|
|
76
|
+
}
|
|
77
|
+
/** Internal context keys are converted to `$` wire properties by the client. */
|
|
78
|
+
export interface CommonProperties {
|
|
79
|
+
tenant_id?: string;
|
|
80
|
+
user_id?: string;
|
|
81
|
+
device_id?: string;
|
|
82
|
+
anonymous_id?: string;
|
|
83
|
+
session_id?: string;
|
|
84
|
+
window_id?: string;
|
|
85
|
+
pageview_id?: string;
|
|
86
|
+
node_key?: string;
|
|
87
|
+
trace_id?: string;
|
|
88
|
+
request_id?: string;
|
|
89
|
+
response_id?: string;
|
|
90
|
+
surface?: string;
|
|
91
|
+
task_type?: string;
|
|
92
|
+
entry_point?: string;
|
|
93
|
+
conversation_id?: string;
|
|
94
|
+
message_id?: string;
|
|
95
|
+
prompt_template_id?: string;
|
|
96
|
+
}
|
|
97
|
+
export interface StartLlmTraceOptions {
|
|
98
|
+
nodeId: string;
|
|
99
|
+
taskType?: string;
|
|
100
|
+
surface?: string;
|
|
101
|
+
entryPoint?: string;
|
|
102
|
+
traceId?: string;
|
|
103
|
+
conversationId?: string;
|
|
104
|
+
messageId?: string;
|
|
105
|
+
promptTemplateId?: string;
|
|
106
|
+
}
|
|
107
|
+
export interface PromptMetadata {
|
|
108
|
+
promptCaptureMode?: CaptureMode;
|
|
109
|
+
prompt?: string;
|
|
110
|
+
promptHash?: string;
|
|
111
|
+
promptLengthChars?: number;
|
|
112
|
+
promptTokensEstimated?: number;
|
|
113
|
+
language?: string;
|
|
114
|
+
containsAttachment?: boolean;
|
|
115
|
+
containsCode?: boolean;
|
|
116
|
+
piiDetected?: boolean;
|
|
117
|
+
sensitiveCategory?: SensitiveCategory | SensitiveCategory[];
|
|
118
|
+
}
|
|
119
|
+
export interface ResponseRenderedMetadata {
|
|
120
|
+
responseId: string;
|
|
121
|
+
requestId?: string;
|
|
122
|
+
responseCaptureMode?: CaptureMode;
|
|
123
|
+
responseText?: string;
|
|
124
|
+
timeToRenderMs?: number;
|
|
125
|
+
outputLengthChars?: number;
|
|
126
|
+
visibleOutputRatio?: number;
|
|
127
|
+
}
|
|
128
|
+
export interface ResponseInteractionMetadata {
|
|
129
|
+
responseId?: string;
|
|
130
|
+
requestId?: string;
|
|
131
|
+
source?: string;
|
|
132
|
+
destination?: string;
|
|
133
|
+
timeSinceResponseMs?: number;
|
|
134
|
+
visibleOutputRatio?: number;
|
|
135
|
+
}
|
|
136
|
+
export type RequestIdHeaders = Headers | {
|
|
137
|
+
get(name: string): string | null | undefined;
|
|
138
|
+
} | Record<string, string | null | undefined>;
|
|
139
|
+
export type RequestIdSource = string | null | undefined | RequestIdHeaders | {
|
|
140
|
+
headers: RequestIdHeaders;
|
|
141
|
+
};
|
|
142
|
+
export interface LlmTrace {
|
|
143
|
+
readonly traceId: string;
|
|
144
|
+
readonly nodeId: string;
|
|
145
|
+
readonly taskType?: string;
|
|
146
|
+
readonly requestId?: string;
|
|
147
|
+
getHeaders(): Record<string, string | undefined>;
|
|
148
|
+
setRequestId(requestId: string): this;
|
|
149
|
+
attachRequestId(source: RequestIdSource): string | undefined;
|
|
150
|
+
submitPrompt(metadata?: PromptMetadata): Promise<void>;
|
|
151
|
+
markResponseRendered(metadata: ResponseRenderedMetadata): Promise<void>;
|
|
152
|
+
captureResponseInteraction(type: AIInteractionType, metadata?: ResponseInteractionMetadata): Promise<void>;
|
|
153
|
+
}
|
|
154
|
+
export type EventNameFor<R extends EventRegistry> = Extract<keyof R, string>;
|
|
155
|
+
export type EventPropertiesFor<R extends EventRegistry, N extends EventNameFor<R>> = CustomEventPayloadMap<R>[N];
|
|
156
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAwBA,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,+BAA+B,GAGhC,MAAM,8BAA8B,CAAC;AActC,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,+BAA+B,GAGhC,CAAC"}
|
package/dist/uuid.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RFC 9562 UUIDv7 helpers for browser-generated identifiers.
|
|
3
|
+
*
|
|
4
|
+
* UUIDv7 carries the current Unix timestamp in its first 48 bits, so event and
|
|
5
|
+
* identity records retain useful insertion locality without a UUID dependency.
|
|
6
|
+
*/
|
|
7
|
+
export declare function randomHex(length: number): string;
|
|
8
|
+
/** Create a canonical, lowercase UUIDv7 string. */
|
|
9
|
+
export declare function newUuidV7(now?: number): string;
|
|
10
|
+
/** W3C trace IDs are 32 hex characters, not UUID strings. */
|
|
11
|
+
export declare function newUuidV7TraceId(): string;
|
|
12
|
+
//# sourceMappingURL=uuid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../src/uuid.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,mDAAmD;AACnD,wBAAgB,SAAS,CAAC,GAAG,SAAa,GAAG,MAAM,CAalD;AAED,6DAA6D;AAC7D,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC"}
|
package/dist/uuid.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RFC 9562 UUIDv7 helpers for browser-generated identifiers.
|
|
3
|
+
*
|
|
4
|
+
* UUIDv7 carries the current Unix timestamp in its first 48 bits, so event and
|
|
5
|
+
* identity records retain useful insertion locality without a UUID dependency.
|
|
6
|
+
*/
|
|
7
|
+
function randomBytes(length) {
|
|
8
|
+
const bytes = new Uint8Array(length);
|
|
9
|
+
const cryptoObj = globalThis.crypto;
|
|
10
|
+
if (cryptoObj?.getRandomValues) {
|
|
11
|
+
cryptoObj.getRandomValues(bytes);
|
|
12
|
+
return bytes;
|
|
13
|
+
}
|
|
14
|
+
for (let index = 0; index < length; index += 1) {
|
|
15
|
+
bytes[index] = Math.floor(Math.random() * 256);
|
|
16
|
+
}
|
|
17
|
+
return bytes;
|
|
18
|
+
}
|
|
19
|
+
export function randomHex(length) {
|
|
20
|
+
return Array.from(randomBytes(length), (byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
21
|
+
}
|
|
22
|
+
/** Create a canonical, lowercase UUIDv7 string. */
|
|
23
|
+
export function newUuidV7(now = Date.now()) {
|
|
24
|
+
const timestamp = Math.min(Math.max(Math.floor(now), 0), 281474976710655);
|
|
25
|
+
const timestampHex = timestamp.toString(16).padStart(12, '0');
|
|
26
|
+
const bytes = randomBytes(16);
|
|
27
|
+
for (let index = 0; index < 6; index += 1) {
|
|
28
|
+
bytes[index] = Number.parseInt(timestampHex.slice(index * 2, index * 2 + 2), 16);
|
|
29
|
+
}
|
|
30
|
+
bytes[6] = (bytes[6] & 0x0f) | 0x70;
|
|
31
|
+
bytes[8] = (bytes[8] & 0x3f) | 0x80;
|
|
32
|
+
const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
33
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
34
|
+
}
|
|
35
|
+
/** W3C trace IDs are 32 hex characters, not UUID strings. */
|
|
36
|
+
export function newUuidV7TraceId() {
|
|
37
|
+
return newUuidV7().replace(/-/g, '');
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=uuid.js.map
|
package/dist/uuid.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uuid.js","sourceRoot":"","sources":["../src/uuid.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,SAAS,WAAW,CAAC,MAAc;IACjC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC;IACpC,IAAI,SAAS,EAAE,eAAe,EAAE,CAAC;QAC/B,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC/C,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChG,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,eAAgB,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAE9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1C,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACrC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAErC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrF,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,gBAAgB;IAC9B,OAAO,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACvC,CAAC"}
|