devflare 0.0.0 → 1.0.0-next.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 (198) hide show
  1. package/README.md +737 -1
  2. package/bin/devflare.js +14 -0
  3. package/dist/account-rvrj687w.js +397 -0
  4. package/dist/ai-dx4fr9jh.js +107 -0
  5. package/dist/bridge/client.d.ts +82 -0
  6. package/dist/bridge/client.d.ts.map +1 -0
  7. package/dist/bridge/index.d.ts +7 -0
  8. package/dist/bridge/index.d.ts.map +1 -0
  9. package/dist/bridge/miniflare.d.ts +70 -0
  10. package/dist/bridge/miniflare.d.ts.map +1 -0
  11. package/dist/bridge/protocol.d.ts +146 -0
  12. package/dist/bridge/protocol.d.ts.map +1 -0
  13. package/dist/bridge/proxy.d.ts +49 -0
  14. package/dist/bridge/proxy.d.ts.map +1 -0
  15. package/dist/bridge/serialization.d.ts +83 -0
  16. package/dist/bridge/serialization.d.ts.map +1 -0
  17. package/dist/bridge/server.d.ts +8 -0
  18. package/dist/bridge/server.d.ts.map +1 -0
  19. package/dist/browser-shim/binding-worker.d.ts +7 -0
  20. package/dist/browser-shim/binding-worker.d.ts.map +1 -0
  21. package/dist/browser-shim/handler.d.ts +21 -0
  22. package/dist/browser-shim/handler.d.ts.map +1 -0
  23. package/dist/browser-shim/index.d.ts +3 -0
  24. package/dist/browser-shim/index.d.ts.map +1 -0
  25. package/dist/browser-shim/server.d.ts +25 -0
  26. package/dist/browser-shim/server.d.ts.map +1 -0
  27. package/dist/browser-shim/worker.d.ts +14 -0
  28. package/dist/browser-shim/worker.d.ts.map +1 -0
  29. package/dist/build-mnf6v8gd.js +53 -0
  30. package/dist/bundler/do-bundler.d.ts +42 -0
  31. package/dist/bundler/do-bundler.d.ts.map +1 -0
  32. package/dist/bundler/index.d.ts +2 -0
  33. package/dist/bundler/index.d.ts.map +1 -0
  34. package/dist/cli/bin.d.ts +3 -0
  35. package/dist/cli/bin.d.ts.map +1 -0
  36. package/dist/cli/colors.d.ts +11 -0
  37. package/dist/cli/colors.d.ts.map +1 -0
  38. package/dist/cli/commands/account.d.ts +4 -0
  39. package/dist/cli/commands/account.d.ts.map +1 -0
  40. package/dist/cli/commands/ai.d.ts +3 -0
  41. package/dist/cli/commands/ai.d.ts.map +1 -0
  42. package/dist/cli/commands/build.d.ts +4 -0
  43. package/dist/cli/commands/build.d.ts.map +1 -0
  44. package/dist/cli/commands/deploy.d.ts +4 -0
  45. package/dist/cli/commands/deploy.d.ts.map +1 -0
  46. package/dist/cli/commands/dev.d.ts +4 -0
  47. package/dist/cli/commands/dev.d.ts.map +1 -0
  48. package/dist/cli/commands/doctor.d.ts +4 -0
  49. package/dist/cli/commands/doctor.d.ts.map +1 -0
  50. package/dist/cli/commands/init.d.ts +4 -0
  51. package/dist/cli/commands/init.d.ts.map +1 -0
  52. package/dist/cli/commands/remote.d.ts +4 -0
  53. package/dist/cli/commands/remote.d.ts.map +1 -0
  54. package/dist/cli/commands/types.d.ts +4 -0
  55. package/dist/cli/commands/types.d.ts.map +1 -0
  56. package/dist/cli/dependencies.d.ts +90 -0
  57. package/dist/cli/dependencies.d.ts.map +1 -0
  58. package/dist/cli/index.d.ts +23 -0
  59. package/dist/cli/index.d.ts.map +1 -0
  60. package/dist/cli/wrangler-auth.d.ts +36 -0
  61. package/dist/cli/wrangler-auth.d.ts.map +1 -0
  62. package/dist/cloudflare/account.d.ts +65 -0
  63. package/dist/cloudflare/account.d.ts.map +1 -0
  64. package/dist/cloudflare/api.d.ts +51 -0
  65. package/dist/cloudflare/api.d.ts.map +1 -0
  66. package/dist/cloudflare/auth.d.ts +35 -0
  67. package/dist/cloudflare/auth.d.ts.map +1 -0
  68. package/dist/cloudflare/index.d.ts +107 -0
  69. package/dist/cloudflare/index.d.ts.map +1 -0
  70. package/dist/cloudflare/index.js +13 -0
  71. package/dist/cloudflare/preferences.d.ts +46 -0
  72. package/dist/cloudflare/preferences.d.ts.map +1 -0
  73. package/dist/cloudflare/pricing.d.ts +15 -0
  74. package/dist/cloudflare/pricing.d.ts.map +1 -0
  75. package/dist/cloudflare/remote-config.d.ts +37 -0
  76. package/dist/cloudflare/remote-config.d.ts.map +1 -0
  77. package/dist/cloudflare/types.d.ts +161 -0
  78. package/dist/cloudflare/types.d.ts.map +1 -0
  79. package/dist/cloudflare/usage.d.ts +77 -0
  80. package/dist/cloudflare/usage.d.ts.map +1 -0
  81. package/dist/config/compiler.d.ts +146 -0
  82. package/dist/config/compiler.d.ts.map +1 -0
  83. package/dist/config/define.d.ts +44 -0
  84. package/dist/config/define.d.ts.map +1 -0
  85. package/dist/config/index.d.ts +6 -0
  86. package/dist/config/index.d.ts.map +1 -0
  87. package/dist/config/loader.d.ts +52 -0
  88. package/dist/config/loader.d.ts.map +1 -0
  89. package/dist/config/ref.d.ts +160 -0
  90. package/dist/config/ref.d.ts.map +1 -0
  91. package/dist/config/schema.d.ts +3318 -0
  92. package/dist/config/schema.d.ts.map +1 -0
  93. package/dist/decorators/durable-object.d.ts +59 -0
  94. package/dist/decorators/durable-object.d.ts.map +1 -0
  95. package/dist/decorators/index.d.ts +3 -0
  96. package/dist/decorators/index.d.ts.map +1 -0
  97. package/dist/decorators/index.js +9 -0
  98. package/dist/deploy-nhceck39.js +70 -0
  99. package/dist/dev-qnxet3j9.js +2096 -0
  100. package/dist/dev-server/index.d.ts +2 -0
  101. package/dist/dev-server/index.d.ts.map +1 -0
  102. package/dist/dev-server/server.d.ts +30 -0
  103. package/dist/dev-server/server.d.ts.map +1 -0
  104. package/dist/doctor-e8fy6fj5.js +186 -0
  105. package/dist/durable-object-t4kbb0yt.js +13 -0
  106. package/dist/env.d.ts +48 -0
  107. package/dist/env.d.ts.map +1 -0
  108. package/dist/index-07q6yxyc.js +168 -0
  109. package/dist/index-1xpj0m4r.js +57 -0
  110. package/dist/index-37x76zdn.js +4 -0
  111. package/dist/index-3t6rypgc.js +13 -0
  112. package/dist/index-67qcae0f.js +183 -0
  113. package/dist/index-a855bdsx.js +18 -0
  114. package/dist/index-d8bdkx2h.js +109 -0
  115. package/dist/index-ep3445yc.js +2225 -0
  116. package/dist/index-gz1gndna.js +307 -0
  117. package/dist/index-hcex3rgh.js +266 -0
  118. package/dist/index-m2q41jwa.js +462 -0
  119. package/dist/index-n7rs26ft.js +77 -0
  120. package/dist/index-pf5s73n9.js +1413 -0
  121. package/dist/index-rbht7m9r.js +36 -0
  122. package/dist/index-tfyxa77h.js +850 -0
  123. package/dist/index-tk6ej9dj.js +94 -0
  124. package/dist/index-z14anrqp.js +226 -0
  125. package/dist/index.d.ts +13 -0
  126. package/dist/index.d.ts.map +1 -0
  127. package/dist/index.js +298 -0
  128. package/dist/init-f9mgmew3.js +186 -0
  129. package/dist/remote-q59qk463.js +97 -0
  130. package/dist/runtime/context.d.ts +46 -0
  131. package/dist/runtime/context.d.ts.map +1 -0
  132. package/dist/runtime/exports.d.ts +118 -0
  133. package/dist/runtime/exports.d.ts.map +1 -0
  134. package/dist/runtime/index.d.ts +4 -0
  135. package/dist/runtime/index.d.ts.map +1 -0
  136. package/dist/runtime/index.js +111 -0
  137. package/dist/runtime/middleware.d.ts +82 -0
  138. package/dist/runtime/middleware.d.ts.map +1 -0
  139. package/dist/runtime/validation.d.ts +37 -0
  140. package/dist/runtime/validation.d.ts.map +1 -0
  141. package/dist/sveltekit/index.d.ts +2 -0
  142. package/dist/sveltekit/index.d.ts.map +1 -0
  143. package/dist/sveltekit/index.js +182 -0
  144. package/dist/sveltekit/platform.d.ts +141 -0
  145. package/dist/sveltekit/platform.d.ts.map +1 -0
  146. package/dist/test/bridge-context.d.ts +73 -0
  147. package/dist/test/bridge-context.d.ts.map +1 -0
  148. package/dist/test/cf.d.ts +130 -0
  149. package/dist/test/cf.d.ts.map +1 -0
  150. package/dist/test/email.d.ts +75 -0
  151. package/dist/test/email.d.ts.map +1 -0
  152. package/dist/test/index.d.ts +22 -0
  153. package/dist/test/index.d.ts.map +1 -0
  154. package/dist/test/index.js +71 -0
  155. package/dist/test/multi-worker-context.d.ts +114 -0
  156. package/dist/test/multi-worker-context.d.ts.map +1 -0
  157. package/dist/test/queue.d.ts +74 -0
  158. package/dist/test/queue.d.ts.map +1 -0
  159. package/dist/test/remote-ai.d.ts +6 -0
  160. package/dist/test/remote-ai.d.ts.map +1 -0
  161. package/dist/test/remote-vectorize.d.ts +6 -0
  162. package/dist/test/remote-vectorize.d.ts.map +1 -0
  163. package/dist/test/resolve-service-bindings.d.ts +68 -0
  164. package/dist/test/resolve-service-bindings.d.ts.map +1 -0
  165. package/dist/test/scheduled.d.ts +58 -0
  166. package/dist/test/scheduled.d.ts.map +1 -0
  167. package/dist/test/should-skip.d.ts +50 -0
  168. package/dist/test/should-skip.d.ts.map +1 -0
  169. package/dist/test/simple-context.d.ts +43 -0
  170. package/dist/test/simple-context.d.ts.map +1 -0
  171. package/dist/test/tail.d.ts +86 -0
  172. package/dist/test/tail.d.ts.map +1 -0
  173. package/dist/test/utilities.d.ts +99 -0
  174. package/dist/test/utilities.d.ts.map +1 -0
  175. package/dist/test/worker.d.ts +76 -0
  176. package/dist/test/worker.d.ts.map +1 -0
  177. package/dist/transform/durable-object.d.ts +46 -0
  178. package/dist/transform/durable-object.d.ts.map +1 -0
  179. package/dist/transform/index.d.ts +3 -0
  180. package/dist/transform/index.d.ts.map +1 -0
  181. package/dist/transform/worker-entrypoint.d.ts +66 -0
  182. package/dist/transform/worker-entrypoint.d.ts.map +1 -0
  183. package/dist/types-5nyrz1sz.js +454 -0
  184. package/dist/utils/entrypoint-discovery.d.ts +29 -0
  185. package/dist/utils/entrypoint-discovery.d.ts.map +1 -0
  186. package/dist/utils/glob.d.ts +33 -0
  187. package/dist/utils/glob.d.ts.map +1 -0
  188. package/dist/utils/resolve-package.d.ts +10 -0
  189. package/dist/utils/resolve-package.d.ts.map +1 -0
  190. package/dist/vite/index.d.ts +3 -0
  191. package/dist/vite/index.d.ts.map +1 -0
  192. package/dist/vite/index.js +339 -0
  193. package/dist/vite/plugin.d.ts +138 -0
  194. package/dist/vite/plugin.d.ts.map +1 -0
  195. package/dist/worker-entrypoint-m9th0rg0.js +13 -0
  196. package/dist/workerName.d.ts +17 -0
  197. package/dist/workerName.d.ts.map +1 -0
  198. package/package.json +111 -1
@@ -0,0 +1,462 @@
1
+ import {
2
+ BinaryFlags,
3
+ BinaryKind,
4
+ base64Decode,
5
+ base64Encode,
6
+ decodeBinaryFrame,
7
+ deserializeValue,
8
+ encodeBinaryFrame,
9
+ parseJsonMsg,
10
+ serializeValue,
11
+ stringifyJsonMsg
12
+ } from "./index-pf5s73n9.js";
13
+
14
+ // src/bridge/server.ts
15
+ var server_default = {
16
+ async fetch(request, env, ctx) {
17
+ const url = new URL(request.url);
18
+ if (request.headers.get("Upgrade") === "websocket") {
19
+ return handleWebSocket(request, env, ctx);
20
+ }
21
+ if (url.pathname.startsWith("/_devflare/transfer/")) {
22
+ return handleHttpTransfer(request, env, url);
23
+ }
24
+ if (url.pathname === "/_devflare/health") {
25
+ return new Response(JSON.stringify({ ok: true, bindings: Object.keys(env) }), {
26
+ headers: { "Content-Type": "application/json" }
27
+ });
28
+ }
29
+ return new Response("Devflare Bridge Gateway", { status: 200 });
30
+ }
31
+ };
32
+ async function handleWebSocket(request, env, ctx) {
33
+ const { 0: client, 1: server } = new WebSocketPair;
34
+ const activeStreams = new Map;
35
+ const wsProxies = new Map;
36
+ const incomingStreams = new Map;
37
+ server.accept();
38
+ server.addEventListener("message", async (event) => {
39
+ try {
40
+ if (typeof event.data === "string") {
41
+ await handleJsonMessage(event.data, server, env, ctx, activeStreams, wsProxies, incomingStreams);
42
+ } else if (event.data instanceof ArrayBuffer) {
43
+ handleBinaryMessage(new Uint8Array(event.data), server, wsProxies, incomingStreams);
44
+ }
45
+ } catch {}
46
+ });
47
+ server.addEventListener("close", () => {
48
+ for (const [_sid, stream] of activeStreams) {
49
+ stream.reader.cancel();
50
+ }
51
+ activeStreams.clear();
52
+ for (const [_wid, proxy] of wsProxies) {
53
+ proxy.doWs.close();
54
+ }
55
+ wsProxies.clear();
56
+ });
57
+ return new Response(null, { status: 101, webSocket: client });
58
+ }
59
+ async function handleJsonMessage(data, ws, env, ctx, activeStreams, wsProxies, incomingStreams) {
60
+ const msg = parseJsonMsg(data);
61
+ switch (msg.t) {
62
+ case "rpc.call":
63
+ await handleRpcCall(msg, ws, env, ctx, activeStreams, incomingStreams);
64
+ break;
65
+ case "stream.pull":
66
+ await handleStreamPull(msg, ws, activeStreams);
67
+ break;
68
+ case "stream.open":
69
+ handleStreamOpen(msg, incomingStreams);
70
+ break;
71
+ case "stream.end":
72
+ handleStreamEnd(msg, incomingStreams);
73
+ break;
74
+ case "stream.abort":
75
+ handleStreamAbort(msg, incomingStreams);
76
+ break;
77
+ case "ws.open":
78
+ await handleWsOpen(msg, ws, env, wsProxies);
79
+ break;
80
+ case "ws.close":
81
+ handleWsClose(msg, wsProxies);
82
+ break;
83
+ }
84
+ }
85
+ async function handleRpcCall(msg, ws, env, ctx, activeStreams, incomingStreams) {
86
+ try {
87
+ const getStream = (sid) => incomingStreams.get(sid)?.stream ?? null;
88
+ const params = deserializeValue(msg.params, getStream);
89
+ const result = await executeRpcMethod(msg.method, params, env, ctx);
90
+ const { value: serializedResult, streams } = await serializeValue(result);
91
+ for (const streamRef of streams) {
92
+ activeStreams.set(streamRef.sid, {
93
+ reader: streamRef.stream.getReader(),
94
+ seq: 0
95
+ });
96
+ }
97
+ const response = {
98
+ t: "rpc.ok",
99
+ id: msg.id,
100
+ result: serializedResult
101
+ };
102
+ ws.send(stringifyJsonMsg(response));
103
+ } catch (error) {
104
+ const response = {
105
+ t: "rpc.err",
106
+ id: msg.id,
107
+ error: {
108
+ code: error.code ?? "INTERNAL_ERROR",
109
+ message: error instanceof Error ? error.message : String(error)
110
+ }
111
+ };
112
+ ws.send(stringifyJsonMsg(response));
113
+ }
114
+ }
115
+ async function executeRpcMethod(method, params, env, ctx) {
116
+ const parts = method.split(".");
117
+ if (parts.length < 2) {
118
+ throw new Error(`Invalid method format: ${method}`);
119
+ }
120
+ const bindingName = parts[0];
121
+ const operation = parts.slice(1).join(".");
122
+ const binding = env[bindingName];
123
+ if (!binding) {
124
+ throw new Error(`Binding not found: ${bindingName}`);
125
+ }
126
+ switch (operation) {
127
+ case "get":
128
+ return binding.get(params[0], params[1]);
129
+ case "put":
130
+ return binding.put(params[0], params[1], params[2]);
131
+ case "delete":
132
+ return binding.delete(params[0]);
133
+ case "list":
134
+ return binding.list(params[0]);
135
+ case "getWithMetadata":
136
+ return binding.getWithMetadata(params[0], params[1]);
137
+ case "head":
138
+ return serializeR2Object(await binding.head(params[0]));
139
+ case "r2.get":
140
+ return serializeR2ObjectBody(await binding.get(params[0], params[1]));
141
+ case "r2.put":
142
+ return binding.put(params[0], params[1], params[2]);
143
+ case "r2.delete":
144
+ return binding.delete(params[0]);
145
+ case "r2.list":
146
+ return binding.list(params[0]);
147
+ case "prepare":
148
+ return serializeD1Statement(binding.prepare(params[0]));
149
+ case "batch":
150
+ return binding.batch(params[0]);
151
+ case "exec":
152
+ return binding.exec(params[0]);
153
+ case "dump":
154
+ return binding.dump();
155
+ case "stmt.bind":
156
+ return { __type: "D1Statement", sql: params[0], bindings: params.slice(1) };
157
+ case "stmt.first":
158
+ return executeD1Statement(binding, params[0], params.slice(1), "first", params[params.length - 1]);
159
+ case "stmt.all":
160
+ return executeD1Statement(binding, params[0], params.slice(1), "all");
161
+ case "stmt.run":
162
+ return executeD1Statement(binding, params[0], params.slice(1), "run");
163
+ case "stmt.raw":
164
+ return executeD1Statement(binding, params[0], params.slice(1), "raw", params[params.length - 1]);
165
+ case "idFromName":
166
+ return serializeDOId(binding.idFromName(params[0]));
167
+ case "idFromString":
168
+ return serializeDOId(binding.idFromString(params[0]));
169
+ case "newUniqueId":
170
+ return serializeDOId(binding.newUniqueId(params[0]));
171
+ case "get":
172
+ const doId = deserializeDOId(params[0], binding);
173
+ const stub = binding.get(doId);
174
+ return { __type: "DOStub", binding: bindingName, id: params[0] };
175
+ case "stub.fetch":
176
+ return executeDoFetch(env, params[0], params[1], params[2]);
177
+ case "stub.rpc":
178
+ return executeDoRpc(env, params[0], params[1], params[2], params[3]);
179
+ case "send":
180
+ return binding.send(params[0], params[1]);
181
+ case "sendBatch":
182
+ return binding.sendBatch(params[0], params[1]);
183
+ case "run":
184
+ if (typeof binding.run === "function") {
185
+ return binding.run(params[0], params[1]);
186
+ }
187
+ break;
188
+ default:
189
+ throw new Error(`Unknown operation: ${method}`);
190
+ }
191
+ }
192
+ function serializeR2Object(obj) {
193
+ if (!obj)
194
+ return null;
195
+ return {
196
+ __type: "R2Object",
197
+ key: obj.key,
198
+ version: obj.version,
199
+ size: obj.size,
200
+ etag: obj.etag,
201
+ httpEtag: obj.httpEtag,
202
+ checksums: obj.checksums,
203
+ uploaded: obj.uploaded?.toISOString(),
204
+ httpMetadata: obj.httpMetadata,
205
+ customMetadata: obj.customMetadata,
206
+ range: obj.range,
207
+ storageClass: obj.storageClass
208
+ };
209
+ }
210
+ async function serializeR2ObjectBody(obj) {
211
+ if (!obj)
212
+ return null;
213
+ const hasBody = "body" in obj || "arrayBuffer" in obj;
214
+ if (!hasBody) {
215
+ return serializeR2Object(obj);
216
+ }
217
+ const body = obj;
218
+ const arrayBuffer = await body.arrayBuffer();
219
+ const bodyData = base64Encode(new Uint8Array(arrayBuffer));
220
+ return {
221
+ __type: "R2ObjectBody",
222
+ key: body.key,
223
+ version: body.version,
224
+ size: body.size,
225
+ etag: body.etag,
226
+ httpEtag: body.httpEtag,
227
+ checksums: body.checksums,
228
+ uploaded: body.uploaded?.toISOString(),
229
+ httpMetadata: body.httpMetadata,
230
+ customMetadata: body.customMetadata,
231
+ range: body.range,
232
+ storageClass: body.storageClass,
233
+ bodyData
234
+ };
235
+ }
236
+ function serializeD1Statement(stmt) {
237
+ return { __type: "D1Statement" };
238
+ }
239
+ async function executeD1Statement(db, sql, bindings, mode, extra) {
240
+ let stmt = db.prepare(sql);
241
+ if (bindings.length > 0) {
242
+ stmt = stmt.bind(...bindings);
243
+ }
244
+ switch (mode) {
245
+ case "first":
246
+ return typeof extra === "string" ? stmt.first(extra) : stmt.first();
247
+ case "all":
248
+ return stmt.all();
249
+ case "run":
250
+ return stmt.run();
251
+ case "raw":
252
+ return stmt.raw(extra);
253
+ }
254
+ }
255
+ function serializeDOId(id) {
256
+ return { __type: "DOId", hex: id.toString() };
257
+ }
258
+ function deserializeDOId(serialized, ns) {
259
+ if (serialized.__type === "DOId") {
260
+ return ns.idFromString(serialized.hex);
261
+ }
262
+ throw new Error("Invalid DOId format");
263
+ }
264
+ async function executeDoFetch(env, bindingName, idSerialized, requestSerialized) {
265
+ const binding = env[bindingName];
266
+ const id = deserializeDOId(idSerialized, binding);
267
+ const stub = binding.get(id);
268
+ const bodyBytes = requestSerialized.body?.type === "bytes" ? base64Decode(requestSerialized.body.data) : undefined;
269
+ const bodyBuffer = bodyBytes ? bodyBytes.buffer.slice(bodyBytes.byteOffset, bodyBytes.byteOffset + bodyBytes.byteLength) : undefined;
270
+ const request = new Request(requestSerialized.url, {
271
+ method: requestSerialized.method,
272
+ headers: requestSerialized.headers,
273
+ body: bodyBuffer
274
+ });
275
+ return stub.fetch(request);
276
+ }
277
+ async function executeDoRpc(env, bindingName, idSerialized, methodName, args) {
278
+ const binding = env[bindingName];
279
+ const id = deserializeDOId(idSerialized, binding);
280
+ const stub = binding.get(id);
281
+ const response = await stub.fetch(new Request("http://do/_rpc", {
282
+ method: "POST",
283
+ headers: { "Content-Type": "application/json" },
284
+ body: JSON.stringify({ method: methodName, params: args })
285
+ }));
286
+ const result = await response.json();
287
+ if (!result.ok) {
288
+ throw new Error(result.error?.message ?? "DO RPC failed");
289
+ }
290
+ return result.result;
291
+ }
292
+ async function handleStreamPull(msg, ws, activeStreams) {
293
+ const stream = activeStreams.get(msg.sid);
294
+ if (!stream)
295
+ return;
296
+ let sent = 0;
297
+ const maxBytes = msg.creditBytes;
298
+ try {
299
+ while (sent < maxBytes) {
300
+ const { done, value } = await stream.reader.read();
301
+ if (done) {
302
+ ws.send(stringifyJsonMsg({ t: "stream.end", sid: msg.sid }));
303
+ activeStreams.delete(msg.sid);
304
+ break;
305
+ }
306
+ if (value) {
307
+ const frame = encodeBinaryFrame(BinaryKind.StreamChunk, msg.sid, stream.seq++, 0, value);
308
+ ws.send(frame);
309
+ sent += value.byteLength;
310
+ }
311
+ }
312
+ } catch (error) {
313
+ ws.send(stringifyJsonMsg({
314
+ t: "stream.abort",
315
+ sid: msg.sid,
316
+ error: String(error)
317
+ }));
318
+ activeStreams.delete(msg.sid);
319
+ }
320
+ }
321
+ function handleStreamOpen(msg, incomingStreams) {
322
+ let controller;
323
+ const stream = new ReadableStream({
324
+ start(c) {
325
+ controller = c;
326
+ }
327
+ });
328
+ incomingStreams.set(msg.sid, { controller, stream });
329
+ }
330
+ function handleStreamEnd(msg, incomingStreams) {
331
+ const stream = incomingStreams.get(msg.sid);
332
+ if (stream) {
333
+ stream.controller.close();
334
+ incomingStreams.delete(msg.sid);
335
+ }
336
+ }
337
+ function handleStreamAbort(msg, incomingStreams) {
338
+ const stream = incomingStreams.get(msg.sid);
339
+ if (stream) {
340
+ stream.controller.error(new Error(msg.error ?? "Stream aborted"));
341
+ incomingStreams.delete(msg.sid);
342
+ }
343
+ }
344
+ function handleBinaryMessage(frame, ws, wsProxies, incomingStreams) {
345
+ const decoded = decodeBinaryFrame(frame);
346
+ switch (decoded.kind) {
347
+ case BinaryKind.StreamChunk:
348
+ const stream = incomingStreams.get(decoded.id);
349
+ if (stream) {
350
+ stream.controller.enqueue(decoded.payload);
351
+ }
352
+ break;
353
+ case BinaryKind.WsData:
354
+ const proxy = wsProxies.get(decoded.id);
355
+ if (proxy) {
356
+ const isText = (decoded.flags & BinaryFlags.TEXT) !== 0;
357
+ if (isText) {
358
+ proxy.doWs.send(new TextDecoder().decode(decoded.payload));
359
+ } else {
360
+ proxy.doWs.send(decoded.payload);
361
+ }
362
+ }
363
+ break;
364
+ }
365
+ }
366
+ async function handleWsOpen(msg, ws, env, wsProxies) {
367
+ try {
368
+ const binding = env[msg.target.binding];
369
+ const id = binding.idFromString(msg.target.id);
370
+ const stub = binding.get(id);
371
+ const headers = new Headers(msg.target.headers ?? []);
372
+ headers.set("Upgrade", "websocket");
373
+ const request = new Request(msg.target.url, {
374
+ method: "GET",
375
+ headers
376
+ });
377
+ const response = await stub.fetch(request);
378
+ const doWs = response.webSocket;
379
+ if (!doWs) {
380
+ ws.send(stringifyJsonMsg({
381
+ t: "rpc.err",
382
+ id: `ws_${msg.wid}`,
383
+ error: { code: "WS_UPGRADE_FAILED", message: "DO did not return WebSocket" }
384
+ }));
385
+ return;
386
+ }
387
+ doWs.accept();
388
+ const proxy = {
389
+ doWs,
390
+ clientWid: msg.wid
391
+ };
392
+ wsProxies.set(msg.wid, proxy);
393
+ doWs.addEventListener("message", (event) => {
394
+ const isText = typeof event.data === "string";
395
+ const payload = isText ? new TextEncoder().encode(event.data) : new Uint8Array(event.data);
396
+ const flags = isText ? BinaryFlags.TEXT : 0;
397
+ const frame = encodeBinaryFrame(BinaryKind.WsData, msg.wid, 0, flags, payload);
398
+ ws.send(frame);
399
+ });
400
+ doWs.addEventListener("close", (event) => {
401
+ ws.send(stringifyJsonMsg({
402
+ t: "ws.close",
403
+ wid: msg.wid,
404
+ code: event.code,
405
+ reason: event.reason
406
+ }));
407
+ wsProxies.delete(msg.wid);
408
+ });
409
+ ws.send(stringifyJsonMsg({ t: "ws.opened", wid: msg.wid }));
410
+ } catch (error) {
411
+ ws.send(stringifyJsonMsg({
412
+ t: "rpc.err",
413
+ id: `ws_${msg.wid}`,
414
+ error: {
415
+ code: "WS_OPEN_FAILED",
416
+ message: error instanceof Error ? error.message : String(error)
417
+ }
418
+ }));
419
+ }
420
+ }
421
+ function handleWsClose(msg, wsProxies) {
422
+ const proxy = wsProxies.get(msg.wid);
423
+ if (proxy) {
424
+ proxy.doWs.close(msg.code, msg.reason);
425
+ wsProxies.delete(msg.wid);
426
+ }
427
+ }
428
+ async function handleHttpTransfer(request, env, url) {
429
+ const transferId = url.pathname.split("/").pop();
430
+ if (request.method === "PUT" || request.method === "POST") {
431
+ const [binding, ...keyParts] = (transferId ?? "").split(":");
432
+ const key = keyParts.join(":");
433
+ const bucket = env[binding];
434
+ if (!bucket) {
435
+ return new Response("Binding not found", { status: 404 });
436
+ }
437
+ const result = await bucket.put(key, request.body);
438
+ return new Response(JSON.stringify(result), {
439
+ headers: { "Content-Type": "application/json" }
440
+ });
441
+ }
442
+ if (request.method === "GET") {
443
+ const [binding, ...keyParts] = (transferId ?? "").split(":");
444
+ const key = keyParts.join(":");
445
+ const bucket = env[binding];
446
+ if (!bucket) {
447
+ return new Response("Binding not found", { status: 404 });
448
+ }
449
+ const object = await bucket.get(key);
450
+ if (!object) {
451
+ return new Response("Object not found", { status: 404 });
452
+ }
453
+ return new Response(object.body, {
454
+ headers: {
455
+ "Content-Type": object.httpMetadata?.contentType ?? "application/octet-stream",
456
+ "Content-Length": String(object.size)
457
+ }
458
+ });
459
+ }
460
+ return new Response("Method not allowed", { status: 405 });
461
+ }
462
+ export { server_default };
@@ -0,0 +1,77 @@
1
+ import {
2
+ canProceedWithTest,
3
+ clearGlobalDefaultAccountId,
4
+ getAccountById,
5
+ getAccountSummary,
6
+ getAccounts,
7
+ getAllServiceStatus,
8
+ getAllUsageSummaries,
9
+ getApiToken,
10
+ getEffectiveAccountId,
11
+ getGlobalDefaultAccountId,
12
+ getLimits,
13
+ getPrimaryAccount,
14
+ getServiceStatus,
15
+ getUsage,
16
+ getUsageSummary,
17
+ getWorkspaceAccountId,
18
+ getWranglerAuth,
19
+ hasService,
20
+ hasWranglerConfig,
21
+ isAuthenticated,
22
+ isWithinLimits,
23
+ listAIModels,
24
+ listD1Databases,
25
+ listKVNamespaces,
26
+ listR2Buckets,
27
+ listVectorizeIndexes,
28
+ listWorkers,
29
+ recordTestUsage,
30
+ recordUsage,
31
+ resetUsage,
32
+ setGlobalDefaultAccountId,
33
+ setLimits,
34
+ setLimitsEnabled,
35
+ setWorkspaceAccountId,
36
+ shouldSkip
37
+ } from "./index-tfyxa77h.js";
38
+
39
+ // src/cloudflare/index.ts
40
+ var account = {
41
+ isAuthenticated,
42
+ hasWranglerConfig,
43
+ getApiToken,
44
+ getWranglerAuth,
45
+ getAccounts,
46
+ getPrimaryAccount,
47
+ getAccountById,
48
+ getAccountSummary,
49
+ workers: listWorkers,
50
+ kv: listKVNamespaces,
51
+ d1: listD1Databases,
52
+ r2: listR2Buckets,
53
+ vectorize: listVectorizeIndexes,
54
+ ai: listAIModels,
55
+ getServiceStatus,
56
+ getAllServiceStatus,
57
+ hasService,
58
+ getUsage,
59
+ recordUsage,
60
+ resetUsage,
61
+ getAllUsageSummaries,
62
+ getUsageSummary,
63
+ getLimits,
64
+ setLimits,
65
+ setLimitsEnabled,
66
+ isWithinLimits,
67
+ canProceedWithTest,
68
+ recordTestUsage,
69
+ shouldSkip,
70
+ getGlobalDefaultAccountId,
71
+ setGlobalDefaultAccountId,
72
+ getWorkspaceAccountId,
73
+ setWorkspaceAccountId,
74
+ getEffectiveAccountId,
75
+ clearGlobalDefaultAccountId
76
+ };
77
+ export { account };