alchemy 2.0.0-beta.22 → 2.0.0-beta.24
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/bin/alchemy.js +12590 -2452
- package/bin/alchemy.js.map +1 -1
- package/bin/alchemy.ts +2 -0
- package/bin/cli.js +18 -0
- package/bin/commands/bootstrap.ts +88 -4
- package/bin/commands/deploy.ts +54 -20
- package/bin/commands/dev.ts +45 -0
- package/bin/commands/logs.ts +1 -1
- package/bin/commands/tail.ts +1 -1
- package/bin/exec.ts +22 -0
- package/lib/AWS/Lambda/Function.d.ts.map +1 -1
- package/lib/AWS/Lambda/Function.js +25 -21
- package/lib/AWS/Lambda/Function.js.map +1 -1
- package/lib/AWS/Lambda/HttpServer.d.ts.map +1 -1
- package/lib/AWS/Lambda/HttpServer.js +3 -1
- package/lib/AWS/Lambda/HttpServer.js.map +1 -1
- package/lib/AdoptPolicy.d.ts +2 -2
- package/lib/AdoptPolicy.d.ts.map +1 -1
- package/lib/AdoptPolicy.js.map +1 -1
- package/lib/AlchemyContext.d.ts +1 -0
- package/lib/AlchemyContext.d.ts.map +1 -1
- package/lib/AlchemyContext.js +1 -0
- package/lib/AlchemyContext.js.map +1 -1
- package/lib/Build/Command.d.ts.map +1 -1
- package/lib/Build/Command.js +8 -1
- package/lib/Build/Command.js.map +1 -1
- package/lib/Bundle/Bundle.d.ts +21 -9
- package/lib/Bundle/Bundle.d.ts.map +1 -1
- package/lib/Bundle/Bundle.js +29 -15
- package/lib/Bundle/Bundle.js.map +1 -1
- package/lib/Cloudflare/Container/Container.d.ts +55 -2
- package/lib/Cloudflare/Container/Container.d.ts.map +1 -1
- package/lib/Cloudflare/Container/Container.js +55 -2
- package/lib/Cloudflare/Container/Container.js.map +1 -1
- package/lib/Cloudflare/D1/D1Export.d.ts.map +1 -1
- package/lib/Cloudflare/D1/D1Export.js.map +1 -1
- package/lib/Cloudflare/D1/D1SqlFile.d.ts.map +1 -1
- package/lib/Cloudflare/D1/D1SqlFile.js.map +1 -1
- package/lib/Cloudflare/Local/Sidecar.d.ts +27 -0
- package/lib/Cloudflare/Local/Sidecar.d.ts.map +1 -0
- package/lib/Cloudflare/Local/Sidecar.js +24 -0
- package/lib/Cloudflare/Local/Sidecar.js.map +1 -0
- package/lib/Cloudflare/Local/SidecarHandlers.d.ts +5 -0
- package/lib/Cloudflare/Local/SidecarHandlers.d.ts.map +1 -0
- package/lib/Cloudflare/Local/SidecarHandlers.js +119 -0
- package/lib/Cloudflare/Local/SidecarHandlers.js.map +1 -0
- package/lib/Cloudflare/Local/SidecarServer.d.ts +2 -0
- package/lib/Cloudflare/Local/SidecarServer.d.ts.map +1 -0
- package/lib/Cloudflare/Local/SidecarServer.js +27 -0
- package/lib/Cloudflare/Local/SidecarServer.js.map +1 -0
- package/lib/Cloudflare/Queue/Queue.d.ts +34 -4
- package/lib/Cloudflare/Queue/Queue.d.ts.map +1 -1
- package/lib/Cloudflare/Queue/Queue.js +34 -4
- package/lib/Cloudflare/Queue/Queue.js.map +1 -1
- package/lib/Cloudflare/Queue/QueueBinding.d.ts +33 -0
- package/lib/Cloudflare/Queue/QueueBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Queue/QueueBinding.js +33 -0
- package/lib/Cloudflare/Queue/QueueBinding.js.map +1 -1
- package/lib/Cloudflare/SecretsStore/Secret.d.ts.map +1 -1
- package/lib/Cloudflare/SecretsStore/Secret.js +55 -7
- package/lib/Cloudflare/SecretsStore/Secret.js.map +1 -1
- package/lib/Cloudflare/SecretsStore/SecretsStore.d.ts.map +1 -1
- package/lib/Cloudflare/SecretsStore/SecretsStore.js +35 -11
- package/lib/Cloudflare/SecretsStore/SecretsStore.js.map +1 -1
- package/lib/Cloudflare/StateStore/State.d.ts +35 -0
- package/lib/Cloudflare/StateStore/State.d.ts.map +1 -1
- package/lib/Cloudflare/StateStore/State.js +187 -45
- package/lib/Cloudflare/StateStore/State.js.map +1 -1
- package/lib/Cloudflare/StateStore/index.d.ts +1 -1
- package/lib/Cloudflare/StateStore/index.d.ts.map +1 -1
- package/lib/Cloudflare/StateStore/index.js +1 -1
- package/lib/Cloudflare/StateStore/index.js.map +1 -1
- package/lib/Cloudflare/Workers/Assets.d.ts +1 -1
- package/lib/Cloudflare/Workers/Assets.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Assets.js +6 -1
- package/lib/Cloudflare/Workers/Assets.js.map +1 -1
- package/lib/Cloudflare/Workers/Compatibility.d.ts +6 -0
- package/lib/Cloudflare/Workers/Compatibility.d.ts.map +1 -0
- package/lib/Cloudflare/Workers/Compatibility.js +10 -0
- package/lib/Cloudflare/Workers/Compatibility.js.map +1 -0
- package/lib/Cloudflare/Workers/DurableObjectNamespace.d.ts +103 -6
- package/lib/Cloudflare/Workers/DurableObjectNamespace.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectNamespace.js +103 -6
- package/lib/Cloudflare/Workers/DurableObjectNamespace.js.map +1 -1
- package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts +7 -0
- package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts.map +1 -0
- package/lib/Cloudflare/Workers/LocalWorkerProvider.js +81 -0
- package/lib/Cloudflare/Workers/LocalWorkerProvider.js.map +1 -0
- package/lib/Cloudflare/Workers/Worker.d.ts +3 -1
- package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Worker.js +54 -7
- package/lib/Cloudflare/Workers/Worker.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBundle.d.ts +31 -0
- package/lib/Cloudflare/Workers/WorkerBundle.d.ts.map +1 -0
- package/lib/Cloudflare/Workers/WorkerBundle.js +174 -0
- package/lib/Cloudflare/Workers/WorkerBundle.js.map +1 -0
- package/lib/Cloudflare/Workers/WorkerName.d.ts +3 -0
- package/lib/Cloudflare/Workers/WorkerName.d.ts.map +1 -0
- package/lib/Cloudflare/Workers/WorkerName.js +9 -0
- package/lib/Cloudflare/Workers/WorkerName.js.map +1 -0
- package/lib/Cloudflare/Workers/Workflow.d.ts +94 -0
- package/lib/Cloudflare/Workers/Workflow.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Workflow.js +94 -0
- package/lib/Cloudflare/Workers/Workflow.js.map +1 -1
- package/lib/Cloudflare/Workers/index.d.ts +1 -0
- package/lib/Cloudflare/Workers/index.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/index.js +1 -0
- package/lib/Cloudflare/Workers/index.js.map +1 -1
- package/lib/Platform.d.ts +1 -1
- package/lib/Platform.d.ts.map +1 -1
- package/lib/Platform.js +1 -1
- package/lib/Platform.js.map +1 -1
- package/lib/Sidecar/Lock.d.ts +24 -0
- package/lib/Sidecar/Lock.d.ts.map +1 -0
- package/lib/Sidecar/Lock.js +102 -0
- package/lib/Sidecar/Lock.js.map +1 -0
- package/lib/Sidecar/RpcClient.d.ts +15 -0
- package/lib/Sidecar/RpcClient.d.ts.map +1 -0
- package/lib/Sidecar/RpcClient.js +75 -0
- package/lib/Sidecar/RpcClient.js.map +1 -0
- package/lib/Sidecar/RpcHandler.d.ts +48 -0
- package/lib/Sidecar/RpcHandler.d.ts.map +1 -0
- package/lib/Sidecar/RpcHandler.js +64 -0
- package/lib/Sidecar/RpcHandler.js.map +1 -0
- package/lib/Sidecar/RpcPaths.d.ts +14 -0
- package/lib/Sidecar/RpcPaths.d.ts.map +1 -0
- package/lib/Sidecar/RpcPaths.js +22 -0
- package/lib/Sidecar/RpcPaths.js.map +1 -0
- package/lib/Sidecar/RpcServer.d.ts +10 -0
- package/lib/Sidecar/RpcServer.d.ts.map +1 -0
- package/lib/Sidecar/RpcServer.js +50 -0
- package/lib/Sidecar/RpcServer.js.map +1 -0
- package/lib/Sidecar/RpcTransport.d.ts +22 -0
- package/lib/Sidecar/RpcTransport.d.ts.map +1 -0
- package/lib/Sidecar/RpcTransport.js +81 -0
- package/lib/Sidecar/RpcTransport.js.map +1 -0
- package/lib/Telemetry/Metrics.d.ts +15 -0
- package/lib/Telemetry/Metrics.d.ts.map +1 -1
- package/lib/Telemetry/Metrics.js +20 -0
- package/lib/Telemetry/Metrics.js.map +1 -1
- package/lib/Util/PlatformServices.d.ts +3 -0
- package/lib/Util/PlatformServices.d.ts.map +1 -1
- package/lib/Util/PlatformServices.js +13 -0
- package/lib/Util/PlatformServices.js.map +1 -1
- package/lib/Util/layer-scoped.d.ts +16 -0
- package/lib/Util/layer-scoped.d.ts.map +1 -0
- package/lib/Util/layer-scoped.js +14 -0
- package/lib/Util/layer-scoped.js.map +1 -0
- package/package.json +4 -2
- package/src/AWS/Lambda/Function.ts +30 -24
- package/src/AWS/Lambda/HttpServer.ts +3 -1
- package/src/AdoptPolicy.ts +9 -9
- package/src/AlchemyContext.ts +2 -0
- package/src/Build/Command.ts +8 -1
- package/src/Bundle/Bundle.ts +65 -25
- package/src/Cloudflare/Container/Container.ts +55 -2
- package/src/Cloudflare/D1/D1Export.ts +1 -5
- package/src/Cloudflare/D1/D1SqlFile.ts +1 -3
- package/src/Cloudflare/Local/Sidecar.ts +44 -0
- package/src/Cloudflare/Local/SidecarHandlers.ts +182 -0
- package/src/Cloudflare/Local/SidecarServer.ts +57 -0
- package/src/Cloudflare/Queue/Queue.ts +34 -4
- package/src/Cloudflare/Queue/QueueBinding.ts +33 -0
- package/src/Cloudflare/SecretsStore/Secret.ts +78 -7
- package/src/Cloudflare/SecretsStore/SecretsStore.ts +47 -12
- package/src/Cloudflare/StateStore/State.ts +281 -64
- package/src/Cloudflare/StateStore/index.ts +1 -1
- package/src/Cloudflare/Workers/Assets.ts +10 -1
- package/src/Cloudflare/Workers/Compatibility.ts +12 -0
- package/src/Cloudflare/Workers/DurableObjectNamespace.ts +103 -6
- package/src/Cloudflare/Workers/LocalWorkerProvider.ts +93 -0
- package/src/Cloudflare/Workers/Worker.ts +102 -19
- package/src/Cloudflare/Workers/WorkerBundle.ts +234 -0
- package/src/Cloudflare/Workers/WorkerName.ts +10 -0
- package/src/Cloudflare/Workers/Workflow.ts +94 -0
- package/src/Cloudflare/Workers/index.ts +1 -0
- package/src/Platform.ts +2 -2
- package/src/Sidecar/Lock.ts +190 -0
- package/src/Sidecar/RpcClient.ts +141 -0
- package/src/Sidecar/RpcHandler.ts +169 -0
- package/src/Sidecar/RpcPaths.ts +29 -0
- package/src/Sidecar/RpcServer.ts +80 -0
- package/src/Sidecar/RpcTransport.ts +85 -0
- package/src/Telemetry/Metrics.ts +38 -0
- package/src/Util/PlatformServices.ts +19 -0
- package/src/Util/layer-scoped.ts +25 -0
|
@@ -209,6 +209,51 @@ export declare class DurableObjectNamespaceScope extends DurableObjectNamespaceS
|
|
|
209
209
|
* };
|
|
210
210
|
* ```
|
|
211
211
|
*
|
|
212
|
+
* @section Returning Streams from RPC
|
|
213
|
+
* RPC methods can return an Effect `Stream` and the caller will see
|
|
214
|
+
* the chunks as they're produced. Combine with `Stream.schedule` to
|
|
215
|
+
* pace emission, or with `Stream.fromQueue` to bridge an inbound
|
|
216
|
+
* subscription.
|
|
217
|
+
*
|
|
218
|
+
* @example Streaming sequential numbers
|
|
219
|
+
* ```typescript
|
|
220
|
+
* import * as Schedule from "effect/Schedule";
|
|
221
|
+
* import * as Stream from "effect/Stream";
|
|
222
|
+
*
|
|
223
|
+
* return {
|
|
224
|
+
* tick: (n: number) =>
|
|
225
|
+
* Stream.iterate(0, (i) => i + 1).pipe(
|
|
226
|
+
* Stream.take(n),
|
|
227
|
+
* Stream.schedule(Schedule.spaced("100 millis")),
|
|
228
|
+
* ),
|
|
229
|
+
* };
|
|
230
|
+
* ```
|
|
231
|
+
*
|
|
232
|
+
* @example Forwarding the stream as a chunked HTTP response
|
|
233
|
+
* ```typescript
|
|
234
|
+
* // in a Worker fetch handler
|
|
235
|
+
* const counter = counters.getByName("tick");
|
|
236
|
+
* const stream = counter.tick(5).pipe(
|
|
237
|
+
* Stream.map((i) => `${i}\n`),
|
|
238
|
+
* Stream.encodeText,
|
|
239
|
+
* );
|
|
240
|
+
* return HttpServerResponse.stream(stream, {
|
|
241
|
+
* headers: { "content-type": "text/plain" },
|
|
242
|
+
* });
|
|
243
|
+
* ```
|
|
244
|
+
*
|
|
245
|
+
* @section Worker → DO HTTP forwarding
|
|
246
|
+
* In addition to RPC methods, the typed stub exposes a `fetch`
|
|
247
|
+
* method that forwards an `HttpServerRequest` straight to the DO.
|
|
248
|
+
* The DO's own `fetch` Effect produces the response — useful for
|
|
249
|
+
* WebSocket upgrades and other request-shaped interactions.
|
|
250
|
+
*
|
|
251
|
+
* @example Forwarding an HTTP request to a DO
|
|
252
|
+
* ```typescript
|
|
253
|
+
* const room = rooms.getByName(roomId);
|
|
254
|
+
* return yield* room.fetch(request);
|
|
255
|
+
* ```
|
|
256
|
+
*
|
|
212
257
|
* @section Accessing Instance State
|
|
213
258
|
* Each Durable Object instance has its own transactional key-value
|
|
214
259
|
* storage via `Cloudflare.DurableObjectState`. Use `storage.get` and
|
|
@@ -264,14 +309,66 @@ export declare class DurableObjectNamespaceScope extends DurableObjectNamespaceS
|
|
|
264
309
|
* ```
|
|
265
310
|
*
|
|
266
311
|
* @example Recovering sessions after hibernation
|
|
312
|
+
* Place the rehydration loop **inside the inner `Effect.gen`** so
|
|
313
|
+
* it runs every time the DO instance is reconstructed (including
|
|
314
|
+
* after Cloudflare wakes the DO from hibernation).
|
|
315
|
+
*
|
|
267
316
|
* ```typescript
|
|
268
|
-
*
|
|
269
|
-
*
|
|
317
|
+
* return Effect.gen(function* () {
|
|
318
|
+
* const state = yield* Cloudflare.DurableObjectState;
|
|
319
|
+
* const sessions = new Map<string, Cloudflare.DurableWebSocket>();
|
|
320
|
+
*
|
|
321
|
+
* // Rehydrate the in-memory session map after hibernation.
|
|
322
|
+
* for (const socket of yield* state.getWebSockets()) {
|
|
323
|
+
* const data = socket.deserializeAttachment<{ id: string }>();
|
|
324
|
+
* if (data) sessions.set(data.id, socket);
|
|
325
|
+
* }
|
|
270
326
|
*
|
|
271
|
-
*
|
|
272
|
-
*
|
|
273
|
-
*
|
|
274
|
-
*
|
|
327
|
+
* return {
|
|
328
|
+
* fetch: Effect.gen(function* () {
|
|
329
|
+
* const [response, socket] = yield* Cloudflare.upgrade();
|
|
330
|
+
* const id = crypto.randomUUID();
|
|
331
|
+
* socket.serializeAttachment({ id });
|
|
332
|
+
* sessions.set(id, socket);
|
|
333
|
+
* return response;
|
|
334
|
+
* }),
|
|
335
|
+
* webSocketMessage: Effect.fnUntraced(function* (socket, message) {
|
|
336
|
+
* const text =
|
|
337
|
+
* typeof message === "string" ? message : new TextDecoder().decode(message);
|
|
338
|
+
* for (const peer of sessions.values()) {
|
|
339
|
+
* yield* peer.send(text);
|
|
340
|
+
* }
|
|
341
|
+
* }),
|
|
342
|
+
* };
|
|
343
|
+
* });
|
|
344
|
+
* ```
|
|
345
|
+
*
|
|
346
|
+
* @section Scheduled Alarms
|
|
347
|
+
* Each Durable Object can have a single alarm timestamp. Alchemy
|
|
348
|
+
* layers a small SQLite-backed scheduler on top via
|
|
349
|
+
* `Cloudflare.scheduleEvent` and `Cloudflare.processScheduledEvents`,
|
|
350
|
+
* so you can register many named events with arbitrary payloads and
|
|
351
|
+
* fire them from a single `alarm` handler.
|
|
352
|
+
*
|
|
353
|
+
* @example Scheduling and processing events
|
|
354
|
+
* ```typescript
|
|
355
|
+
* // schedule from a request or message handler
|
|
356
|
+
* yield* Cloudflare.scheduleEvent(
|
|
357
|
+
* "reminder-1",
|
|
358
|
+
* new Date(Date.now() + 60_000),
|
|
359
|
+
* { message: "your meeting starts in a minute" },
|
|
360
|
+
* );
|
|
361
|
+
*
|
|
362
|
+
* return {
|
|
363
|
+
* alarm: () =>
|
|
364
|
+
* Effect.gen(function* () {
|
|
365
|
+
* const fired = yield* Cloudflare.processScheduledEvents;
|
|
366
|
+
* for (const event of fired) {
|
|
367
|
+
* const payload = event.payload as { message: string };
|
|
368
|
+
* // dispatch / broadcast / persist...
|
|
369
|
+
* }
|
|
370
|
+
* }),
|
|
371
|
+
* };
|
|
275
372
|
* ```
|
|
276
373
|
*
|
|
277
374
|
* @section Using from a Worker
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DurableObjectNamespace.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/DurableObjectNamespace.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"DurableObjectNamespace.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/DurableObjectNamespace.ts"],"names":[],"mappings":"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"}
|
|
@@ -163,6 +163,51 @@ export class DurableObjectNamespaceScope extends Context.Service()("Cloudflare.D
|
|
|
163
163
|
* };
|
|
164
164
|
* ```
|
|
165
165
|
*
|
|
166
|
+
* @section Returning Streams from RPC
|
|
167
|
+
* RPC methods can return an Effect `Stream` and the caller will see
|
|
168
|
+
* the chunks as they're produced. Combine with `Stream.schedule` to
|
|
169
|
+
* pace emission, or with `Stream.fromQueue` to bridge an inbound
|
|
170
|
+
* subscription.
|
|
171
|
+
*
|
|
172
|
+
* @example Streaming sequential numbers
|
|
173
|
+
* ```typescript
|
|
174
|
+
* import * as Schedule from "effect/Schedule";
|
|
175
|
+
* import * as Stream from "effect/Stream";
|
|
176
|
+
*
|
|
177
|
+
* return {
|
|
178
|
+
* tick: (n: number) =>
|
|
179
|
+
* Stream.iterate(0, (i) => i + 1).pipe(
|
|
180
|
+
* Stream.take(n),
|
|
181
|
+
* Stream.schedule(Schedule.spaced("100 millis")),
|
|
182
|
+
* ),
|
|
183
|
+
* };
|
|
184
|
+
* ```
|
|
185
|
+
*
|
|
186
|
+
* @example Forwarding the stream as a chunked HTTP response
|
|
187
|
+
* ```typescript
|
|
188
|
+
* // in a Worker fetch handler
|
|
189
|
+
* const counter = counters.getByName("tick");
|
|
190
|
+
* const stream = counter.tick(5).pipe(
|
|
191
|
+
* Stream.map((i) => `${i}\n`),
|
|
192
|
+
* Stream.encodeText,
|
|
193
|
+
* );
|
|
194
|
+
* return HttpServerResponse.stream(stream, {
|
|
195
|
+
* headers: { "content-type": "text/plain" },
|
|
196
|
+
* });
|
|
197
|
+
* ```
|
|
198
|
+
*
|
|
199
|
+
* @section Worker → DO HTTP forwarding
|
|
200
|
+
* In addition to RPC methods, the typed stub exposes a `fetch`
|
|
201
|
+
* method that forwards an `HttpServerRequest` straight to the DO.
|
|
202
|
+
* The DO's own `fetch` Effect produces the response — useful for
|
|
203
|
+
* WebSocket upgrades and other request-shaped interactions.
|
|
204
|
+
*
|
|
205
|
+
* @example Forwarding an HTTP request to a DO
|
|
206
|
+
* ```typescript
|
|
207
|
+
* const room = rooms.getByName(roomId);
|
|
208
|
+
* return yield* room.fetch(request);
|
|
209
|
+
* ```
|
|
210
|
+
*
|
|
166
211
|
* @section Accessing Instance State
|
|
167
212
|
* Each Durable Object instance has its own transactional key-value
|
|
168
213
|
* storage via `Cloudflare.DurableObjectState`. Use `storage.get` and
|
|
@@ -218,14 +263,66 @@ export class DurableObjectNamespaceScope extends Context.Service()("Cloudflare.D
|
|
|
218
263
|
* ```
|
|
219
264
|
*
|
|
220
265
|
* @example Recovering sessions after hibernation
|
|
266
|
+
* Place the rehydration loop **inside the inner `Effect.gen`** so
|
|
267
|
+
* it runs every time the DO instance is reconstructed (including
|
|
268
|
+
* after Cloudflare wakes the DO from hibernation).
|
|
269
|
+
*
|
|
221
270
|
* ```typescript
|
|
222
|
-
*
|
|
223
|
-
*
|
|
271
|
+
* return Effect.gen(function* () {
|
|
272
|
+
* const state = yield* Cloudflare.DurableObjectState;
|
|
273
|
+
* const sessions = new Map<string, Cloudflare.DurableWebSocket>();
|
|
274
|
+
*
|
|
275
|
+
* // Rehydrate the in-memory session map after hibernation.
|
|
276
|
+
* for (const socket of yield* state.getWebSockets()) {
|
|
277
|
+
* const data = socket.deserializeAttachment<{ id: string }>();
|
|
278
|
+
* if (data) sessions.set(data.id, socket);
|
|
279
|
+
* }
|
|
224
280
|
*
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
281
|
+
* return {
|
|
282
|
+
* fetch: Effect.gen(function* () {
|
|
283
|
+
* const [response, socket] = yield* Cloudflare.upgrade();
|
|
284
|
+
* const id = crypto.randomUUID();
|
|
285
|
+
* socket.serializeAttachment({ id });
|
|
286
|
+
* sessions.set(id, socket);
|
|
287
|
+
* return response;
|
|
288
|
+
* }),
|
|
289
|
+
* webSocketMessage: Effect.fnUntraced(function* (socket, message) {
|
|
290
|
+
* const text =
|
|
291
|
+
* typeof message === "string" ? message : new TextDecoder().decode(message);
|
|
292
|
+
* for (const peer of sessions.values()) {
|
|
293
|
+
* yield* peer.send(text);
|
|
294
|
+
* }
|
|
295
|
+
* }),
|
|
296
|
+
* };
|
|
297
|
+
* });
|
|
298
|
+
* ```
|
|
299
|
+
*
|
|
300
|
+
* @section Scheduled Alarms
|
|
301
|
+
* Each Durable Object can have a single alarm timestamp. Alchemy
|
|
302
|
+
* layers a small SQLite-backed scheduler on top via
|
|
303
|
+
* `Cloudflare.scheduleEvent` and `Cloudflare.processScheduledEvents`,
|
|
304
|
+
* so you can register many named events with arbitrary payloads and
|
|
305
|
+
* fire them from a single `alarm` handler.
|
|
306
|
+
*
|
|
307
|
+
* @example Scheduling and processing events
|
|
308
|
+
* ```typescript
|
|
309
|
+
* // schedule from a request or message handler
|
|
310
|
+
* yield* Cloudflare.scheduleEvent(
|
|
311
|
+
* "reminder-1",
|
|
312
|
+
* new Date(Date.now() + 60_000),
|
|
313
|
+
* { message: "your meeting starts in a minute" },
|
|
314
|
+
* );
|
|
315
|
+
*
|
|
316
|
+
* return {
|
|
317
|
+
* alarm: () =>
|
|
318
|
+
* Effect.gen(function* () {
|
|
319
|
+
* const fired = yield* Cloudflare.processScheduledEvents;
|
|
320
|
+
* for (const event of fired) {
|
|
321
|
+
* const payload = event.payload as { message: string };
|
|
322
|
+
* // dispatch / broadcast / persist...
|
|
323
|
+
* }
|
|
324
|
+
* }),
|
|
325
|
+
* };
|
|
229
326
|
* ```
|
|
230
327
|
*
|
|
231
328
|
* @section Using from a Worker
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DurableObjectNamespace.js","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/DurableObjectNamespace.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,iBAAiB,MAAM,wCAAwC,CAAC;AAC5E,OAAO,KAAK,kBAAkB,MAAM,yCAAyC,CAAC;AAE9E,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EACL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAyB,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAuB,MAAM,aAAa,CAAC;AAU7E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,KAAc,EACgB,EAAE,CAChC,OAAO,KAAK,KAAK,QAAQ;IACzB,KAAK,KAAK,IAAI;IACd,MAAM,IAAI,KAAK;IACd,KAAa,CAAC,IAAI,KAAK,eAAe,CAAC;AAU1C,MAAM,MAAM,GAAG,mCAAmC,CAAC;AAEnD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,KAAc,EACuB,EAAE,CACvC,OAAO,KAAK,KAAK,QAAQ;IACzB,KAAK,KAAK,IAAI;IACd,MAAM,IAAI,KAAK;IACf,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;AAwGxB,MAAM,OAAO,2BAA4B,SAAQ,OAAO,CAAC,OAAO,EAG7D,CAAC,mCAAmC,CAAC;CAAG;AAE3C
|
|
1
|
+
{"version":3,"file":"DurableObjectNamespace.js","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/DurableObjectNamespace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as Provider from "../../Provider.ts";
|
|
2
|
+
import { Stack } from "../../Stack.ts";
|
|
3
|
+
import { CloudflareEnvironment } from "../CloudflareEnvironment.ts";
|
|
4
|
+
import { Sidecar } from "../Local/Sidecar.ts";
|
|
5
|
+
import { Worker } from "./Worker.ts";
|
|
6
|
+
export declare const LocalWorkerProvider: () => import("effect/Layer").Layer<Provider.Provider<Worker<any>>, never, import("../../Stage.ts").Stage | Stack | CloudflareEnvironment | Sidecar>;
|
|
7
|
+
//# sourceMappingURL=LocalWorkerProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalWorkerProvider.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/LocalWorkerProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAwC,MAAM,aAAa,CAAC;AAG3E,eAAO,MAAM,mBAAmB,qJAiF7B,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Redacted from "effect/Redacted";
|
|
3
|
+
import * as Provider from "../../Provider.js";
|
|
4
|
+
import { Stack } from "../../Stack.js";
|
|
5
|
+
import { CloudflareEnvironment } from "../CloudflareEnvironment.js";
|
|
6
|
+
import { Sidecar } from "../Local/Sidecar.js";
|
|
7
|
+
import { getCompatibility } from "./Compatibility.js";
|
|
8
|
+
import { Worker } from "./Worker.js";
|
|
9
|
+
import { createWorkerName } from "./WorkerName.js";
|
|
10
|
+
export const LocalWorkerProvider = () => Provider.effect(Worker, Effect.gen(function* () {
|
|
11
|
+
const { accountId } = yield* CloudflareEnvironment;
|
|
12
|
+
const stack = yield* Stack;
|
|
13
|
+
const sidecar = yield* Sidecar;
|
|
14
|
+
const run = Effect.fn(function* (id, props, bindings) {
|
|
15
|
+
const name = yield* createWorkerName(id, props.name);
|
|
16
|
+
const workerBindings = [];
|
|
17
|
+
const durableObjectNamespaces = {};
|
|
18
|
+
for (const { sid, data } of bindings) {
|
|
19
|
+
for (const binding of data.bindings ?? []) {
|
|
20
|
+
workerBindings.push(binding);
|
|
21
|
+
if (binding.type === "durable_object_namespace") {
|
|
22
|
+
durableObjectNamespaces[binding.name] = sid;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
for (const [key, value] of Object.entries(props.env ?? {})) {
|
|
27
|
+
if (Redacted.isRedacted(value)) {
|
|
28
|
+
workerBindings.push({
|
|
29
|
+
type: "secret_text",
|
|
30
|
+
name: key,
|
|
31
|
+
text: Redacted.value(value),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
workerBindings.push({
|
|
36
|
+
type: "plain_text",
|
|
37
|
+
name: key,
|
|
38
|
+
text: value,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const result = yield* sidecar.serve({
|
|
43
|
+
id,
|
|
44
|
+
name,
|
|
45
|
+
main: props.main,
|
|
46
|
+
compatibility: getCompatibility(props),
|
|
47
|
+
entry: props.isExternal
|
|
48
|
+
? {
|
|
49
|
+
kind: "external",
|
|
50
|
+
}
|
|
51
|
+
: {
|
|
52
|
+
kind: "effect",
|
|
53
|
+
exports: (props.exports ?? {}),
|
|
54
|
+
},
|
|
55
|
+
stack: { name: stack.name, stage: stack.stage },
|
|
56
|
+
bindings: workerBindings,
|
|
57
|
+
durableObjectNamespaces: Object.entries(durableObjectNamespaces).map(([className, namespaceId]) => ({
|
|
58
|
+
className,
|
|
59
|
+
uniqueKey: namespaceId,
|
|
60
|
+
sql: true,
|
|
61
|
+
})),
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
workerId: name,
|
|
65
|
+
workerName: name,
|
|
66
|
+
logpush: undefined,
|
|
67
|
+
url: result.address,
|
|
68
|
+
tags: [],
|
|
69
|
+
durableObjectNamespaces,
|
|
70
|
+
domains: [],
|
|
71
|
+
accountId,
|
|
72
|
+
};
|
|
73
|
+
});
|
|
74
|
+
return {
|
|
75
|
+
diff: () => Effect.succeed({ action: "update" }),
|
|
76
|
+
create: ({ id, news, bindings }) => run(id, news, bindings),
|
|
77
|
+
update: ({ id, news, bindings }) => run(id, news, bindings),
|
|
78
|
+
delete: ({ output }) => sidecar.stop(output.workerName),
|
|
79
|
+
};
|
|
80
|
+
}));
|
|
81
|
+
//# sourceMappingURL=LocalWorkerProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalWorkerProvider.js","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/LocalWorkerProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import * as FileSystem from "effect/FileSystem";
|
|
|
6
6
|
import * as Layer from "effect/Layer";
|
|
7
7
|
import * as Path from "effect/Path";
|
|
8
8
|
import * as Redacted from "effect/Redacted";
|
|
9
|
+
import { AlchemyContext } from "../../AlchemyContext.ts";
|
|
9
10
|
import * as Binding from "../../Binding.ts";
|
|
10
11
|
import { type Artifacts as ArtifactsBinding } from "../Artifacts/Artifacts.ts";
|
|
11
12
|
import { type MemoOptions } from "../../Build/Memo.ts";
|
|
@@ -623,6 +624,7 @@ declare const BindWorkerPolicy_base: Binding.Policy<BindWorkerPolicy, "Policy<Cl
|
|
|
623
624
|
export declare class BindWorkerPolicy extends BindWorkerPolicy_base {
|
|
624
625
|
}
|
|
625
626
|
export declare const BindWorkerPolicyLive: Layer.Layer<BindWorkerPolicy, never, never>;
|
|
626
|
-
export declare const WorkerProvider: () => Layer.Layer<Provider.Provider<Worker<any>>, never, Path.Path | FileSystem.FileSystem | import("effect/unstable/http/HttpClient").HttpClient | import("../../Stage.ts").Stage | Stack | import("@distilled.cloud/cloudflare").Credentials | CloudflareEnvironment>;
|
|
627
|
+
export declare const WorkerProvider: () => Layer.Layer<Provider.Provider<Worker<any>>, never, AlchemyContext | Path.Path | FileSystem.FileSystem | import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner | import("effect/unstable/http/HttpClient").HttpClient | import("../../Stage.ts").Stage | Stack | import("@distilled.cloud/cloudflare").Credentials | CloudflareEnvironment>;
|
|
628
|
+
export declare const LiveWorkerProvider: () => Layer.Layer<Provider.Provider<Worker<any>>, never, Path.Path | FileSystem.FileSystem | import("effect/unstable/http/HttpClient").HttpClient | import("../../Stage.ts").Stage | Stack | import("@distilled.cloud/cloudflare").Credentials | CloudflareEnvironment>;
|
|
627
629
|
export {};
|
|
628
630
|
//# sourceMappingURL=Worker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Worker.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/Worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGrD,OAAO,KAAK,OAAO,MAAM,qCAAqC,CAAC;AAG/D,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AAEpC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAW5C,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAEL,KAAK,SAAS,IAAI,gBAAgB,EACnC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAC;AAKjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EACL,QAAQ,EACR,KAAK,IAAI,EACT,KAAK,aAAa,EAClB,KAAK,GAAG,EACT,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAwB,MAAM,mBAAmB,CAAC;AAEnE,OAAO,KAAK,UAAU,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"Worker.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/Worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGrD,OAAO,KAAK,OAAO,MAAM,qCAAqC,CAAC;AAG/D,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AAEpC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAW5C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAEL,KAAK,SAAS,IAAI,gBAAgB,EACnC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAC;AAKjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EACL,QAAQ,EACR,KAAK,IAAI,EACT,KAAK,aAAa,EAClB,KAAK,GAAG,EACT,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAwB,MAAM,mBAAmB,CAAC;AAEnE,OAAO,KAAK,UAAU,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,KAAK,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AAErB,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAIvC,QAAA,MAAM,YAAY,sBAAsB,CAAC;AACzC,KAAK,YAAY,GAAG,OAAO,YAAY,CAAC;AAExC,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,KAAK,IAAI,CAAC,GAAG,MAIvB,CAAC;;AAE9B,qBAAa,iBAAkB,SAAQ,sBAGI;CAAG;AAE9C,eAAO,MAAM,qBAAqB,8CAGjC,CAAC;;AAEF,qBAAa,gBAAiB,SAAQ,qBAGI;CAAG;AAE7C,MAAM,MAAM,WAAW,GAAG,OAAO,CAC/B;KACG,IAAI,IAAI,MAAM,EAAE,CAAC,eAAe,GAAG;QAClC,IAAI,EAAE,gCAAgC,CAAC;QACvC,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACtE;CACF,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,EAC3B,SAAS,CACV,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,OAAO,GAAG,KAAG,KAAK,IAAI,WACF,CAAC;AAEnD;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,mBAAoB,SAAQ,OAAO,CAClD,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,EACrD,SAAS,CACV;CAAG;AAEJ,MAAM,WAAW,YAAa,SAAQ,OAAO,CAC3C,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,EAC9C,SAAS,CACV;CAAG;AAEJ,MAAM,MAAM,eAAe,GAAG,OAAO,CACnC,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,EACjD,SAAS,CACV,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,CACjC,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,EAChD,SAAS,CACV,CAAC,MAAM,CAAC,CAAC;AAOV,eAAO,MAAM,sBAAsB,iFASc,CAAC;AAElD,MAAM,WAAW,sBAAuB,SAAQ,UAAU,CAAC,eAAe;IACxE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACvD;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC;AAE9C,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,GAAG,iBAAiB,CAAC,CAAC;AAEnE,MAAM,MAAM,qBAAqB,GAC7B,MAAM,GACN,QAAQ,GACR,UAAU,GACV,WAAW,GACX,eAAe,GACf,gBAAgB,GAChB,0BAA0B,CAAC,GAAG,CAAC,CAAC;AAEpC,MAAM,MAAM,cAAc,GAAG;KAC1B,WAAW,IAAI,MAAM,GAAG,qBAAqB;CAC/C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;KAC9B,WAAW,IAAI,MAAM,GAClB,qBAAqB,GACrB,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,GAAG,EAAE,GAAG,CAAC;CACnD,CAAC;AAEF,KAAK,kBAAkB,CACrB,QAAQ,SAAS,kBAAkB,GAAG,EAAE,EACxC,YAAY,SAAS,kBAAkB,GAAG,SAAS,GAAG,SAAS,IAC7D;KACD,CAAC,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CACtD,MAAM,CAAC,SAAS,qBAAqB,EACrC,GAAG,EACH,GAAG,CACJ,GACG,CAAC,GACD,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC;CAChD,GAAG,CAAC,SAAS,SAAS,YAAY,GAAG,EAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE/D,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,WAAW,GAAG,cAAc,CAAC;AAEvE,MAAM,WAAW,WAAW,CAC1B,QAAQ,SAAS,kBAAkB,GAAG,GAAG,EACzC,MAAM,SAAS,kBAAkB,GAAG,SAAS,GACzC,kBAAkB,GAClB,SAAS,CACb,SAAQ,aAAa;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,CAAC;IACF,iDAAiD;IACjD,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,WAAW,CAAC;KACpB,CAAC;IACF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,CAAC,eAAe,GAAG,YAAY,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;KAC5D,CAAC;IACF,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE;QACN;;;WAGG;QACH,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB;;;;;;;;;WASG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;KAC1C,CAAC;CACH;AAED,MAAM,MAAM,MAAM,CAAC,QAAQ,SAAS,cAAc,GAAG,GAAG,IAAI,QAAQ,CAClE,YAAY,EACZ,WAAW,CAAC,QAAQ,CAAC,EACrB;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC3B,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5D,IAAI,CAAC,EAAE;QACL,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;KAC3B,CAAC;CACH,EACD;IACE,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACtC,EACD,SAAS,CACV,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoUG;AACH,eAAO,MAAM,MAAM,EAAE,QAAQ,CAC3B,MAAM,EACN,cAAc,EACd,WAAW,EACX,sBAAsB,CACvB,GAAG;IACF,CACE,KAAK,CAAC,QAAQ,SAAS,kBAAkB,EACzC,KAAK,CAAC,MAAM,SAAS,kBAAkB,GAAG,SAAS,GAAG,SAAS,EAC/D,GAAG,GAAG,KAAK,EAEX,EAAE,EAAE,MAAM,EACV,KAAK,EACD,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,GACzC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GACvE,MAAM,CAAC,MAAM,CACd,MAAM,CAAC;SACJ,OAAO,IAAI,MAAM,kBAAkB,CAClC,QAAQ,EACR,MAAM,CACP,GAAG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC;KAClD,CAAC,EACF,KAAK,EACL,GAAG,GAAG,SAAS,CAChB,CAAC;CAuMF,CAAC;AAEH,eAAO,MAAM,UAAU,GAAgC,KAAK,EAAE,GAAG;cA3jBnD,MAAM;gBACJ,MAAM;aACT,OAAO,GAAG,SAAS;SACvB,MAAM,GAAG,SAAS;UACjB,MAAM,EAAE,GAAG,SAAS;6BACD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;eACpC,MAAM;aACR;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE;WACpD;QACL,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;KAC3B;;eAGU,aAAa,EAAE;iBACb;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE;;;mBADzB,aAAa,EAAE;qBACb;YAAE,SAAS,EAAE,MAAM,CAAA;SAAE,EAAE;;;mBADzB,aAAa,EAAE;qBACb;YAAE,SAAS,EAAE,MAAM,CAAA;SAAE,EAAE;;;;;;;;;;;kBATf,MAAM;YAAM,MAAM;gBAAU,MAAM;;;gBAE7C,MAAM,GAAG,SAAS;gBAClB,MAAM,GAAG,SAAS;eACnB,MAAM,GAAG,SAAS;;;cAXjB,MAAM;gBACJ,MAAM;aACT,OAAO,GAAG,SAAS;SACvB,MAAM,GAAG,SAAS;UACjB,MAAM,EAAE,GAAG,SAAS;6BACD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;eACpC,MAAM;aACR;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE;WACpD;QACL,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;KAC3B;;eAGU,aAAa,EAAE;iBACb;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE;;;mBADzB,aAAa,EAAE;qBACb;YAAE,SAAS,EAAE,MAAM,CAAA;SAAE,EAAE;;;mBADzB,aAAa,EAAE;qBACb;YAAE,SAAS,EAAE,MAAM,CAAA;SAAE,EAAE;;;;;;;;;;;kBATf,MAAM;YAAM,MAAM;gBAAU,MAAM;;;gBAE7C,MAAM,GAAG,SAAS;gBAClB,MAAM,GAAG,SAAS;eACnB,MAAM,GAAG,SAAS;;gIAwkB7B,CAAC;iHAIQ,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AAFzC,qBAAa,gBAAiB,SAAQ,qBAGT;CAAG;AAEhC,eAAO,MAAM,oBAAoB,6CAkBhC,CAAC;AAyEF,eAAO,MAAM,cAAc,sWAIvB,CAAC;AAEL,eAAO,MAAM,kBAAkB,yQA42C5B,CAAC"}
|
|
@@ -26,6 +26,8 @@ import { createRequire } from "node:module";
|
|
|
26
26
|
import path from "node:path";
|
|
27
27
|
import { pathToFileURL } from "node:url";
|
|
28
28
|
import Sonda from "sonda/rolldown";
|
|
29
|
+
import { AdoptPolicy } from "../../AdoptPolicy.js";
|
|
30
|
+
import { AlchemyContext } from "../../AlchemyContext.js";
|
|
29
31
|
import * as Artifacts from "../../Artifacts.js";
|
|
30
32
|
import * as Binding from "../../Binding.js";
|
|
31
33
|
import { isArtifacts as isArtifactsBinding, } from "../Artifacts/Artifacts.js";
|
|
@@ -44,11 +46,13 @@ import { Stack } from "../../Stack.js";
|
|
|
44
46
|
import { CloudflareEnvironment } from "../CloudflareEnvironment.js";
|
|
45
47
|
import { D1Database } from "../D1/D1Database.js";
|
|
46
48
|
import { fromCloudflareFetcher } from "../Fetcher.js";
|
|
49
|
+
import { SidecarLive } from "../Local/Sidecar.js";
|
|
47
50
|
import { CloudflareLogs } from "../Logs.js";
|
|
48
51
|
import { isAssets, readAssets, uploadAssets, } from "./Assets.js";
|
|
49
52
|
import cloudflare_workers from "./cloudflare_workers.js";
|
|
50
53
|
import { isDurableObjectExport, isDurableObjectNamespaceLike, } from "./DurableObjectNamespace.js";
|
|
51
54
|
import { workersHttpHandler } from "./HttpServer.js";
|
|
55
|
+
import { LocalWorkerProvider } from "./LocalWorkerProvider.js";
|
|
52
56
|
import { Request } from "./Request.js";
|
|
53
57
|
import { makeRpcStub } from "./Rpc.js";
|
|
54
58
|
import { isWorkflowExport } from "./Workflow.js";
|
|
@@ -620,7 +624,12 @@ function getDurableObjectTagMap(tags) {
|
|
|
620
624
|
return logicalId && className ? [[logicalId, className]] : [];
|
|
621
625
|
}));
|
|
622
626
|
}
|
|
623
|
-
|
|
627
|
+
const selectLayer = (input) => Layer.unwrap(AlchemyContext.useSync((context) => context.dev ? input.dev() : input.live()));
|
|
628
|
+
export const WorkerProvider = () => selectLayer({
|
|
629
|
+
live: LiveWorkerProvider,
|
|
630
|
+
dev: () => Layer.provide(LocalWorkerProvider(), SidecarLive),
|
|
631
|
+
});
|
|
632
|
+
export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(function* () {
|
|
624
633
|
const fs = yield* FileSystem.FileSystem;
|
|
625
634
|
const path = yield* Path.Path;
|
|
626
635
|
const { accountId } = yield* CloudflareEnvironment;
|
|
@@ -705,21 +714,59 @@ export const WorkerProvider = () => Provider.effect(Worker, Effect.gen(function*
|
|
|
705
714
|
yield* Effect.all(toRemove.map((d) => deleteDomain({ accountId, domainId: d.id }).pipe(Effect.catchTag("DomainNotFound", () => Effect.void))), { concurrency: "unbounded" });
|
|
706
715
|
if (desired.length === 0)
|
|
707
716
|
return [];
|
|
717
|
+
const adoptEnabled = yield* Effect.serviceOption(AdoptPolicy).pipe(Effect.map(Option.getOrElse(() => false)));
|
|
708
718
|
const zoneCache = new Map();
|
|
709
|
-
|
|
719
|
+
/**
|
|
720
|
+
* Attach `hostname` to `scriptName`, recovering from a "hostname
|
|
721
|
+
* already in use" conflict when adoption is enabled.
|
|
722
|
+
*
|
|
723
|
+
* The Cloudflare API rejects a `PUT /workers/domains` whose
|
|
724
|
+
* hostname is already registered (even when the existing entry
|
|
725
|
+
* points at the same Worker, which is exactly what happens
|
|
726
|
+
* after a state-store wipe). The SDK surfaces this as the
|
|
727
|
+
* unmatched `UnknownCloudflareError` channel because there's
|
|
728
|
+
* no dedicated error tag for it. With adoption opted-in we
|
|
729
|
+
* list domains for the hostname; if the existing entry
|
|
730
|
+
* already targets *this* Worker we adopt it in place. We
|
|
731
|
+
* never transfer a hostname off another Worker — that would
|
|
732
|
+
* silently re-route someone else's traffic.
|
|
733
|
+
*/
|
|
734
|
+
const attachDomain = Effect.fnUntraced(function* (hostname) {
|
|
710
735
|
const zoneId = yield* inferZoneIdForHostname(hostname, zoneCache);
|
|
711
|
-
|
|
736
|
+
return yield* putDomain({
|
|
712
737
|
accountId,
|
|
713
738
|
hostname,
|
|
714
739
|
service: scriptName,
|
|
715
740
|
zoneId,
|
|
716
|
-
})
|
|
717
|
-
return {
|
|
741
|
+
}).pipe(Effect.map((res) => ({
|
|
718
742
|
hostname,
|
|
719
743
|
id: res.id ?? "",
|
|
720
744
|
zoneId: res.zoneId ?? zoneId,
|
|
721
|
-
}
|
|
722
|
-
|
|
745
|
+
})), Effect.catchTag("UnknownCloudflareError", (err) => adoptEnabled && /already in use/i.test(err.message)
|
|
746
|
+
? adoptDomainIfSameService(hostname, zoneId, err)
|
|
747
|
+
: Effect.fail(err)));
|
|
748
|
+
});
|
|
749
|
+
const adoptDomainIfSameService = Effect.fnUntraced(function* (hostname, zoneId, originalError) {
|
|
750
|
+
const existing = yield* listDomains({
|
|
751
|
+
accountId,
|
|
752
|
+
hostname,
|
|
753
|
+
}).pipe(Effect.map((r) => (r.result ?? []).find((d) => d.hostname === hostname)));
|
|
754
|
+
if (existing?.id && existing.service === scriptName) {
|
|
755
|
+
return {
|
|
756
|
+
hostname,
|
|
757
|
+
id: existing.id,
|
|
758
|
+
zoneId: existing.zoneId ?? zoneId,
|
|
759
|
+
};
|
|
760
|
+
}
|
|
761
|
+
// The hostname exists but on a different Worker. Refuse to
|
|
762
|
+
// hijack it; surface a more actionable message than the raw
|
|
763
|
+
// Cloudflare error.
|
|
764
|
+
return yield* Effect.die(new Error(`Cannot attach hostname '${hostname}' to Worker '${scriptName}': ` +
|
|
765
|
+
`it is already attached to Worker '${existing?.service ?? "<unknown>"}'. ` +
|
|
766
|
+
`Detach it from that Worker first, or pick a different hostname. ` +
|
|
767
|
+
`(Cloudflare reported: ${originalError.message})`));
|
|
768
|
+
});
|
|
769
|
+
const applied = yield* Effect.all(desired.map(attachDomain), { concurrency: "unbounded" });
|
|
723
770
|
return applied;
|
|
724
771
|
});
|
|
725
772
|
const createAlchemyWorkerTags = (id) => [
|