@catalyst-cloud/sdk 0.2.1 → 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/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/live-sync-client.d.ts +18 -0
- package/dist/live-sync-client.d.ts.map +1 -1
- package/dist/live-sync-client.js +43 -2
- package/dist/live-sync-client.js.map +1 -1
- package/dist/node.d.ts +1 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +4 -0
- package/dist/node.js.map +1 -1
- package/dist/otel.d.ts +166 -0
- package/dist/otel.d.ts.map +1 -0
- package/dist/otel.js +249 -0
- package/dist/otel.js.map +1 -0
- package/dist/replica/catalyst-replica.d.ts +49 -0
- package/dist/replica/catalyst-replica.d.ts.map +1 -1
- package/dist/replica/catalyst-replica.js +168 -44
- package/dist/replica/catalyst-replica.js.map +1 -1
- package/package.json +10 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { LiveSyncClient, buildConnectUrl, parseFrame, toWsOrigin, type AuthStrategy, type LiveSyncClientOptions, type LiveSyncStatus, type LogLevel, type WebSocketLike, type WebSocketFactory, } from "./live-sync-client.js";
|
|
2
2
|
export { ENTITY_NAMES, CHANGE_OPS, type AccountId, type EntityName, type ChangeOp, type ChangeFrame, type ResyncFrame, type SyncFrame, type ServerFrame, } from "./types.js";
|
|
3
|
+
export { DEFAULT_SCOPE_NAME, CATALYST_ATTR, REPLICA_METRIC, REPLICA_SPAN, REPLICA_STATUS_CODE, type TelemetryConfig, } from "./otel.js";
|
|
3
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,UAAU,EACV,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,YAAY,EACZ,UAAU,EACV,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,WAAW,GACjB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,UAAU,EACV,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,YAAY,EACZ,UAAU,EACV,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,WAAW,GACjB,MAAM,YAAY,CAAC;AAKpB,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,KAAK,eAAe,GACrB,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,4 +7,8 @@
|
|
|
7
7
|
// The class is storage-agnostic and auth-injected: see {@link LiveSyncClient}.
|
|
8
8
|
export { LiveSyncClient, buildConnectUrl, parseFrame, toWsOrigin, } from "./live-sync-client.js";
|
|
9
9
|
export { ENTITY_NAMES, CHANGE_OPS, } from "./types.js";
|
|
10
|
+
// The opt-in OpenTelemetry contract (CTC-138). Just the `telemetry` option type + the instrumentation
|
|
11
|
+
// scope / metric / span / attribute NAMES (plain consts + a structural type, NO `@opentelemetry/api`
|
|
12
|
+
// type leak), so a consumer can type the option and reference the exact stream names for dashboards.
|
|
13
|
+
export { DEFAULT_SCOPE_NAME, CATALYST_ATTR, REPLICA_METRIC, REPLICA_SPAN, REPLICA_STATUS_CODE, } from "./otel.js";
|
|
10
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,EAAE;AACF,sGAAsG;AACtG,mGAAmG;AACnG,uBAAuB;AACvB,EAAE;AACF,+EAA+E;AAE/E,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,UAAU,GAOX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,YAAY,EACZ,UAAU,GAQX,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,EAAE;AACF,sGAAsG;AACtG,mGAAmG;AACnG,uBAAuB;AACvB,EAAE;AACF,+EAA+E;AAE/E,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,UAAU,GAOX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,YAAY,EACZ,UAAU,GAQX,MAAM,YAAY,CAAC;AAEpB,sGAAsG;AACtG,qGAAqG;AACrG,qGAAqG;AACrG,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,mBAAmB,GAEpB,MAAM,WAAW,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ChangeFrame, ServerFrame } from "./types.js";
|
|
2
|
+
import { type Telemetry, type TelemetryConfig } from "./otel.js";
|
|
2
3
|
/**
|
|
3
4
|
* The minimal WHATWG-WebSocket surface LiveSyncClient drives. Declared structurally (not via a DOM /
|
|
4
5
|
* Node lib type) so (a) the package needs no `@types/ws` / DOM lib and (b) tests inject a fake. The
|
|
@@ -84,6 +85,16 @@ export interface LiveSyncClientOptions {
|
|
|
84
85
|
wsFactory?: WebSocketFactory;
|
|
85
86
|
/** Optional structured logger; defaults to console. */
|
|
86
87
|
log?: (level: LogLevel, msg: string, extra?: unknown) => void;
|
|
88
|
+
/**
|
|
89
|
+
* Opt-in OpenTelemetry (CTC-138). `false`/absent = OFF (zero overhead, no `@opentelemetry/api`
|
|
90
|
+
* import attempted). `true` = ON with the default instrumentation scope; an object overrides the
|
|
91
|
+
* tracer/meter name. This transport emits the `catalyst.replica.reconnect` (per connect attempt) and
|
|
92
|
+
* `catalyst.replica.resync` spans; the replica layer adds the seed/apply spans + the metrics. When a
|
|
93
|
+
* {@link CatalystReplica} owns this client it injects its already-resolved {@link Telemetry} so both
|
|
94
|
+
* layers share ONE tracer/meter (and the seed span nests under the resync span). Spans route through
|
|
95
|
+
* the consumer's global TracerProvider when one is registered.
|
|
96
|
+
*/
|
|
97
|
+
telemetry?: TelemetryConfig | Telemetry;
|
|
87
98
|
}
|
|
88
99
|
/** http(s)://host → ws(s)://host, leaving the rest of the origin + path intact (https→wss, http→ws). */
|
|
89
100
|
export declare function toWsOrigin(baseUrl: string): string;
|
|
@@ -114,12 +125,17 @@ export declare class LiveSyncClient {
|
|
|
114
125
|
private readonly maxBackoffMs;
|
|
115
126
|
private readonly wsFactory;
|
|
116
127
|
private readonly log;
|
|
128
|
+
private readonly telemetryConfig;
|
|
117
129
|
private ws;
|
|
118
130
|
private stopped;
|
|
119
131
|
private resyncing;
|
|
120
132
|
private backoff;
|
|
121
133
|
private reconnectTimer;
|
|
122
134
|
private resolveDone;
|
|
135
|
+
/** Resolved once in start(); the no-op until then so any early call is safe. */
|
|
136
|
+
private telemetry;
|
|
137
|
+
/** The in-flight connect-attempt span (ended OK on open, ERROR on construct-fail / close-before-open). */
|
|
138
|
+
private connectSpan;
|
|
123
139
|
constructor(opts: LiveSyncClientOptions);
|
|
124
140
|
/**
|
|
125
141
|
* Start the client: seed first if the consumer has no cursor, then open the live socket and keep it
|
|
@@ -134,6 +150,8 @@ export declare class LiveSyncClient {
|
|
|
134
150
|
connectUrl(): string;
|
|
135
151
|
private setStatus;
|
|
136
152
|
private openSocket;
|
|
153
|
+
/** End the in-flight connect span exactly once (idempotent — nulls the handle). */
|
|
154
|
+
private endConnectSpan;
|
|
137
155
|
/** Detach handlers BEFORE closing so a programmatic close can't re-enter scheduleReconnect. */
|
|
138
156
|
private closeSocket;
|
|
139
157
|
private scheduleReconnect;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-sync-client.d.ts","sourceRoot":"","sources":["../src/live-sync-client.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,WAAW,EAAe,WAAW,EAAa,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"live-sync-client.d.ts","sourceRoot":"","sources":["../src/live-sync-client.ts"],"names":[],"mappings":"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"}
|
package/dist/live-sync-client.js
CHANGED
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
//
|
|
24
24
|
// There is intentionally NO setInterval keepalive: the WHATWG WebSocket ping/pong is handled by the
|
|
25
25
|
// platform, and a re-implemented heartbeat would keep the connection needlessly active.
|
|
26
|
+
import { NOOP_TELEMETRY, createTelemetry, CATALYST_ATTR, REPLICA_SPAN, DEFAULT_SCOPE_NAME, } from "./otel.js";
|
|
26
27
|
/** Resolve the runtime global WebSocket, or fail with an actionable message. */
|
|
27
28
|
function defaultWsFactory(url) {
|
|
28
29
|
const Ctor = globalThis.WebSocket;
|
|
@@ -69,12 +70,17 @@ export class LiveSyncClient {
|
|
|
69
70
|
maxBackoffMs;
|
|
70
71
|
wsFactory;
|
|
71
72
|
log;
|
|
73
|
+
telemetryConfig;
|
|
72
74
|
ws = null;
|
|
73
75
|
stopped = false;
|
|
74
76
|
resyncing = false;
|
|
75
77
|
backoff;
|
|
76
78
|
reconnectTimer = null;
|
|
77
79
|
resolveDone = null;
|
|
80
|
+
/** Resolved once in start(); the no-op until then so any early call is safe. */
|
|
81
|
+
telemetry = NOOP_TELEMETRY;
|
|
82
|
+
/** The in-flight connect-attempt span (ended OK on open, ERROR on construct-fail / close-before-open). */
|
|
83
|
+
connectSpan = null;
|
|
78
84
|
constructor(opts) {
|
|
79
85
|
this.baseUrl = stripTrailingSlashes(opts.baseUrl);
|
|
80
86
|
this.accountId = opts.accountId;
|
|
@@ -91,6 +97,7 @@ export class LiveSyncClient {
|
|
|
91
97
|
this.log =
|
|
92
98
|
opts.log ??
|
|
93
99
|
((lvl, msg, extra) => console[lvl === "error" ? "error" : "log"](`[catalyst-sdk:live] ${msg}`, extra ?? ""));
|
|
100
|
+
this.telemetryConfig = opts.telemetry;
|
|
94
101
|
this.backoff = this.backoffMs;
|
|
95
102
|
}
|
|
96
103
|
/**
|
|
@@ -101,6 +108,17 @@ export class LiveSyncClient {
|
|
|
101
108
|
*/
|
|
102
109
|
async start() {
|
|
103
110
|
this.stopped = false;
|
|
111
|
+
// Resolve the OTel seam ONCE up front (before the first reseed, so the seed span exists on the
|
|
112
|
+
// cold-start path too). Keep the OFF path FULLY SYNCHRONOUS — no `await`, so a caller that opens
|
|
113
|
+
// the socket and inspects it in the same tick still sees it; only pay the async resolution (guarded
|
|
114
|
+
// dynamic import, or a CatalystReplica passing its already-resolved instance) when telemetry is on.
|
|
115
|
+
this.telemetry =
|
|
116
|
+
this.telemetryConfig === undefined || this.telemetryConfig === false
|
|
117
|
+
? NOOP_TELEMETRY
|
|
118
|
+
: await createTelemetry(this.telemetryConfig, {
|
|
119
|
+
tracerName: DEFAULT_SCOPE_NAME,
|
|
120
|
+
meterName: DEFAULT_SCOPE_NAME,
|
|
121
|
+
});
|
|
104
122
|
const saved = this.getCursor();
|
|
105
123
|
if (saved == null) {
|
|
106
124
|
this.setStatus("resyncing");
|
|
@@ -145,6 +163,11 @@ export class LiveSyncClient {
|
|
|
145
163
|
if (this.stopped)
|
|
146
164
|
return;
|
|
147
165
|
this.setStatus("connecting");
|
|
166
|
+
// One span per connect attempt: started here, ended OK in onopen, ERROR on construct-fail / a close
|
|
167
|
+
// before open. Manual (not active) because the lifecycle spans onopen…onclose callbacks.
|
|
168
|
+
this.connectSpan = this.telemetry.startSpan(REPLICA_SPAN.reconnect, {
|
|
169
|
+
[CATALYST_ATTR.tenant]: this.accountId,
|
|
170
|
+
});
|
|
148
171
|
const wsUrl = this.connectUrl();
|
|
149
172
|
let ws;
|
|
150
173
|
try {
|
|
@@ -153,6 +176,7 @@ export class LiveSyncClient {
|
|
|
153
176
|
catch (err) {
|
|
154
177
|
this.log("error", "ws construction failed; scheduling reconnect", err);
|
|
155
178
|
this.setStatus("error");
|
|
179
|
+
this.endConnectSpan(err);
|
|
156
180
|
this.scheduleReconnect();
|
|
157
181
|
return;
|
|
158
182
|
}
|
|
@@ -160,6 +184,7 @@ export class LiveSyncClient {
|
|
|
160
184
|
ws.onopen = () => {
|
|
161
185
|
this.backoff = this.backoffMs; // a successful open resets the backoff ramp
|
|
162
186
|
this.setStatus("live");
|
|
187
|
+
this.endConnectSpan();
|
|
163
188
|
this.sendSync();
|
|
164
189
|
};
|
|
165
190
|
ws.onmessage = (ev) => {
|
|
@@ -170,6 +195,8 @@ export class LiveSyncClient {
|
|
|
170
195
|
this.ws = null;
|
|
171
196
|
if (!this.stopped && !this.resyncing)
|
|
172
197
|
this.setStatus("reconnecting");
|
|
198
|
+
// No-op if onopen already ended it (a normal disconnect of a healthy socket isn't a connect error).
|
|
199
|
+
this.endConnectSpan(new Error("socket closed before open"));
|
|
173
200
|
this.scheduleReconnect();
|
|
174
201
|
};
|
|
175
202
|
ws.onerror = (err) => {
|
|
@@ -185,8 +212,18 @@ export class LiveSyncClient {
|
|
|
185
212
|
}
|
|
186
213
|
};
|
|
187
214
|
}
|
|
215
|
+
/** End the in-flight connect span exactly once (idempotent — nulls the handle). */
|
|
216
|
+
endConnectSpan(error) {
|
|
217
|
+
const span = this.connectSpan;
|
|
218
|
+
if (!span)
|
|
219
|
+
return;
|
|
220
|
+
this.connectSpan = null;
|
|
221
|
+
span.end(error);
|
|
222
|
+
}
|
|
188
223
|
/** Detach handlers BEFORE closing so a programmatic close can't re-enter scheduleReconnect. */
|
|
189
224
|
closeSocket() {
|
|
225
|
+
// A deliberate teardown of an in-flight attempt (stop/resync): end the connect span neutrally.
|
|
226
|
+
this.endConnectSpan();
|
|
190
227
|
const ws = this.ws;
|
|
191
228
|
this.ws = null;
|
|
192
229
|
if (!ws)
|
|
@@ -257,8 +294,12 @@ export class LiveSyncClient {
|
|
|
257
294
|
this.setStatus("resyncing");
|
|
258
295
|
this.closeSocket();
|
|
259
296
|
try {
|
|
260
|
-
|
|
261
|
-
this
|
|
297
|
+
// The reseed runs inside an ACTIVE span so the replica's seed span (the injected reseed IS
|
|
298
|
+
// seedFromSnapshot) auto-parents under this resync span.
|
|
299
|
+
await this.telemetry.withActiveSpan(REPLICA_SPAN.resync, { [CATALYST_ATTR.tenant]: this.accountId }, async () => {
|
|
300
|
+
const cursor = await this.reseed();
|
|
301
|
+
this.log("info", `resynced, cursor=${cursor}`);
|
|
302
|
+
});
|
|
262
303
|
}
|
|
263
304
|
catch (err) {
|
|
264
305
|
this.log("error", "resync reseed failed; will retry on reconnect", err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-sync-client.js","sourceRoot":"","sources":["../src/live-sync-client.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,+FAA+F;AAC/F,kGAAkG;AAClG,mGAAmG;AACnG,sGAAsG;AACtG,qGAAqG;AACrG,sCAAsC;AACtC,EAAE;AACF,oGAAoG;AACpG,mFAAmF;AACnF,EAAE;AACF,oGAAoG;AACpG,sGAAsG;AACtG,uGAAuG;AACvG,sGAAsG;AACtG,wFAAwF;AACxF,gGAAgG;AAChG,wEAAwE;AACxE,8FAA8F;AAC9F,kGAAkG;AAClG,8CAA8C;AAC9C,EAAE;AACF,oGAAoG;AACpG,wFAAwF;
|
|
1
|
+
{"version":3,"file":"live-sync-client.js","sourceRoot":"","sources":["../src/live-sync-client.ts"],"names":[],"mappings":"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"}
|
package/dist/node.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export { bunSqliteEngine, bunSqliteReadonlyEngine, nodeSqliteEngine, nodeSqliteR
|
|
|
3
3
|
export { claimWriterLock, type WriterGuardOptions, type WriterLockHandle, } from "./replica/writer-lock.js";
|
|
4
4
|
export { LiveSyncClient, type AuthStrategy, type LiveSyncStatus, type LogLevel, type WebSocketLike, type WebSocketFactory, } from "./live-sync-client.js";
|
|
5
5
|
export { ENTITY_NAMES, CHANGE_OPS, type AccountId, type EntityName, type ChangeOp, type ChangeFrame, } from "./types.js";
|
|
6
|
+
export { DEFAULT_SCOPE_NAME, CATALYST_ATTR, REPLICA_METRIC, REPLICA_SPAN, REPLICA_STATUS_CODE, type TelemetryConfig, } from "./otel.js";
|
|
6
7
|
export type { SqlExecutor, SqlValue, IssueView, IssueDetailView, PullView, ProjectView, ProjectDetailView, InitiativeView, InitiativeDetailView, } from "@catalyst-cloud/read-model";
|
|
7
8
|
export { mirrorSchema, type MirrorEntityName } from "@catalyst-cloud/schema";
|
|
8
9
|
//# sourceMappingURL=node.d.ts.map
|
package/dist/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,8BAA8B,GACpC,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,EAChB,wBAAwB,EACxB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,YAAY,EACZ,UAAU,EACV,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,WAAW,GACjB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,8BAA8B,GACpC,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,EAChB,wBAAwB,EACxB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,YAAY,EACZ,UAAU,EACV,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,WAAW,GACjB,MAAM,YAAY,CAAC;AAKpB,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,KAAK,eAAe,GACrB,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,WAAW,EACX,QAAQ,EACR,SAAS,EACT,eAAe,EACf,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AAMpC,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/node.js
CHANGED
|
@@ -14,6 +14,10 @@ export { claimWriterLock, } from "./replica/writer-lock.js";
|
|
|
14
14
|
// Re-export the transport surface so a consumer can stay on one import.
|
|
15
15
|
export { LiveSyncClient, } from "./live-sync-client.js";
|
|
16
16
|
export { ENTITY_NAMES, CHANGE_OPS, } from "./types.js";
|
|
17
|
+
// The opt-in OpenTelemetry contract (CTC-138) — see CatalystReplicaOptions.telemetry. Exports the
|
|
18
|
+
// `telemetry` option type + the instrumentation scope / metric / span / attribute NAMES so a consumer
|
|
19
|
+
// can type the option and build dashboards/alerts against the exact stream names.
|
|
20
|
+
export { DEFAULT_SCOPE_NAME, CATALYST_ATTR, REPLICA_METRIC, REPLICA_SPAN, REPLICA_STATUS_CODE, } from "./otel.js";
|
|
17
21
|
// Re-export the Drizzle table schema so the `.handle` ad-hoc escape hatch is a one-liner — the
|
|
18
22
|
// read-model `build*View` results stay the primary read surface; this is for custom typed queries:
|
|
19
23
|
// import { drizzle } from "drizzle-orm/bun-sqlite";
|
package/dist/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,gGAAgG;AAChG,uGAAuG;AACvG,qGAAqG;AACrG,sGAAsG;AACtG,sFAAsF;AACtF,EAAE;AACF,iGAAiG;AACjG,sEAAsE;AAEtE,OAAO,EACL,eAAe,GAGhB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,EAChB,wBAAwB,GAKzB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,eAAe,GAGhB,MAAM,0BAA0B,CAAC;AAElC,wEAAwE;AACxE,OAAO,EACL,cAAc,GAMf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,YAAY,EACZ,UAAU,GAKX,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,gGAAgG;AAChG,uGAAuG;AACvG,qGAAqG;AACrG,sGAAsG;AACtG,sFAAsF;AACtF,EAAE;AACF,iGAAiG;AACjG,sEAAsE;AAEtE,OAAO,EACL,eAAe,GAGhB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,EAChB,wBAAwB,GAKzB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,eAAe,GAGhB,MAAM,0BAA0B,CAAC;AAElC,wEAAwE;AACxE,OAAO,EACL,cAAc,GAMf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,YAAY,EACZ,UAAU,GAKX,MAAM,YAAY,CAAC;AAEpB,kGAAkG;AAClG,sGAAsG;AACtG,kFAAkF;AAClF,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,mBAAmB,GAEpB,MAAM,WAAW,CAAC;AAenB,+FAA+F;AAC/F,mGAAmG;AACnG,sDAAsD;AACtD,8EAA8E;AAC9E,OAAO,EAAE,YAAY,EAAyB,MAAM,wBAAwB,CAAC"}
|
package/dist/otel.d.ts
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { LiveSyncStatus } from "./live-sync-client.js";
|
|
2
|
+
/** Opt-in switch for the OTel seam. `false`/absent = OFF (NO dynamic import, truly zero overhead);
|
|
3
|
+
* `true` = ON with default instrumentation-scope names; an object overrides the tracer/meter name. */
|
|
4
|
+
export type TelemetryConfig = boolean | {
|
|
5
|
+
tracerName?: string;
|
|
6
|
+
meterName?: string;
|
|
7
|
+
};
|
|
8
|
+
/** A metric/span attribute value (OTel rejects `undefined`; {@link cleanAttrs} strips it). */
|
|
9
|
+
export type AttrValue = string | number | boolean;
|
|
10
|
+
/** Attribute bag accepted at call sites — `undefined` values are dropped before reaching OTel. */
|
|
11
|
+
export type Attributes = Record<string, AttrValue | undefined>;
|
|
12
|
+
/** The shared `catalyst.*` semconv attribute keys emitted across spans + metrics. */
|
|
13
|
+
export declare const CATALYST_ATTR: {
|
|
14
|
+
/** The tenant id (= mirror/account name). */
|
|
15
|
+
readonly tenant: "catalyst.tenant";
|
|
16
|
+
/** The upstream system a row originates from: `"linear"` | `"github"`. */
|
|
17
|
+
readonly source: "catalyst.source";
|
|
18
|
+
/** The durable change-feed cursor (last applied seq). */
|
|
19
|
+
readonly cursor: "catalyst.replica.cursor";
|
|
20
|
+
/** head_seq − cursor (mirror lag in seqs), when head_seq is known. */
|
|
21
|
+
readonly lagSeq: "catalyst.replica.lag_seq";
|
|
22
|
+
/** The connection lifecycle status string. */
|
|
23
|
+
readonly status: "catalyst.replica.status";
|
|
24
|
+
/** Rows applied during a seed. */
|
|
25
|
+
readonly rowCount: "catalyst.replica.row_count";
|
|
26
|
+
/** Rows in one seed apply-batch. */
|
|
27
|
+
readonly batchRows: "catalyst.replica.batch_rows";
|
|
28
|
+
};
|
|
29
|
+
/** Metric instrument names (OTel metric stream names). */
|
|
30
|
+
export declare const REPLICA_METRIC: {
|
|
31
|
+
readonly cursor: "catalyst.replica.cursor";
|
|
32
|
+
readonly lagSeq: "catalyst.replica.lag_seq";
|
|
33
|
+
readonly freshnessMs: "catalyst.replica.freshness_ms";
|
|
34
|
+
readonly status: "catalyst.replica.status";
|
|
35
|
+
readonly applied: "catalyst.replica.applied";
|
|
36
|
+
readonly applyBatchRows: "catalyst.replica.apply_batch_rows";
|
|
37
|
+
};
|
|
38
|
+
/** Span names. */
|
|
39
|
+
export declare const REPLICA_SPAN: {
|
|
40
|
+
readonly seed: "catalyst.replica.seed";
|
|
41
|
+
readonly applyBatch: "catalyst.replica.apply_batch";
|
|
42
|
+
readonly resync: "catalyst.replica.resync";
|
|
43
|
+
readonly reconnect: "catalyst.replica.reconnect";
|
|
44
|
+
};
|
|
45
|
+
/** `LiveSyncStatus` → a numeric gauge code (the `catalyst.replica.status` gauge value). */
|
|
46
|
+
export declare const REPLICA_STATUS_CODE: Record<LiveSyncStatus, number>;
|
|
47
|
+
/** The default instrumentation-scope name for both the tracer and the meter. */
|
|
48
|
+
export declare const DEFAULT_SCOPE_NAME = "@catalyst-cloud/sdk";
|
|
49
|
+
/** Map a change-feed `entity` (table name) to its upstream source system, for `catalyst.source`. */
|
|
50
|
+
export declare function entitySource(entity: string): "github" | "linear";
|
|
51
|
+
/** A span handle passed into the `withActiveSpan*` callback for setting attributes mid-span. */
|
|
52
|
+
export interface SpanHandle {
|
|
53
|
+
setAttribute(key: string, value: AttrValue): void;
|
|
54
|
+
}
|
|
55
|
+
/** A manually-ended span (for callback-driven lifecycles like a WS connect attempt). */
|
|
56
|
+
export interface ManualSpan extends SpanHandle {
|
|
57
|
+
/** End the span. Pass an error to mark it ERROR + record the exception; otherwise it ends OK. */
|
|
58
|
+
end(error?: unknown): void;
|
|
59
|
+
}
|
|
60
|
+
/** Read side of an observable-gauge callback: observe a value with optional attributes. */
|
|
61
|
+
export interface ObservableResult {
|
|
62
|
+
observe(value: number, attributes?: Attributes): void;
|
|
63
|
+
}
|
|
64
|
+
export type ObservableCallback = (result: ObservableResult) => void;
|
|
65
|
+
/** A handle to unregister an observable-gauge callback (called on replica close). */
|
|
66
|
+
export interface GaugeRegistration {
|
|
67
|
+
remove(): void;
|
|
68
|
+
}
|
|
69
|
+
export interface Counter {
|
|
70
|
+
add(value: number, attributes?: Attributes): void;
|
|
71
|
+
}
|
|
72
|
+
export interface Histogram {
|
|
73
|
+
record(value: number, attributes?: Attributes): void;
|
|
74
|
+
}
|
|
75
|
+
export interface MetricOptions {
|
|
76
|
+
description?: string;
|
|
77
|
+
unit?: string;
|
|
78
|
+
}
|
|
79
|
+
/** The opt-in telemetry facade. The no-op instance ({@link NOOP_TELEMETRY}) implements the SAME shape
|
|
80
|
+
* so call sites are branch-free. */
|
|
81
|
+
export interface Telemetry {
|
|
82
|
+
/** True only when routed through a real (installed) `@opentelemetry/api`. */
|
|
83
|
+
readonly enabled: boolean;
|
|
84
|
+
/** Run an async `fn` inside an active span; ends OK on resolve, records the exception + ERROR on
|
|
85
|
+
* reject (then rethrows). Active so child spans (e.g. a seed under a resync) auto-parent. */
|
|
86
|
+
withActiveSpan<T>(name: string, attributes: Attributes, fn: (span: SpanHandle) => Promise<T>): Promise<T>;
|
|
87
|
+
/** The synchronous variant (e.g. a seed apply-batch). */
|
|
88
|
+
withActiveSpanSync<T>(name: string, attributes: Attributes, fn: (span: SpanHandle) => T): T;
|
|
89
|
+
/** Start a manually-ended span (e.g. a WS connect attempt ended across onopen/onclose). */
|
|
90
|
+
startSpan(name: string, attributes?: Attributes): ManualSpan;
|
|
91
|
+
/** Register an async gauge whose callback reads live instance state; returns an unregister handle. */
|
|
92
|
+
observableGauge(name: string, options: MetricOptions, callback: ObservableCallback): GaugeRegistration;
|
|
93
|
+
counter(name: string, options?: MetricOptions): Counter;
|
|
94
|
+
histogram(name: string, options?: MetricOptions): Histogram;
|
|
95
|
+
}
|
|
96
|
+
/** A telemetry that does nothing but still threads the callback's return value through `withActiveSpan*`. */
|
|
97
|
+
export declare const NOOP_TELEMETRY: Telemetry;
|
|
98
|
+
interface SpanSurface {
|
|
99
|
+
setAttribute(key: string, value: AttrValue): unknown;
|
|
100
|
+
recordException(exception: unknown): void;
|
|
101
|
+
setStatus(status: {
|
|
102
|
+
code: number;
|
|
103
|
+
message?: string;
|
|
104
|
+
}): unknown;
|
|
105
|
+
end(): void;
|
|
106
|
+
}
|
|
107
|
+
interface TracerSurface {
|
|
108
|
+
startSpan(name: string, options?: {
|
|
109
|
+
attributes?: Record<string, AttrValue>;
|
|
110
|
+
}): SpanSurface;
|
|
111
|
+
startActiveSpan<T>(name: string, options: {
|
|
112
|
+
attributes?: Record<string, AttrValue>;
|
|
113
|
+
}, fn: (span: SpanSurface) => T): T;
|
|
114
|
+
}
|
|
115
|
+
interface ObservableResultSurface {
|
|
116
|
+
observe(value: number, attributes?: Record<string, AttrValue>): void;
|
|
117
|
+
}
|
|
118
|
+
interface ObservableGaugeSurface {
|
|
119
|
+
addCallback(cb: (result: ObservableResultSurface) => void): void;
|
|
120
|
+
removeCallback(cb: (result: ObservableResultSurface) => void): void;
|
|
121
|
+
}
|
|
122
|
+
interface CounterSurface {
|
|
123
|
+
add(value: number, attributes?: Record<string, AttrValue>): void;
|
|
124
|
+
}
|
|
125
|
+
interface HistogramSurface {
|
|
126
|
+
record(value: number, attributes?: Record<string, AttrValue>): void;
|
|
127
|
+
}
|
|
128
|
+
interface MeterSurface {
|
|
129
|
+
createObservableGauge(name: string, options?: MetricOptions): ObservableGaugeSurface;
|
|
130
|
+
createCounter(name: string, options?: MetricOptions): CounterSurface;
|
|
131
|
+
createHistogram(name: string, options?: MetricOptions): HistogramSurface;
|
|
132
|
+
}
|
|
133
|
+
/** Just the bits of the `@opentelemetry/api` module namespace we read. */
|
|
134
|
+
export interface OtelApiSurface {
|
|
135
|
+
trace: {
|
|
136
|
+
getTracer(name: string, version?: string): TracerSurface;
|
|
137
|
+
};
|
|
138
|
+
metrics: {
|
|
139
|
+
getMeter(name: string, version?: string): MeterSurface;
|
|
140
|
+
};
|
|
141
|
+
SpanStatusCode: {
|
|
142
|
+
OK: number;
|
|
143
|
+
ERROR: number;
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Build a REAL telemetry facade over a resolved `@opentelemetry/api` surface (or the NO-OP when
|
|
148
|
+
* `api` is null — the "package absent" branch). Exported (but NOT re-exported from the package
|
|
149
|
+
* entrypoints) so it can be unit-tested directly with `null` for the absent case.
|
|
150
|
+
*/
|
|
151
|
+
export declare function buildTelemetry(api: OtelApiSurface | null, names: {
|
|
152
|
+
tracerName: string;
|
|
153
|
+
meterName: string;
|
|
154
|
+
}): Telemetry;
|
|
155
|
+
/**
|
|
156
|
+
* Resolve the opt-in `telemetry` option into a {@link Telemetry}. Defaults to {@link NOOP_TELEMETRY}
|
|
157
|
+
* (no dynamic import attempted) when undefined/false so the off path is truly zero-overhead. When ON,
|
|
158
|
+
* guard-imports `@opentelemetry/api`; if absent, warns once and falls back to no-op (never throws). An
|
|
159
|
+
* already-resolved `Telemetry` is returned as-is so a replica + its transport share ONE instance.
|
|
160
|
+
*/
|
|
161
|
+
export declare function createTelemetry(config: TelemetryConfig | Telemetry | undefined, defaults: {
|
|
162
|
+
tracerName: string;
|
|
163
|
+
meterName: string;
|
|
164
|
+
}): Promise<Telemetry>;
|
|
165
|
+
export {};
|
|
166
|
+
//# sourceMappingURL=otel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"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"}
|
package/dist/otel.js
ADDED
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
// @catalyst-cloud/sdk — guarded, zero-hard-dep OpenTelemetry seam (CTC-138).
|
|
2
|
+
//
|
|
3
|
+
// `@opentelemetry/api` is an OPTIONAL peer dependency. This module is the ONE place the SDK touches
|
|
4
|
+
// it, and it does so through a guarded **dynamic** import resolved once during the async `start()`
|
|
5
|
+
// path — never a static top-level `import`. That distinction is load-bearing:
|
|
6
|
+
//
|
|
7
|
+
// • A static `import { trace, metrics } from "@opentelemetry/api"` fails MODULE RESOLUTION when a
|
|
8
|
+
// consumer hasn't installed the package → a hard dependency in practice. The api package's
|
|
9
|
+
// built-in no-op tracer/meter only save you AFTER it has been resolved (i.e. when it's installed
|
|
10
|
+
// but no provider is registered); they do nothing for "not installed at all".
|
|
11
|
+
// • The guarded `await import("@opentelemetry/api")` here catches the resolution failure and falls
|
|
12
|
+
// back to hand-rolled no-op stubs, so the SDK imports + runs with the package entirely ABSENT.
|
|
13
|
+
//
|
|
14
|
+
// When the package IS present and the consumer has registered a global TracerProvider/MeterProvider,
|
|
15
|
+
// spans + metrics route through `trace.getTracer()` / `metrics.getMeter()` — so the consumer's
|
|
16
|
+
// Resource (service.name, etc.) flows through automatically. When present but with NO provider, the
|
|
17
|
+
// api's own no-ops apply and every call is harmless.
|
|
18
|
+
//
|
|
19
|
+
// Kept free of any node-only import so the browser bundle stays clean; the public surfaces below are
|
|
20
|
+
// declared STRUCTURALLY (no `@opentelemetry/api` type import) so no OTel type leaks into the package's
|
|
21
|
+
// generated `.d.ts`, and the whole seam tree-shakes away (package.json `sideEffects:false`) when
|
|
22
|
+
// telemetry is off.
|
|
23
|
+
/** The shared `catalyst.*` semconv attribute keys emitted across spans + metrics. */
|
|
24
|
+
export const CATALYST_ATTR = {
|
|
25
|
+
/** The tenant id (= mirror/account name). */
|
|
26
|
+
tenant: "catalyst.tenant",
|
|
27
|
+
/** The upstream system a row originates from: `"linear"` | `"github"`. */
|
|
28
|
+
source: "catalyst.source",
|
|
29
|
+
/** The durable change-feed cursor (last applied seq). */
|
|
30
|
+
cursor: "catalyst.replica.cursor",
|
|
31
|
+
/** head_seq − cursor (mirror lag in seqs), when head_seq is known. */
|
|
32
|
+
lagSeq: "catalyst.replica.lag_seq",
|
|
33
|
+
/** The connection lifecycle status string. */
|
|
34
|
+
status: "catalyst.replica.status",
|
|
35
|
+
/** Rows applied during a seed. */
|
|
36
|
+
rowCount: "catalyst.replica.row_count",
|
|
37
|
+
/** Rows in one seed apply-batch. */
|
|
38
|
+
batchRows: "catalyst.replica.batch_rows",
|
|
39
|
+
};
|
|
40
|
+
/** Metric instrument names (OTel metric stream names). */
|
|
41
|
+
export const REPLICA_METRIC = {
|
|
42
|
+
cursor: "catalyst.replica.cursor",
|
|
43
|
+
lagSeq: "catalyst.replica.lag_seq",
|
|
44
|
+
freshnessMs: "catalyst.replica.freshness_ms",
|
|
45
|
+
status: "catalyst.replica.status",
|
|
46
|
+
applied: "catalyst.replica.applied",
|
|
47
|
+
applyBatchRows: "catalyst.replica.apply_batch_rows",
|
|
48
|
+
};
|
|
49
|
+
/** Span names. */
|
|
50
|
+
export const REPLICA_SPAN = {
|
|
51
|
+
seed: "catalyst.replica.seed",
|
|
52
|
+
applyBatch: "catalyst.replica.apply_batch",
|
|
53
|
+
resync: "catalyst.replica.resync",
|
|
54
|
+
reconnect: "catalyst.replica.reconnect",
|
|
55
|
+
};
|
|
56
|
+
/** `LiveSyncStatus` → a numeric gauge code (the `catalyst.replica.status` gauge value). */
|
|
57
|
+
export const REPLICA_STATUS_CODE = {
|
|
58
|
+
connecting: 0,
|
|
59
|
+
live: 1,
|
|
60
|
+
reconnecting: 2,
|
|
61
|
+
resyncing: 3,
|
|
62
|
+
error: 4,
|
|
63
|
+
stopped: 5,
|
|
64
|
+
};
|
|
65
|
+
/** The default instrumentation-scope name for both the tracer and the meter. */
|
|
66
|
+
export const DEFAULT_SCOPE_NAME = "@catalyst-cloud/sdk";
|
|
67
|
+
/** The mirror entities sourced from GitHub (the rest are Linear) — drives the `catalyst.source` attr. */
|
|
68
|
+
const GITHUB_ENTITIES = new Set([
|
|
69
|
+
"pull_requests",
|
|
70
|
+
"check_runs",
|
|
71
|
+
"commit_statuses",
|
|
72
|
+
"reviews",
|
|
73
|
+
]);
|
|
74
|
+
/** Map a change-feed `entity` (table name) to its upstream source system, for `catalyst.source`. */
|
|
75
|
+
export function entitySource(entity) {
|
|
76
|
+
return GITHUB_ENTITIES.has(entity) ? "github" : "linear";
|
|
77
|
+
}
|
|
78
|
+
// ── No-op implementation (used when telemetry is OFF or `@opentelemetry/api` is absent). ───────────
|
|
79
|
+
const NOOP_SPAN_HANDLE = { setAttribute() { } };
|
|
80
|
+
const NOOP_MANUAL_SPAN = { setAttribute() { }, end() { } };
|
|
81
|
+
const NOOP_REGISTRATION = { remove() { } };
|
|
82
|
+
const NOOP_COUNTER = { add() { } };
|
|
83
|
+
const NOOP_HISTOGRAM = { record() { } };
|
|
84
|
+
/** A telemetry that does nothing but still threads the callback's return value through `withActiveSpan*`. */
|
|
85
|
+
export const NOOP_TELEMETRY = {
|
|
86
|
+
enabled: false,
|
|
87
|
+
withActiveSpan: (_name, _attributes, fn) => fn(NOOP_SPAN_HANDLE),
|
|
88
|
+
withActiveSpanSync: (_name, _attributes, fn) => fn(NOOP_SPAN_HANDLE),
|
|
89
|
+
startSpan: () => NOOP_MANUAL_SPAN,
|
|
90
|
+
observableGauge: () => NOOP_REGISTRATION,
|
|
91
|
+
counter: () => NOOP_COUNTER,
|
|
92
|
+
histogram: () => NOOP_HISTOGRAM,
|
|
93
|
+
};
|
|
94
|
+
/** Drop `undefined`-valued attributes (OTel rejects them) → a clean attribute record. */
|
|
95
|
+
function cleanAttrs(attributes) {
|
|
96
|
+
const out = {};
|
|
97
|
+
if (!attributes)
|
|
98
|
+
return out;
|
|
99
|
+
for (const [k, v] of Object.entries(attributes)) {
|
|
100
|
+
if (v !== undefined)
|
|
101
|
+
out[k] = v;
|
|
102
|
+
}
|
|
103
|
+
return out;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Build a REAL telemetry facade over a resolved `@opentelemetry/api` surface (or the NO-OP when
|
|
107
|
+
* `api` is null — the "package absent" branch). Exported (but NOT re-exported from the package
|
|
108
|
+
* entrypoints) so it can be unit-tested directly with `null` for the absent case.
|
|
109
|
+
*/
|
|
110
|
+
export function buildTelemetry(api, names) {
|
|
111
|
+
if (!api)
|
|
112
|
+
return NOOP_TELEMETRY;
|
|
113
|
+
const tracer = api.trace.getTracer(names.tracerName);
|
|
114
|
+
const meter = api.metrics.getMeter(names.meterName);
|
|
115
|
+
const OK = api.SpanStatusCode.OK;
|
|
116
|
+
const ERROR = api.SpanStatusCode.ERROR;
|
|
117
|
+
const endSpan = (span, error) => {
|
|
118
|
+
if (error !== undefined) {
|
|
119
|
+
span.recordException(error);
|
|
120
|
+
span.setStatus({ code: ERROR, message: error instanceof Error ? error.message : String(error) });
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
span.setStatus({ code: OK });
|
|
124
|
+
}
|
|
125
|
+
span.end();
|
|
126
|
+
};
|
|
127
|
+
const handleFor = (span) => ({
|
|
128
|
+
setAttribute: (k, v) => {
|
|
129
|
+
span.setAttribute(k, v);
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
return {
|
|
133
|
+
enabled: true,
|
|
134
|
+
withActiveSpan(name, attributes, fn) {
|
|
135
|
+
return tracer.startActiveSpan(name, { attributes: cleanAttrs(attributes) }, async (span) => {
|
|
136
|
+
try {
|
|
137
|
+
const result = await fn(handleFor(span));
|
|
138
|
+
endSpan(span);
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
endSpan(span, err);
|
|
143
|
+
throw err;
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
},
|
|
147
|
+
withActiveSpanSync(name, attributes, fn) {
|
|
148
|
+
return tracer.startActiveSpan(name, { attributes: cleanAttrs(attributes) }, (span) => {
|
|
149
|
+
try {
|
|
150
|
+
const result = fn(handleFor(span));
|
|
151
|
+
endSpan(span);
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
endSpan(span, err);
|
|
156
|
+
throw err;
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
},
|
|
160
|
+
startSpan(name, attributes) {
|
|
161
|
+
const span = tracer.startSpan(name, { attributes: cleanAttrs(attributes) });
|
|
162
|
+
return {
|
|
163
|
+
setAttribute: (k, v) => {
|
|
164
|
+
span.setAttribute(k, v);
|
|
165
|
+
},
|
|
166
|
+
end: (error) => endSpan(span, error),
|
|
167
|
+
};
|
|
168
|
+
},
|
|
169
|
+
observableGauge(name, options, callback) {
|
|
170
|
+
const gauge = meter.createObservableGauge(name, options);
|
|
171
|
+
const cb = (result) => {
|
|
172
|
+
callback({ observe: (value, attrs) => result.observe(value, cleanAttrs(attrs)) });
|
|
173
|
+
};
|
|
174
|
+
gauge.addCallback(cb);
|
|
175
|
+
return { remove: () => gauge.removeCallback(cb) };
|
|
176
|
+
},
|
|
177
|
+
counter(name, options) {
|
|
178
|
+
const instrument = meter.createCounter(name, options);
|
|
179
|
+
return { add: (value, attrs) => instrument.add(value, cleanAttrs(attrs)) };
|
|
180
|
+
},
|
|
181
|
+
histogram(name, options) {
|
|
182
|
+
const instrument = meter.createHistogram(name, options);
|
|
183
|
+
return { record: (value, attrs) => instrument.record(value, cleanAttrs(attrs)) };
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
// ── The guarded one-time dynamic import. ──────────────────────────────────────────────────────────
|
|
188
|
+
let apiPromise;
|
|
189
|
+
let warnedAbsent = false;
|
|
190
|
+
/** Dynamic-import `@opentelemetry/api` ONCE (cached). Resolves to its surface, or `null` if the
|
|
191
|
+
* package isn't installed — the catch is what makes it a TRUE optional peer dependency. */
|
|
192
|
+
async function loadOtelApi() {
|
|
193
|
+
if (apiPromise === undefined) {
|
|
194
|
+
apiPromise = import("@opentelemetry/api").then((mod) => {
|
|
195
|
+
// The named exports (trace/metrics/SpanStatusCode) may sit on the module namespace OR on
|
|
196
|
+
// `default`, depending on the CJS/ESM interop (node vs a bundler/test runner). Pick whichever
|
|
197
|
+
// object actually carries them rather than guessing `default ?? mod`.
|
|
198
|
+
const hasApi = (o) => typeof o === "object" &&
|
|
199
|
+
o !== null &&
|
|
200
|
+
"trace" in o &&
|
|
201
|
+
"metrics" in o &&
|
|
202
|
+
"SpanStatusCode" in o;
|
|
203
|
+
const ns = mod;
|
|
204
|
+
if (hasApi(mod))
|
|
205
|
+
return mod;
|
|
206
|
+
if (hasApi(ns.default))
|
|
207
|
+
return ns.default;
|
|
208
|
+
return null;
|
|
209
|
+
}, () => null);
|
|
210
|
+
}
|
|
211
|
+
return apiPromise;
|
|
212
|
+
}
|
|
213
|
+
/** True iff `value` is an already-resolved {@link Telemetry} (internal pass-through, e.g. a replica
|
|
214
|
+
* sharing its instance with the transport) rather than a {@link TelemetryConfig}. */
|
|
215
|
+
function isTelemetry(value) {
|
|
216
|
+
return (typeof value === "object" &&
|
|
217
|
+
value !== null &&
|
|
218
|
+
typeof value.withActiveSpan === "function");
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Resolve the opt-in `telemetry` option into a {@link Telemetry}. Defaults to {@link NOOP_TELEMETRY}
|
|
222
|
+
* (no dynamic import attempted) when undefined/false so the off path is truly zero-overhead. When ON,
|
|
223
|
+
* guard-imports `@opentelemetry/api`; if absent, warns once and falls back to no-op (never throws). An
|
|
224
|
+
* already-resolved `Telemetry` is returned as-is so a replica + its transport share ONE instance.
|
|
225
|
+
*/
|
|
226
|
+
export async function createTelemetry(config, defaults) {
|
|
227
|
+
if (isTelemetry(config))
|
|
228
|
+
return config;
|
|
229
|
+
if (config === undefined || config === false)
|
|
230
|
+
return NOOP_TELEMETRY;
|
|
231
|
+
const names = config === true
|
|
232
|
+
? defaults
|
|
233
|
+
: {
|
|
234
|
+
tracerName: config.tracerName ?? defaults.tracerName,
|
|
235
|
+
meterName: config.meterName ?? defaults.meterName,
|
|
236
|
+
};
|
|
237
|
+
const api = await loadOtelApi();
|
|
238
|
+
if (!api) {
|
|
239
|
+
if (!warnedAbsent) {
|
|
240
|
+
warnedAbsent = true;
|
|
241
|
+
// eslint-disable-next-line no-console
|
|
242
|
+
console.warn("[catalyst-sdk:otel] telemetry was enabled but the optional peer '@opentelemetry/api' is not " +
|
|
243
|
+
"installed — running with no-op telemetry. Install '@opentelemetry/api' to emit spans/metrics.");
|
|
244
|
+
}
|
|
245
|
+
return NOOP_TELEMETRY;
|
|
246
|
+
}
|
|
247
|
+
return buildTelemetry(api, names);
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=otel.js.map
|
package/dist/otel.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel.js","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { type SqlExecutor, type IssueView, type IssueDetailView, type PullView,
|
|
|
2
2
|
import { type AuthStrategy, type LiveSyncStatus, type LogLevel, type WebSocketFactory } from "../live-sync-client.js";
|
|
3
3
|
import { type EngineFactory, type ReplicaEngine } from "./engine.js";
|
|
4
4
|
import { type WriterGuardOptions } from "./writer-lock.js";
|
|
5
|
+
import { type TelemetryConfig } from "../otel.js";
|
|
5
6
|
export interface CatalystReplicaOptions {
|
|
6
7
|
/** http(s) origin incl. any path prefix (…/api/v1); the scheme is swapped to ws(s) for /connect. */
|
|
7
8
|
baseUrl: string;
|
|
@@ -43,6 +44,22 @@ export interface CatalystReplicaOptions {
|
|
|
43
44
|
* hanging. Off by default.
|
|
44
45
|
*/
|
|
45
46
|
startTimeoutMs?: number;
|
|
47
|
+
/**
|
|
48
|
+
* Opt-in OpenTelemetry (CTC-138). `false`/absent = OFF (strictly zero overhead; no
|
|
49
|
+
* `@opentelemetry/api` import is even attempted). `true` = ON with the default `@catalyst-cloud/sdk`
|
|
50
|
+
* instrumentation scope; an object overrides the tracer/meter name. When ON the replica emits:
|
|
51
|
+
* • SPANS — `catalyst.replica.seed` (snapshot pull+apply), `catalyst.replica.apply_batch` (per
|
|
52
|
+
* seed batch), plus the transport's `catalyst.replica.resync` + `catalyst.replica.reconnect`.
|
|
53
|
+
* • METRICS — observable gauges `catalyst.replica.cursor`, `catalyst.replica.lag_seq` (only when
|
|
54
|
+
* the mirror head_seq is known from the `x-catalyst-head-seq` /snapshot response header),
|
|
55
|
+
* `catalyst.replica.freshness_ms`, `catalyst.replica.status`; a `catalyst.replica.applied`
|
|
56
|
+
* counter (per live frame) and a `catalyst.replica.apply_batch_rows` histogram.
|
|
57
|
+
* All carry `catalyst.tenant` (+ `catalyst.source` where a single entity is involved). `@opentelemetry/api`
|
|
58
|
+
* is an OPTIONAL peer dep: enabling this without it installed logs once and runs no-op (never throws).
|
|
59
|
+
* Spans/metrics route through the consumer's GLOBAL TracerProvider/MeterProvider so their Resource
|
|
60
|
+
* (service.name) flows through.
|
|
61
|
+
*/
|
|
62
|
+
telemetry?: TelemetryConfig;
|
|
46
63
|
}
|
|
47
64
|
/**
|
|
48
65
|
* Options for a READ-ONLY reader ({@link CatalystReplica.openReadOnly}). A reader needs only the file
|
|
@@ -82,6 +99,19 @@ export declare class CatalystReplica {
|
|
|
82
99
|
* an initial seed failure. */
|
|
83
100
|
private liveResolve;
|
|
84
101
|
private liveReject;
|
|
102
|
+
/** Resolved once in start(); the no-op until then so any early metric/span call is safe. */
|
|
103
|
+
private telemetry;
|
|
104
|
+
/** Observable-gauge unregister handles, torn down in close() so a closed replica stops being scraped. */
|
|
105
|
+
private metricRegs;
|
|
106
|
+
/** Per-live-frame applied counter + per-seed-batch row histogram (no-op until telemetry is wired). */
|
|
107
|
+
private appliedCounter;
|
|
108
|
+
private applyBatchHistogram;
|
|
109
|
+
/** Last mirror head_seq + server clock observed from the `x-catalyst-head-seq` /snapshot headers
|
|
110
|
+
* (CTC-137), or null until seen. Drives the `lag_seq` gauge (emitted ONLY when non-null). */
|
|
111
|
+
private lastHeadSeq;
|
|
112
|
+
private lastServerTimeMs;
|
|
113
|
+
/** Wall-clock ms of the last applied delta (live frame or seed), or null. Drives `freshness_ms`. */
|
|
114
|
+
private lastAppliedAtMs;
|
|
85
115
|
constructor(opts: CatalystReplicaOptions);
|
|
86
116
|
/**
|
|
87
117
|
* Open a CatalystReplica as a READ-ONLY READER over a file another process owns as the WRITER
|
|
@@ -134,6 +164,15 @@ export declare class CatalystReplica {
|
|
|
134
164
|
get status(): LiveSyncStatus;
|
|
135
165
|
/** The raw driver Database the SDK owns — for `drizzle(replica.handle, { schema: mirrorSchema })`. */
|
|
136
166
|
get handle(): unknown;
|
|
167
|
+
/** Ms since the last applied delta (live frame or seed), or null before the first apply. The basis
|
|
168
|
+
* of the `catalyst.replica.freshness_ms` gauge — "how stale is the local copy right now". */
|
|
169
|
+
get freshnessMs(): number | null;
|
|
170
|
+
/** The last mirror head_seq read from the `x-catalyst-head-seq` /snapshot response header (CTC-137),
|
|
171
|
+
* or null if the header has never been observed. `headSeq − cursor` is the replica's lag in seqs. */
|
|
172
|
+
get headSeq(): number | null;
|
|
173
|
+
/** The mirror server clock (ms) read from the `x-catalyst-server-time-ms` /snapshot response header
|
|
174
|
+
* (CTC-137), or null if never observed — for a consumer that wants to estimate clock skew. */
|
|
175
|
+
get serverTimeMs(): number | null;
|
|
137
176
|
private resolveEngine;
|
|
138
177
|
/**
|
|
139
178
|
* Open the read-only engine and wire ONLY the read ports — no migrations, no `sync_meta` DDL, no
|
|
@@ -144,6 +183,13 @@ export declare class CatalystReplica {
|
|
|
144
183
|
private openReadOnlyInternal;
|
|
145
184
|
private handleStatus;
|
|
146
185
|
private clearLiveDeferred;
|
|
186
|
+
/**
|
|
187
|
+
* Register the four `catalyst.replica.*` observable gauges (whose async callbacks read live instance
|
|
188
|
+
* state) + create the per-frame counter and per-batch histogram. A no-op telemetry returns no-op
|
|
189
|
+
* instruments + empty registrations, so this is safe (and free) when telemetry is OFF. Idempotent
|
|
190
|
+
* per start(); the registrations are torn down in close().
|
|
191
|
+
*/
|
|
192
|
+
private registerMetrics;
|
|
147
193
|
/** Land one delta + advance the durable cursor atomically (a crash can't skip a seq), then signal. */
|
|
148
194
|
private applyFrame;
|
|
149
195
|
/**
|
|
@@ -154,6 +200,9 @@ export declare class CatalystReplica {
|
|
|
154
200
|
* atomic truncate+apply+setCursor safety without holding one giant transaction.
|
|
155
201
|
*/
|
|
156
202
|
private seedFromSnapshot;
|
|
203
|
+
/** Read CTC-137's `x-catalyst-head-seq` (+ `x-catalyst-server-time-ms`) off the /snapshot response,
|
|
204
|
+
* if present. Guarded so a header-less test fetch stand-in is a no-op. */
|
|
205
|
+
private readHeadSeqHeaders;
|
|
157
206
|
private feedHeaders;
|
|
158
207
|
}
|
|
159
208
|
//# sourceMappingURL=catalyst-replica.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalyst-replica.d.ts","sourceRoot":"","sources":["../../src/replica/catalyst-replica.ts"],"names":[],"mappings":"AA4BA,OAAO,EAQL,KAAK,WAAW,EAEhB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAC1B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACtB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"catalyst-replica.d.ts","sourceRoot":"","sources":["../../src/replica/catalyst-replica.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,7 @@ import { buildIssuesView, buildIssueDetail, buildPullsView, buildProjectsView, b
|
|
|
23
23
|
import { LiveSyncClient, stripTrailingSlashes, } from "../live-sync-client.js";
|
|
24
24
|
import { autoDetectEngine, autoDetectReadonlyEngine, } from "./engine.js";
|
|
25
25
|
import { claimWriterLock, } from "./writer-lock.js";
|
|
26
|
+
import { NOOP_TELEMETRY, createTelemetry, CATALYST_ATTR, REPLICA_METRIC, REPLICA_SPAN, REPLICA_STATUS_CODE, DEFAULT_SCOPE_NAME, entitySource, } from "../otel.js";
|
|
26
27
|
/** Host-sync bookkeeping table (NOT part of the DO mirror schema, so not in MIRROR_MIGRATIONS): the
|
|
27
28
|
* change-feed cursor, so a restart resumes from the live `{type:"sync", after}` replay (or /changes)
|
|
28
29
|
* instead of a full /snapshot every boot. */
|
|
@@ -55,6 +56,20 @@ export class CatalystReplica {
|
|
|
55
56
|
* an initial seed failure. */
|
|
56
57
|
liveResolve = null;
|
|
57
58
|
liveReject = null;
|
|
59
|
+
// ── OpenTelemetry (CTC-138, opt-in via opts.telemetry) ──────────────────────────────────────────
|
|
60
|
+
/** Resolved once in start(); the no-op until then so any early metric/span call is safe. */
|
|
61
|
+
telemetry = NOOP_TELEMETRY;
|
|
62
|
+
/** Observable-gauge unregister handles, torn down in close() so a closed replica stops being scraped. */
|
|
63
|
+
metricRegs = [];
|
|
64
|
+
/** Per-live-frame applied counter + per-seed-batch row histogram (no-op until telemetry is wired). */
|
|
65
|
+
appliedCounter = NOOP_TELEMETRY.counter(REPLICA_METRIC.applied);
|
|
66
|
+
applyBatchHistogram = NOOP_TELEMETRY.histogram(REPLICA_METRIC.applyBatchRows);
|
|
67
|
+
/** Last mirror head_seq + server clock observed from the `x-catalyst-head-seq` /snapshot headers
|
|
68
|
+
* (CTC-137), or null until seen. Drives the `lag_seq` gauge (emitted ONLY when non-null). */
|
|
69
|
+
lastHeadSeq = null;
|
|
70
|
+
lastServerTimeMs = null;
|
|
71
|
+
/** Wall-clock ms of the last applied delta (live frame or seed), or null. Drives `freshness_ms`. */
|
|
72
|
+
lastAppliedAtMs = null;
|
|
58
73
|
constructor(opts) {
|
|
59
74
|
this.opts = opts;
|
|
60
75
|
this.baseUrl = stripTrailingSlashes(opts.baseUrl);
|
|
@@ -131,6 +146,15 @@ export class CatalystReplica {
|
|
|
131
146
|
applyMigrations(migrationDb, MIRROR_MIGRATIONS);
|
|
132
147
|
engine.exec(SYNC_META_DDL);
|
|
133
148
|
this.highWater = getCursor(this.writeDb) ?? 0;
|
|
149
|
+
// Resolve the OTel seam ONCE (guarded dynamic import; no-op when off / api absent) BEFORE wiring
|
|
150
|
+
// the transport, then cache the tracer/meter-backed instruments on the instance so the synchronous
|
|
151
|
+
// applyFrame/flush hot paths never go async, and SHARE the resolved instance with the transport so
|
|
152
|
+
// the seed span nests under the resync span and both layers use one tracer/meter.
|
|
153
|
+
this.telemetry = await createTelemetry(this.opts.telemetry, {
|
|
154
|
+
tracerName: DEFAULT_SCOPE_NAME,
|
|
155
|
+
meterName: DEFAULT_SCOPE_NAME,
|
|
156
|
+
});
|
|
157
|
+
this.registerMetrics();
|
|
134
158
|
this.client = new LiveSyncClient({
|
|
135
159
|
baseUrl: this.baseUrl,
|
|
136
160
|
accountId: this.opts.account,
|
|
@@ -144,6 +168,7 @@ export class CatalystReplica {
|
|
|
144
168
|
maxBackoffMs: this.opts.maxBackoffMs,
|
|
145
169
|
wsFactory: this.opts.wsFactory,
|
|
146
170
|
log: this.log,
|
|
171
|
+
telemetry: this.telemetry,
|
|
147
172
|
});
|
|
148
173
|
const livePromise = new Promise((resolve, reject) => {
|
|
149
174
|
this.liveResolve = resolve;
|
|
@@ -208,6 +233,16 @@ export class CatalystReplica {
|
|
|
208
233
|
this.log("warn", "writer-lock release threw", err);
|
|
209
234
|
}
|
|
210
235
|
this.writerLock = null;
|
|
236
|
+
// Unregister the observable-gauge callbacks so a closed replica stops being scraped + can be GC'd.
|
|
237
|
+
for (const reg of this.metricRegs) {
|
|
238
|
+
try {
|
|
239
|
+
reg.remove();
|
|
240
|
+
}
|
|
241
|
+
catch (err) {
|
|
242
|
+
this.log("warn", "metric unregister threw", err);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
this.metricRegs = [];
|
|
211
246
|
try {
|
|
212
247
|
this.engine?.close();
|
|
213
248
|
}
|
|
@@ -255,6 +290,21 @@ export class CatalystReplica {
|
|
|
255
290
|
get handle() {
|
|
256
291
|
return this.engine?.handle;
|
|
257
292
|
}
|
|
293
|
+
/** Ms since the last applied delta (live frame or seed), or null before the first apply. The basis
|
|
294
|
+
* of the `catalyst.replica.freshness_ms` gauge — "how stale is the local copy right now". */
|
|
295
|
+
get freshnessMs() {
|
|
296
|
+
return this.lastAppliedAtMs == null ? null : Date.now() - this.lastAppliedAtMs;
|
|
297
|
+
}
|
|
298
|
+
/** The last mirror head_seq read from the `x-catalyst-head-seq` /snapshot response header (CTC-137),
|
|
299
|
+
* or null if the header has never been observed. `headSeq − cursor` is the replica's lag in seqs. */
|
|
300
|
+
get headSeq() {
|
|
301
|
+
return this.lastHeadSeq;
|
|
302
|
+
}
|
|
303
|
+
/** The mirror server clock (ms) read from the `x-catalyst-server-time-ms` /snapshot response header
|
|
304
|
+
* (CTC-137), or null if never observed — for a consumer that wants to estimate clock skew. */
|
|
305
|
+
get serverTimeMs() {
|
|
306
|
+
return this.lastServerTimeMs;
|
|
307
|
+
}
|
|
258
308
|
// ── Internals ─────────────────────────────────────────────────────────────────────────────────
|
|
259
309
|
async resolveEngine() {
|
|
260
310
|
const e = this.opts.engine;
|
|
@@ -312,6 +362,37 @@ export class CatalystReplica {
|
|
|
312
362
|
this.liveResolve = null;
|
|
313
363
|
this.liveReject = null;
|
|
314
364
|
}
|
|
365
|
+
/**
|
|
366
|
+
* Register the four `catalyst.replica.*` observable gauges (whose async callbacks read live instance
|
|
367
|
+
* state) + create the per-frame counter and per-batch histogram. A no-op telemetry returns no-op
|
|
368
|
+
* instruments + empty registrations, so this is safe (and free) when telemetry is OFF. Idempotent
|
|
369
|
+
* per start(); the registrations are torn down in close().
|
|
370
|
+
*/
|
|
371
|
+
registerMetrics() {
|
|
372
|
+
if (!this.telemetry.enabled)
|
|
373
|
+
return; // skip the gauge churn entirely on the no-op path
|
|
374
|
+
const tenant = () => ({ [CATALYST_ATTR.tenant]: this.opts.account });
|
|
375
|
+
this.metricRegs.push(this.telemetry.observableGauge(REPLICA_METRIC.cursor, { description: "Durable change-feed cursor (last applied seq).", unit: "{seq}" }, (result) => result.observe(this.highWater, tenant())),
|
|
376
|
+
// lag_seq is emitted ONLY when the mirror head_seq is known (CTC-137 header observed at seed).
|
|
377
|
+
this.telemetry.observableGauge(REPLICA_METRIC.lagSeq, { description: "Mirror lag in seqs (head_seq − cursor); only when head_seq is known.", unit: "{seq}" }, (result) => {
|
|
378
|
+
if (this.lastHeadSeq != null)
|
|
379
|
+
result.observe(this.lastHeadSeq - this.highWater, tenant());
|
|
380
|
+
}), this.telemetry.observableGauge(REPLICA_METRIC.freshnessMs, { description: "Ms since the last applied delta (live frame or seed).", unit: "ms" }, (result) => {
|
|
381
|
+
if (this.lastAppliedAtMs != null)
|
|
382
|
+
result.observe(Date.now() - this.lastAppliedAtMs, tenant());
|
|
383
|
+
}), this.telemetry.observableGauge(REPLICA_METRIC.status, { description: "Connection lifecycle status as a numeric code (see REPLICA_STATUS_CODE)." }, (result) => result.observe(REPLICA_STATUS_CODE[this._status], {
|
|
384
|
+
[CATALYST_ATTR.tenant]: this.opts.account,
|
|
385
|
+
[CATALYST_ATTR.status]: this._status,
|
|
386
|
+
})));
|
|
387
|
+
this.appliedCounter = this.telemetry.counter(REPLICA_METRIC.applied, {
|
|
388
|
+
description: "Live change frames applied to the replica.",
|
|
389
|
+
unit: "{frame}",
|
|
390
|
+
});
|
|
391
|
+
this.applyBatchHistogram = this.telemetry.histogram(REPLICA_METRIC.applyBatchRows, {
|
|
392
|
+
description: "Rows applied per seed batch transaction.",
|
|
393
|
+
unit: "{row}",
|
|
394
|
+
});
|
|
395
|
+
}
|
|
315
396
|
/** Land one delta + advance the durable cursor atomically (a crash can't skip a seq), then signal. */
|
|
316
397
|
applyFrame(frame) {
|
|
317
398
|
const engine = this.engine;
|
|
@@ -328,6 +409,13 @@ export class CatalystReplica {
|
|
|
328
409
|
});
|
|
329
410
|
if (frame.seq > this.highWater)
|
|
330
411
|
this.highWater = frame.seq;
|
|
412
|
+
// Freshness stamp + per-frame counter (no-op instruments when telemetry is off). The cursor +
|
|
413
|
+
// freshness_ms gauges read this.highWater / this.lastAppliedAtMs on the next scrape.
|
|
414
|
+
this.lastAppliedAtMs = Date.now();
|
|
415
|
+
this.appliedCounter.add(1, {
|
|
416
|
+
[CATALYST_ATTR.tenant]: this.opts.account,
|
|
417
|
+
[CATALYST_ATTR.source]: entitySource(frame.entity),
|
|
418
|
+
});
|
|
331
419
|
try {
|
|
332
420
|
this.opts.onChange?.();
|
|
333
421
|
}
|
|
@@ -347,54 +435,90 @@ export class CatalystReplica {
|
|
|
347
435
|
* atomic truncate+apply+setCursor safety without holding one giant transaction.
|
|
348
436
|
*/
|
|
349
437
|
async seedFromSnapshot() {
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
engine.transaction(() =>
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
438
|
+
// The whole seed (fetch + truncate + batched apply + setCursor) runs inside ONE active span so it
|
|
439
|
+
// nests under the resync span when triggered by a {type:"resync"} frame, and stands alone on a cold
|
|
440
|
+
// start. Active so the per-batch apply spans auto-parent under it.
|
|
441
|
+
return this.telemetry.withActiveSpan(REPLICA_SPAN.seed, { [CATALYST_ATTR.tenant]: this.opts.account }, async (span) => {
|
|
442
|
+
const engine = this.engine;
|
|
443
|
+
const writeDb = this.writeDb;
|
|
444
|
+
const url = `${this.baseUrl}/snapshot?account=${encodeURIComponent(this.opts.account)}`;
|
|
445
|
+
const res = await this.fetchImpl(url, { headers: this.feedHeaders() });
|
|
446
|
+
if (!res.ok)
|
|
447
|
+
throw new Error(`/snapshot ${res.status}`);
|
|
448
|
+
// CTC-137: the /snapshot response is the SINGLE HTTP Response the SDK reads, so it is the one
|
|
449
|
+
// place to learn the mirror's head_seq (+ server clock). Stashed for the lag_seq gauge, which
|
|
450
|
+
// only emits while head_seq is known. Guarded: test fetch stand-ins return no `headers`.
|
|
451
|
+
this.readHeadSeqHeaders(res);
|
|
452
|
+
// Invalidate the cursor BEFORE truncating so a crash mid-seed re-seeds rather than going live over
|
|
453
|
+
// an empty replica from a stale cursor.
|
|
454
|
+
engine.run("DELETE FROM sync_meta WHERE key = 'cursor'");
|
|
455
|
+
engine.transaction(() => truncateReplica(writeDb));
|
|
456
|
+
let cursor = 0;
|
|
457
|
+
let batch = [];
|
|
458
|
+
const flush = () => {
|
|
459
|
+
if (batch.length === 0)
|
|
460
|
+
return;
|
|
461
|
+
const rows = batch;
|
|
462
|
+
batch = [];
|
|
463
|
+
// The literal batched-apply seam: one transaction per ≤SEED_BATCH_ROWS rows → its own span.
|
|
464
|
+
this.telemetry.withActiveSpanSync(REPLICA_SPAN.applyBatch, { [CATALYST_ATTR.tenant]: this.opts.account, [CATALYST_ATTR.batchRows]: rows.length }, () => {
|
|
465
|
+
engine.transaction(() => {
|
|
466
|
+
for (const rec of rows) {
|
|
467
|
+
if (rec.entity === undefined)
|
|
468
|
+
continue;
|
|
469
|
+
applyDelta(writeDb, { entity: rec.entity, op: rec.op ?? "upsert", row: rec.row ?? {} }, engine.toBindable);
|
|
470
|
+
}
|
|
471
|
+
});
|
|
472
|
+
});
|
|
473
|
+
this.applyBatchHistogram.record(rows.length, { [CATALYST_ATTR.tenant]: this.opts.account });
|
|
474
|
+
};
|
|
475
|
+
let rowCount = 0;
|
|
476
|
+
for await (const line of iterateNdjson(res)) {
|
|
477
|
+
const rec = JSON.parse(line);
|
|
478
|
+
if (typeof rec.cursor === "number") {
|
|
479
|
+
cursor = rec.cursor; // the FINAL line carries the cursor
|
|
480
|
+
continue;
|
|
372
481
|
}
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
const rec = JSON.parse(line);
|
|
378
|
-
if (typeof rec.cursor === "number") {
|
|
379
|
-
cursor = rec.cursor; // the FINAL line carries the cursor
|
|
380
|
-
continue;
|
|
482
|
+
batch.push(rec);
|
|
483
|
+
rowCount++;
|
|
484
|
+
if (batch.length >= SEED_BATCH_ROWS)
|
|
485
|
+
flush();
|
|
381
486
|
}
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
487
|
+
flush();
|
|
488
|
+
engine.transaction(() => setCursor(writeDb, cursor, engine.toBindable));
|
|
489
|
+
this.highWater = cursor;
|
|
490
|
+
this.lastAppliedAtMs = Date.now(); // a completed seed refreshes freshness_ms
|
|
491
|
+
span.setAttribute(CATALYST_ATTR.rowCount, rowCount);
|
|
492
|
+
span.setAttribute(CATALYST_ATTR.cursor, cursor);
|
|
493
|
+
this.log("info", `snapshot seeded (${rowCount} rows), cursor=${cursor}`);
|
|
494
|
+
try {
|
|
495
|
+
this.opts.onChange?.();
|
|
496
|
+
}
|
|
497
|
+
catch (err) {
|
|
498
|
+
this.log("warn", "onChange handler threw", err);
|
|
499
|
+
}
|
|
500
|
+
return cursor;
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
/** Read CTC-137's `x-catalyst-head-seq` (+ `x-catalyst-server-time-ms`) off the /snapshot response,
|
|
504
|
+
* if present. Guarded so a header-less test fetch stand-in is a no-op. */
|
|
505
|
+
readHeadSeqHeaders(res) {
|
|
506
|
+
const headers = res.headers;
|
|
507
|
+
const get = headers?.get;
|
|
508
|
+
if (typeof get !== "function")
|
|
509
|
+
return;
|
|
510
|
+
const headSeq = get.call(headers, "x-catalyst-head-seq");
|
|
511
|
+
if (headSeq != null && headSeq !== "") {
|
|
512
|
+
const n = Number(headSeq);
|
|
513
|
+
if (Number.isFinite(n))
|
|
514
|
+
this.lastHeadSeq = n;
|
|
393
515
|
}
|
|
394
|
-
|
|
395
|
-
|
|
516
|
+
const serverTime = get.call(headers, "x-catalyst-server-time-ms");
|
|
517
|
+
if (serverTime != null && serverTime !== "") {
|
|
518
|
+
const n = Number(serverTime);
|
|
519
|
+
if (Number.isFinite(n))
|
|
520
|
+
this.lastServerTimeMs = n;
|
|
396
521
|
}
|
|
397
|
-
return cursor;
|
|
398
522
|
}
|
|
399
523
|
feedHeaders() {
|
|
400
524
|
const h = { accept: "application/x-ndjson" };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalyst-replica.js","sourceRoot":"","sources":["../../src/replica/catalyst-replica.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"catalyst-replica.js","sourceRoot":"","sources":["../../src/replica/catalyst-replica.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@catalyst-cloud/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Keep a live local copy of your Linear and GitHub project data — pushed in real time, without polling rate limits or webhook tunnels.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Coalesce Labs",
|
|
@@ -54,6 +54,11 @@
|
|
|
54
54
|
"durable-objects"
|
|
55
55
|
],
|
|
56
56
|
"devDependencies": {
|
|
57
|
+
"@opentelemetry/api": "^1.9.0",
|
|
58
|
+
"@opentelemetry/context-async-hooks": "^2.8.0",
|
|
59
|
+
"@opentelemetry/resources": "^2.8.0",
|
|
60
|
+
"@opentelemetry/sdk-metrics": "^2.8.0",
|
|
61
|
+
"@opentelemetry/sdk-trace-base": "^2.8.0",
|
|
57
62
|
"typescript": "^5.6.3",
|
|
58
63
|
"vitest": "^2.1.8"
|
|
59
64
|
},
|
|
@@ -63,10 +68,14 @@
|
|
|
63
68
|
"@catalyst-cloud/schema": "^0.1.0"
|
|
64
69
|
},
|
|
65
70
|
"peerDependencies": {
|
|
71
|
+
"@opentelemetry/api": ">=1.3.0 <2",
|
|
66
72
|
"@sqlite.org/sqlite-wasm": "*",
|
|
67
73
|
"better-sqlite3": "*"
|
|
68
74
|
},
|
|
69
75
|
"peerDependenciesMeta": {
|
|
76
|
+
"@opentelemetry/api": {
|
|
77
|
+
"optional": true
|
|
78
|
+
},
|
|
70
79
|
"better-sqlite3": {
|
|
71
80
|
"optional": true
|
|
72
81
|
},
|