on-zero 0.4.26 → 0.4.28
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/cjs/createZeroClient.cjs +14 -1
- package/dist/cjs/createZeroClient.native.js +15 -1
- package/dist/cjs/createZeroClient.native.js.map +1 -1
- package/dist/cjs/httpPull/auth.test.cjs +197 -0
- package/dist/cjs/httpPull/auth.test.native.js +279 -0
- package/dist/cjs/httpPull/auth.test.native.js.map +1 -0
- package/dist/cjs/httpPull/churn.test.cjs +132 -0
- package/dist/cjs/httpPull/churn.test.native.js +155 -0
- package/dist/cjs/httpPull/churn.test.native.js.map +1 -0
- package/dist/cjs/httpPull/fixtureSchema.cjs +76 -0
- package/dist/cjs/httpPull/fixtureSchema.native.js +82 -0
- package/dist/cjs/httpPull/fixtureSchema.native.js.map +1 -0
- package/dist/cjs/httpPull/fixtureServer.cjs +340 -0
- package/dist/cjs/httpPull/fixtureServer.native.js +534 -0
- package/dist/cjs/httpPull/fixtureServer.native.js.map +1 -0
- package/dist/cjs/httpPull/integration.test.cjs +53 -0
- package/dist/cjs/httpPull/integration.test.native.js +60 -0
- package/dist/cjs/httpPull/integration.test.native.js.map +1 -0
- package/dist/cjs/httpPull/rebase.test.cjs +360 -0
- package/dist/cjs/httpPull/rebase.test.native.js +420 -0
- package/dist/cjs/httpPull/rebase.test.native.js.map +1 -0
- package/dist/cjs/httpPull/relations.test.cjs +107 -0
- package/dist/cjs/httpPull/relations.test.native.js +119 -0
- package/dist/cjs/httpPull/relations.test.native.js.map +1 -0
- package/dist/cjs/httpPull/testHarness.cjs +100 -0
- package/dist/cjs/httpPull/testHarness.native.js +112 -0
- package/dist/cjs/httpPull/testHarness.native.js.map +1 -0
- package/dist/cjs/httpPull/transport.test.cjs +588 -0
- package/dist/cjs/httpPull/transport.test.native.js +677 -0
- package/dist/cjs/httpPull/transport.test.native.js.map +1 -0
- package/dist/cjs/httpPullTransport.cjs +447 -0
- package/dist/cjs/httpPullTransport.native.js +710 -0
- package/dist/cjs/httpPullTransport.native.js.map +1 -0
- package/dist/cjs/index.cjs +1 -0
- package/dist/cjs/index.native.js +1 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/esm/createZeroClient.mjs +14 -1
- package/dist/esm/createZeroClient.mjs.map +1 -1
- package/dist/esm/createZeroClient.native.js +15 -1
- package/dist/esm/createZeroClient.native.js.map +1 -1
- package/dist/esm/httpPull/auth.test.mjs +198 -0
- package/dist/esm/httpPull/auth.test.mjs.map +1 -0
- package/dist/esm/httpPull/auth.test.native.js +277 -0
- package/dist/esm/httpPull/auth.test.native.js.map +1 -0
- package/dist/esm/httpPull/churn.test.mjs +133 -0
- package/dist/esm/httpPull/churn.test.mjs.map +1 -0
- package/dist/esm/httpPull/churn.test.native.js +153 -0
- package/dist/esm/httpPull/churn.test.native.js.map +1 -0
- package/dist/esm/httpPull/fixtureSchema.mjs +50 -0
- package/dist/esm/httpPull/fixtureSchema.mjs.map +1 -0
- package/dist/esm/httpPull/fixtureSchema.native.js +53 -0
- package/dist/esm/httpPull/fixtureSchema.native.js.map +1 -0
- package/dist/esm/httpPull/fixtureServer.mjs +315 -0
- package/dist/esm/httpPull/fixtureServer.mjs.map +1 -0
- package/dist/esm/httpPull/fixtureServer.native.js +506 -0
- package/dist/esm/httpPull/fixtureServer.native.js.map +1 -0
- package/dist/esm/httpPull/integration.test.mjs +54 -0
- package/dist/esm/httpPull/integration.test.mjs.map +1 -0
- package/dist/esm/httpPull/integration.test.native.js +58 -0
- package/dist/esm/httpPull/integration.test.native.js.map +1 -0
- package/dist/esm/httpPull/rebase.test.mjs +361 -0
- package/dist/esm/httpPull/rebase.test.mjs.map +1 -0
- package/dist/esm/httpPull/rebase.test.native.js +418 -0
- package/dist/esm/httpPull/rebase.test.native.js.map +1 -0
- package/dist/esm/httpPull/relations.test.mjs +108 -0
- package/dist/esm/httpPull/relations.test.mjs.map +1 -0
- package/dist/esm/httpPull/relations.test.native.js +117 -0
- package/dist/esm/httpPull/relations.test.native.js.map +1 -0
- package/dist/esm/httpPull/testHarness.mjs +72 -0
- package/dist/esm/httpPull/testHarness.mjs.map +1 -0
- package/dist/esm/httpPull/testHarness.native.js +81 -0
- package/dist/esm/httpPull/testHarness.native.js.map +1 -0
- package/dist/esm/httpPull/transport.test.mjs +589 -0
- package/dist/esm/httpPull/transport.test.mjs.map +1 -0
- package/dist/esm/httpPull/transport.test.native.js +675 -0
- package/dist/esm/httpPull/transport.test.native.js.map +1 -0
- package/dist/esm/httpPullTransport.mjs +421 -0
- package/dist/esm/httpPullTransport.mjs.map +1 -0
- package/dist/esm/httpPullTransport.native.js +681 -0
- package/dist/esm/httpPullTransport.native.js.map +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs +1 -0
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +1 -0
- package/dist/esm/index.native.js.map +1 -1
- package/package.json +2 -2
- package/src/createZeroClient.tsx +22 -0
- package/src/httpPull/auth.test.ts +208 -0
- package/src/httpPull/churn.test.ts +147 -0
- package/src/httpPull/fixtureSchema.ts +82 -0
- package/src/httpPull/fixtureServer.ts +391 -0
- package/src/httpPull/integration.test.ts +57 -0
- package/src/httpPull/rebase.test.ts +368 -0
- package/src/httpPull/relations.test.ts +135 -0
- package/src/httpPull/testHarness.ts +95 -0
- package/src/httpPull/transport.test.ts +603 -0
- package/src/httpPullTransport.ts +587 -0
- package/src/index.ts +1 -0
- package/types/createZeroClient.d.ts +3 -1
- package/types/createZeroClient.d.ts.map +1 -1
- package/types/httpPull/auth.test.d.ts +2 -0
- package/types/httpPull/auth.test.d.ts.map +1 -0
- package/types/httpPull/churn.test.d.ts +2 -0
- package/types/httpPull/churn.test.d.ts.map +1 -0
- package/types/httpPull/fixtureSchema.d.ts +111 -0
- package/types/httpPull/fixtureSchema.d.ts.map +1 -0
- package/types/httpPull/fixtureServer.d.ts +14 -0
- package/types/httpPull/fixtureServer.d.ts.map +1 -0
- package/types/httpPull/integration.test.d.ts +2 -0
- package/types/httpPull/integration.test.d.ts.map +1 -0
- package/types/httpPull/rebase.test.d.ts +2 -0
- package/types/httpPull/rebase.test.d.ts.map +1 -0
- package/types/httpPull/relations.test.d.ts +2 -0
- package/types/httpPull/relations.test.d.ts.map +1 -0
- package/types/httpPull/testHarness.d.ts +32 -0
- package/types/httpPull/testHarness.d.ts.map +1 -0
- package/types/httpPull/transport.test.d.ts +2 -0
- package/types/httpPull/transport.test.d.ts.map +1 -0
- package/types/httpPullTransport.d.ts +13 -0
- package/types/httpPullTransport.d.ts.map +1 -0
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["import_zero","require","import_vitest","import_fixtureSchema","import_httpPullTransport","_class_call_check","instance","Constructor","TypeError","_define_property","obj","key","value","Object","defineProperty","enumerable","configurable","writable","ORIGIN","zeros","transports","storageID","afterEach","_zeros_pop","_transports_pop","length","pop","close","uninstall","vi","useRealTimers","describe","test","requests","cookie","fetch","fn","input","init","request","recordRequest","push","expect","path","toBe","headers","authorization","jsonResponse","lastMutationIDChanges","rowsPatch","op","tableName","id","name","ownerId","projectId","userId","transport","install","zero","createZero","view","query","project","related","materialize","data","waitForComplete","destroy","connections","toEqual","members","body","toBeNull","clientID","any","String","clientGroupID","unchanged","mutation2","mutations","pushResponse","result","eventually","filter","pullsBeforePush","mutation","mutate","create","client","server","find","toMatchObject","pushVersion","requestID","type","args","_requests_at","socket","openRawSocketWithMessages","authToken","send","JSON","stringify","auth","pull","at","firstPushStarted","defer","releaseFirstPush","pushIDs","mutationID","resolve","promise","map","messages","some","message","pushBody","sleep","toHaveLength","responses","deferred","inFlight","maxInFlight","Math","max","response","shift","Error","openRawSocket","findMessage","baseCookie","startsWith","concurrentA","concurrentB","Promise","all","projectView","userView","user","users","pingTimeoutMs","connection","state","current","error","status","emissions","cleanup","addListener","resultType","parse","toBeGreaterThan","flatMap","emission","previous","globalThis","WebSocket","NativeWebSocket","NativeWebSocket2","url","protocols"],"sources":["../../../src/httpPull/transport.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,447 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all) __defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: true
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
14
|
+
get: () => from[key],
|
|
15
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
21
|
+
value: true
|
|
22
|
+
}), mod);
|
|
23
|
+
var httpPullTransport_exports = {};
|
|
24
|
+
__export(httpPullTransport_exports, {
|
|
25
|
+
ensureHttpPullTransport: () => ensureHttpPullTransport,
|
|
26
|
+
installHttpPullTransport: () => installHttpPullTransport
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(httpPullTransport_exports);
|
|
29
|
+
const COOKIE_WIDTH = 20;
|
|
30
|
+
function installHttpPullTransport(opts) {
|
|
31
|
+
const previousWebSocket = globalThis.WebSocket;
|
|
32
|
+
const fetchImpl = opts.fetch ?? globalThis.fetch;
|
|
33
|
+
if (!fetchImpl) {
|
|
34
|
+
throw new Error("installHttpPullTransport requires a fetch implementation");
|
|
35
|
+
}
|
|
36
|
+
const state = {
|
|
37
|
+
origin: new URL(opts.origin),
|
|
38
|
+
originString: trimTrailingSlash(new URL(opts.origin).toString()),
|
|
39
|
+
// the transport invokes this as `state.fetch(...)` — without binding,
|
|
40
|
+
// window.fetch sees `state` as its receiver and browsers throw
|
|
41
|
+
// "Illegal invocation" (node's fetch doesn't care, so tests can't catch it)
|
|
42
|
+
fetch: fetchImpl.bind(globalThis),
|
|
43
|
+
nativeWebSocket: previousWebSocket,
|
|
44
|
+
sockets: /* @__PURE__ */new Set(),
|
|
45
|
+
pullIntervalMs: opts.pullIntervalMs,
|
|
46
|
+
nextPokeID: 0
|
|
47
|
+
};
|
|
48
|
+
const Shim = class {
|
|
49
|
+
static CONNECTING = 0;
|
|
50
|
+
static OPEN = 1;
|
|
51
|
+
static CLOSING = 2;
|
|
52
|
+
static CLOSED = 3;
|
|
53
|
+
constructor(url, protocols) {
|
|
54
|
+
if (shouldIntercept(state.origin, url)) {
|
|
55
|
+
return new ZeroHttpSocket(state, url, protocols);
|
|
56
|
+
}
|
|
57
|
+
if (!state.nativeWebSocket) {
|
|
58
|
+
throw new Error(`No native WebSocket available for ${String(url)}`);
|
|
59
|
+
}
|
|
60
|
+
return new state.nativeWebSocket(url, protocols);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
globalThis.WebSocket = Shim;
|
|
64
|
+
return {
|
|
65
|
+
pull: async () => {
|
|
66
|
+
await Promise.all([...state.sockets].map(socket => socket.pull()));
|
|
67
|
+
},
|
|
68
|
+
get connections() {
|
|
69
|
+
return state.sockets.size;
|
|
70
|
+
},
|
|
71
|
+
uninstall: () => {
|
|
72
|
+
if (globalThis.WebSocket === Shim) {
|
|
73
|
+
globalThis.WebSocket = previousWebSocket;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
const transportsByOrigin = /* @__PURE__ */new Map();
|
|
79
|
+
function ensureHttpPullTransport(opts) {
|
|
80
|
+
const key = trimTrailingSlash(new URL(opts.origin).toString());
|
|
81
|
+
const existing = transportsByOrigin.get(key);
|
|
82
|
+
if (existing) return existing;
|
|
83
|
+
const transport = installHttpPullTransport(opts);
|
|
84
|
+
transportsByOrigin.set(key, transport);
|
|
85
|
+
return transport;
|
|
86
|
+
}
|
|
87
|
+
class ZeroHttpSocket {
|
|
88
|
+
constructor(state, url, protocols) {
|
|
89
|
+
this.state = state;
|
|
90
|
+
this.connectURL = toHttpURL(url);
|
|
91
|
+
this.url = String(url);
|
|
92
|
+
this.clientID = this.connectURL.searchParams.get("clientID") ?? "";
|
|
93
|
+
this.clientGroupID = this.connectURL.searchParams.get("clientGroupID") ?? "";
|
|
94
|
+
this.wsid = this.connectURL.searchParams.get("wsid") ?? `zero-http-${Date.now()}`;
|
|
95
|
+
const baseCookie = this.connectURL.searchParams.get("baseCookie");
|
|
96
|
+
this.cookie = baseCookie ? baseCookie : null;
|
|
97
|
+
const decoded = decodeSecProtocol(protocols);
|
|
98
|
+
this.authToken = decoded.authToken;
|
|
99
|
+
this.queueDesiredQueries(decoded.initConnectionMessage?.[1]);
|
|
100
|
+
this.state.sockets.add(this);
|
|
101
|
+
this.openTimer = setTimeout(() => this.open(), 0);
|
|
102
|
+
}
|
|
103
|
+
CONNECTING = 0;
|
|
104
|
+
OPEN = 1;
|
|
105
|
+
CLOSING = 2;
|
|
106
|
+
CLOSED = 3;
|
|
107
|
+
url;
|
|
108
|
+
readyState = this.CONNECTING;
|
|
109
|
+
connectURL;
|
|
110
|
+
authToken;
|
|
111
|
+
listeners = {
|
|
112
|
+
open: /* @__PURE__ */new Set(),
|
|
113
|
+
message: /* @__PURE__ */new Set(),
|
|
114
|
+
close: /* @__PURE__ */new Set(),
|
|
115
|
+
error: /* @__PURE__ */new Set()
|
|
116
|
+
};
|
|
117
|
+
clientID;
|
|
118
|
+
clientGroupID;
|
|
119
|
+
wsid;
|
|
120
|
+
cookie;
|
|
121
|
+
pendingGotQueriesPatch = [];
|
|
122
|
+
pullInFlight;
|
|
123
|
+
pullAfterCurrent = false;
|
|
124
|
+
pushChain = Promise.resolve();
|
|
125
|
+
nextLocalCookieID = 0;
|
|
126
|
+
openTimer;
|
|
127
|
+
pullTimer;
|
|
128
|
+
addEventListener(type, listener) {
|
|
129
|
+
if (listener) this.listeners[type]?.add(listener);
|
|
130
|
+
}
|
|
131
|
+
removeEventListener(type, listener) {
|
|
132
|
+
if (listener) this.listeners[type]?.delete(listener);
|
|
133
|
+
}
|
|
134
|
+
dispatchEvent(event) {
|
|
135
|
+
this.emit(event.type, event);
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
send(data) {
|
|
139
|
+
if (this.readyState !== this.OPEN) {
|
|
140
|
+
throw new Error("cannot send on a socket that is not open");
|
|
141
|
+
}
|
|
142
|
+
const message = JSON.parse(data);
|
|
143
|
+
switch (message[0]) {
|
|
144
|
+
case "initConnection":
|
|
145
|
+
case "changeDesiredQueries":
|
|
146
|
+
this.queueDesiredQueries(message[1]);
|
|
147
|
+
this.requestPullAfterCurrent();
|
|
148
|
+
return;
|
|
149
|
+
case "updateAuth":
|
|
150
|
+
this.authToken = message[1].auth;
|
|
151
|
+
return;
|
|
152
|
+
case "push":
|
|
153
|
+
this.enqueuePush(message[1]);
|
|
154
|
+
return;
|
|
155
|
+
case "ping":
|
|
156
|
+
this.emitMessage(["pong", {}]);
|
|
157
|
+
return;
|
|
158
|
+
case "pull":
|
|
159
|
+
this.run(this.answerMutationRecoveryPull(message[1]));
|
|
160
|
+
return;
|
|
161
|
+
case "deleteClients":
|
|
162
|
+
case "ackMutationResponses":
|
|
163
|
+
return;
|
|
164
|
+
default:
|
|
165
|
+
throw new Error(`unsupported zero-http upstream message ${message[0]}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
close(code = 1e3, reason = "") {
|
|
169
|
+
if (this.readyState === this.CLOSED) return;
|
|
170
|
+
if (this.openTimer) clearTimeout(this.openTimer);
|
|
171
|
+
if (this.pullTimer) clearInterval(this.pullTimer);
|
|
172
|
+
this.readyState = this.CLOSED;
|
|
173
|
+
this.state.sockets.delete(this);
|
|
174
|
+
this.emit("close", {
|
|
175
|
+
code,
|
|
176
|
+
reason,
|
|
177
|
+
wasClean: code <= 1001
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
pull() {
|
|
181
|
+
if (this.readyState === this.CLOSED) return Promise.resolve();
|
|
182
|
+
if (this.pullInFlight) return this.pullInFlight;
|
|
183
|
+
this.pullInFlight = this.fetchPull(this.clientGroupID, this.cookie).then(response => {
|
|
184
|
+
if (response.unchanged) {
|
|
185
|
+
this.emitGotQueriesPatch(response.cookie);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
this.emitPoke(response);
|
|
189
|
+
}).catch(error => {
|
|
190
|
+
this.fail(error);
|
|
191
|
+
throw error;
|
|
192
|
+
}).finally(async () => {
|
|
193
|
+
const pullAgain = this.pullAfterCurrent;
|
|
194
|
+
this.pullAfterCurrent = false;
|
|
195
|
+
this.pullInFlight = void 0;
|
|
196
|
+
if (pullAgain && this.readyState !== this.CLOSED) await this.pull();
|
|
197
|
+
});
|
|
198
|
+
return this.pullInFlight;
|
|
199
|
+
}
|
|
200
|
+
open() {
|
|
201
|
+
if (this.readyState !== this.CONNECTING) return;
|
|
202
|
+
this.readyState = this.OPEN;
|
|
203
|
+
this.emit("open", {});
|
|
204
|
+
this.emitMessage(["connected", {
|
|
205
|
+
wsid: this.wsid,
|
|
206
|
+
timestamp: Date.now()
|
|
207
|
+
}]);
|
|
208
|
+
setTimeout(() => this.run(this.pull()), 0);
|
|
209
|
+
if (this.state.pullIntervalMs) {
|
|
210
|
+
this.pullTimer = setInterval(() => {
|
|
211
|
+
this.run(this.pull());
|
|
212
|
+
}, this.state.pullIntervalMs);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
queueDesiredQueries(body) {
|
|
216
|
+
const desiredQueriesPatch = body?.desiredQueriesPatch;
|
|
217
|
+
if (!Array.isArray(desiredQueriesPatch)) return;
|
|
218
|
+
this.pendingGotQueriesPatch.push(...gotQueriesPatch(desiredQueriesPatch));
|
|
219
|
+
}
|
|
220
|
+
async push(body) {
|
|
221
|
+
const response = await this.postJSON("/push", body);
|
|
222
|
+
this.emitMessage(["pushResponse", response.pushResponse]);
|
|
223
|
+
this.requestPullAfterCurrent();
|
|
224
|
+
}
|
|
225
|
+
enqueuePush(body) {
|
|
226
|
+
const nextPush = this.pushChain.then(async () => {
|
|
227
|
+
if (this.readyState === this.CLOSED) return;
|
|
228
|
+
await this.push(body);
|
|
229
|
+
});
|
|
230
|
+
this.pushChain = nextPush.catch(() => {});
|
|
231
|
+
this.run(nextPush);
|
|
232
|
+
}
|
|
233
|
+
requestPullAfterCurrent() {
|
|
234
|
+
if (this.pullInFlight) {
|
|
235
|
+
this.pullAfterCurrent = true;
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
this.run(this.pull());
|
|
239
|
+
}
|
|
240
|
+
async answerMutationRecoveryPull(body) {
|
|
241
|
+
const response = await this.fetchPull(body.clientGroupID, body.cookie);
|
|
242
|
+
const cookie = toWebSocketCookie(response.cookie);
|
|
243
|
+
this.emitMessage(["pull", {
|
|
244
|
+
requestID: body.requestID,
|
|
245
|
+
cookie: cookie ?? this.cookie ?? "0",
|
|
246
|
+
lastMutationIDChanges: response.unchanged ? {} : response.lastMutationIDChanges
|
|
247
|
+
}]);
|
|
248
|
+
}
|
|
249
|
+
async fetchPull(clientGroupID, cookie) {
|
|
250
|
+
return await this.postJSON("/pull", {
|
|
251
|
+
clientID: this.clientID,
|
|
252
|
+
clientGroupID,
|
|
253
|
+
cookie: toHttpCookie(cookie)
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
async postJSON(path, body) {
|
|
257
|
+
const response = await this.state.fetch(`${this.state.originString}${path}`, {
|
|
258
|
+
method: "POST",
|
|
259
|
+
headers: {
|
|
260
|
+
authorization: this.authToken ? `Bearer ${this.authToken}` : "",
|
|
261
|
+
"content-type": "application/json"
|
|
262
|
+
},
|
|
263
|
+
body: JSON.stringify(body)
|
|
264
|
+
});
|
|
265
|
+
if (!response.ok) {
|
|
266
|
+
throw new ZeroHttpResponseError(path, response.status);
|
|
267
|
+
}
|
|
268
|
+
return response.json();
|
|
269
|
+
}
|
|
270
|
+
run(promise) {
|
|
271
|
+
void promise.catch(error => this.fail(error));
|
|
272
|
+
}
|
|
273
|
+
fail(error) {
|
|
274
|
+
if (this.readyState === this.CLOSED) return;
|
|
275
|
+
if (isAuthHTTPError(error)) {
|
|
276
|
+
this.emitMessage(["error", {
|
|
277
|
+
kind: "Unauthorized",
|
|
278
|
+
message: error.message,
|
|
279
|
+
origin: "server"
|
|
280
|
+
}]);
|
|
281
|
+
if (this.readyState !== this.CLOSED) this.close(1e3, error.message);
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
if (isStaleClientCookieError(error)) {
|
|
285
|
+
this.emitMessage(["error", {
|
|
286
|
+
kind: "InvalidConnectionRequestBaseCookie",
|
|
287
|
+
message: error.message,
|
|
288
|
+
origin: "server"
|
|
289
|
+
}]);
|
|
290
|
+
if (this.readyState !== this.CLOSED) this.close(1e3, error.message);
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
this.emit("error", {
|
|
294
|
+
error
|
|
295
|
+
});
|
|
296
|
+
this.close(1011, errorMessage(error));
|
|
297
|
+
}
|
|
298
|
+
emitPoke(response) {
|
|
299
|
+
const nextCookie = toWebSocketCookie(response.cookie);
|
|
300
|
+
if (isStaleCookie(this.cookie, response.cookie)) {
|
|
301
|
+
throw new Error(`zero-http pull returned stale cookie ${response.cookie} for ${this.cookie}`);
|
|
302
|
+
}
|
|
303
|
+
const pokeID = `zero-http-${++this.state.nextPokeID}`;
|
|
304
|
+
const gotQueries = this.pendingGotQueriesPatch;
|
|
305
|
+
this.pendingGotQueriesPatch = [];
|
|
306
|
+
this.emitMessage(["pokeStart", {
|
|
307
|
+
pokeID,
|
|
308
|
+
baseCookie: this.cookie,
|
|
309
|
+
schemaVersions: {
|
|
310
|
+
minSupportedVersion: 1,
|
|
311
|
+
maxSupportedVersion: 1
|
|
312
|
+
},
|
|
313
|
+
timestamp: Date.now()
|
|
314
|
+
}]);
|
|
315
|
+
this.emitMessage(["pokePart", {
|
|
316
|
+
pokeID,
|
|
317
|
+
lastMutationIDChanges: response.lastMutationIDChanges,
|
|
318
|
+
rowsPatch: response.rowsPatch
|
|
319
|
+
}]);
|
|
320
|
+
if (gotQueries.length > 0) {
|
|
321
|
+
this.emitMessage(["pokePart", {
|
|
322
|
+
pokeID,
|
|
323
|
+
gotQueriesPatch: gotQueries
|
|
324
|
+
}]);
|
|
325
|
+
}
|
|
326
|
+
this.emitMessage(["pokeEnd", {
|
|
327
|
+
pokeID,
|
|
328
|
+
cookie: nextCookie
|
|
329
|
+
}]);
|
|
330
|
+
this.cookie = nextCookie;
|
|
331
|
+
}
|
|
332
|
+
emitGotQueriesPatch(cookie) {
|
|
333
|
+
if (this.pendingGotQueriesPatch.length === 0) return;
|
|
334
|
+
const serverCookie = cookie ?? toHttpCookie(this.cookie);
|
|
335
|
+
if (serverCookie === null) return;
|
|
336
|
+
const nextCookie = toLocalWebSocketCookie(serverCookie, ++this.nextLocalCookieID);
|
|
337
|
+
const pokeID = `zero-http-${++this.state.nextPokeID}`;
|
|
338
|
+
const gotQueries = this.pendingGotQueriesPatch;
|
|
339
|
+
this.pendingGotQueriesPatch = [];
|
|
340
|
+
this.emitMessage(["pokeStart", {
|
|
341
|
+
pokeID,
|
|
342
|
+
baseCookie: this.cookie,
|
|
343
|
+
schemaVersions: {
|
|
344
|
+
minSupportedVersion: 1,
|
|
345
|
+
maxSupportedVersion: 1
|
|
346
|
+
},
|
|
347
|
+
timestamp: Date.now()
|
|
348
|
+
}]);
|
|
349
|
+
this.emitMessage(["pokePart", {
|
|
350
|
+
pokeID,
|
|
351
|
+
gotQueriesPatch: gotQueries
|
|
352
|
+
}]);
|
|
353
|
+
this.emitMessage(["pokeEnd", {
|
|
354
|
+
pokeID,
|
|
355
|
+
cookie: nextCookie
|
|
356
|
+
}]);
|
|
357
|
+
this.cookie = nextCookie;
|
|
358
|
+
}
|
|
359
|
+
emitMessage(message) {
|
|
360
|
+
if (this.readyState !== this.OPEN) return;
|
|
361
|
+
this.emit("message", {
|
|
362
|
+
data: JSON.stringify(message)
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
emit(type, event) {
|
|
366
|
+
const handler = this[`on${type}`];
|
|
367
|
+
if (typeof handler === "function") handler.call(this, event);
|
|
368
|
+
for (const listener of this.listeners[type]) {
|
|
369
|
+
if (typeof listener === "function") listener(event);else listener.handleEvent(event);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
function shouldIntercept(origin, url) {
|
|
374
|
+
const candidate = toHttpURL(url);
|
|
375
|
+
if (candidate.origin !== origin.origin) return false;
|
|
376
|
+
return candidate.pathname === `${trimTrailingSlash(origin.pathname)}/sync/v51/connect`;
|
|
377
|
+
}
|
|
378
|
+
function toHttpURL(url) {
|
|
379
|
+
const parsed = new URL(url);
|
|
380
|
+
if (parsed.protocol === "ws:") parsed.protocol = "http:";
|
|
381
|
+
if (parsed.protocol === "wss:") parsed.protocol = "https:";
|
|
382
|
+
return parsed;
|
|
383
|
+
}
|
|
384
|
+
function trimTrailingSlash(value) {
|
|
385
|
+
return value.endsWith("/") ? value.slice(0, -1) : value;
|
|
386
|
+
}
|
|
387
|
+
function decodeSecProtocol(protocols) {
|
|
388
|
+
const protocol = Array.isArray(protocols) ? protocols[0] : protocols;
|
|
389
|
+
if (!protocol) return {};
|
|
390
|
+
try {
|
|
391
|
+
const decoded = decodeURIComponent(protocol);
|
|
392
|
+
const json = new TextDecoder().decode(Uint8Array.from(globalThis.atob(decoded), char => char.charCodeAt(0)));
|
|
393
|
+
const parsed = JSON.parse(json);
|
|
394
|
+
return {
|
|
395
|
+
authToken: parsed.authToken,
|
|
396
|
+
initConnectionMessage: Array.isArray(parsed.initConnectionMessage) ? parsed.initConnectionMessage : void 0
|
|
397
|
+
};
|
|
398
|
+
} catch {
|
|
399
|
+
return {};
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
function gotQueriesPatch(patch) {
|
|
403
|
+
const got = [];
|
|
404
|
+
for (const op of patch) {
|
|
405
|
+
if (op.op === "clear") got.push({
|
|
406
|
+
op: "clear"
|
|
407
|
+
});else if (op.hash) got.push({
|
|
408
|
+
op: op.op,
|
|
409
|
+
hash: op.hash
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
return got;
|
|
413
|
+
}
|
|
414
|
+
function toHttpCookie(cookie) {
|
|
415
|
+
if (cookie === null || cookie === "") return null;
|
|
416
|
+
const parsed = Number(cookie.slice(0, COOKIE_WIDTH));
|
|
417
|
+
if (!Number.isFinite(parsed)) {
|
|
418
|
+
throw new Error(`zero-http cookie is not numeric: ${cookie}`);
|
|
419
|
+
}
|
|
420
|
+
return parsed;
|
|
421
|
+
}
|
|
422
|
+
function toWebSocketCookie(cookie) {
|
|
423
|
+
return cookie === null ? null : String(cookie).padStart(COOKIE_WIDTH, "0");
|
|
424
|
+
}
|
|
425
|
+
function toLocalWebSocketCookie(cookie, localID) {
|
|
426
|
+
return `${String(cookie).padStart(COOKIE_WIDTH, "0")}#${String(localID).padStart(6, "0")}`;
|
|
427
|
+
}
|
|
428
|
+
function isStaleCookie(current, next) {
|
|
429
|
+
const currentNumber = toHttpCookie(current);
|
|
430
|
+
return currentNumber !== null && next <= currentNumber;
|
|
431
|
+
}
|
|
432
|
+
function errorMessage(error) {
|
|
433
|
+
return error instanceof Error ? error.message : String(error);
|
|
434
|
+
}
|
|
435
|
+
class ZeroHttpResponseError extends Error {
|
|
436
|
+
constructor(path, status) {
|
|
437
|
+
super(`zero-http ${path} failed with ${status}`);
|
|
438
|
+
this.path = path;
|
|
439
|
+
this.status = status;
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
function isAuthHTTPError(error) {
|
|
443
|
+
return error instanceof ZeroHttpResponseError && (error.status === 401 || error.status === 403);
|
|
444
|
+
}
|
|
445
|
+
function isStaleClientCookieError(error) {
|
|
446
|
+
return error instanceof ZeroHttpResponseError && error.path === "/pull" && error.status === 409;
|
|
447
|
+
}
|