@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.
- package/README.md +45 -0
- package/dist/adapter.d.ts +31 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +151 -0
- package/dist/adapter.js.map +1 -0
- package/dist/bootstrap.d.ts +27 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +223 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/deltas.d.ts +31 -0
- package/dist/deltas.d.ts.map +1 -0
- package/dist/deltas.js +69 -0
- package/dist/deltas.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/mutations.d.ts +33 -0
- package/dist/mutations.d.ts.map +1 -0
- package/dist/mutations.js +225 -0
- package/dist/mutations.js.map +1 -0
- package/dist/protocol.d.ts +14 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +144 -0
- package/dist/protocol.js.map +1 -0
- package/dist/types.d.ts +90 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +52 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +180 -0
- package/dist/utils.js.map +1 -0
- package/dist/websocket.d.ts +75 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +482 -0
- package/dist/websocket.js.map +1 -0
- package/dist/yjs-transport.d.ts +18 -0
- package/dist/yjs-transport.d.ts.map +1 -0
- package/dist/yjs-transport.js +53 -0
- package/dist/yjs-transport.js.map +1 -0
- package/package.json +42 -0
package/dist/utils.js
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { DEFAULT_RETRY_CONFIG } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Delays execution for a specified duration
|
|
4
|
+
*/
|
|
5
|
+
const delay = (ms) =>
|
|
6
|
+
// oxlint-disable-next-line avoid-new -- wrapping callback API in promise
|
|
7
|
+
new Promise((resolve) => {
|
|
8
|
+
setTimeout(resolve, ms);
|
|
9
|
+
});
|
|
10
|
+
/**
|
|
11
|
+
* Calculates the delay for exponential backoff with jitter
|
|
12
|
+
*/
|
|
13
|
+
export const calculateBackoff = (attempt, config) => {
|
|
14
|
+
const exponentialDelay = config.baseDelay * 2 ** attempt;
|
|
15
|
+
const clampedDelay = Math.min(exponentialDelay, config.maxDelay);
|
|
16
|
+
// Add jitter
|
|
17
|
+
const jitter = config.jitter ?? 0;
|
|
18
|
+
if (jitter > 0) {
|
|
19
|
+
const jitterAmount = clampedDelay * jitter;
|
|
20
|
+
return clampedDelay + (Math.random() * 2 - 1) * jitterAmount;
|
|
21
|
+
}
|
|
22
|
+
return clampedDelay;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Retries an async function with exponential backoff
|
|
26
|
+
*/
|
|
27
|
+
export const retryWithBackoff = async (fn, config = DEFAULT_RETRY_CONFIG, shouldRetry = () => true) => {
|
|
28
|
+
let lastError;
|
|
29
|
+
for (let attempt = 0; attempt <= config.maxRetries; attempt += 1) {
|
|
30
|
+
try {
|
|
31
|
+
return await fn();
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
lastError = error;
|
|
35
|
+
if (attempt >= config.maxRetries || !shouldRetry(error)) {
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
const backoffDelay = calculateBackoff(attempt, config);
|
|
39
|
+
await delay(backoffDelay);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// oxlint-disable-next-line no-throw-literal
|
|
43
|
+
throw lastError;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Creates an AbortController with a timeout
|
|
47
|
+
*/
|
|
48
|
+
const createTimeoutController = (timeoutMs) => {
|
|
49
|
+
const controller = new AbortController();
|
|
50
|
+
const timeoutId = setTimeout(() => controller.abort(new Error(`Request timed out after ${timeoutMs}ms`)), timeoutMs);
|
|
51
|
+
return {
|
|
52
|
+
cleanup: () => clearTimeout(timeoutId),
|
|
53
|
+
controller,
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Wraps a fetch call with timeout support
|
|
58
|
+
*/
|
|
59
|
+
const fetchWithTimeout = async (url, options, timeoutMs) => {
|
|
60
|
+
const { controller, cleanup } = createTimeoutController(timeoutMs);
|
|
61
|
+
try {
|
|
62
|
+
const response = await fetch(url, {
|
|
63
|
+
...options,
|
|
64
|
+
signal: controller.signal,
|
|
65
|
+
});
|
|
66
|
+
return response;
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
cleanup();
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Builds request headers with auth token, accept, content-type, and custom headers
|
|
74
|
+
*/
|
|
75
|
+
export const buildRequestHeaders = (opts) => {
|
|
76
|
+
const result = {};
|
|
77
|
+
if (opts.accept) {
|
|
78
|
+
result.Accept = opts.accept;
|
|
79
|
+
}
|
|
80
|
+
if (opts.contentType) {
|
|
81
|
+
result["Content-Type"] = opts.contentType;
|
|
82
|
+
}
|
|
83
|
+
if (opts.headers) {
|
|
84
|
+
Object.assign(result, opts.headers);
|
|
85
|
+
}
|
|
86
|
+
if (opts.token) {
|
|
87
|
+
result.Authorization = `Bearer ${opts.token}`;
|
|
88
|
+
}
|
|
89
|
+
return result;
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* HTTP error with status code for robust error classification
|
|
93
|
+
*/
|
|
94
|
+
export class HttpError extends Error {
|
|
95
|
+
status;
|
|
96
|
+
constructor(status, message) {
|
|
97
|
+
super(message);
|
|
98
|
+
this.name = "HttpError";
|
|
99
|
+
this.status = status;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Fetches a URL with optional timeout and checks for a successful response
|
|
104
|
+
*/
|
|
105
|
+
export const fetchChecked = async (url, init, timeoutMs, errorPrefix) => {
|
|
106
|
+
const res = timeoutMs
|
|
107
|
+
? await fetchWithTimeout(url, init, timeoutMs)
|
|
108
|
+
: await fetch(url, init);
|
|
109
|
+
if (!res.ok) {
|
|
110
|
+
const text = await res.text();
|
|
111
|
+
throw new HttpError(res.status, `${errorPrefix}: ${res.status} ${text}`);
|
|
112
|
+
}
|
|
113
|
+
return res;
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Checks if an error is a network error
|
|
117
|
+
*/
|
|
118
|
+
export const isNetworkError = (error) => {
|
|
119
|
+
if (error instanceof Error) {
|
|
120
|
+
return (error.name === "TypeError" ||
|
|
121
|
+
error.message.includes("network") ||
|
|
122
|
+
error.message.includes("fetch") ||
|
|
123
|
+
error.message.includes("ECONNREFUSED") ||
|
|
124
|
+
error.message.includes("ETIMEDOUT") ||
|
|
125
|
+
error.message.includes("ENETUNREACH"));
|
|
126
|
+
}
|
|
127
|
+
return false;
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Checks if an error is a timeout error
|
|
131
|
+
*/
|
|
132
|
+
export const isTimeoutError = (error) => {
|
|
133
|
+
if (error instanceof Error) {
|
|
134
|
+
return (error.name === "AbortError" ||
|
|
135
|
+
error.message.includes("timeout") ||
|
|
136
|
+
error.message.includes("aborted"));
|
|
137
|
+
}
|
|
138
|
+
return false;
|
|
139
|
+
};
|
|
140
|
+
const RETRYABLE_STATUS_RE = /\b(500|502|503|504|429)\b/;
|
|
141
|
+
/**
|
|
142
|
+
* Checks if an error is retryable
|
|
143
|
+
*/
|
|
144
|
+
export const isRetryableError = (error) => {
|
|
145
|
+
if (isNetworkError(error) || isTimeoutError(error)) {
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
if (error instanceof HttpError) {
|
|
149
|
+
return error.status >= 500 || error.status === 429;
|
|
150
|
+
}
|
|
151
|
+
// Fallback: string matching for errors not thrown by fetchChecked
|
|
152
|
+
if (error instanceof Error && RETRYABLE_STATUS_RE.test(error.message)) {
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
return false;
|
|
156
|
+
};
|
|
157
|
+
const SYNC_ID_RE = /^\d+$/;
|
|
158
|
+
/**
|
|
159
|
+
* Validates a string-encoded sync ID.
|
|
160
|
+
*/
|
|
161
|
+
export const parseSyncId = (value, fieldName = "syncId") => {
|
|
162
|
+
if (typeof value !== "string") {
|
|
163
|
+
throw new TypeError(`${fieldName} must be a string`);
|
|
164
|
+
}
|
|
165
|
+
if (!SYNC_ID_RE.test(value)) {
|
|
166
|
+
throw new TypeError(`${fieldName} must be a string-encoded integer`);
|
|
167
|
+
}
|
|
168
|
+
return value;
|
|
169
|
+
};
|
|
170
|
+
/**
|
|
171
|
+
* Resolves an auth token, falling back to refreshToken if available
|
|
172
|
+
*/
|
|
173
|
+
export const resolveAuthToken = async (auth) => {
|
|
174
|
+
let token = await auth.getAccessToken();
|
|
175
|
+
if (!token && auth.refreshToken) {
|
|
176
|
+
token = await auth.refreshToken();
|
|
177
|
+
}
|
|
178
|
+
return token;
|
|
179
|
+
};
|
|
180
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { ConnectionState, DeltaSubscription, SubscribeOptions } from "@stratasync/core";
|
|
2
|
+
import type { AuthProvider, RetryConfig } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* WebSocket connection manager for delta streaming
|
|
5
|
+
*/
|
|
6
|
+
export declare class WebSocketManager {
|
|
7
|
+
private socket;
|
|
8
|
+
private connectPromise;
|
|
9
|
+
private readonly wsEndpoint;
|
|
10
|
+
private readonly auth;
|
|
11
|
+
private readonly webSocketFactory;
|
|
12
|
+
private connectionState;
|
|
13
|
+
private readonly stateListeners;
|
|
14
|
+
private subscribedReady;
|
|
15
|
+
private readonly subscribeStateListeners;
|
|
16
|
+
private readonly subscriptions;
|
|
17
|
+
private readonly yjsMessageCallbacks;
|
|
18
|
+
private readonly pendingMessages;
|
|
19
|
+
private reconnectAttempts;
|
|
20
|
+
private reconnectTimer;
|
|
21
|
+
private subscribeRetryAttempts;
|
|
22
|
+
private subscribeRetryTimer;
|
|
23
|
+
private readonly retryConfig;
|
|
24
|
+
private shouldReconnect;
|
|
25
|
+
constructor(wsEndpoint: string, auth: AuthProvider, retryConfig: RetryConfig, webSocketFactory?: typeof WebSocket);
|
|
26
|
+
/**
|
|
27
|
+
* Connects to the WebSocket server
|
|
28
|
+
*/
|
|
29
|
+
connect(): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Subscribes to delta updates
|
|
32
|
+
*/
|
|
33
|
+
subscribe(options: SubscribeOptions): DeltaSubscription;
|
|
34
|
+
/**
|
|
35
|
+
* Gets the current connection state
|
|
36
|
+
*/
|
|
37
|
+
getConnectionState(): ConnectionState;
|
|
38
|
+
/**
|
|
39
|
+
* Registers a callback for connection state changes
|
|
40
|
+
*/
|
|
41
|
+
onConnectionStateChange(callback: (state: ConnectionState) => void): () => void;
|
|
42
|
+
/**
|
|
43
|
+
* Gets whether the server has acknowledged subscriptions for this socket.
|
|
44
|
+
*/
|
|
45
|
+
isSubscribedReady(): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Registers a callback for subscription-readiness changes.
|
|
48
|
+
*/
|
|
49
|
+
onSubscribeStateChange(callback: (ready: boolean) => void): () => void;
|
|
50
|
+
/**
|
|
51
|
+
* Registers a callback for Yjs/live-editing messages.
|
|
52
|
+
*/
|
|
53
|
+
onYjsMessage(callback: (message: unknown) => void): () => void;
|
|
54
|
+
/**
|
|
55
|
+
* Sends a raw payload over the WebSocket (queues until subscribed).
|
|
56
|
+
*/
|
|
57
|
+
sendRaw(payload: string): void;
|
|
58
|
+
/**
|
|
59
|
+
* Closes the WebSocket connection
|
|
60
|
+
*/
|
|
61
|
+
close(): Promise<void>;
|
|
62
|
+
private setConnectionState;
|
|
63
|
+
private setSubscribedReady;
|
|
64
|
+
private scheduleReconnect;
|
|
65
|
+
private scheduleSubscribeRetry;
|
|
66
|
+
private flushSubscriptions;
|
|
67
|
+
private flushPendingMessages;
|
|
68
|
+
private sendSubscribe;
|
|
69
|
+
private handleMessage;
|
|
70
|
+
private emitYjsMessage;
|
|
71
|
+
private static isLiveEditingMessage;
|
|
72
|
+
private static isSubscribedAckMessage;
|
|
73
|
+
private static isSubscribeErrorMessage;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=websocket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EAEf,iBAAiB,EACjB,gBAAgB,EAEjB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAW5D;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+C;IAC9E,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAEpC;IACJ,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgC;IAC9D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAyC;IAC7E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgB;IAChD,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,sBAAsB,CAAK;IACnC,OAAO,CAAC,mBAAmB,CAA8C;IACzE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,eAAe,CAAQ;gBAG7B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,YAAY,EAClB,WAAW,EAAE,WAAW,EACxB,gBAAgB,CAAC,EAAE,OAAO,SAAS;IAYrC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmF9B;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,iBAAiB;IAkEvD;;OAEG;IACH,kBAAkB,IAAI,eAAe;IAIrC;;OAEG;IACH,uBAAuB,CAErB,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GACzC,MAAM,IAAI;IAOb;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAI5B;;OAEG;IAEH,sBAAsB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAStE;;OAEG;IAEH,YAAY,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAO9D;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAa9B;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBtB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,sBAAsB;YAwChB,kBAAkB;IAUhC,OAAO,CAAC,oBAAoB;YAsCd,aAAa;YAwCb,aAAa;IA4D3B,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAkBnC,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAQrC,OAAO,CAAC,MAAM,CAAC,uBAAuB;CAMvC"}
|