orez 0.3.8 → 0.4.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.
Files changed (56) hide show
  1. package/dist/bench/serial-mutations.bench.js +1 -1
  2. package/dist/cf-do/worker.d.ts +1 -1
  3. package/dist/cf-do/worker.d.ts.map +1 -1
  4. package/dist/cf-do/worker.js +4 -4
  5. package/dist/cf-do/worker.js.map +1 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +22 -2
  8. package/dist/index.js.map +1 -1
  9. package/dist/pg-proxy-browser.d.ts.map +1 -1
  10. package/dist/pg-proxy-browser.js +14 -2
  11. package/dist/pg-proxy-browser.js.map +1 -1
  12. package/dist/pg-proxy-do-backend.d.ts.map +1 -1
  13. package/dist/pg-proxy-do-backend.js +117 -34
  14. package/dist/pg-proxy-do-backend.js.map +1 -1
  15. package/dist/pg-proxy.d.ts +16 -1
  16. package/dist/pg-proxy.d.ts.map +1 -1
  17. package/dist/pg-proxy.js +17 -1
  18. package/dist/pg-proxy.js.map +1 -1
  19. package/dist/pg-sqlite-compiler/index.d.ts.map +1 -1
  20. package/dist/pg-sqlite-compiler/index.js +3 -1
  21. package/dist/pg-sqlite-compiler/index.js.map +1 -1
  22. package/dist/pg-sqlite-compiler/passes/types.js +1 -1
  23. package/dist/pg-sqlite-compiler/passes/types.js.map +1 -1
  24. package/dist/replication/handler.d.ts.map +1 -1
  25. package/dist/replication/handler.js +8 -3
  26. package/dist/replication/handler.js.map +1 -1
  27. package/dist/sqlite-keyword-identifiers.d.ts +3 -0
  28. package/dist/sqlite-keyword-identifiers.d.ts.map +1 -0
  29. package/dist/sqlite-keyword-identifiers.js +233 -0
  30. package/dist/sqlite-keyword-identifiers.js.map +1 -0
  31. package/dist/worker/cf-patches.d.ts.map +1 -1
  32. package/dist/worker/cf-patches.js +46 -7
  33. package/dist/worker/cf-patches.js.map +1 -1
  34. package/dist/worker/{hibernated-websocket-handoff.d.ts → durable-object-websocket-handoff.d.ts} +11 -17
  35. package/dist/worker/durable-object-websocket-handoff.d.ts.map +1 -0
  36. package/dist/worker/durable-object-websocket-handoff.js +230 -0
  37. package/dist/worker/durable-object-websocket-handoff.js.map +1 -0
  38. package/dist/worker/shims/sqlite.d.ts.map +1 -1
  39. package/dist/worker/shims/sqlite.js +242 -30
  40. package/dist/worker/shims/sqlite.js.map +1 -1
  41. package/dist/worker/zero-cache-embed-cf.d.ts +6 -13
  42. package/dist/worker/zero-cache-embed-cf.d.ts.map +1 -1
  43. package/dist/worker/zero-cache-embed-cf.js +12 -20
  44. package/dist/worker/zero-cache-embed-cf.js.map +1 -1
  45. package/package.json +4 -4
  46. package/dist/cf-do/test-protocol.d.ts +0 -11
  47. package/dist/cf-do/test-protocol.d.ts.map +0 -1
  48. package/dist/cf-do/test-protocol.js +0 -137
  49. package/dist/cf-do/test-protocol.js.map +0 -1
  50. package/dist/query-rewrites.d.ts +0 -2
  51. package/dist/query-rewrites.d.ts.map +0 -1
  52. package/dist/query-rewrites.js +0 -140
  53. package/dist/query-rewrites.js.map +0 -1
  54. package/dist/worker/hibernated-websocket-handoff.d.ts.map +0 -1
  55. package/dist/worker/hibernated-websocket-handoff.js +0 -212
  56. package/dist/worker/hibernated-websocket-handoff.js.map +0 -1
@@ -0,0 +1,233 @@
1
+ const SQLITE_RESERVED_KEYWORDS = new Set([
2
+ 'abort',
3
+ 'action',
4
+ 'add',
5
+ 'after',
6
+ 'all',
7
+ 'alter',
8
+ 'always',
9
+ 'analyze',
10
+ 'and',
11
+ 'as',
12
+ 'asc',
13
+ 'attach',
14
+ 'autoincrement',
15
+ 'before',
16
+ 'begin',
17
+ 'between',
18
+ 'by',
19
+ 'cascade',
20
+ 'case',
21
+ 'cast',
22
+ 'check',
23
+ 'collate',
24
+ 'column',
25
+ 'commit',
26
+ 'conflict',
27
+ 'constraint',
28
+ 'create',
29
+ 'cross',
30
+ 'current',
31
+ 'current_date',
32
+ 'current_time',
33
+ 'current_timestamp',
34
+ 'database',
35
+ 'default',
36
+ 'deferrable',
37
+ 'deferred',
38
+ 'delete',
39
+ 'desc',
40
+ 'detach',
41
+ 'distinct',
42
+ 'do',
43
+ 'drop',
44
+ 'each',
45
+ 'else',
46
+ 'end',
47
+ 'escape',
48
+ 'except',
49
+ 'exclude',
50
+ 'exclusive',
51
+ 'exists',
52
+ 'explain',
53
+ 'fail',
54
+ 'filter',
55
+ 'first',
56
+ 'following',
57
+ 'for',
58
+ 'foreign',
59
+ 'from',
60
+ 'full',
61
+ 'generated',
62
+ 'glob',
63
+ 'group',
64
+ 'groups',
65
+ 'having',
66
+ 'if',
67
+ 'ignore',
68
+ 'immediate',
69
+ 'in',
70
+ 'index',
71
+ 'indexed',
72
+ 'initially',
73
+ 'inner',
74
+ 'insert',
75
+ 'instead',
76
+ 'intersect',
77
+ 'into',
78
+ 'is',
79
+ 'isnull',
80
+ 'join',
81
+ 'key',
82
+ 'last',
83
+ 'left',
84
+ 'like',
85
+ 'limit',
86
+ 'match',
87
+ 'materialized',
88
+ 'natural',
89
+ 'no',
90
+ 'not',
91
+ 'nothing',
92
+ 'notnull',
93
+ 'null',
94
+ 'nulls',
95
+ 'of',
96
+ 'offset',
97
+ 'on',
98
+ 'or',
99
+ 'order',
100
+ 'others',
101
+ 'outer',
102
+ 'over',
103
+ 'partition',
104
+ 'plan',
105
+ 'pragma',
106
+ 'preceding',
107
+ 'primary',
108
+ 'query',
109
+ 'raise',
110
+ 'range',
111
+ 'recursive',
112
+ 'references',
113
+ 'regexp',
114
+ 'reindex',
115
+ 'release',
116
+ 'rename',
117
+ 'replace',
118
+ 'restrict',
119
+ 'returning',
120
+ 'right',
121
+ 'rollback',
122
+ 'row',
123
+ 'rows',
124
+ 'savepoint',
125
+ 'select',
126
+ 'set',
127
+ 'table',
128
+ 'temp',
129
+ 'temporary',
130
+ 'then',
131
+ 'ties',
132
+ 'to',
133
+ 'transaction',
134
+ 'trigger',
135
+ 'unbounded',
136
+ 'union',
137
+ 'unique',
138
+ 'update',
139
+ 'using',
140
+ 'vacuum',
141
+ 'values',
142
+ 'view',
143
+ 'virtual',
144
+ 'when',
145
+ 'where',
146
+ 'window',
147
+ 'with',
148
+ 'without',
149
+ ]);
150
+ const IDENTIFIER_KEYS = new Set([
151
+ 'aliasname',
152
+ 'catalogname',
153
+ 'colname',
154
+ 'conname',
155
+ 'dbname',
156
+ 'fdwname',
157
+ 'idxname',
158
+ 'indexname',
159
+ 'name',
160
+ 'newname',
161
+ 'plname',
162
+ 'portalname',
163
+ 'provider',
164
+ 'relname',
165
+ 'rolename',
166
+ 'rulename',
167
+ 'schemaname',
168
+ 'servername',
169
+ 'subname',
170
+ 'tableSpaceName',
171
+ 'trigname',
172
+ ]);
173
+ const MARKER_PREFIX = '__orez_sqlite_quote_marker_';
174
+ const MARKER_SUFFIX = '__X';
175
+ function quoteIdentifier(value) {
176
+ return `"${value.replace(/"/g, '""')}"`;
177
+ }
178
+ function needsSQLiteKeywordQuote(value) {
179
+ return SQLITE_RESERVED_KEYWORDS.has(value.toLowerCase());
180
+ }
181
+ export function markSQLiteKeywordIdentifiers(root) {
182
+ const markers = new Map();
183
+ const quotedByMarker = new Map();
184
+ let markerIndex = 0;
185
+ const markerFor = (value) => {
186
+ const existing = markers.get(value);
187
+ if (existing)
188
+ return existing;
189
+ const marker = `${MARKER_PREFIX}${markerIndex++}${MARKER_SUFFIX}`;
190
+ markers.set(value, marker);
191
+ quotedByMarker.set(marker, quoteIdentifier(value));
192
+ return marker;
193
+ };
194
+ const visit = (node, inColumnRef = false) => {
195
+ if (!node || typeof node !== 'object')
196
+ return;
197
+ if (Array.isArray(node)) {
198
+ for (const item of node)
199
+ visit(item, inColumnRef);
200
+ return;
201
+ }
202
+ const record = node;
203
+ const childColumnRef = inColumnRef || typeof record.ColumnRef === 'object';
204
+ for (const [key, value] of Object.entries(record)) {
205
+ if (IDENTIFIER_KEYS.has(key) &&
206
+ typeof value === 'string' &&
207
+ needsSQLiteKeywordQuote(value)) {
208
+ record[key] = markerFor(value);
209
+ continue;
210
+ }
211
+ if (childColumnRef &&
212
+ key === 'sval' &&
213
+ typeof value === 'string' &&
214
+ needsSQLiteKeywordQuote(value)) {
215
+ record[key] = markerFor(value);
216
+ continue;
217
+ }
218
+ visit(value, childColumnRef);
219
+ }
220
+ };
221
+ visit(root);
222
+ return quotedByMarker;
223
+ }
224
+ export function restoreSQLiteKeywordIdentifierMarkers(sql, quotedByMarker) {
225
+ let next = sql;
226
+ for (const [marker, quotedIdentifier] of quotedByMarker) {
227
+ next = next
228
+ .replaceAll(quoteIdentifier(marker), quotedIdentifier)
229
+ .replaceAll(marker, quotedIdentifier);
230
+ }
231
+ return next;
232
+ }
233
+ //# sourceMappingURL=sqlite-keyword-identifiers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-keyword-identifiers.js","sourceRoot":"","sources":["../src/sqlite-keyword-identifiers.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cf-patches.d.ts","sourceRoot":"","sources":["../../src/worker/cf-patches.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAwBH,MAAM,WAAW,yBAAyB;IACxC,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GAAG,yBAAyB,GACxC,wBAAwB,CA+D1B"}
1
+ {"version":3,"file":"cf-patches.d.ts","sourceRoot":"","sources":["../../src/worker/cf-patches.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AA8BH,MAAM,WAAW,yBAAyB;IACxC,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GAAG,yBAAyB,GACxC,wBAAwB,CA+D1B"}
@@ -31,6 +31,11 @@ const ZERO_CACHE_WORKERS = [
31
31
  'replicator',
32
32
  'syncer',
33
33
  ];
34
+ // the stable prefix of every zero-cache worker's import-time auto-start guard.
35
+ // flipping the condition to `false` neutralizes the call without depending on
36
+ // the (version-volatile) runWorker(...) arguments that follow it.
37
+ const WORKER_AUTOSTART_PREFIX = 'if (!singleProcessMode()) exitAfter(';
38
+ const WORKER_AUTOSTART_DISABLED = 'if (false) /* orez-disable-autostart */ exitAfter(';
34
39
  export function prepareZeroCacheForCF(input) {
35
40
  const options = typeof input === 'string' ? { nodeModulesPath: input } : input;
36
41
  const nodeModulesPath = resolve(options.nodeModulesPath);
@@ -105,18 +110,26 @@ function patchWorkerEntrypoints(zcBase) {
105
110
  console.warn('[orez] zero-cache worker entrypoint not found at', entrypointPath);
106
111
  continue;
107
112
  }
108
- let code = readFileSync(entrypointPath, 'utf-8');
113
+ const code = readFileSync(entrypointPath, 'utf-8');
109
114
  if (code.includes('orez-disable-autostart')) {
110
115
  continue;
111
116
  }
112
- const next = code.replace(/if \(!singleProcessMode\(\)\) exitAfter\(\(\) => runWorker\(must\(parentWorker\), process\.env(?:, \.\.\.process\.argv\.slice\(2\))?\)\);/g, '// orez-disable-autostart: childWorker invokes runWorker explicitly in CF embeds.');
113
- if (next === code) {
117
+ // every entrypoint auto-starts itself at import time via
118
+ // if (!singleProcessMode()) exitAfter(lc, () => runWorker(...))
119
+ // the runWorker(...) call shape varies per worker and across zero versions
120
+ // (1.6 added the `lc` arg to exitAfter, kept `...process.argv.slice(2)` on
121
+ // some workers, and wrapped change-streamer's runWorker in a `.catch()` that
122
+ // publishes startup errors). matching the whole call is brittle, so we only
123
+ // touch the stable guard prefix: flipping the condition to `false` turns the
124
+ // entire statement into dead code regardless of its arguments. CF embeds run
125
+ // runWorker explicitly via childWorker, so nothing is lost.
126
+ if (!code.includes(WORKER_AUTOSTART_PREFIX)) {
114
127
  console.warn(`[orez] could not find auto-start guard in ${entrypoint}.js. ` +
115
128
  'zero-cache version may have changed — check compatibility.');
116
129
  continue;
117
130
  }
118
- code = next;
119
- writeFileSync(entrypointPath, code);
131
+ const next = code.split(WORKER_AUTOSTART_PREFIX).join(WORKER_AUTOSTART_DISABLED);
132
+ writeFileSync(entrypointPath, next);
120
133
  console.log(`[orez] patched zero-cache ${entrypoint}.js (disabled auto-start)`);
121
134
  }
122
135
  }
@@ -209,6 +222,32 @@ function applyPragmas(db, pragmas) {
209
222
  }
210
223
  }
211
224
 
225
+ // re-exported to keep this module's surface identical to upstream
226
+ // write-worker-client.js (write-worker.js imports it). orez runs the writer
227
+ // inline so the thread boundary that uses it is gone, but a complete export
228
+ // surface keeps the bundler from choking if it pulls write-worker.js in.
229
+ function serializeError(err) {
230
+ if (!(err instanceof Error)) return {
231
+ name: "Error",
232
+ message: String(err),
233
+ details: err && typeof err === "object" ? { ...err } : void 0
234
+ };
235
+ const details = Object.fromEntries(Object.getOwnPropertyNames(err).filter((key) => ![
236
+ "name",
237
+ "message",
238
+ "stack",
239
+ "cause"
240
+ ].includes(key)).map((key) => [key, err[key]]));
241
+ const cause = err.cause instanceof Error ? serializeError(err.cause) : err.cause === void 0 ? void 0 : String(err.cause);
242
+ return {
243
+ name: err.name,
244
+ message: err.message,
245
+ stack: err.stack,
246
+ cause,
247
+ details: Object.keys(details).length ? details : void 0
248
+ };
249
+ }
250
+
212
251
  function createAPI(onWriteError) {
213
252
  let db;
214
253
  let runner;
@@ -224,7 +263,7 @@ function createAPI(onWriteError) {
224
263
 
225
264
  return {
226
265
  init(dbPath, cpMode, pragmas, logConfig) {
227
- lc = createLogContext({ log: logConfig }, { worker: "write-worker" });
266
+ lc = createLogContext({ log: logConfig }, "write-worker");
228
267
  const previousRole = globalThis.__orez_zero_sqlite_role;
229
268
  globalThis.__orez_zero_sqlite_role = "replica-writer";
230
269
  try {
@@ -313,7 +352,7 @@ class ThreadWriteWorkerClient {
313
352
  }
314
353
  }
315
354
 
316
- export { ThreadWriteWorkerClient, applyPragmas };
355
+ export { ThreadWriteWorkerClient, applyPragmas, serializeError };
317
356
  `);
318
357
  console.log('[orez] patched zero-cache write-worker-client.js (inline writer)');
319
358
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cf-patches.js","sourceRoot":"","sources":["../../src/worker/cf-patches.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cf-patches.js","sourceRoot":"","sources":["../../src/worker/cf-patches.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EACL,MAAM,EACN,UAAU,EACV,SAAS,EACT,SAAS,EACT,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,MAAM,EACN,WAAW,EACX,aAAa,GACd,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE5C,MAAM,kBAAkB,GAAG;IACzB,MAAM;IACN,iBAAiB;IACjB,QAAQ;IACR,YAAY;IACZ,QAAQ;CACA,CAAA;AAEV,+EAA+E;AAC/E,8EAA8E;AAC9E,kEAAkE;AAClE,MAAM,uBAAuB,GAAG,sCAAsC,CAAA;AACtE,MAAM,yBAAyB,GAAG,oDAAoD,CAAA;AAetF,MAAM,UAAU,qBAAqB,CACnC,KAAyC;IAEzC,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;IAC9E,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IACxD,MAAM,MAAM,GAAG,OAAO,CACpB,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,CAC3E,CAAA;IACD,MAAM,iBAAiB,GAAG,OAAO,CAAC,eAAe,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;IACvE,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;IAC1E,MAAM,qBAAqB,GAAG,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAA;IACxE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;IAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,CAAC,CAAA;IAEvD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,uDAAuD,aAAa,EAAE,CACvE,CAAA;IACH,CAAC;IAED,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAChD,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACnD,MAAM,CAAC,aAAa,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;IACzE,IAAI,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,qBAAqB,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAA;IACrF,CAAC;IACD,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAC1D,uBAAuB,CACrB,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,EACjD,kBAAkB,EAClB;QACE,gBAAgB,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC;KACvD,CACF,CAAA;IACD,uBAAuB,CACrB,OAAO,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,CAAC,EAChD,kBAAkB,EAClB,EAAE,CACH,CAAA;IAED,eAAe,CAAC,MAAM,CAAC,CAAA;IACvB,sBAAsB,CAAC,MAAM,CAAC,CAAA;IAC9B,cAAc,CAAC,MAAM,CAAC,CAAA;IACtB,sBAAsB,CAAC,MAAM,CAAC,CAAA;IAC9B,MAAM,aAAa,GAAG,oBAAoB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;IACnE,MAAM,cAAc,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAA;IAEzD,OAAO;QACL,eAAe;QACf,MAAM;QACN,UAAU;QACV,eAAe,EAAE,MAAM;QACvB,OAAO,EAAE;YACP,+DAA+D,EAAE,OAAO,CACtE,UAAU,EACV,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,eAAe,CAChB;YACD,GAAG,cAAc;YACjB,GAAG,aAAa;SACjB;KACF,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAC,MAAc;IACrC,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAA;IAClE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,oCAAoC,EAAE,cAAc,CAAC,CAAA;QAClE,OAAM;IACR,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAErD,uEAAuE;IACvE,IAAI,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAChF,OAAM;IACR,CAAC;IAED,aAAa,CACX,cAAc,EACd;;;;;;;;;;;;CAYH,CACE,CAAA;IACD,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAA;AACzD,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAc;IAC5C,KAAK,MAAM,UAAU,IAAI,kBAAkB,EAAE,CAAC;QAC5C,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,KAAK,CAAC,CAAA;QACpE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,kDAAkD,EAAE,cAAc,CAAC,CAAA;YAChF,SAAQ;QACV,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;QAClD,IAAI,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;YAC5C,SAAQ;QACV,CAAC;QAED,yDAAyD;QACzD,kEAAkE;QAClE,2EAA2E;QAC3E,2EAA2E;QAC3E,6EAA6E;QAC7E,4EAA4E;QAC5E,6EAA6E;QAC7E,6EAA6E;QAC7E,4DAA4D;QAC5D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CACV,6CAA6C,UAAU,OAAO;gBAC5D,4DAA4D,CAC/D,CAAA;YACD,SAAQ;QACV,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;QAChF,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;QACnC,OAAO,CAAC,GAAG,CAAC,6BAA6B,UAAU,2BAA2B,CAAC,CAAA;IACjF,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,CAAA;IAC9D,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,aAAa,CAAC,CAAA;QAC/D,OAAM;IACR,CAAC;IAED,IAAI,IAAI,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;IAE/C,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAClC,OAAM;IACR,CAAC;IAED,kEAAkE;IAClE,iEAAiE;IACjE,0EAA0E;IAC1E,gFAAgF;IAChF,8DAA8D;IAC9D,MAAM,aAAa,GAAG;;;;;;;;;;;;;;CAcvB,CAAA;IAEC,uEAAuE;IACvE,8EAA8E;IAC9E,iEAAiE;IACjE,MAAM,oBAAoB,GACxB,4DAA4D,CAAA;IAC9D,MAAM,YAAY,GAChB,kBAAkB;QAClB,8FAA8F;QAC9F,iGAAiG;QACjG,gBAAgB;QAChB,wDAAwD;QACxD,uFAAuF;QACvF,mFAAmF;QACnF,qGAAqG;QACrG,IAAI;QACJ,yCAAyC;QACzC,+IAA+I;QAC/I,8CAA8C;QAC9C,iDAAiD,CAAA;IAEnD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,IAAI,CACV,gEAAgE;YAC9D,4DAA4D,CAC/D,CAAA;QACD,OAAM;IACR,CAAC;IAED,IAAI,GAAG,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAA;IACvE,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IAClC,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAA;AAC/E,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAc;IAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,wBAAwB,CAAC,CAAA;IACtF,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,UAAU,CAAC,CAAA;QACtE,OAAM;IACR,CAAC;IAED,IAAI,IAAI,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAC5C,IACE,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EACxC,CAAC;QACD,OAAM;IACR,CAAC;IAED,IACE,CAAC,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QAC1C,CAAC,IAAI,CAAC,QAAQ,CAAC,+CAA+C,CAAC,EAC/D,CAAC;QACD,OAAO,CAAC,IAAI,CACV,8EAA8E;YAC5E,4DAA4D,CAC/D,CAAA;QACD,OAAM;IACR,CAAC;IAED,aAAa,CACX,UAAU,EACV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmJH,CACE,CAAA;IACD,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAA;AACjF,CAAC;AAED,SAAS,oBAAoB,CAC3B,eAAuB,EACvB,MAAc;IAEd,MAAM,iBAAiB,GAAG,eAAe,CAAC,eAAe,EAAE,aAAa,CAAC,CAAA;IACzE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,aAAa,CAAC,CAAA;IACxE,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;IACtE,MAAM,QAAQ,GAAG,OAAO,CAAC,iBAAiB,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAA;IAEvE,MAAM,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3D,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1D,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;IAEpF,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1D,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,IAAI,GAAG,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;IACjD,IACE,IAAI,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EACrC,CAAC;QACD,OAAO;YACL,aAAa,EAAE,iBAAiB;YAChC,kBAAkB,EAAE,eAAe;YACnC,2BAA2B,EAAE,eAAe;SAC7C,CAAA;IACH,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,IAAI,CACV,sEAAsE;YACpE,+DAA+D,CAClE,CAAA;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,OAAO,GAAG,wDAAwD,CAAA;IACxE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CACV,sEAAsE;YACpE,8DAA8D,CACjE,CAAA;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAC5D,MAAM,WAAW,GAAG;;sCAEgB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;4DAyBY,CAAA;IAE1D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IACzC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,CAAA;IACpC,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;IAC3E,OAAO;QACL,aAAa,EAAE,iBAAiB;QAChC,kBAAkB,EAAE,eAAe;QACnC,2BAA2B,EAAE,eAAe;KAC7C,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAC,eAAuB,EAAE,WAAmB;IACnE,MAAM,UAAU,GAAG;QACjB,OAAO,CAAC,eAAe,EAAE,WAAW,CAAC;QACrC,OAAO,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,CAAC;QAC7D,GAAG,wBAAwB,CAAC,eAAe,EAAE,WAAW,CAAC;KAC1D,CAAA;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;YACnD,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,wBAAwB,CAC/B,eAAuB,EACvB,WAAmB;IAEnB,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;IAC/C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAA;IAElC,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAChD,OAAO,WAAW,CAAC,MAAM,CAAC;SACvB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC;SAC7E,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAA;AACxE,CAAC;AAED,SAAS,iBAAiB,CAAC,eAAuB;IAChD,MAAM,OAAO,GAA2B,EAAE,CAAA;IAC1C,MAAM,cAAc,GAA2B;QAC7C,eAAe,EAAE,UAAU;QAC3B,iBAAiB,EAAE,iBAAiB;QACpC,cAAc,EAAE,cAAc;QAC9B,qCAAqC,EAAE,qCAAqC;KAC7E,CAAA;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QAClE,MAAM,WAAW,GAAG,eAAe,CAAC,eAAe,EAAE,WAAW,CAAC,CAAA;QACjE,IAAI,WAAW;YAAE,OAAO,CAAC,KAAK,CAAC,GAAG,WAAW,CAAA;IAC/C,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,uBAAuB,CAC9B,UAAkB,EAClB,UAAkB,EAClB,SAAiC;IAEjC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAM;IACnC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAE1C,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAQ;QACnC,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;QAC9C,MAAM,eAAe,GAAG,SAAS,CAAC,WAAW,CAAC,CAAA;QAC9C,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,CAAC;YACxE,SAAQ;QACV,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;YAC9C,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC3C,KAAK,MAAM,WAAW,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;gBACnD,MAAM,WAAW,GAAG,GAAG,KAAK,IAAI,WAAW,EAAE,CAAA;gBAC7C,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;gBACvD,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;gBACvD,WAAW,CACT,SAAS,CAAC,WAAW,CAAC,IAAI,aAAa,EACvC,aAAa,EACb,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAChC,CAAA;YACH,CAAC;YACD,SAAQ;QACV,CAAC;QAED,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAA;IACjF,CAAC;IAED,KAAK,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9D,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;QACpE,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,MAAc,EAAE,MAAc,EAAE,OAAgB;IACnE,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAClD,CAAC;SAAM,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAM;IACR,CAAC;IACD,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/C,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;AACpC,CAAC"}
@@ -1,25 +1,18 @@
1
- declare const ZERO_CACHE_SOCKET_ATTACHMENT_TYPE = "orez-zero-cache-handoff-v1";
2
- export interface DurableObjectStateLike {
3
- acceptWebSocket(socket: HibernatableWebSocket, tags?: string[]): void;
4
- }
5
1
  export interface HandoffRequestMessage {
6
2
  url: string;
7
3
  headers: Record<string, string>;
8
4
  method: string;
9
5
  }
10
- export interface HandoffAttachment {
11
- type: typeof ZERO_CACHE_SOCKET_ATTACHMENT_TYPE;
12
- id: string;
13
- message: HandoffRequestMessage;
6
+ export interface DurableObjectWebSocketHandoffContext {
7
+ waitUntil(promise: Promise<unknown>): void;
14
8
  }
15
- export interface HibernatableWebSocket {
9
+ export interface DurableObjectWebSocket {
10
+ accept(): void;
16
11
  send(data: string | ArrayBuffer | ArrayBufferView): void;
17
12
  close(code?: number, reason?: string): void;
18
13
  addEventListener(type: string, handler: (event: any) => void): void;
19
14
  removeEventListener(type: string, handler: (event: any) => void): void;
20
15
  readyState: number;
21
- serializeAttachment(value: HandoffAttachment): void;
22
- deserializeAttachment(): HandoffAttachment | undefined;
23
16
  }
24
17
  interface LocalWebSocket {
25
18
  send(data: string | ArrayBuffer | ArrayBufferView): void;
@@ -34,15 +27,16 @@ interface FastifyHandoffTarget {
34
27
  message: HandoffRequestMessage;
35
28
  head: Uint8Array;
36
29
  }, socket: LocalWebSocket): boolean;
30
+ server?: {
31
+ emit?: Function;
32
+ listenerCount?: (event: string) => number;
33
+ };
37
34
  }
38
- export declare class HibernatedWebSocketHandoff {
35
+ export declare class DurableObjectWebSocketHandoff {
39
36
  #private;
40
37
  private getFastify;
41
38
  constructor(getFastify: () => FastifyHandoffTarget | null | undefined);
42
- accept(durableObjectState: DurableObjectStateLike, server: HibernatableWebSocket, message: HandoffRequestMessage): boolean;
43
- handleMessage(socket: HibernatableWebSocket, messageData: string | ArrayBuffer): void;
44
- handleClose(socket: HibernatableWebSocket, code: number, reason: string, wasClean: boolean): void;
45
- handleError(socket: HibernatableWebSocket, error: unknown): void;
39
+ accept(server: DurableObjectWebSocket, message: HandoffRequestMessage, ctx?: DurableObjectWebSocketHandoffContext): boolean;
46
40
  }
47
41
  export {};
48
- //# sourceMappingURL=hibernated-websocket-handoff.d.ts.map
42
+ //# sourceMappingURL=durable-object-websocket-handoff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"durable-object-websocket-handoff.d.ts","sourceRoot":"","sources":["../../src/worker/durable-object-websocket-handoff.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,oCAAoC;IACnD,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;CAC3C;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,IAAI,IAAI,CAAA;IACd,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,IAAI,CAAA;IACxD,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3C,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAA;IACnE,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAA;IACtE,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,UAAU,cAAc;IACtB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,IAAI,CAAA;IACxD,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3C,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAA;IACnE,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAA;IACtE,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,IAAI,IAAI,CAAA;CACf;AAWD,UAAU,oBAAoB;IAC5B,UAAU,CACR,GAAG,EAAE;QAAE,OAAO,EAAE,qBAAqB,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,EACzD,MAAM,EAAE,cAAc,GACrB,OAAO,CAAA;IACV,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,QAAQ,CAAA;QACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;KAC1C,CAAA;CACF;AAgJD,qBAAa,6BAA6B;;IAG5B,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,MAAM,oBAAoB,GAAG,IAAI,GAAG,SAAS;IAE7E,MAAM,CACJ,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,qBAAqB,EAC9B,GAAG,CAAC,EAAE,oCAAoC,GACzC,OAAO;CAiIX"}
@@ -0,0 +1,230 @@
1
+ const OPEN = 1;
2
+ const CLOSING = 2;
3
+ const CLOSED = 3;
4
+ const FIRST_SEND_CONTEXT_TIMEOUT_MS = 10_000;
5
+ function errorMessage(error) {
6
+ return error instanceof Error ? error.message : String(error);
7
+ }
8
+ function websocketEventData(event) {
9
+ const data = event?.data ?? event;
10
+ if (typeof data === 'string' || data instanceof ArrayBuffer)
11
+ return data;
12
+ if (ArrayBuffer.isView(data)) {
13
+ return Uint8Array.from(new Uint8Array(data.buffer, data.byteOffset, data.byteLength))
14
+ .buffer;
15
+ }
16
+ return String(data);
17
+ }
18
+ function createLocalSocketBridge(cfSocket, onClose, onFirstSend) {
19
+ const listeners = new Map();
20
+ let readyState = OPEN;
21
+ let removePeerListeners = () => { };
22
+ let firstSendObserved = false;
23
+ function addEventListener(type, handler) {
24
+ let handlers = listeners.get(type);
25
+ if (!handlers) {
26
+ handlers = new Set();
27
+ listeners.set(type, handlers);
28
+ }
29
+ handlers.add(handler);
30
+ }
31
+ function removeEventListener(type, handler) {
32
+ listeners.get(type)?.delete(handler);
33
+ }
34
+ function emit(type, event) {
35
+ const handlers = listeners.get(type);
36
+ if (!handlers)
37
+ return;
38
+ for (const handler of [...handlers])
39
+ handler(event);
40
+ }
41
+ function markClosed(code, reason, wasClean) {
42
+ if (readyState === CLOSED)
43
+ return;
44
+ readyState = CLOSED;
45
+ removePeerListeners();
46
+ emit('close', { code, reason, wasClean });
47
+ listeners.clear();
48
+ onClose();
49
+ }
50
+ const localSocket = {
51
+ accept() { },
52
+ get readyState() {
53
+ return readyState;
54
+ },
55
+ send(data) {
56
+ if (readyState !== OPEN || cfSocket.readyState !== OPEN) {
57
+ throw new Error('WebSocket is closed');
58
+ }
59
+ try {
60
+ cfSocket.send(data);
61
+ }
62
+ catch (err) {
63
+ console.log(`[orez-ws] send error ${errorMessage(err)}`);
64
+ throw err;
65
+ }
66
+ if (!firstSendObserved) {
67
+ firstSendObserved = true;
68
+ console.log(`[orez-ws] first send localReady=${readyState} cfReady=${cfSocket.readyState}`);
69
+ onFirstSend();
70
+ }
71
+ },
72
+ close(code, reason) {
73
+ if (readyState === CLOSED)
74
+ return;
75
+ readyState = CLOSING;
76
+ try {
77
+ cfSocket.close(code, reason);
78
+ }
79
+ finally {
80
+ markClosed(code ?? 1000, reason ?? '', true);
81
+ }
82
+ },
83
+ addEventListener,
84
+ removeEventListener,
85
+ receive(data) {
86
+ if (readyState === CLOSED)
87
+ return;
88
+ readyState = OPEN;
89
+ emit('message', { data });
90
+ },
91
+ closeFromPeer(code, reason, wasClean) {
92
+ markClosed(code, reason, wasClean);
93
+ },
94
+ errorFromPeer(error) {
95
+ emit('error', { error, message: errorMessage(error) });
96
+ markClosed(1011, errorMessage(error), false);
97
+ },
98
+ };
99
+ const onPeerMessage = (event) => {
100
+ localSocket.receive(websocketEventData(event));
101
+ };
102
+ const onPeerClose = (event) => {
103
+ localSocket.closeFromPeer(event?.code ?? 1005, event?.reason ?? '', event?.wasClean ?? false);
104
+ };
105
+ const onPeerError = (event) => {
106
+ localSocket.errorFromPeer(event?.error ?? event);
107
+ };
108
+ cfSocket.addEventListener('message', onPeerMessage);
109
+ cfSocket.addEventListener('close', onPeerClose);
110
+ cfSocket.addEventListener('error', onPeerError);
111
+ removePeerListeners = () => {
112
+ cfSocket.removeEventListener('message', onPeerMessage);
113
+ cfSocket.removeEventListener('close', onPeerClose);
114
+ cfSocket.removeEventListener('error', onPeerError);
115
+ removePeerListeners = () => { };
116
+ };
117
+ return localSocket;
118
+ }
119
+ export class DurableObjectWebSocketHandoff {
120
+ getFastify;
121
+ #bridges = new Map();
122
+ constructor(getFastify) {
123
+ this.getFastify = getFastify;
124
+ }
125
+ accept(server, message, ctx) {
126
+ const id = crypto.randomUUID();
127
+ server.accept();
128
+ const releaseContext = this.#keepContextUntilFirstSend(ctx);
129
+ const bridge = this.#createBridge(id, server, message, releaseContext);
130
+ const handed = this.#handoff(bridge);
131
+ // durable diagnostic: a `handoff=false` here means no fastify instance
132
+ // consumed the upgrade (the CF-DO sync-dead class — see the /sync emit
133
+ // fallback in #handoff). one cheap line per connection, greppable in
134
+ // `wrangler tail`.
135
+ console.log(`[orez-ws] accept handoff=${handed} url=${message.url}`);
136
+ if (!handed) {
137
+ releaseContext('no-handoff');
138
+ bridge.close(1011, 'zero-cache websocket route unavailable', false);
139
+ }
140
+ return handed;
141
+ }
142
+ #createBridge(id, cfSocket, message, onFirstSend) {
143
+ const localSocket = createLocalSocketBridge(cfSocket, () => {
144
+ this.#bridges.delete(id);
145
+ }, onFirstSend);
146
+ const bridge = {
147
+ id,
148
+ message,
149
+ socket: localSocket,
150
+ receive: localSocket.receive,
151
+ close: localSocket.closeFromPeer,
152
+ error: localSocket.errorFromPeer,
153
+ };
154
+ this.#bridges.set(id, bridge);
155
+ return bridge;
156
+ }
157
+ #keepContextUntilFirstSend(ctx) {
158
+ if (!ctx?.waitUntil) {
159
+ console.log(`[orez-ws] waitUntil missing`);
160
+ return () => { };
161
+ }
162
+ let timeout;
163
+ let finished = false;
164
+ let finish = () => { };
165
+ const promise = new Promise((resolve) => {
166
+ finish = (reason = 'first-send') => {
167
+ if (finished)
168
+ return;
169
+ finished = true;
170
+ if (timeout)
171
+ clearTimeout(timeout);
172
+ console.log(`[orez-ws] waitUntil release reason=${reason}`);
173
+ resolve();
174
+ };
175
+ timeout = setTimeout(() => finish('timeout'), FIRST_SEND_CONTEXT_TIMEOUT_MS);
176
+ });
177
+ ctx.waitUntil(promise);
178
+ console.log(`[orez-ws] waitUntil registered timeoutMs=${FIRST_SEND_CONTEXT_TIMEOUT_MS}`);
179
+ return finish;
180
+ }
181
+ #handoff(bridge) {
182
+ const handoffMsg = { message: bridge.message, head: new Uint8Array(0) };
183
+ const g = globalThis;
184
+ const fallback = this.getFastify() ?? g.__orez_fastify_instance;
185
+ const instances = [
186
+ ...(g.__orez_fastify_instances ?? []),
187
+ ...(fallback ? [fallback] : []),
188
+ ...(g.__orez_fastify_instance ? [g.__orez_fastify_instance] : []),
189
+ ];
190
+ // 1. {websocket:true} routes (e.g. /replication/*/changes) are matched by
191
+ // the fastify shim's tryHandoff. iterate every instance, stop at first.
192
+ for (const inst of instances) {
193
+ if (inst?.tryHandoff?.(handoffMsg, bridge.socket))
194
+ return true;
195
+ }
196
+ // 2. the /sync/v*/connect path is served by the ZeroDispatcher's
197
+ // server.onMessageType('handoff') listener, NOT a {websocket:true} route,
198
+ // so tryHandoff never matches it. emit the handoff on the dispatcher's
199
+ // server — mirroring the in-process ws shim (shims/ws.ts). Zero's runner
200
+ // sends "ready" before constructing the dispatcher, so the captured
201
+ // fallback instance can be stale; use the registered Fastify servers and
202
+ // pick those with an extra handoff listener beyond the shim's own
203
+ // websocket-route listener.
204
+ const servers = new Set();
205
+ for (const inst of instances) {
206
+ const server = inst?.server;
207
+ const handoffListeners = server?.listenerCount?.('message') ?? 0;
208
+ if (typeof server?.emit === 'function' && handoffListeners > 1) {
209
+ servers.add(server);
210
+ }
211
+ }
212
+ if (!servers.size && typeof fallback?.server?.emit === 'function') {
213
+ const handoffListeners = fallback.server.listenerCount?.('message');
214
+ if (handoffListeners === undefined || handoffListeners > 1) {
215
+ servers.add(fallback.server);
216
+ }
217
+ }
218
+ let emittedAny = false;
219
+ let maxListeners = -1;
220
+ for (const server of servers) {
221
+ const listeners = server.listenerCount?.('message') ?? -1;
222
+ const emitted = server.emit('message', ['handoff', handoffMsg], bridge.socket);
223
+ emittedAny ||= Boolean(emitted);
224
+ maxListeners = Math.max(maxListeners, listeners);
225
+ }
226
+ console.log(`[orez-ws] dispatcher emit candidates=${servers.size} emitted=${emittedAny} listeners=${maxListeners}`);
227
+ return emittedAny;
228
+ }
229
+ }
230
+ //# sourceMappingURL=durable-object-websocket-handoff.js.map