@stratasync/transport-graphql 0.2.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.
@@ -0,0 +1,482 @@
1
+ import { maxSyncId } from "@stratasync/core";
2
+ import { parseDeltaPacket } from "./protocol.js";
3
+ import { calculateBackoff, parseSyncId, resolveAuthToken } from "./utils.js";
4
+ /**
5
+ * WebSocket connection manager for delta streaming
6
+ */
7
+ export class WebSocketManager {
8
+ socket = null;
9
+ connectPromise = null;
10
+ wsEndpoint;
11
+ auth;
12
+ webSocketFactory;
13
+ connectionState = "disconnected";
14
+ stateListeners = new Set();
15
+ subscribedReady = false;
16
+ subscribeStateListeners = new Set();
17
+ subscriptions = new Set();
18
+ yjsMessageCallbacks = new Set();
19
+ pendingMessages = [];
20
+ reconnectAttempts = 0;
21
+ reconnectTimer = null;
22
+ subscribeRetryAttempts = 0;
23
+ subscribeRetryTimer = null;
24
+ retryConfig;
25
+ shouldReconnect = true;
26
+ constructor(wsEndpoint, auth, retryConfig, webSocketFactory) {
27
+ this.wsEndpoint = wsEndpoint;
28
+ this.auth = auth;
29
+ this.retryConfig = retryConfig;
30
+ const defaultFactory = webSocketFactory ?? globalThis.WebSocket;
31
+ if (!defaultFactory) {
32
+ throw new Error("WebSocket is not available in this environment");
33
+ }
34
+ this.webSocketFactory = defaultFactory;
35
+ }
36
+ /**
37
+ * Connects to the WebSocket server
38
+ */
39
+ async connect() {
40
+ if (this.socket) {
41
+ if (this.connectPromise) {
42
+ return this.connectPromise;
43
+ }
44
+ return;
45
+ }
46
+ if (this.connectPromise) {
47
+ return this.connectPromise;
48
+ }
49
+ const connectPromise = (async () => {
50
+ this.shouldReconnect = true;
51
+ this.setConnectionState(this.reconnectAttempts > 0 ? "reconnecting" : "connecting");
52
+ const token = await resolveAuthToken(this.auth);
53
+ // close() may have been called while we were waiting on auth.
54
+ if (!this.shouldReconnect) {
55
+ return;
56
+ }
57
+ const url = token
58
+ ? `${this.wsEndpoint}${this.wsEndpoint.includes("?") ? "&" : "?"}token=${encodeURIComponent(token)}`
59
+ : this.wsEndpoint;
60
+ const socket = new this.webSocketFactory(url);
61
+ this.socket = socket;
62
+ socket.addEventListener("open", () => {
63
+ this.reconnectAttempts = 0;
64
+ this.subscribeRetryAttempts = 0;
65
+ if (this.subscribeRetryTimer) {
66
+ clearTimeout(this.subscribeRetryTimer);
67
+ this.subscribeRetryTimer = null;
68
+ }
69
+ this.setSubscribedReady(false);
70
+ this.setConnectionState("connected");
71
+ // oxlint-disable-next-line prefer-await-to-then -- fire-and-forget pattern
72
+ this.flushSubscriptions().catch(() => {
73
+ // If subscription fails, reconnect will handle it.
74
+ });
75
+ });
76
+ socket.addEventListener("message", (event) => {
77
+ // oxlint-disable-next-line prefer-await-to-then -- fire-and-forget pattern
78
+ this.handleMessage(event).catch(() => {
79
+ // Message parse errors are ignored.
80
+ });
81
+ });
82
+ socket.addEventListener("close", () => {
83
+ this.socket = null;
84
+ this.setSubscribedReady(false);
85
+ this.setConnectionState("disconnected");
86
+ if (this.shouldReconnect && this.subscriptions.size > 0) {
87
+ this.scheduleReconnect();
88
+ }
89
+ });
90
+ socket.addEventListener("error", () => {
91
+ this.setSubscribedReady(false);
92
+ this.setConnectionState("error");
93
+ });
94
+ })();
95
+ this.connectPromise = connectPromise;
96
+ try {
97
+ await connectPromise;
98
+ }
99
+ catch (error) {
100
+ this.setSubscribedReady(false);
101
+ this.setConnectionState("error");
102
+ throw error;
103
+ }
104
+ finally {
105
+ if (this.connectPromise === connectPromise) {
106
+ this.connectPromise = null;
107
+ }
108
+ }
109
+ }
110
+ /**
111
+ * Subscribes to delta updates
112
+ */
113
+ subscribe(options) {
114
+ const state = {
115
+ closed: false,
116
+ lastSyncId: options.afterSyncId,
117
+ options,
118
+ queue: [],
119
+ resolve: null,
120
+ };
121
+ this.subscriptions.add(state);
122
+ // oxlint-disable-next-line prefer-await-to-then -- fire-and-forget pattern
123
+ this.connect().catch(() => {
124
+ // Connection will be retried automatically
125
+ });
126
+ if (this.socket?.readyState === WebSocket.OPEN) {
127
+ // oxlint-disable-next-line prefer-await-to-then -- fire-and-forget pattern
128
+ this.sendSubscribe(state).catch(() => {
129
+ // Retry on reconnect
130
+ });
131
+ }
132
+ const iterator = {
133
+ next: () => {
134
+ if (state.closed && state.queue.length === 0) {
135
+ return Promise.resolve({
136
+ done: true,
137
+ value: undefined,
138
+ });
139
+ }
140
+ const queued = state.queue.shift();
141
+ if (queued) {
142
+ return Promise.resolve({ done: false, value: queued });
143
+ }
144
+ // oxlint-disable-next-line avoid-new -- wrapping callback API in promise
145
+ return new Promise((resolve) => {
146
+ state.resolve = resolve;
147
+ });
148
+ },
149
+ return: () => {
150
+ this.subscriptions.delete(state);
151
+ state.closed = true;
152
+ return Promise.resolve({
153
+ done: true,
154
+ value: undefined,
155
+ });
156
+ },
157
+ throw: (error) => {
158
+ this.subscriptions.delete(state);
159
+ state.closed = true;
160
+ return Promise.reject(error);
161
+ },
162
+ };
163
+ return {
164
+ [Symbol.asyncIterator]: () => iterator,
165
+ unsubscribe: () => {
166
+ this.subscriptions.delete(state);
167
+ state.closed = true;
168
+ },
169
+ };
170
+ }
171
+ /**
172
+ * Gets the current connection state
173
+ */
174
+ getConnectionState() {
175
+ return this.connectionState;
176
+ }
177
+ /**
178
+ * Registers a callback for connection state changes
179
+ */
180
+ onConnectionStateChange(
181
+ // oxlint-disable-next-line prefer-await-to-callbacks -- event listener registration
182
+ callback) {
183
+ this.stateListeners.add(callback);
184
+ return () => {
185
+ this.stateListeners.delete(callback);
186
+ };
187
+ }
188
+ /**
189
+ * Gets whether the server has acknowledged subscriptions for this socket.
190
+ */
191
+ isSubscribedReady() {
192
+ return this.subscribedReady;
193
+ }
194
+ /**
195
+ * Registers a callback for subscription-readiness changes.
196
+ */
197
+ // oxlint-disable-next-line prefer-await-to-callbacks -- event listener registration
198
+ onSubscribeStateChange(callback) {
199
+ this.subscribeStateListeners.add(callback);
200
+ // oxlint-disable-next-line prefer-await-to-callbacks -- event listener registration
201
+ callback(this.subscribedReady);
202
+ return () => {
203
+ this.subscribeStateListeners.delete(callback);
204
+ };
205
+ }
206
+ /**
207
+ * Registers a callback for Yjs/live-editing messages.
208
+ */
209
+ // oxlint-disable-next-line prefer-await-to-callbacks -- event listener registration
210
+ onYjsMessage(callback) {
211
+ this.yjsMessageCallbacks.add(callback);
212
+ return () => {
213
+ this.yjsMessageCallbacks.delete(callback);
214
+ };
215
+ }
216
+ /**
217
+ * Sends a raw payload over the WebSocket (queues until subscribed).
218
+ */
219
+ sendRaw(payload) {
220
+ if (this.socket?.readyState === WebSocket.OPEN && this.subscribedReady) {
221
+ this.socket.send(payload);
222
+ return;
223
+ }
224
+ this.pendingMessages.push(payload);
225
+ // oxlint-disable-next-line prefer-await-to-then -- fire-and-forget pattern
226
+ this.connect().catch(() => {
227
+ // Connection errors are handled by retry logic
228
+ });
229
+ }
230
+ /**
231
+ * Closes the WebSocket connection
232
+ */
233
+ close() {
234
+ this.shouldReconnect = false;
235
+ if (this.reconnectTimer) {
236
+ clearTimeout(this.reconnectTimer);
237
+ this.reconnectTimer = null;
238
+ }
239
+ if (this.subscribeRetryTimer) {
240
+ clearTimeout(this.subscribeRetryTimer);
241
+ this.subscribeRetryTimer = null;
242
+ }
243
+ this.subscribeRetryAttempts = 0;
244
+ if (this.socket) {
245
+ this.socket.close();
246
+ this.socket = null;
247
+ }
248
+ this.setSubscribedReady(false);
249
+ this.setConnectionState("disconnected");
250
+ return Promise.resolve();
251
+ }
252
+ setConnectionState(state) {
253
+ if (this.connectionState !== state) {
254
+ this.connectionState = state;
255
+ for (const listener of this.stateListeners) {
256
+ listener(state);
257
+ }
258
+ }
259
+ }
260
+ setSubscribedReady(ready) {
261
+ if (this.subscribedReady === ready) {
262
+ return;
263
+ }
264
+ this.subscribedReady = ready;
265
+ for (const listener of this.subscribeStateListeners) {
266
+ listener(ready);
267
+ }
268
+ }
269
+ scheduleReconnect() {
270
+ if (this.reconnectAttempts >= this.retryConfig.maxRetries) {
271
+ this.setConnectionState("error");
272
+ return;
273
+ }
274
+ const delay = calculateBackoff(this.reconnectAttempts, this.retryConfig);
275
+ this.reconnectAttempts += 1;
276
+ this.reconnectTimer = setTimeout(() => {
277
+ // oxlint-disable-next-line prefer-await-to-then -- fire-and-forget pattern
278
+ this.connect().catch(() => {
279
+ // Connection errors are handled by retry logic
280
+ });
281
+ }, delay);
282
+ }
283
+ scheduleSubscribeRetry() {
284
+ if (this.subscribeRetryTimer ||
285
+ !this.shouldReconnect ||
286
+ this.subscriptions.size === 0) {
287
+ return;
288
+ }
289
+ const hasExceededRetryLimit = this.subscribeRetryAttempts >= this.retryConfig.maxRetries;
290
+ if (hasExceededRetryLimit) {
291
+ this.setConnectionState("error");
292
+ }
293
+ const backoffAttempt = hasExceededRetryLimit
294
+ ? Math.max(this.retryConfig.maxRetries - 1, 0)
295
+ : this.subscribeRetryAttempts;
296
+ const delay = calculateBackoff(backoffAttempt, this.retryConfig);
297
+ this.subscribeRetryAttempts += 1;
298
+ this.subscribeRetryTimer = setTimeout(() => {
299
+ this.subscribeRetryTimer = null;
300
+ if (!this.shouldReconnect || this.subscriptions.size === 0) {
301
+ return;
302
+ }
303
+ if (this.socket?.readyState === WebSocket.OPEN) {
304
+ // oxlint-disable-next-line prefer-await-to-then -- fire-and-forget pattern
305
+ this.flushSubscriptions().catch(() => {
306
+ // Subscription errors are retried
307
+ });
308
+ return;
309
+ }
310
+ // oxlint-disable-next-line prefer-await-to-then -- fire-and-forget pattern
311
+ this.connect().catch(() => {
312
+ // Connection errors are handled by retry logic
313
+ });
314
+ }, delay);
315
+ }
316
+ async flushSubscriptions() {
317
+ const subscriptions = [...this.subscriptions];
318
+ for (const subscription of subscriptions) {
319
+ if (subscription.closed) {
320
+ continue;
321
+ }
322
+ await this.sendSubscribe(subscription);
323
+ }
324
+ }
325
+ flushPendingMessages() {
326
+ const { socket } = this;
327
+ if (!socket ||
328
+ socket.readyState !== WebSocket.OPEN ||
329
+ !this.subscribedReady) {
330
+ return;
331
+ }
332
+ while (this.pendingMessages.length > 0) {
333
+ if (this.socket !== socket ||
334
+ socket.readyState !== WebSocket.OPEN ||
335
+ !this.subscribedReady) {
336
+ return;
337
+ }
338
+ const [message] = this.pendingMessages;
339
+ if (message === undefined) {
340
+ return;
341
+ }
342
+ try {
343
+ socket.send(message);
344
+ }
345
+ catch {
346
+ // oxlint-disable-next-line prefer-await-to-then -- fire-and-forget pattern
347
+ this.connect().catch(() => {
348
+ // Connection errors are handled by retry logic
349
+ });
350
+ return;
351
+ }
352
+ this.pendingMessages.shift();
353
+ }
354
+ }
355
+ async sendSubscribe(subscription) {
356
+ const { socket } = this;
357
+ if (!socket || socket.readyState !== WebSocket.OPEN) {
358
+ return;
359
+ }
360
+ let afterSyncId;
361
+ try {
362
+ afterSyncId = parseSyncId(subscription.lastSyncId, "Subscribe afterSyncId");
363
+ }
364
+ catch {
365
+ this.setSubscribedReady(false);
366
+ this.setConnectionState("error");
367
+ return;
368
+ }
369
+ const token = await resolveAuthToken(this.auth);
370
+ if (!token) {
371
+ this.scheduleSubscribeRetry();
372
+ return;
373
+ }
374
+ if (this.socket !== socket || socket.readyState !== WebSocket.OPEN) {
375
+ return;
376
+ }
377
+ const message = {
378
+ afterSyncId,
379
+ groups: subscription.options.groups,
380
+ token,
381
+ type: "subscribe",
382
+ };
383
+ this.subscribeRetryAttempts = 0;
384
+ this.setSubscribedReady(false);
385
+ socket.send(JSON.stringify(message));
386
+ }
387
+ async handleMessage(event) {
388
+ const data = await readMessageData(event.data);
389
+ if (!data) {
390
+ return;
391
+ }
392
+ let parsed;
393
+ try {
394
+ parsed = JSON.parse(data);
395
+ }
396
+ catch {
397
+ return;
398
+ }
399
+ if (WebSocketManager.isSubscribedAckMessage(parsed)) {
400
+ if (this.subscribeRetryTimer) {
401
+ clearTimeout(this.subscribeRetryTimer);
402
+ this.subscribeRetryTimer = null;
403
+ }
404
+ this.subscribeRetryAttempts = 0;
405
+ this.setConnectionState("connected");
406
+ this.setSubscribedReady(true);
407
+ this.flushPendingMessages();
408
+ return;
409
+ }
410
+ if (WebSocketManager.isSubscribeErrorMessage(parsed)) {
411
+ this.setSubscribedReady(false);
412
+ this.setConnectionState("error");
413
+ this.scheduleSubscribeRetry();
414
+ return;
415
+ }
416
+ if (WebSocketManager.isLiveEditingMessage(parsed)) {
417
+ this.emitYjsMessage(parsed);
418
+ return;
419
+ }
420
+ const packet = parseDeltaPacket(parsed);
421
+ if (!packet) {
422
+ return;
423
+ }
424
+ for (const subscription of this.subscriptions) {
425
+ if (subscription.closed) {
426
+ continue;
427
+ }
428
+ subscription.lastSyncId = maxSyncId(subscription.lastSyncId, packet.lastSyncId);
429
+ if (subscription.resolve) {
430
+ subscription.resolve({ done: false, value: packet });
431
+ subscription.resolve = null;
432
+ }
433
+ else {
434
+ subscription.queue.push(packet);
435
+ }
436
+ }
437
+ }
438
+ emitYjsMessage(message) {
439
+ for (const callback of this.yjsMessageCallbacks) {
440
+ // oxlint-disable-next-line prefer-await-to-callbacks -- event listener registration
441
+ callback(message);
442
+ }
443
+ }
444
+ static isLiveEditingMessage(message) {
445
+ if (typeof message !== "object" || message === null) {
446
+ return false;
447
+ }
448
+ const typeValue = message.type;
449
+ if (typeof typeValue !== "string") {
450
+ return false;
451
+ }
452
+ return (typeValue.startsWith("yjs_") ||
453
+ typeValue.startsWith("doc_") ||
454
+ typeValue.startsWith("session_") ||
455
+ typeValue.startsWith("live_editing_"));
456
+ }
457
+ static isSubscribedAckMessage(message) {
458
+ if (typeof message !== "object" || message === null) {
459
+ return false;
460
+ }
461
+ return message.type === "subscribed";
462
+ }
463
+ static isSubscribeErrorMessage(message) {
464
+ if (typeof message !== "object" || message === null) {
465
+ return false;
466
+ }
467
+ return message.type === "error";
468
+ }
469
+ }
470
+ const readMessageData = async (data) => {
471
+ if (typeof data === "string") {
472
+ return data;
473
+ }
474
+ if (data instanceof ArrayBuffer) {
475
+ return new TextDecoder().decode(data);
476
+ }
477
+ if (data instanceof Blob) {
478
+ return await data.text();
479
+ }
480
+ return null;
481
+ };
482
+ //# sourceMappingURL=websocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ClientMessage, ServerMessage, YjsTransport, YjsTransportConnectionState } from "@stratasync/yjs";
2
+ /**
3
+ * Adapter that wires Yjs transport messages into the GraphQL WebSocket manager.
4
+ */
5
+ export declare class YjsTransportAdapter implements YjsTransport {
6
+ private readonly sendFn;
7
+ private readonly callbacks;
8
+ private readonly connectionStateCallbacks;
9
+ private connectionState;
10
+ constructor(sendFn: (message: ClientMessage) => void, initialState: YjsTransportConnectionState);
11
+ send(message: ClientMessage): void;
12
+ onMessage(callback: (message: ServerMessage) => void): () => void;
13
+ handleIncoming(message: ServerMessage): void;
14
+ onConnectionStateChange(callback: (state: YjsTransportConnectionState) => void): () => void;
15
+ handleConnectionStateChange(state: YjsTransportConnectionState): void;
16
+ isConnected(): boolean;
17
+ }
18
+ //# sourceMappingURL=yjs-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yjs-transport.d.ts","sourceRoot":"","sources":["../src/yjs-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,2BAA2B,EAC5B,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+C;IACzE,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAErC;IACJ,OAAO,CAAC,eAAe,CAA8B;gBAGnD,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,EACxC,YAAY,EAAE,2BAA2B;IAM3C,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKlC,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI;IAOjE,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAO5C,uBAAuB,CAErB,QAAQ,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,IAAI,GACrD,MAAM,IAAI;IASb,2BAA2B,CAAC,KAAK,EAAE,2BAA2B,GAAG,IAAI;IAYrE,WAAW,IAAI,OAAO;CAGvB"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Adapter that wires Yjs transport messages into the GraphQL WebSocket manager.
3
+ */
4
+ export class YjsTransportAdapter {
5
+ sendFn;
6
+ callbacks = new Set();
7
+ connectionStateCallbacks = new Set();
8
+ connectionState;
9
+ constructor(sendFn, initialState) {
10
+ this.sendFn = sendFn;
11
+ this.connectionState = initialState;
12
+ }
13
+ send(message) {
14
+ this.sendFn(message);
15
+ }
16
+ // oxlint-disable-next-line prefer-await-to-callbacks -- event listener registration
17
+ onMessage(callback) {
18
+ this.callbacks.add(callback);
19
+ return () => {
20
+ this.callbacks.delete(callback);
21
+ };
22
+ }
23
+ handleIncoming(message) {
24
+ for (const callback of this.callbacks) {
25
+ // oxlint-disable-next-line prefer-await-to-callbacks -- event listener registration
26
+ callback(message);
27
+ }
28
+ }
29
+ onConnectionStateChange(
30
+ // oxlint-disable-next-line prefer-await-to-callbacks -- event listener registration
31
+ callback) {
32
+ this.connectionStateCallbacks.add(callback);
33
+ // oxlint-disable-next-line prefer-await-to-callbacks -- event listener registration
34
+ callback(this.connectionState);
35
+ return () => {
36
+ this.connectionStateCallbacks.delete(callback);
37
+ };
38
+ }
39
+ handleConnectionStateChange(state) {
40
+ if (state === this.connectionState) {
41
+ return;
42
+ }
43
+ this.connectionState = state;
44
+ for (const callback of this.connectionStateCallbacks) {
45
+ // oxlint-disable-next-line prefer-await-to-callbacks -- event listener registration
46
+ callback(state);
47
+ }
48
+ }
49
+ isConnected() {
50
+ return this.connectionState === "connected";
51
+ }
52
+ }
53
+ //# sourceMappingURL=yjs-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yjs-transport.js","sourceRoot":"","sources":["../src/yjs-transport.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACb,MAAM,CAAmC;IACzC,SAAS,GAAG,IAAI,GAAG,EAAoC,CAAC;IACxD,wBAAwB,GAAG,IAAI,GAAG,EAEhD,CAAC;IACI,eAAe,CAA8B;IAErD,YACE,MAAwC,EACxC,YAAyC;QAEzC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC;IACtC,CAAC;IAED,IAAI,CAAC,OAAsB;QACzB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,oFAAoF;IACpF,SAAS,CAAC,QAA0C;QAClD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,OAAsB;QACnC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,oFAAoF;YACpF,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,uBAAuB;IACrB,oFAAoF;IACpF,QAAsD;QAEtD,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,oFAAoF;QACpF,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC,CAAC;IACJ,CAAC;IAED,2BAA2B,CAAC,KAAkC;QAC5D,IAAI,KAAK,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;YACnC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACrD,oFAAoF;YACpF,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,eAAe,KAAK,WAAW,CAAC;IAC9C,CAAC;CACF"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@stratasync/transport-graphql",
3
+ "version": "0.2.0",
4
+ "files": [
5
+ "dist"
6
+ ],
7
+ "type": "module",
8
+ "main": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.js"
14
+ }
15
+ },
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "scripts": {
20
+ "build": "tsc -p tsconfig.build.json",
21
+ "dev": "tsc --watch -p tsconfig.build.json",
22
+ "lint": "oxlint .",
23
+ "lint:fix": "oxlint --fix .",
24
+ "format": "oxfmt --write .",
25
+ "format:check": "oxfmt --check .",
26
+ "check-types": "tsc --noEmit",
27
+ "test": "vitest --globals"
28
+ },
29
+ "dependencies": {
30
+ "@stratasync/client": "*",
31
+ "@stratasync/core": "*",
32
+ "@stratasync/yjs": "*"
33
+ },
34
+ "devDependencies": {
35
+ "lefthook": "^2.1.4",
36
+ "oxfmt": "^0.41.0",
37
+ "oxlint": "^1.56.0",
38
+ "typescript": "^5.9.3",
39
+ "ultracite": "^7.3.2",
40
+ "vitest": "^4.1.0"
41
+ }
42
+ }