@gonvex/client 0.1.32 → 0.3.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 +119 -95
- package/dist/control.d.ts +416 -0
- package/dist/control.js +210 -0
- package/dist/control.js.map +1 -0
- package/dist/error-reporter.d.ts +20 -6
- package/dist/error-reporter.js +55 -27
- package/dist/error-reporter.js.map +1 -1
- package/dist/index.d.ts +166 -133
- package/dist/index.js +1114 -1139
- package/dist/index.js.map +1 -1
- package/dist/indexeddb-replica.d.ts +20 -0
- package/dist/indexeddb-replica.js +193 -0
- package/dist/indexeddb-replica.js.map +1 -0
- package/dist/kv-stores.d.ts +2 -48
- package/dist/kv-stores.js +24 -411
- package/dist/kv-stores.js.map +1 -1
- package/dist/local-replica.d.ts +240 -0
- package/dist/local-replica.js +590 -0
- package/dist/local-replica.js.map +1 -0
- package/dist/optimistic.d.ts +34 -55
- package/dist/optimistic.js +70 -269
- package/dist/optimistic.js.map +1 -1
- package/dist/outbox.d.ts +25 -25
- package/dist/outbox.js +27 -27
- package/dist/outbox.js.map +1 -1
- package/dist/query-expression.d.ts +58 -0
- package/dist/query-expression.js +164 -0
- package/dist/query-expression.js.map +1 -0
- package/dist/replica-integrity.d.ts +5 -0
- package/dist/replica-integrity.js +58 -0
- package/dist/replica-integrity.js.map +1 -0
- package/package.json +4 -4
- package/dist/browser-cache-client.d.ts +0 -77
- package/dist/browser-cache-client.js +0 -156
- package/dist/browser-cache-client.js.map +0 -1
- package/dist/browser-cache-shared-worker.d.ts +0 -35
- package/dist/browser-cache-shared-worker.js +0 -118
- package/dist/browser-cache-shared-worker.js.map +0 -1
- package/dist/browser-cache.d.ts +0 -43
- package/dist/browser-cache.js +0 -67
- package/dist/browser-cache.js.map +0 -1
- package/dist/browser-capabilities.d.ts +0 -21
- package/dist/browser-capabilities.js +0 -31
- package/dist/browser-capabilities.js.map +0 -1
- package/dist/cache-coordinator.d.ts +0 -37
- package/dist/cache-coordinator.js +0 -109
- package/dist/cache-coordinator.js.map +0 -1
- package/dist/cache.d.ts +0 -74
- package/dist/cache.js +0 -120
- package/dist/cache.js.map +0 -1
- package/dist/persistent-cache.d.ts +0 -41
- package/dist/persistent-cache.js +0 -103
- package/dist/persistent-cache.js.map +0 -1
- package/dist/query-cache.d.ts +0 -88
- package/dist/query-cache.js +0 -346
- package/dist/query-cache.js.map +0 -1
- package/dist/sync-store.d.ts +0 -96
- package/dist/sync-store.js +0 -500
- package/dist/sync-store.js.map +0 -1
package/dist/error-reporter.d.ts
CHANGED
|
@@ -1,16 +1,26 @@
|
|
|
1
|
-
export type
|
|
1
|
+
export type ErrorAccount = {
|
|
2
2
|
id?: string;
|
|
3
3
|
email?: string;
|
|
4
4
|
name?: string;
|
|
5
5
|
};
|
|
6
6
|
export type ErrorContext = Record<string, unknown>;
|
|
7
7
|
export type ErrorReporterOptions = {
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
/** Native persistent-protocol sender supplied by GonvexClient. */
|
|
9
|
+
transport?: (type: "register" | "envelope" | "heartbeat", payload: unknown) => Promise<void>;
|
|
10
|
+
client?: {
|
|
11
|
+
reportError: (type: "register" | "envelope" | "heartbeat", payload: unknown) => Promise<void>;
|
|
12
|
+
connectionState?: () => {
|
|
13
|
+
isWebSocketConnected: boolean;
|
|
14
|
+
};
|
|
15
|
+
subscribeToConnectionState?: (listener: (state: {
|
|
16
|
+
isWebSocketConnected: boolean;
|
|
17
|
+
}) => void) => () => void;
|
|
18
|
+
};
|
|
19
|
+
project?: string;
|
|
10
20
|
tenant?: string;
|
|
11
21
|
release?: string;
|
|
12
22
|
environment?: string;
|
|
13
|
-
|
|
23
|
+
account?: ErrorAccount;
|
|
14
24
|
tags?: Record<string, string>;
|
|
15
25
|
sampleRate?: number;
|
|
16
26
|
beforeSend?: (event: ErrorEventPayload) => ErrorEventPayload | null;
|
|
@@ -29,7 +39,7 @@ export type ErrorEventPayload = {
|
|
|
29
39
|
tenant?: string;
|
|
30
40
|
release?: string;
|
|
31
41
|
environment?: string;
|
|
32
|
-
|
|
42
|
+
account?: ErrorAccount;
|
|
33
43
|
deviceId: string;
|
|
34
44
|
sessionId: string;
|
|
35
45
|
url?: string;
|
|
@@ -51,20 +61,24 @@ export declare class GonvexErrorReporter {
|
|
|
51
61
|
private readonly breadcrumbs;
|
|
52
62
|
private queue;
|
|
53
63
|
private timer?;
|
|
64
|
+
private heartbeatTimer?;
|
|
54
65
|
private readonly deviceId;
|
|
55
66
|
private readonly sessionId;
|
|
56
67
|
private removeGlobal?;
|
|
68
|
+
private removeConnectionListener?;
|
|
57
69
|
private readonly queueKey;
|
|
58
70
|
constructor(options: ErrorReporterOptions);
|
|
59
|
-
|
|
71
|
+
setAccount(account?: ErrorAccount): void;
|
|
60
72
|
setTenant(tenant?: string): void;
|
|
61
73
|
setProject(project: string): void;
|
|
62
74
|
addBreadcrumb(category: string, message: string, data?: ErrorContext): void;
|
|
63
75
|
captureException(error: unknown, context?: ErrorContext): string | undefined;
|
|
64
76
|
flush(): Promise<void>;
|
|
65
77
|
close(): void;
|
|
78
|
+
connectionRestored(): void;
|
|
66
79
|
private registerProject;
|
|
67
80
|
private scheduleFlush;
|
|
81
|
+
private scheduleHeartbeat;
|
|
68
82
|
private installGlobalHandlers;
|
|
69
83
|
private persistQueue;
|
|
70
84
|
}
|
package/dist/error-reporter.js
CHANGED
|
@@ -5,21 +5,38 @@ export class GonvexErrorReporter {
|
|
|
5
5
|
breadcrumbs = [];
|
|
6
6
|
queue = [];
|
|
7
7
|
timer;
|
|
8
|
+
heartbeatTimer;
|
|
8
9
|
deviceId = persistedId("gonvex-error-device");
|
|
9
10
|
sessionId = randomId();
|
|
10
11
|
removeGlobal;
|
|
12
|
+
removeConnectionListener;
|
|
11
13
|
queueKey;
|
|
12
14
|
constructor(options) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
if (!options.transport && !options.client)
|
|
16
|
+
throw new Error("GonvexErrorReporter requires client or transport");
|
|
17
|
+
const transport = options.transport ?? ((type, payload) => options.client.reportError(type, payload));
|
|
18
|
+
options = { ...options, transport, project: options.project ?? "" };
|
|
19
|
+
this.options = { sampleRate: 1, captureGlobalErrors: true, maxQueueSize: 100, ...options, transport, project: options.project ?? "" };
|
|
20
|
+
this.queueKey = `gonvex-error-queue:${options.project ?? ""}`;
|
|
15
21
|
this.queue = readQueue(this.queueKey);
|
|
16
22
|
this.registerProject();
|
|
23
|
+
if (options.client?.subscribeToConnectionState) {
|
|
24
|
+
let connected = options.client.connectionState?.().isWebSocketConnected ?? false;
|
|
25
|
+
this.removeConnectionListener = options.client.subscribeToConnectionState((state) => {
|
|
26
|
+
const restored = !connected && state.isWebSocketConnected;
|
|
27
|
+
connected = state.isWebSocketConnected;
|
|
28
|
+
if (restored)
|
|
29
|
+
this.connectionRestored();
|
|
30
|
+
});
|
|
31
|
+
}
|
|
17
32
|
if (this.options.captureGlobalErrors && typeof window !== "undefined")
|
|
18
33
|
this.installGlobalHandlers();
|
|
34
|
+
if (typeof window !== "undefined")
|
|
35
|
+
this.scheduleHeartbeat();
|
|
19
36
|
if (this.queue.length)
|
|
20
37
|
this.scheduleFlush();
|
|
21
38
|
}
|
|
22
|
-
|
|
39
|
+
setAccount(account) { this.options.account = account; }
|
|
23
40
|
setTenant(tenant) { this.options.tenant = tenant; }
|
|
24
41
|
setProject(project) {
|
|
25
42
|
if (project === this.options.project)
|
|
@@ -41,7 +58,7 @@ export class GonvexErrorReporter {
|
|
|
41
58
|
message: normalized.message, name: normalized.name, stack: normalized.stack,
|
|
42
59
|
culprit: firstAppFrame(normalized.stack), project: this.options.project,
|
|
43
60
|
tenant: this.options.tenant, release: this.options.release, environment: this.options.environment,
|
|
44
|
-
|
|
61
|
+
account: scrub(this.options.account), deviceId: this.deviceId, sessionId: this.sessionId,
|
|
45
62
|
url: typeof location === "undefined" ? undefined : stripQuery(location.href),
|
|
46
63
|
userAgent: typeof navigator === "undefined" ? undefined : navigator.userAgent,
|
|
47
64
|
language: typeof navigator === "undefined" ? undefined : navigator.language,
|
|
@@ -54,6 +71,9 @@ export class GonvexErrorReporter {
|
|
|
54
71
|
if (!prepared)
|
|
55
72
|
return;
|
|
56
73
|
this.queue.push(prepared);
|
|
74
|
+
const maxQueueSize = this.options.maxQueueSize ?? 100;
|
|
75
|
+
if (this.queue.length > maxQueueSize)
|
|
76
|
+
this.queue.splice(0, this.queue.length - maxQueueSize);
|
|
57
77
|
this.persistQueue();
|
|
58
78
|
this.scheduleFlush();
|
|
59
79
|
return event.eventId;
|
|
@@ -63,40 +83,51 @@ export class GonvexErrorReporter {
|
|
|
63
83
|
return;
|
|
64
84
|
const batch = this.queue.splice(0, 20);
|
|
65
85
|
try {
|
|
66
|
-
|
|
67
|
-
method: "POST", headers: { "content-type": "application/json", "x-gonvex-project-id": this.options.project, ...(this.options.tenant ? { "x-gonvex-tenant-id": this.options.tenant } : {}) }, keepalive: true,
|
|
68
|
-
body: JSON.stringify({ events: batch }),
|
|
69
|
-
});
|
|
70
|
-
if (!response.ok)
|
|
71
|
-
throw new Error(`error ingestion returned ${response.status}`);
|
|
86
|
+
await this.options.transport("envelope", { events: batch });
|
|
72
87
|
this.persistQueue();
|
|
88
|
+
if (this.queue.length)
|
|
89
|
+
this.scheduleFlush();
|
|
73
90
|
}
|
|
74
91
|
catch {
|
|
75
92
|
this.queue = [...batch, ...this.queue].slice(0, this.options.maxQueueSize ?? 100);
|
|
76
93
|
this.persistQueue();
|
|
77
94
|
}
|
|
78
95
|
}
|
|
79
|
-
close() {
|
|
80
|
-
|
|
96
|
+
close() {
|
|
97
|
+
this.removeGlobal?.();
|
|
98
|
+
this.removeConnectionListener?.();
|
|
99
|
+
if (this.timer)
|
|
100
|
+
clearTimeout(this.timer);
|
|
101
|
+
if (this.heartbeatTimer)
|
|
102
|
+
clearTimeout(this.heartbeatTimer);
|
|
103
|
+
void this.flush();
|
|
104
|
+
}
|
|
105
|
+
connectionRestored() {
|
|
106
|
+
this.registerProject();
|
|
107
|
+
void this.options.transport("heartbeat", {}).catch(() => undefined);
|
|
108
|
+
if (this.queue.length)
|
|
109
|
+
this.scheduleFlush();
|
|
110
|
+
}
|
|
81
111
|
registerProject() {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
method: "POST",
|
|
87
|
-
headers: { "x-gonvex-project-id": this.options.project },
|
|
88
|
-
keepalive: true,
|
|
89
|
-
}).catch(() => undefined);
|
|
90
|
-
}
|
|
91
|
-
catch {
|
|
92
|
-
// Registration is capability discovery only and must never affect the app.
|
|
93
|
-
}
|
|
112
|
+
void this.options.transport("register", {
|
|
113
|
+
release: this.options.release,
|
|
114
|
+
environment: this.options.environment,
|
|
115
|
+
}).catch(() => undefined);
|
|
94
116
|
}
|
|
95
117
|
scheduleFlush() {
|
|
96
118
|
if (this.timer)
|
|
97
119
|
return;
|
|
98
120
|
this.timer = setTimeout(() => { this.timer = undefined; void this.flush(); }, 1000);
|
|
99
121
|
}
|
|
122
|
+
scheduleHeartbeat() {
|
|
123
|
+
if (this.heartbeatTimer)
|
|
124
|
+
return;
|
|
125
|
+
this.heartbeatTimer = setTimeout(() => {
|
|
126
|
+
this.heartbeatTimer = undefined;
|
|
127
|
+
void this.options.transport("heartbeat", {}).catch(() => undefined);
|
|
128
|
+
this.scheduleHeartbeat();
|
|
129
|
+
}, 30_000);
|
|
130
|
+
}
|
|
100
131
|
installGlobalHandlers() {
|
|
101
132
|
const onError = (event) => this.captureException(event.error ?? event.message, { source: event.filename, line: event.lineno, column: event.colno });
|
|
102
133
|
const onRejection = (event) => this.captureException(event.reason, { mechanism: "unhandledrejection" });
|
|
@@ -168,7 +199,4 @@ function writeQueue(key, queue) { try {
|
|
|
168
199
|
localStorage.removeItem(key);
|
|
169
200
|
}
|
|
170
201
|
catch { /* reporting must never break the app */ } }
|
|
171
|
-
function errorEndpoint(raw, resource = "envelope") { const value = raw.replace(/\/$/, ""); if (value.startsWith("ws://"))
|
|
172
|
-
return `http://${value.slice(5)}/errors/${resource}`; if (value.startsWith("wss://"))
|
|
173
|
-
return `https://${value.slice(6)}/errors/${resource}`; return `${value}/errors/${resource}`; }
|
|
174
202
|
//# sourceMappingURL=error-reporter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-reporter.js","sourceRoot":"","sources":["../src/error-reporter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"error-reporter.js","sourceRoot":"","sources":["../src/error-reporter.ts"],"names":[],"mappings":"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"}
|