@effect-agent/platform-cloudflare 0.1.0-beta.45 → 0.1.0-beta.46

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 (97) hide show
  1. package/dist/Alarm.d.mts +119 -0
  2. package/dist/Alarm.mjs +317 -0
  3. package/dist/Alarm.mjs.map +1 -0
  4. package/dist/{browser-rest-capture.d.mts → BrowserRestCapture.d.mts} +5 -4
  5. package/dist/{browser-rest-capture.mjs → BrowserRestCapture.mjs} +5 -4
  6. package/dist/BrowserRestCapture.mjs.map +1 -0
  7. package/dist/{browser-rest-crawl.d.mts → BrowserRestCrawl.d.mts} +4 -3
  8. package/dist/{browser-rest-crawl.mjs → BrowserRestCrawl.mjs} +4 -3
  9. package/dist/BrowserRestCrawl.mjs.map +1 -0
  10. package/dist/{bindings-BrVEOkfe.d.mts → CloudflareBindings.d.mts} +7 -5
  11. package/dist/CloudflareBindings.mjs +98 -0
  12. package/dist/CloudflareBindings.mjs.map +1 -0
  13. package/dist/{browser-quick-action.mjs → CloudflareBrowser-1jeZx3_g.mjs} +19 -4
  14. package/dist/CloudflareBrowser-1jeZx3_g.mjs.map +1 -0
  15. package/dist/{browser-quick-action.d.mts → CloudflareBrowser-DJq53niJ.d.mts} +9 -18
  16. package/dist/CloudflareBrowser.d.mts +2 -0
  17. package/dist/CloudflareBrowser.mjs +2 -0
  18. package/dist/CloudflareCodeMode.d.mts +44 -0
  19. package/dist/CloudflareCodeMode.mjs +618 -0
  20. package/dist/CloudflareCodeMode.mjs.map +1 -0
  21. package/dist/CloudflareConfig-f3CqTel1.d.mts +101 -0
  22. package/dist/CloudflareConfig.d.mts +2 -0
  23. package/dist/CloudflareConfig.mjs +122 -0
  24. package/dist/CloudflareConfig.mjs.map +1 -0
  25. package/dist/CloudflareMemory.d.mts +140 -0
  26. package/dist/CloudflareMemory.mjs +168 -0
  27. package/dist/CloudflareMemory.mjs.map +1 -0
  28. package/dist/{scheduling.d.mts → CloudflareScheduling.d.mts} +9 -6
  29. package/dist/{scheduling.mjs → CloudflareScheduling.mjs} +22 -8
  30. package/dist/CloudflareScheduling.mjs.map +1 -0
  31. package/dist/{subscriptions.d.mts → CloudflareSubscriptions.d.mts} +11 -6
  32. package/dist/{subscriptions.mjs → CloudflareSubscriptions.mjs} +26 -7
  33. package/dist/CloudflareSubscriptions.mjs.map +1 -0
  34. package/dist/CloudflareThreadClient.d.mts +715 -0
  35. package/dist/CloudflareThreadClient.mjs +364 -0
  36. package/dist/CloudflareThreadClient.mjs.map +1 -0
  37. package/dist/{interactive-browser.d.mts → InteractiveBrowser.d.mts} +5 -4
  38. package/dist/{interactive-browser.mjs → InteractiveBrowser.mjs} +6 -4
  39. package/dist/InteractiveBrowser.mjs.map +1 -0
  40. package/dist/{protected-browser.d.mts → ProtectedBrowser.d.mts} +4 -3
  41. package/dist/{protected-browser.mjs → ProtectedBrowser.mjs} +4 -3
  42. package/dist/ProtectedBrowser.mjs.map +1 -0
  43. package/dist/ThreadObject-Ia94R_B1.d.mts +735 -0
  44. package/dist/ThreadObject-IrGuIO4a.mjs +575 -0
  45. package/dist/ThreadObject-IrGuIO4a.mjs.map +1 -0
  46. package/dist/ThreadObject.d.mts +2 -0
  47. package/dist/ThreadObject.mjs +3 -0
  48. package/dist/WakeScheduler.d.mts +23 -0
  49. package/dist/WakeScheduler.mjs +60 -0
  50. package/dist/WakeScheduler.mjs.map +1 -0
  51. package/dist/boundary-BguazVkh.mjs +42 -0
  52. package/dist/boundary-BguazVkh.mjs.map +1 -0
  53. package/dist/{browser-session-lifecycle-ZGgb3pnK.mjs → browser-session-lifecycle-CUbVfEgP.mjs} +2 -2
  54. package/dist/browser-session-lifecycle-CUbVfEgP.mjs.map +1 -0
  55. package/dist/{browser-session-lifecycle-DqntvG-Y.d.mts → browser-session-lifecycle-DJpqLXy_.d.mts} +2 -2
  56. package/dist/index.d.mts +12 -1833
  57. package/dist/index.mjs +12 -1357
  58. package/dist/prepared-admission-DRBhl2Sp.mjs +63 -0
  59. package/dist/prepared-admission-DRBhl2Sp.mjs.map +1 -0
  60. package/package.json +1 -1
  61. package/src/{alarm.ts → Alarm.ts} +6 -7
  62. package/src/{browser-rest-capture.ts → BrowserRestCapture.ts} +3 -3
  63. package/src/{browser-rest-crawl.ts → BrowserRestCrawl.ts} +2 -2
  64. package/src/{bindings.ts → CloudflareBindings.ts} +2 -2
  65. package/src/CloudflareBrowser.ts +15 -0
  66. package/src/{code-mode-executor.ts → CloudflareCodeMode.ts} +3 -3
  67. package/src/{config.ts → CloudflareConfig.ts} +3 -2
  68. package/src/{memory.ts → CloudflareMemory.ts} +15 -12
  69. package/src/{scheduling.ts → CloudflareScheduling.ts} +12 -11
  70. package/src/{subscriptions.ts → CloudflareSubscriptions.ts} +14 -12
  71. package/src/{client.ts → CloudflareThreadClient.ts} +27 -20
  72. package/src/{interactive-browser.ts → InteractiveBrowser.ts} +9 -5
  73. package/src/{thread-object.ts → ThreadObject.ts} +37 -29
  74. package/src/{wake-scheduler.ts → WakeScheduler.ts} +5 -5
  75. package/src/index.ts +11 -30
  76. package/src/{browser-quick-action.ts → internal/browser-quick-action.ts} +10 -8
  77. package/src/{layers.ts → internal/layers.ts} +39 -30
  78. package/src/{prepared-admission.ts → internal/prepared-admission.ts} +7 -7
  79. package/src/{transport.ts → internal/transport.ts} +5 -2
  80. package/src/protected-browser/binding.ts +3 -2
  81. package/src/protected-browser/native.ts +2 -2
  82. package/src/protected-browser/policy.ts +2 -2
  83. package/dist/browser-quick-action.mjs.map +0 -1
  84. package/dist/browser-rest-capture.mjs.map +0 -1
  85. package/dist/browser-rest-crawl.mjs.map +0 -1
  86. package/dist/browser-session-lifecycle-ZGgb3pnK.mjs.map +0 -1
  87. package/dist/index.mjs.map +0 -1
  88. package/dist/interactive-browser.mjs.map +0 -1
  89. package/dist/prepared-admission-BhW2eT_a.mjs +0 -890
  90. package/dist/prepared-admission-BhW2eT_a.mjs.map +0 -1
  91. package/dist/protected-browser.mjs.map +0 -1
  92. package/dist/scheduling.mjs.map +0 -1
  93. package/dist/subscriptions.mjs.map +0 -1
  94. /package/src/{protected-browser.ts → ProtectedBrowser.ts} +0 -0
  95. /package/src/{boundary.ts → internal/boundary.ts} +0 -0
  96. /package/src/{browser-session-lifecycle.ts → internal/browser-session-lifecycle.ts} +0 -0
  97. /package/src/{progress-wait.ts → internal/progress-wait.ts} +0 -0
@@ -0,0 +1,168 @@
1
+ import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
+ import { Principal } from "@effect-agent/thread/SubmissionLedger";
3
+ import { Clock, Context, Effect, Layer, Schema } from "effect";
4
+ import * as Memory from "@effect-agent/core/Memory";
5
+ import * as MemoryNamespace from "@effect-agent/core/MemoryNamespace";
6
+ import { MemoryNamespaceAddress } from "@effect-agent/core/MemoryNamespace";
7
+ import { MemoryRecallLimits } from "@effect-agent/core/MemoryReference";
8
+ import { MemoryAccess } from "@effect-agent/core/MemoryRevalidation";
9
+ import { MemoryDocument, MemoryMutationFailpoint, MemoryStorageError, MemoryWriter } from "@effect-agent/core/MemoryStore";
10
+ import "@effect-agent/core/SemanticMemoryIndex";
11
+ import "@effect-agent/core/SemanticMemoryRevalidation";
12
+ import { defaultDoMemoryStorageLimits, doMemoryStoreLayerWithFailpoints } from "@effect-agent/storage-cloudflare/DoMemoryStore";
13
+ import { MemoryOwnerIdentity, MemoryOwnerRequest, MemoryOwnerResponse, MemoryRpcError, MemoryRpcLimits, decodeMemoryWire, defaultMemoryRpcLimits, encodeMemoryWire, handleMemoryOwnerRequest } from "@effect-agent/storage-cloudflare/MemoryProtocol";
14
+ import { DurableObject, DurableObjectState } from "effect-cf";
15
+ //#region src/CloudflareMemory.ts
16
+ var CloudflareMemory_exports = /* @__PURE__ */ __exportAll({
17
+ CloudflareMemoryClient: () => CloudflareMemoryClient,
18
+ MemoryObject: () => MemoryObject,
19
+ MemoryObjectNamespace: () => MemoryObjectNamespace,
20
+ cloudflareMemoryWriterLayer: () => cloudflareMemoryWriterLayer,
21
+ memoryObjectName: () => memoryObjectName
22
+ });
23
+ var MemoryObjectNamespace = class extends Context.Service()("@effect-agent/platform-cloudflare/MemoryObjectNamespace") {};
24
+ /** Namespace version and identity are already canonicalized by MemoryNamespace. */
25
+ const memoryObjectName = (namespace) => namespace.address;
26
+ /**
27
+ * Effect-native, host-bound memory client. Recall revalidates the entire admitted lookup
28
+ * in one RPC and renders it locally. No retries or per-source splitting occur here.
29
+ * Interrupted callers stop waiting; the owner has its own deadline. A timed-out write
30
+ * may have committed: reconcile by sending the identical operation ID and command.
31
+ */
32
+ const makeMemoryClient = Effect.fn("CloudflareMemoryClient.make")(function* (access, principal, rpcLimits = defaultMemoryRpcLimits) {
33
+ const validated = yield* Schema.decodeUnknownEffect(MemoryRpcLimits)(rpcLimits).pipe(Effect.mapError(() => MemoryRpcError.make({ reason: "protocol" })));
34
+ const bound = yield* Schema.decodeUnknownEffect(MemoryAccess.Wire)(access).pipe(Effect.mapError(() => MemoryRpcError.make({ reason: "protocol" })));
35
+ principal = yield* Schema.decodeUnknownEffect(Principal)(principal).pipe(Effect.mapError(() => MemoryRpcError.make({ reason: "protocol" })));
36
+ const { namespace } = yield* MemoryObjectNamespace;
37
+ const call = Effect.fn("CloudflareMemoryClient.call")(function* (request) {
38
+ const decoded = yield* Schema.decodeUnknownEffect(MemoryOwnerRequest)(request).pipe(Effect.mapError(() => MemoryRpcError.make({ reason: "protocol" })));
39
+ const encoded = yield* encodeMemoryWire(MemoryOwnerRequest, decoded, validated.maxRequestBytes);
40
+ const raw = yield* Effect.tryPromise({
41
+ try: () => namespace.get(namespace.idFromName(memoryObjectName(bound.namespace))).memory(encoded),
42
+ catch: () => MemoryRpcError.make({ reason: "unavailable" })
43
+ });
44
+ const response = yield* decodeMemoryWire(MemoryOwnerResponse, raw, validated.maxResponseBytes);
45
+ if (response._tag === "Failed") return yield* response.failure;
46
+ if (!MemoryNamespace.equals(response.access.namespace, bound.namespace) || response.access.scope !== bound.scope) return yield* MemoryRpcError.make({ reason: "protocol" });
47
+ return response;
48
+ });
49
+ const withinDeadline = (effect, timeoutMillis) => effect.pipe(Effect.timeoutOrElse({
50
+ duration: timeoutMillis,
51
+ orElse: () => Effect.fail(MemoryRpcError.make({ reason: "timeout" }))
52
+ }));
53
+ const revalidate = Effect.fn("CloudflareMemoryClient.revalidate")(function* (lookup, limits) {
54
+ limits = yield* Schema.decodeUnknownEffect(MemoryRecallLimits)(limits).pipe(Effect.mapError(() => MemoryRpcError.make({ reason: "protocol" })));
55
+ const timeoutMillis = Math.min(validated.timeoutMillis, limits.timeoutMillis);
56
+ return yield* Effect.gen(function* () {
57
+ const response = yield* call({
58
+ _tag: "Revalidate",
59
+ version: 1,
60
+ access: bound,
61
+ principal,
62
+ lookup,
63
+ limits,
64
+ deadlineMillis: (yield* Clock.currentTimeMillis) + timeoutMillis
65
+ });
66
+ if (response._tag !== "Lookup") return yield* MemoryRpcError.make({ reason: "protocol" });
67
+ return response.lookup;
68
+ }).pipe((effect) => withinDeadline(effect, timeoutMillis));
69
+ });
70
+ const change = Effect.fn("CloudflareMemoryClient.change")(function* (write) {
71
+ if (!MemoryNamespace.equals(write.key.namespace, bound.namespace)) return yield* MemoryRpcError.make({ reason: "denied" });
72
+ return yield* Effect.gen(function* () {
73
+ const response = yield* call({
74
+ _tag: "Change",
75
+ version: 1,
76
+ access: bound,
77
+ principal,
78
+ write,
79
+ deadlineMillis: (yield* Clock.currentTimeMillis) + validated.timeoutMillis
80
+ });
81
+ if (response._tag !== "Changed" || response.document.key.id !== write.key.id) return yield* MemoryRpcError.make({ reason: "protocol" });
82
+ return yield* MemoryDocument.restore(access.namespace, response.document);
83
+ }).pipe((effect) => withinDeadline(effect, validated.timeoutMillis));
84
+ });
85
+ const revalidateSemantic = Effect.fn("CloudflareMemoryClient.revalidateSemantic")(function* (found, profile, limits) {
86
+ return yield* Effect.gen(function* () {
87
+ const response = yield* call({
88
+ _tag: "RevalidateSemantic",
89
+ version: 1,
90
+ access: bound,
91
+ principal,
92
+ found,
93
+ profile,
94
+ limits,
95
+ deadlineMillis: (yield* Clock.currentTimeMillis) + validated.timeoutMillis
96
+ });
97
+ if (response._tag !== "Semantic") return yield* MemoryRpcError.make({ reason: "protocol" });
98
+ return response.result;
99
+ }).pipe((effect) => withinDeadline(effect, validated.timeoutMillis));
100
+ });
101
+ return {
102
+ recall: Effect.fn("CloudflareMemoryClient.recall")(function* (lookup, limits, estimateTokens) {
103
+ return yield* Memory.recall([{
104
+ id: "memory",
105
+ essential: true,
106
+ read: revalidate(lookup, limits)
107
+ }], limits, estimateTokens);
108
+ }),
109
+ revalidate,
110
+ revalidateSemantic,
111
+ change
112
+ };
113
+ });
114
+ const CloudflareMemoryClient = {
115
+ /** Bind access and principal using the MemoryObjectNamespace supplied by the application. */
116
+ make: makeMemoryClient,
117
+ /** Use a resolved Worker or Durable Object binding without manual service provisioning. */
118
+ fromBinding: Effect.fn("CloudflareMemoryClient.fromBinding")(function* (binding, options) {
119
+ return yield* makeMemoryClient(options.access, options.principal, options.rpcLimits).pipe(Effect.provideService(MemoryObjectNamespace, { namespace: binding }));
120
+ })
121
+ };
122
+ /**
123
+ * Optional activity-processor destination. Keeps domain write errors intact; transport,
124
+ * authorization and deadline failures become the existing MemoryStorageError contract.
125
+ * Receipts remain authoritative, including after caller interruption or lost replies.
126
+ */
127
+ const cloudflareMemoryWriterLayer = (access, principal, limits = defaultMemoryRpcLimits) => Layer.effect(MemoryWriter, Effect.gen(function* () {
128
+ const client = yield* CloudflareMemoryClient.make(access, principal, limits);
129
+ return MemoryWriter.fromAdapter({ change: (write) => client.change(write).pipe(Effect.catchTag("MemoryRpcError", (error) => Effect.fail(MemoryStorageError.make({
130
+ operation: `memory RPC ${error.reason}`,
131
+ reason: error.reason === "unavailable" || error.reason === "timeout" ? "unavailable" : "invalid-input"
132
+ }))), Effect.catchTag([
133
+ "MemoryRecallError",
134
+ "MemoryIndexError",
135
+ "SemanticMemoryError"
136
+ ], () => Effect.fail(MemoryStorageError.make({
137
+ operation: "memory RPC response",
138
+ reason: "corrupt"
139
+ })))) });
140
+ }));
141
+ /**
142
+ * Dedicated SQLite owner, independent of Thread lifetimes. The host binds authorization
143
+ * after restoring its namespace definition from MemoryOwnerIdentity. Do not retain
144
+ * cleanup-scoped resources in the host Layer; it lives for the DO incarnation.
145
+ */
146
+ const makeMemoryObject = (host, options = {}) => {
147
+ const identity = Layer.effect(MemoryOwnerIdentity, Effect.gen(function* () {
148
+ const state = yield* DurableObjectState.DurableObjectState;
149
+ const address = yield* Schema.decodeUnknownEffect(MemoryNamespaceAddress)(state.raw.id.name).pipe(Effect.mapError(() => MemoryRpcError.make({ reason: "denied" })));
150
+ return { namespace: MemoryNamespace.Any.make({ address }) };
151
+ }));
152
+ const store = Layer.unwrap(Effect.map(DurableObjectState.DurableObjectState, (state) => doMemoryStoreLayerWithFailpoints(state.raw.storage, options.storageLimits ?? defaultDoMemoryStorageLimits))).pipe(Layer.provide(options.failpoints ?? MemoryMutationFailpoint.layer));
153
+ const application = Layer.merge(store, host).pipe(Layer.provideMerge(identity));
154
+ const runtime = Layer.effectContext(Effect.gen(function* () {
155
+ const state = yield* DurableObjectState.DurableObjectState;
156
+ const scope = yield* Effect.scope;
157
+ yield* Schema.decodeUnknownEffect(MemoryRpcLimits)(options.rpcLimits ?? defaultMemoryRpcLimits).pipe(Effect.mapError(() => MemoryRpcError.make({ reason: "protocol" })));
158
+ return yield* state.blockConcurrencyWhile(Layer.buildWithScope(application, scope));
159
+ }));
160
+ return DurableObject.make(runtime, { rpc: { memory: (encoded) => handleMemoryOwnerRequest(encoded, options.rpcLimits) } });
161
+ };
162
+ const MemoryObject = {
163
+ /** Build the SQLite Durable Object class with the application's owner authorization Layer. */
164
+ make: makeMemoryObject };
165
+ //#endregion
166
+ export { CloudflareMemoryClient, MemoryObject, MemoryObjectNamespace, cloudflareMemoryWriterLayer, memoryObjectName, CloudflareMemory_exports as t };
167
+
168
+ //# sourceMappingURL=CloudflareMemory.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CloudflareMemory.mjs","names":["EffectCfDurableObject"],"sources":["../src/CloudflareMemory.ts"],"sourcesContent":["import * as Memory from \"@effect-agent/core/Memory\";\nimport * as MemoryNamespace from \"@effect-agent/core/MemoryNamespace\";\nimport { MemoryNamespaceAddress } from \"@effect-agent/core/MemoryNamespace\";\nimport { type MemoryLookup, MemoryRecallLimits } from \"@effect-agent/core/MemoryReference\";\nimport { MemoryAccess } from \"@effect-agent/core/MemoryRevalidation\";\nimport {\n type MemoryReader,\n type MemoryWrite,\n MemoryDocument,\n MemoryMutationFailpoint,\n MemoryStorageError,\n MemoryWriter,\n} from \"@effect-agent/core/MemoryStore\";\nimport {\n type MemoryIndexSearch,\n type SemanticMemoryProfile,\n} from \"@effect-agent/core/SemanticMemoryIndex\";\nimport { type SemanticCandidateLimits } from \"@effect-agent/core/SemanticMemoryRevalidation\";\nimport {\n type DoMemoryStorageLimits,\n defaultDoMemoryStorageLimits,\n doMemoryStoreLayerWithFailpoints,\n} from \"@effect-agent/storage-cloudflare/DoMemoryStore\";\nimport {\n type MemoryOwnerAuthorizer,\n decodeMemoryWire,\n defaultMemoryRpcLimits,\n encodeMemoryWire,\n handleMemoryOwnerRequest,\n MemoryOwnerIdentity,\n MemoryOwnerRequest,\n MemoryOwnerResponse,\n MemoryRpcError,\n MemoryRpcLimits,\n type MemoryOwnerFailure,\n} from \"@effect-agent/storage-cloudflare/MemoryProtocol\";\nimport { Principal } from \"@effect-agent/thread/SubmissionLedger\";\nimport { Clock, Context, Effect, Layer, Schema } from \"effect\";\nimport {\n DurableObject as EffectCfDurableObject,\n DurableObjectState,\n type WorkerEnvironment,\n} from \"effect-cf\";\n\nexport interface MemoryObjectRpc extends Rpc.DurableObjectBranded {\n memory(encoded: string): Promise<string>;\n}\n\nexport class MemoryObjectNamespace extends Context.Service<\n MemoryObjectNamespace,\n {\n readonly namespace: DurableObjectNamespace<MemoryObjectRpc>;\n }\n>()(\"@effect-agent/platform-cloudflare/MemoryObjectNamespace\") {}\n\n/** Namespace version and identity are already canonicalized by MemoryNamespace. */\nexport const memoryObjectName = (namespace: MemoryNamespace.Any): string => namespace.address;\n\n/**\n * Effect-native, host-bound memory client. Recall revalidates the entire admitted lookup\n * in one RPC and renders it locally. No retries or per-source splitting occur here.\n * Interrupted callers stop waiting; the owner has its own deadline. A timed-out write\n * may have committed: reconcile by sending the identical operation ID and command.\n */\nconst makeMemoryClient = Effect.fn(\"CloudflareMemoryClient.make\")(function* <\n Namespace extends MemoryNamespace.Any,\n>(\n access: MemoryAccess<Namespace>,\n principal: Principal,\n rpcLimits: MemoryRpcLimits = defaultMemoryRpcLimits,\n) {\n const validated = yield* Schema.decodeUnknownEffect(MemoryRpcLimits)(rpcLimits).pipe(\n Effect.mapError(() => MemoryRpcError.make({ reason: \"protocol\" })),\n );\n\n const bound = yield* Schema.decodeUnknownEffect(MemoryAccess.Wire)(access).pipe(\n Effect.mapError(() => MemoryRpcError.make({ reason: \"protocol\" })),\n );\n\n principal = yield* Schema.decodeUnknownEffect(Principal)(principal).pipe(\n Effect.mapError(() => MemoryRpcError.make({ reason: \"protocol\" })),\n );\n const { namespace } = yield* MemoryObjectNamespace;\n\n const call = Effect.fn(\"CloudflareMemoryClient.call\")(function* (request: MemoryOwnerRequest) {\n const decoded = yield* Schema.decodeUnknownEffect(MemoryOwnerRequest)(request).pipe(\n Effect.mapError(() => MemoryRpcError.make({ reason: \"protocol\" })),\n );\n\n const encoded = yield* encodeMemoryWire(MemoryOwnerRequest, decoded, validated.maxRequestBytes);\n\n const raw = yield* Effect.tryPromise({\n try: () =>\n namespace.get(namespace.idFromName(memoryObjectName(bound.namespace))).memory(encoded),\n catch: () => MemoryRpcError.make({ reason: \"unavailable\" }),\n });\n\n const response = yield* decodeMemoryWire(MemoryOwnerResponse, raw, validated.maxResponseBytes);\n\n if (response._tag === \"Failed\") return yield* response.failure;\n if (\n !MemoryNamespace.equals(response.access.namespace, bound.namespace) ||\n response.access.scope !== bound.scope\n )\n return yield* MemoryRpcError.make({ reason: \"protocol\" });\n\n return response;\n });\n\n const withinDeadline = <A, E, R>(effect: Effect.Effect<A, E, R>, timeoutMillis: number) =>\n effect.pipe(\n Effect.timeoutOrElse({\n duration: timeoutMillis,\n orElse: () => Effect.fail(MemoryRpcError.make({ reason: \"timeout\" })),\n }),\n );\n\n const revalidate = Effect.fn(\"CloudflareMemoryClient.revalidate\")(function* (\n lookup: MemoryLookup,\n limits: MemoryRecallLimits,\n ) {\n limits = yield* Schema.decodeUnknownEffect(MemoryRecallLimits)(limits).pipe(\n Effect.mapError(() => MemoryRpcError.make({ reason: \"protocol\" })),\n );\n const timeoutMillis = Math.min(validated.timeoutMillis, limits.timeoutMillis);\n\n return yield* Effect.gen(function* () {\n const response = yield* call({\n _tag: \"Revalidate\",\n version: 1,\n access: bound,\n principal,\n lookup,\n limits,\n deadlineMillis: (yield* Clock.currentTimeMillis) + timeoutMillis,\n });\n\n if (response._tag !== \"Lookup\") return yield* MemoryRpcError.make({ reason: \"protocol\" });\n\n return response.lookup;\n }).pipe((effect) => withinDeadline(effect, timeoutMillis));\n });\n\n const change = Effect.fn(\"CloudflareMemoryClient.change\")(function* (\n write: MemoryWrite<Namespace>,\n ) {\n if (!MemoryNamespace.equals(write.key.namespace, bound.namespace))\n return yield* MemoryRpcError.make({ reason: \"denied\" });\n\n return yield* Effect.gen(function* () {\n const response = yield* call({\n _tag: \"Change\",\n version: 1,\n access: bound,\n principal,\n write,\n deadlineMillis: (yield* Clock.currentTimeMillis) + validated.timeoutMillis,\n });\n\n if (response._tag !== \"Changed\" || response.document.key.id !== write.key.id)\n return yield* MemoryRpcError.make({ reason: \"protocol\" });\n\n return yield* MemoryDocument.restore(access.namespace, response.document);\n }).pipe((effect) => withinDeadline(effect, validated.timeoutMillis));\n });\n\n const revalidateSemantic = Effect.fn(\"CloudflareMemoryClient.revalidateSemantic\")(function* (\n found: MemoryIndexSearch<Namespace>,\n profile: SemanticMemoryProfile,\n limits: SemanticCandidateLimits,\n ) {\n return yield* Effect.gen(function* () {\n const response = yield* call({\n _tag: \"RevalidateSemantic\",\n version: 1,\n access: bound,\n principal,\n found,\n profile,\n limits,\n deadlineMillis: (yield* Clock.currentTimeMillis) + validated.timeoutMillis,\n });\n\n if (response._tag !== \"Semantic\") return yield* MemoryRpcError.make({ reason: \"protocol\" });\n\n return response.result;\n }).pipe((effect) => withinDeadline(effect, validated.timeoutMillis));\n });\n\n /**\n * Revalidate in one owner RPC, then render whole passages within the caller's budget.\n * The bound source is essential: unavailable/stale results and matches that cannot fit\n * fail instead of silently producing empty context. No-match remains successful.\n * The single outcome has sourceId \"memory\". No embedding or candidate search is performed.\n * Use revalidate with Memory.recall for multiple readers sharing one output budget.\n */\n const recall = Effect.fn(\"CloudflareMemoryClient.recall\")(function* (\n lookup: MemoryLookup,\n limits: MemoryRecallLimits,\n estimateTokens?: (text: string) => number,\n ) {\n return yield* Memory.recall(\n [{ id: \"memory\", essential: true, read: revalidate(lookup, limits) }],\n limits,\n estimateTokens,\n );\n });\n\n return { recall, revalidate, revalidateSemantic, change };\n});\n\nexport const CloudflareMemoryClient = {\n /** Bind access and principal using the MemoryObjectNamespace supplied by the application. */\n make: makeMemoryClient,\n /** Use a resolved Worker or Durable Object binding without manual service provisioning. */\n fromBinding: Effect.fn(\"CloudflareMemoryClient.fromBinding\")(function* <\n Namespace extends MemoryNamespace.Any,\n >(\n binding: DurableObjectNamespace<MemoryObjectRpc>,\n options: {\n readonly access: MemoryAccess<Namespace>;\n readonly principal: Principal;\n readonly rpcLimits?: MemoryRpcLimits;\n },\n ) {\n return yield* makeMemoryClient(options.access, options.principal, options.rpcLimits).pipe(\n Effect.provideService(MemoryObjectNamespace, { namespace: binding }),\n );\n }),\n};\n\n/**\n * Optional activity-processor destination. Keeps domain write errors intact; transport,\n * authorization and deadline failures become the existing MemoryStorageError contract.\n * Receipts remain authoritative, including after caller interruption or lost replies.\n */\nexport const cloudflareMemoryWriterLayer = (\n access: MemoryAccess,\n principal: Principal,\n limits: MemoryRpcLimits = defaultMemoryRpcLimits,\n) =>\n Layer.effect(\n MemoryWriter,\n Effect.gen(function* () {\n const client = yield* CloudflareMemoryClient.make(access, principal, limits);\n\n return MemoryWriter.fromAdapter({\n change: (write) =>\n client.change(write).pipe(\n Effect.catchTag(\"MemoryRpcError\", (error) =>\n Effect.fail(\n MemoryStorageError.make({\n operation: `memory RPC ${error.reason}`,\n reason:\n error.reason === \"unavailable\" || error.reason === \"timeout\"\n ? \"unavailable\"\n : \"invalid-input\",\n }),\n ),\n ),\n Effect.catchTag([\"MemoryRecallError\", \"MemoryIndexError\", \"SemanticMemoryError\"], () =>\n Effect.fail(\n MemoryStorageError.make({ operation: \"memory RPC response\", reason: \"corrupt\" }),\n ),\n ),\n ),\n });\n }),\n );\n\ntype OwnerServices = MemoryReader | MemoryWriter | MemoryOwnerAuthorizer | MemoryOwnerIdentity;\n\nexport interface MemoryObjectInstance extends InstanceType<\n EffectCfDurableObject.DurableObjectClass<Record<never, never>, OwnerServices>\n> {\n memory(encoded: string): Promise<string>;\n}\n\nexport interface MemoryObjectClass {\n new (ctx: globalThis.DurableObjectState, env: Cloudflare.Env): MemoryObjectInstance;\n}\n\n/**\n * Dedicated SQLite owner, independent of Thread lifetimes. The host binds authorization\n * after restoring its namespace definition from MemoryOwnerIdentity. Do not retain\n * cleanup-scoped resources in the host Layer; it lives for the DO incarnation.\n */\nconst makeMemoryObject = <E>(\n host: Layer.Layer<\n MemoryOwnerAuthorizer,\n E,\n MemoryOwnerIdentity | DurableObjectState.DurableObjectState | WorkerEnvironment\n >,\n options: {\n readonly storageLimits?: DoMemoryStorageLimits;\n readonly rpcLimits?: MemoryRpcLimits;\n readonly failpoints?: Layer.Layer<\n MemoryMutationFailpoint,\n never,\n DurableObjectState.DurableObjectState\n >;\n } = {},\n): MemoryObjectClass => {\n const identity = Layer.effect(\n MemoryOwnerIdentity,\n Effect.gen(function* () {\n const state = yield* DurableObjectState.DurableObjectState;\n\n const address = yield* Schema.decodeUnknownEffect(MemoryNamespaceAddress)(\n state.raw.id.name,\n ).pipe(Effect.mapError(() => MemoryRpcError.make({ reason: \"denied\" })));\n\n return { namespace: MemoryNamespace.Any.make({ address }) };\n }),\n );\n\n const store = Layer.unwrap(\n Effect.map(DurableObjectState.DurableObjectState, (state) =>\n doMemoryStoreLayerWithFailpoints(\n state.raw.storage,\n options.storageLimits ?? defaultDoMemoryStorageLimits,\n ),\n ),\n ).pipe(Layer.provide(options.failpoints ?? MemoryMutationFailpoint.layer));\n\n const application = Layer.merge(store, host).pipe(Layer.provideMerge(identity));\n\n const runtime: Layer.Layer<\n OwnerServices,\n E | MemoryOwnerFailure,\n DurableObjectState.DurableObjectState | WorkerEnvironment\n > = Layer.effectContext(\n Effect.gen(function* () {\n const state = yield* DurableObjectState.DurableObjectState;\n const scope = yield* Effect.scope;\n\n yield* Schema.decodeUnknownEffect(MemoryRpcLimits)(\n options.rpcLimits ?? defaultMemoryRpcLimits,\n ).pipe(Effect.mapError(() => MemoryRpcError.make({ reason: \"protocol\" })));\n\n return yield* state.blockConcurrencyWhile(Layer.buildWithScope(application, scope));\n }),\n );\n\n const rpc = { memory: (encoded: string) => handleMemoryOwnerRequest(encoded, options.rpcLimits) };\n\n return EffectCfDurableObject.make<\n OwnerServices,\n E | MemoryOwnerFailure,\n never,\n never,\n typeof rpc\n >(runtime, { rpc });\n};\n\nexport const MemoryObject = {\n /** Build the SQLite Durable Object class with the application's owner authorization Layer. */\n make: makeMemoryObject,\n};\n"],"mappings":"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"}
@@ -1,9 +1,12 @@
1
- import { i as ThreadObjectNamespace } from "./bindings-BrVEOkfe.mjs";
1
+ import { ThreadObjectNamespace } from "./CloudflareBindings.mjs";
2
2
  import { Context, Layer, Schema } from "effect";
3
- import { DoScheduleAlarmControl } from "@effect-agent/storage-cloudflare";
4
- import { ScheduleAuthorizer, ScheduleDriver, ScheduleOwner, Scheduling, SchedulingLimits } from "@effect-agent/thread";
5
3
  import { DurableObject, DurableObjectAlarm, DurableObjectState as DurableObjectState$1, WorkerEnvironment } from "effect-cf";
6
- //#region src/scheduling.d.ts
4
+ import { DoScheduleAlarmControl } from "@effect-agent/storage-cloudflare/DoScheduleStore";
5
+ import { ScheduleAuthorizer, ScheduleOwner, SchedulingLimits } from "@effect-agent/thread/Schedule";
6
+ import { ScheduleDriver, Scheduling } from "@effect-agent/thread/Scheduling";
7
+ declare namespace CloudflareScheduling_d_exports {
8
+ export { CloudflareSchedulingClient, ScheduleAlarmProtocolError, ScheduleOwnerIdentity, ScheduleOwnerNamespace, ScheduleOwnerObjectClass, ScheduleOwnerObjectInstance, ScheduleOwnerObjectRpc, ScheduleOwnerProtocolError, makeScheduleOwnerObjectClass };
9
+ }
7
10
  declare const ScheduleAlarmProtocolError_base: Schema.Class<ScheduleAlarmProtocolError, Schema.TaggedStruct<"ScheduleAlarmProtocolError", {
8
11
  readonly message: Schema.String;
9
12
  }>, import("effect/Cause").YieldableError>;
@@ -43,5 +46,5 @@ interface ScheduleOwnerObjectClass {
43
46
  */
44
47
  declare const makeScheduleOwnerObjectClass: <E>(host: Layer.Layer<ScheduleAuthorizer | ThreadObjectNamespace, E, DurableObjectState$1.DurableObjectState | WorkerEnvironment | ScheduleOwnerIdentity>, limits?: SchedulingLimits) => ScheduleOwnerObjectClass;
45
48
  //#endregion
46
- export { CloudflareSchedulingClient, ScheduleAlarmProtocolError, ScheduleOwnerIdentity, ScheduleOwnerNamespace, ScheduleOwnerObjectClass, ScheduleOwnerObjectInstance, ScheduleOwnerObjectRpc, ScheduleOwnerProtocolError, makeScheduleOwnerObjectClass };
47
- //# sourceMappingURL=scheduling.d.mts.map
49
+ export { CloudflareSchedulingClient, ScheduleAlarmProtocolError, ScheduleOwnerIdentity, ScheduleOwnerNamespace, ScheduleOwnerObjectClass, ScheduleOwnerObjectInstance, ScheduleOwnerObjectRpc, ScheduleOwnerProtocolError, makeScheduleOwnerObjectClass, CloudflareScheduling_d_exports as t };
50
+ //# sourceMappingURL=CloudflareScheduling.d.mts.map
@@ -1,12 +1,26 @@
1
- import { n as cloudflareScheduledInputAdmissionLayer, s as CloudflareThreadClient, t as cloudflarePreparedInputAdmissionLayer } from "./prepared-admission-BhW2eT_a.mjs";
1
+ import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
+ import { CloudflareThreadClient } from "./CloudflareThreadClient.mjs";
3
+ import { n as cloudflareScheduledInputAdmissionLayer, t as cloudflarePreparedInputAdmissionLayer } from "./prepared-admission-DRBhl2Sp.mjs";
4
+ import "@effect-agent/thread/DurableAgentRuntime";
2
5
  import { Clock, Context, DateTime, Effect, Layer, Schema } from "effect";
3
- import { DoScheduleAlarmControl, DoScheduleTransaction, scheduleStoreLayer } from "@effect-agent/storage-cloudflare";
4
- import { DefinitionDigests, PersistedJson, ScheduleAuthorizationError, ScheduleCapacityError, ScheduleConflict, ScheduleDestination, ScheduleDriver, ScheduleFailpointError, ScheduleId, ScheduleNotFound, ScheduleOwner, ScheduleScope, ScheduleSnapshot, ScheduleSnapshotPage, ScheduleStorageError, ScheduleTimingRequest, ScheduleValidationError, ScheduleWakeNoop, Scheduling, defaultSchedulingLimits, scheduleOwnerKey } from "@effect-agent/thread";
5
- import { AgentId } from "@effect-agent/core";
6
+ import { AgentId } from "@effect-agent/core/Identifiers";
7
+ import { DefinitionDigests, PersistedJson } from "@effect-agent/thread/Records";
8
+ import { DurableObject, DurableObjectAlarm, DurableObjectState } from "effect-cf";
9
+ import { DoScheduleAlarmControl, DoScheduleTransaction, scheduleStoreLayer } from "@effect-agent/storage-cloudflare/DoScheduleStore";
10
+ import { ScheduleAuthorizationError, ScheduleCapacityError, ScheduleConflict, ScheduleDestination, ScheduleFailpointError, ScheduleId, ScheduleNotFound, ScheduleOwner, ScheduleScope, ScheduleSnapshot, ScheduleSnapshotPage, ScheduleStorageError, ScheduleTimingRequest, ScheduleValidationError, defaultSchedulingLimits } from "@effect-agent/thread/Schedule";
11
+ import { scheduleOwnerKey } from "@effect-agent/thread/ScheduleTransition";
12
+ import { ScheduleDriver, ScheduleWakeNoop, Scheduling } from "@effect-agent/thread/Scheduling";
6
13
  import { BrowserCrypto } from "@effect/platform-browser";
7
14
  import { SqliteClient } from "@effect/sql-sqlite-do";
8
- import { DurableObject, DurableObjectAlarm, DurableObjectState } from "effect-cf";
9
- //#region src/scheduling.ts
15
+ //#region src/CloudflareScheduling.ts
16
+ var CloudflareScheduling_exports = /* @__PURE__ */ __exportAll({
17
+ CloudflareSchedulingClient: () => CloudflareSchedulingClient,
18
+ ScheduleAlarmProtocolError: () => ScheduleAlarmProtocolError,
19
+ ScheduleOwnerIdentity: () => ScheduleOwnerIdentity,
20
+ ScheduleOwnerNamespace: () => ScheduleOwnerNamespace,
21
+ ScheduleOwnerProtocolError: () => ScheduleOwnerProtocolError,
22
+ makeScheduleOwnerObjectClass: () => makeScheduleOwnerObjectClass
23
+ });
10
24
  const SCHEDULE_ALARM_TAG = "effect-agent/ScheduleOwnerWake";
11
25
  const SCHEDULE_ALARM_ID = "driver";
12
26
  const ScheduleAlarmPayload = Schema.Struct({
@@ -335,6 +349,6 @@ const makeScheduleOwnerObjectClass = (host, limits = defaultSchedulingLimits) =>
335
349
  return ScheduleOwnerObject;
336
350
  };
337
351
  //#endregion
338
- export { CloudflareSchedulingClient, ScheduleAlarmProtocolError, ScheduleOwnerIdentity, ScheduleOwnerNamespace, ScheduleOwnerProtocolError, makeScheduleOwnerObjectClass };
352
+ export { CloudflareSchedulingClient, ScheduleAlarmProtocolError, ScheduleOwnerIdentity, ScheduleOwnerNamespace, ScheduleOwnerProtocolError, makeScheduleOwnerObjectClass, CloudflareScheduling_exports as t };
339
353
 
340
- //# sourceMappingURL=scheduling.mjs.map
354
+ //# sourceMappingURL=CloudflareScheduling.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CloudflareScheduling.mjs","names":["ScheduleScopeSchema","ScheduleSnapshotPageSchema","EffectCfDurableObjectState","EffectCfDurableObject"],"sources":["../src/CloudflareScheduling.ts"],"sourcesContent":["import { AgentId } from \"@effect-agent/core/Identifiers\";\nimport {\n DoScheduleAlarmControl,\n DoScheduleTransaction,\n scheduleStoreLayer,\n} from \"@effect-agent/storage-cloudflare/DoScheduleStore\";\nimport { type DurableSubmitAgent } from \"@effect-agent/thread/DurableAgentRuntime\";\nimport { DefinitionDigests, PersistedJson } from \"@effect-agent/thread/Records\";\nimport {\n ScheduleAuthorizationError,\n type ScheduleAuthorizer,\n ScheduleCapacityError,\n ScheduleConflict,\n ScheduleDestination,\n ScheduleFailpointError,\n ScheduleId,\n type SchedulingLimits,\n ScheduleNotFound,\n ScheduleOwner,\n type ScheduleScope,\n ScheduleScope as ScheduleScopeSchema,\n ScheduleSnapshot,\n ScheduleSnapshotPage as ScheduleSnapshotPageSchema,\n ScheduleStorageError,\n ScheduleTimingRequest,\n ScheduleValidationError,\n defaultSchedulingLimits,\n} from \"@effect-agent/thread/Schedule\";\nimport { scheduleOwnerKey } from \"@effect-agent/thread/ScheduleTransition\";\nimport {\n Scheduling,\n ScheduleDriver,\n type ScheduleManagementFailure,\n ScheduleWakeNoop,\n} from \"@effect-agent/thread/Scheduling\";\nimport { BrowserCrypto } from \"@effect/platform-browser\";\nimport { SqliteClient } from \"@effect/sql-sqlite-do\";\nimport { Clock, Context, DateTime, Effect, Layer, Schema } from \"effect\";\nimport {\n DurableObject as EffectCfDurableObject,\n DurableObjectAlarm,\n DurableObjectState as EffectCfDurableObjectState,\n type WorkerEnvironment,\n} from \"effect-cf\";\n\nimport type { ThreadObjectNamespace } from \"./CloudflareBindings.ts\";\nimport { CloudflareThreadClient } from \"./CloudflareThreadClient.ts\";\nimport {\n cloudflarePreparedInputAdmissionLayer,\n cloudflareScheduledInputAdmissionLayer,\n} from \"./internal/prepared-admission.ts\";\n\nconst SCHEDULE_ALARM_TAG = \"effect-agent/ScheduleOwnerWake\";\nconst SCHEDULE_ALARM_ID = \"driver\";\n\nconst ScheduleAlarmPayload = Schema.Struct({\n schemaVersion: Schema.Literal(1),\n generation: Schema.Int.check(Schema.isGreaterThan(0)),\n});\n\nexport class ScheduleAlarmProtocolError extends Schema.TaggedError<ScheduleAlarmProtocolError>()(\n \"ScheduleAlarmProtocolError\",\n { message: Schema.String },\n) {}\n\nconst boundedProtocolMessage = (message: string): string =>\n message.length <= 4_096 ? message : `${message.slice(0, 4_093)}...`;\n\nexport class ScheduleOwnerProtocolError extends Schema.TaggedError<ScheduleOwnerProtocolError>()(\n \"ScheduleOwnerProtocolError\",\n { message: Schema.String.check(Schema.isMaxLength(4_096)) },\n) {}\n\nconst ScheduleMutationRequestFields = {\n schemaVersion: Schema.Literal(1),\n agentId: AgentId,\n input: PersistedJson,\n scope: ScheduleScopeSchema,\n scheduleId: ScheduleId,\n timing: ScheduleTimingRequest,\n destination: ScheduleDestination,\n deliveryPrincipal: ScheduleScopeSchema.fields.principal,\n definitions: DefinitionDigests,\n};\n\nconst ScheduleCreateRequest = Schema.TaggedStruct(\"Create\", ScheduleMutationRequestFields);\n\nconst ScheduleUpdateRequest = Schema.TaggedStruct(\"Update\", {\n ...ScheduleMutationRequestFields,\n expectedRevision: Schema.Int.check(Schema.isGreaterThan(0)),\n});\n\nconst ScheduleGetRequest = Schema.TaggedStruct(\"Get\", {\n schemaVersion: Schema.Literal(1),\n scope: ScheduleScopeSchema,\n scheduleId: ScheduleId,\n});\n\nconst ScheduleListRequest = Schema.TaggedStruct(\"List\", {\n schemaVersion: Schema.Literal(1),\n scope: ScheduleScopeSchema,\n after: Schema.optionalKey(ScheduleId),\n limit: Schema.optionalKey(\n Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(100)),\n ),\n});\n\nconst ScheduleControlRequest = Schema.TaggedStruct(\"Control\", {\n schemaVersion: Schema.Literal(1),\n operation: Schema.Literals([\"pause\", \"resume\", \"cancel\"]),\n scope: ScheduleScopeSchema,\n scheduleId: ScheduleId,\n expectedRevision: Schema.Int.check(Schema.isGreaterThan(0)),\n});\n\nconst ScheduleOwnerRequest = Schema.Union([\n ScheduleCreateRequest,\n ScheduleUpdateRequest,\n ScheduleGetRequest,\n ScheduleListRequest,\n ScheduleControlRequest,\n]);\n\ntype ScheduleOwnerRequest = typeof ScheduleOwnerRequest.Type;\n\nconst ScheduleOwnerFailure = Schema.Union([\n ScheduleValidationError,\n ScheduleAuthorizationError,\n ScheduleConflict,\n ScheduleNotFound,\n ScheduleCapacityError,\n ScheduleStorageError,\n ScheduleFailpointError,\n ScheduleOwnerProtocolError,\n]);\n\ntype ScheduleOwnerFailure = typeof ScheduleOwnerFailure.Type;\n\nconst ScheduleOwnerResponse = Schema.Union([\n Schema.TaggedStruct(\"Snapshot\", { value: ScheduleSnapshot }),\n Schema.TaggedStruct(\"Page\", { value: ScheduleSnapshotPageSchema }),\n Schema.TaggedStruct(\"Failed\", { failure: ScheduleOwnerFailure }),\n]);\n\ntype ScheduleOwnerResponse = typeof ScheduleOwnerResponse.Type;\n\nconst decodeScheduleOwnerRequest = Schema.decodeUnknownEffect(ScheduleOwnerRequest);\nconst encodeScheduleOwnerRequest = Schema.encodeEffect(ScheduleOwnerRequest);\nconst decodeScheduleOwnerResponse = Schema.decodeUnknownEffect(ScheduleOwnerResponse);\nconst encodeScheduleOwnerResponse = Schema.encodeEffect(ScheduleOwnerResponse);\n\nconst scheduleProtocolFailure = (message: string): ScheduleOwnerResponse => ({\n _tag: \"Failed\",\n failure: ScheduleOwnerProtocolError.make({ message: boundedProtocolMessage(message) }),\n});\n\nexport interface ScheduleOwnerObjectRpc extends Rpc.DurableObjectBranded {\n schedule(encoded: unknown): Promise<unknown>;\n}\n\nexport class ScheduleOwnerNamespace extends Context.Service<\n ScheduleOwnerNamespace,\n { readonly namespace: DurableObjectNamespace<ScheduleOwnerObjectRpc> }\n>()(\"@effect-agent/platform-cloudflare/ScheduleOwnerNamespace\") {}\n\nconst passthroughAgent = (agentId: AgentId): DurableSubmitAgent<typeof PersistedJson> => ({\n definition: { id: agentId, input: PersistedJson },\n});\n\nconst requestOwner = (request: ScheduleOwnerRequest): ScheduleOwner => request.scope.owner;\n\n/** Provides the same authorized management service as NodeScheduling.layer. */\nexport class CloudflareSchedulingClient {\n static readonly layer: Layer.Layer<Scheduling, never, ScheduleOwnerNamespace> = Layer.effect(\n Scheduling,\n Effect.gen(function* () {\n const { namespace } = yield* ScheduleOwnerNamespace;\n\n const call = Effect.fn(\"CloudflareSchedulingClient.call\")(function* (\n owner: ScheduleOwner,\n request: ScheduleOwnerRequest,\n ): Effect.fn.Return<ScheduleOwnerResponse, ScheduleManagementFailure> {\n const encoded = yield* encodeScheduleOwnerRequest(request).pipe(\n Effect.mapError(() =>\n ScheduleStorageError.make({ operation: \"Schedule Owner protocol\", reason: \"corrupt\" }),\n ),\n );\n\n const raw = yield* Effect.tryPromise({\n try: () => namespace.get(namespace.idFromName(scheduleOwnerKey(owner))).schedule(encoded),\n catch: () =>\n ScheduleStorageError.make({\n operation: \"call Schedule Owner\",\n reason: \"unavailable\",\n }),\n });\n\n const response = yield* decodeScheduleOwnerResponse(raw).pipe(\n Effect.mapError(() =>\n ScheduleStorageError.make({ operation: \"Schedule Owner protocol\", reason: \"corrupt\" }),\n ),\n );\n\n if (response._tag !== \"Failed\") return response;\n\n return yield* response.failure._tag === \"ScheduleOwnerProtocolError\"\n ? ScheduleStorageError.make({ operation: \"Schedule Owner protocol\", reason: \"corrupt\" })\n : response.failure;\n });\n\n const encodeInput = Effect.fn(\"CloudflareSchedulingClient.encodeInput\")(function* <\n InputSchema extends Schema.Top,\n >(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n ): Effect.fn.Return<PersistedJson, ScheduleValidationError, InputSchema[\"EncodingServices\"]> {\n const encoded = yield* Schema.encodeEffect(agent.definition.input)(input).pipe(\n Effect.mapError(() =>\n ScheduleValidationError.make({\n message: \"Unable to encode Agent input\",\n }),\n ),\n );\n\n return yield* Schema.decodeUnknownEffect(PersistedJson)(encoded).pipe(\n Effect.mapError(() =>\n ScheduleValidationError.make({\n message: \"Agent input does not satisfy the canonical persistence bounds\",\n }),\n ),\n );\n });\n\n const create: Scheduling[\"Service\"][\"create\"] = (agent, input, options) =>\n Effect.gen(function* () {\n const payload = yield* encodeInput(agent, input);\n\n const response = yield* call(options.scope.owner, {\n _tag: \"Create\",\n schemaVersion: 1,\n agentId: agent.definition.id,\n input: payload,\n ...options,\n });\n\n return response._tag === \"Snapshot\"\n ? response.value\n : yield* ScheduleStorageError.make({\n operation: \"Schedule Owner protocol\",\n reason: \"corrupt\",\n });\n });\n\n const update: Scheduling[\"Service\"][\"update\"] = (agent, input, options) =>\n Effect.gen(function* () {\n const payload = yield* encodeInput(agent, input);\n\n const response = yield* call(options.scope.owner, {\n _tag: \"Update\",\n schemaVersion: 1,\n agentId: agent.definition.id,\n input: payload,\n ...options,\n });\n\n return response._tag === \"Snapshot\"\n ? response.value\n : yield* ScheduleStorageError.make({\n operation: \"Schedule Owner protocol\",\n reason: \"corrupt\",\n });\n });\n\n const get: Scheduling[\"Service\"][\"get\"] = (scope, scheduleId) =>\n Effect.gen(function* () {\n const response = yield* call(scope.owner, {\n _tag: \"Get\",\n schemaVersion: 1,\n scope,\n scheduleId,\n });\n\n return response._tag === \"Snapshot\"\n ? response.value\n : yield* ScheduleStorageError.make({\n operation: \"Schedule Owner protocol\",\n reason: \"corrupt\",\n });\n });\n\n const list: Scheduling[\"Service\"][\"list\"] = (scope, options = {}) =>\n Effect.gen(function* () {\n const response = yield* call(scope.owner, {\n _tag: \"List\",\n schemaVersion: 1,\n scope,\n ...(options.after === undefined ? {} : { after: options.after }),\n ...(options.limit === undefined ? {} : { limit: options.limit }),\n });\n\n return response._tag === \"Page\"\n ? response.value\n : yield* ScheduleStorageError.make({\n operation: \"Schedule Owner protocol\",\n reason: \"corrupt\",\n });\n });\n\n const control = (\n operation: \"pause\" | \"resume\" | \"cancel\",\n scope: ScheduleScope,\n scheduleId: ScheduleId,\n expectedRevision: number,\n ) =>\n Effect.gen(function* () {\n const response = yield* call(scope.owner, {\n _tag: \"Control\",\n schemaVersion: 1,\n operation,\n scope,\n scheduleId,\n expectedRevision,\n });\n\n return response._tag === \"Snapshot\"\n ? response.value\n : yield* ScheduleStorageError.make({\n operation: \"Schedule Owner protocol\",\n reason: \"corrupt\",\n });\n });\n\n return Scheduling.of({\n create,\n update,\n get,\n list,\n pause: (scope, id, revision) => control(\"pause\", scope, id, revision),\n resume: (scope, id, revision) => control(\"resume\", scope, id, revision),\n cancel: (scope, id, revision) => control(\"cancel\", scope, id, revision),\n });\n }),\n );\n}\n\nexport class ScheduleOwnerIdentity extends Context.Service<\n ScheduleOwnerIdentity,\n { readonly owner: ScheduleOwner }\n>()(\"@effect-agent/platform-cloudflare/ScheduleOwnerIdentity\") {}\n\nconst decodeOwnerName = Effect.fn(\"decodeScheduleOwnerName\")(function* (\n name: string | null | undefined,\n): Effect.fn.Return<ScheduleOwner, ScheduleOwnerProtocolError> {\n if (name === null || name === undefined) {\n return yield* ScheduleOwnerProtocolError.make({\n message: \"Schedule Owner objects require an idFromName identity\",\n });\n }\n\n const tuple = yield* Schema.decodeUnknownEffect(\n Schema.fromJsonString(Schema.Tuple([Schema.String, Schema.String])),\n )(name).pipe(\n Effect.mapError(() =>\n ScheduleOwnerProtocolError.make({ message: \"Schedule Owner object name is malformed\" }),\n ),\n );\n\n return yield* Schema.decodeUnknownEffect(ScheduleOwner)({\n tenantId: tuple[0],\n ownerId: tuple[1],\n }).pipe(\n Effect.mapError(() =>\n ScheduleOwnerProtocolError.make({ message: \"Schedule Owner object identity is invalid\" }),\n ),\n );\n});\n\nconst alarmStorageError = (operation: string) => (error: { readonly _tag: string }) =>\n ScheduleStorageError.make({\n operation,\n reason: error._tag === \"StorageOperationError\" ? \"unavailable\" : \"corrupt\",\n });\n\nconst transactionLayer: Layer.Layer<\n DoScheduleTransaction,\n never,\n DurableObjectAlarm.DurableObjectAlarm\n> = Layer.effect(\n DoScheduleTransaction,\n Effect.gen(function* () {\n const alarms = yield* DurableObjectAlarm.DurableObjectAlarm;\n\n return DoScheduleTransaction.of({\n run: (body) =>\n Effect.gen(function* () {\n const nowMillis = yield* Clock.currentTimeMillis;\n\n return yield* alarms\n .transaction((transaction) =>\n body((replacement) =>\n replacement.deadlineAtMillis === null\n ? transaction\n .cancelAlarm({ id: SCHEDULE_ALARM_ID, tag: SCHEDULE_ALARM_TAG })\n .pipe(Effect.mapError(alarmStorageError(\"cancel Schedule Owner alarm\")))\n : Effect.fromOption(\n DateTime.make(Math.max(replacement.deadlineAtMillis, nowMillis + 1)),\n ).pipe(\n Effect.mapError(() =>\n ScheduleStorageError.make({\n operation: \"validate Schedule Owner alarm deadline\",\n reason: \"corrupt\",\n }),\n ),\n Effect.flatMap((runAt) =>\n transaction\n .scheduleAlarm({\n id: SCHEDULE_ALARM_ID,\n tag: SCHEDULE_ALARM_TAG,\n runAt,\n payload: {\n schemaVersion: 1,\n generation: replacement.generation,\n },\n })\n .pipe(\n Effect.mapError(alarmStorageError(\"schedule Schedule Owner alarm\")),\n ),\n ),\n ),\n ),\n )\n .pipe(\n Effect.catchTag(\"StorageOperationError\", () =>\n ScheduleStorageError.make({\n operation: \"commit Schedule Owner transaction\",\n reason: \"unavailable\",\n }),\n ),\n );\n }),\n });\n }),\n);\n\ntype ScheduleRuntimeServices =\n | Scheduling\n | ScheduleDriver\n | DoScheduleAlarmControl\n | ScheduleOwnerIdentity\n | DurableObjectAlarm.DurableObjectAlarm;\n\nconst ensureOwner = (\n expected: ScheduleOwner,\n request: ScheduleOwnerRequest,\n): Effect.Effect<void, ScheduleOwnerProtocolError> => {\n const observed = requestOwner(request);\n\n return observed.tenantId === expected.tenantId && observed.ownerId === expected.ownerId\n ? Effect.void\n : Effect.fail(\n ScheduleOwnerProtocolError.make({\n message: \"The request owner does not match the addressed Schedule Owner object\",\n }),\n );\n};\n\nconst handleScheduleRequest = Effect.fn(\"ScheduleOwner.handleRequest\")(function* (\n encoded: unknown,\n): Effect.fn.Return<unknown, never, Scheduling | ScheduleOwnerIdentity> {\n const decoded = yield* decodeScheduleOwnerRequest(encoded).pipe(Effect.result);\n\n if (decoded._tag === \"Failure\") {\n return yield* encodeScheduleOwnerResponse(\n scheduleProtocolFailure(\"The Schedule request could not be decoded\"),\n ).pipe(Effect.orDie);\n }\n const request = decoded.success;\n const { owner } = yield* ScheduleOwnerIdentity;\n const scheduling = yield* Scheduling;\n\n const response = yield* Effect.gen(function* () {\n yield* ensureOwner(owner, request);\n switch (request._tag) {\n case \"Create\": {\n const value = yield* scheduling.create(passthroughAgent(request.agentId), request.input, {\n scope: request.scope,\n scheduleId: request.scheduleId,\n timing: request.timing,\n destination: request.destination,\n deliveryPrincipal: request.deliveryPrincipal,\n definitions: request.definitions,\n });\n\n return { _tag: \"Snapshot\" as const, value };\n }\n case \"Update\": {\n const value = yield* scheduling.update(passthroughAgent(request.agentId), request.input, {\n scope: request.scope,\n scheduleId: request.scheduleId,\n timing: request.timing,\n destination: request.destination,\n deliveryPrincipal: request.deliveryPrincipal,\n definitions: request.definitions,\n expectedRevision: request.expectedRevision,\n });\n\n return { _tag: \"Snapshot\" as const, value };\n }\n case \"Get\":\n return {\n _tag: \"Snapshot\" as const,\n value: yield* scheduling.get(request.scope, request.scheduleId),\n };\n case \"List\":\n return {\n _tag: \"Page\" as const,\n value: yield* scheduling.list(request.scope, {\n ...(request.after === undefined ? {} : { after: request.after }),\n ...(request.limit === undefined ? {} : { limit: request.limit }),\n }),\n };\n case \"Control\": {\n const value =\n request.operation === \"pause\"\n ? yield* scheduling.pause(request.scope, request.scheduleId, request.expectedRevision)\n : request.operation === \"resume\"\n ? yield* scheduling.resume(\n request.scope,\n request.scheduleId,\n request.expectedRevision,\n )\n : yield* scheduling.cancel(\n request.scope,\n request.scheduleId,\n request.expectedRevision,\n );\n\n return { _tag: \"Snapshot\" as const, value };\n }\n }\n }).pipe(\n Effect.map((value): ScheduleOwnerResponse => value),\n Effect.catch((failure) =>\n Schema.is(ScheduleOwnerFailure)(failure)\n ? Effect.succeed({ _tag: \"Failed\" as const, failure })\n : Effect.succeed(\n scheduleProtocolFailure(\"The Schedule operation failed outside its public contract\"),\n ),\n ),\n );\n\n return yield* encodeScheduleOwnerResponse(response).pipe(Effect.orDie);\n});\n\nconst scheduleAlarmHandler = (limits: SchedulingLimits) =>\n DurableObjectAlarm.processDue(\n (event) =>\n Effect.gen(function* () {\n if (event.tag !== SCHEDULE_ALARM_TAG || event.id !== SCHEDULE_ALARM_ID) {\n return yield* ScheduleAlarmProtocolError.make({\n message: `Unsupported Schedule Owner alarm ${event.tag}/${event.id}`,\n });\n }\n yield* Schema.decodeUnknownEffect(ScheduleAlarmPayload)(event.payload).pipe(\n Effect.mapError(() =>\n ScheduleAlarmProtocolError.make({\n message: \"Unsupported Schedule Owner alarm payload version\",\n }),\n ),\n );\n const scheduling = yield* ScheduleDriver;\n const alarmControl = yield* DoScheduleAlarmControl;\n const { owner } = yield* ScheduleOwnerIdentity;\n const nowMillis = yield* Clock.currentTimeMillis;\n\n yield* alarmControl.prearm(nowMillis + limits.recoveryPollMillis);\n const pass = yield* scheduling.runDue(owner);\n\n if (pass.failed > 0) {\n yield* alarmControl.prearm((yield* Clock.currentTimeMillis) + limits.recoveryPollMillis);\n } else {\n yield* alarmControl.reconcile;\n }\n }),\n { mode: \"ordered\" },\n ).pipe(Effect.asVoid);\n\nexport interface ScheduleOwnerObjectInstance extends InstanceType<\n EffectCfDurableObject.DurableObjectClass<Record<never, never>, ScheduleRuntimeServices>\n> {\n schedule(encoded: unknown): Promise<unknown>;\n alarm(alarmInfo?: AlarmInvocationInfo): Promise<void> | void;\n}\n\nexport interface ScheduleOwnerObjectClass {\n new (ctx: DurableObjectState, env: Cloudflare.Env): ScheduleOwnerObjectInstance;\n}\n\n/**\n * The host Layer supplies authorization and routing and is cached for the object incarnation.\n * Cloudflare eviction does not guarantee its finalizers run. Do not acquire resources requiring\n * cleanup in this Layer; acquire them inside scoped `manage` / `prepare` operations instead.\n * Native services belong to effect-cf; the database and alarm runtime remain instance-owned.\n */\nexport const makeScheduleOwnerObjectClass = <E>(\n host: Layer.Layer<\n ScheduleAuthorizer | ThreadObjectNamespace,\n E,\n EffectCfDurableObjectState.DurableObjectState | WorkerEnvironment | ScheduleOwnerIdentity\n >,\n limits: SchedulingLimits = defaultSchedulingLimits,\n): ScheduleOwnerObjectClass => {\n const ownerLayer = Layer.effect(\n ScheduleOwnerIdentity,\n Effect.gen(function* () {\n const state = yield* EffectCfDurableObjectState.DurableObjectState;\n\n return ScheduleOwnerIdentity.of({ owner: yield* decodeOwnerName(state.raw.id.name) });\n }),\n );\n\n const sqlLayer = Layer.unwrap(\n Effect.map(EffectCfDurableObjectState.DurableObjectState, (state) =>\n SqliteClient.layer({ storage: state.raw.storage }),\n ),\n );\n\n const application = Layer.merge(Scheduling.layer(limits), ScheduleDriver.layer(limits)).pipe(\n Layer.provideMerge(\n scheduleStoreLayer.pipe(Layer.provide(transactionLayer), Layer.provide(sqlLayer)),\n ),\n Layer.provide(\n cloudflareScheduledInputAdmissionLayer.pipe(\n Layer.provide(cloudflarePreparedInputAdmissionLayer),\n Layer.provide(CloudflareThreadClient.layer),\n ),\n ),\n Layer.provide(ScheduleWakeNoop),\n Layer.provide(BrowserCrypto.layer),\n Layer.provideMerge(DurableObjectAlarm.DurableObjectAlarm.layer),\n Layer.provide(host),\n Layer.provideMerge(ownerLayer),\n );\n\n const runtime: Layer.Layer<\n ScheduleRuntimeServices,\n E | ScheduleStorageError | ScheduleOwnerProtocolError | ScheduleValidationError,\n EffectCfDurableObjectState.DurableObjectState | WorkerEnvironment\n > = Layer.effectContext(\n Effect.gen(function* () {\n const state = yield* EffectCfDurableObjectState.DurableObjectState;\n const scope = yield* Effect.scope;\n\n return yield* state.blockConcurrencyWhile(Layer.buildWithScope(application, scope));\n }),\n );\n\n const rpc = {\n schedule: (encoded: unknown) => handleScheduleRequest(encoded),\n } satisfies EffectCfDurableObject.DurableObjectRpc<ScheduleRuntimeServices>;\n\n const Base = EffectCfDurableObject.make(runtime, {\n initialize: Effect.void,\n rpc,\n alarms: scheduleAlarmHandler(limits),\n });\n\n class ScheduleOwnerObject extends Base {\n override alarm(alarmInfo?: AlarmInvocationInfo): Promise<void> | void {\n return super.alarm?.(alarmInfo);\n }\n }\n\n return ScheduleOwnerObject;\n};\n"],"mappings":"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"}
@@ -1,9 +1,14 @@
1
- import { i as ThreadObjectNamespace } from "./bindings-BrVEOkfe.mjs";
1
+ import { ThreadObjectNamespace } from "./CloudflareBindings.mjs";
2
2
  import { Cause, Context, Effect, Layer, Schema } from "effect";
3
- import { DoSubscriptionAlarmControl } from "@effect-agent/storage-cloudflare";
4
- import { EventSources, SourcePartition, SubscriptionAuthorizer, SubscriptionDriver, SubscriptionInputBindings, SubscriptionIntake, SubscriptionLimits, Subscriptions } from "@effect-agent/thread";
5
3
  import { DurableObject, DurableObjectAlarm, DurableObjectState as DurableObjectState$1, WorkerEnvironment } from "effect-cf";
6
- //#region src/subscriptions.d.ts
4
+ import { SourcePartition, SubscriptionAuthorizer, SubscriptionLimits } from "@effect-agent/thread/Subscription";
5
+ import { DoSubscriptionAlarmControl } from "@effect-agent/storage-cloudflare/DoSubscriptionStore";
6
+ import { EventSources } from "@effect-agent/thread/EventSource";
7
+ import { SubscriptionInputBindings } from "@effect-agent/thread/SubscriptionInput";
8
+ import { SubscriptionDriver, SubscriptionIntake, Subscriptions } from "@effect-agent/thread/Subscriptions";
9
+ declare namespace CloudflareSubscriptions_d_exports {
10
+ export { CloudflareSubscriptionConfigError, CloudflareSubscriptionsClient, SubscriptionAlarmProtocolError, SubscriptionPartitionIdentity, SubscriptionPartitionNamespace, SubscriptionPartitionObjectClass, SubscriptionPartitionObjectInstance, SubscriptionPartitionObjectRpc, SubscriptionPartitionProtocolError, makeSubscriptionPartitionObjectClass, sourcePartitionName, validateCloudflareSubscriptionLimits };
11
+ }
7
12
  declare const SubscriptionAlarmProtocolError_base: Schema.Class<SubscriptionAlarmProtocolError, Schema.TaggedStruct<"SubscriptionAlarmProtocolError", {
8
13
  readonly message: Schema.String;
9
14
  }>, Cause.YieldableError>;
@@ -48,5 +53,5 @@ interface SubscriptionPartitionObjectClass {
48
53
  */
49
54
  declare const makeSubscriptionPartitionObjectClass: <E>(host: Layer.Layer<SubscriptionAuthorizer | EventSources | SubscriptionInputBindings | ThreadObjectNamespace, E, DurableObjectState$1.DurableObjectState | WorkerEnvironment | SubscriptionPartitionIdentity>, limits?: SubscriptionLimits) => SubscriptionPartitionObjectClass;
50
55
  //#endregion
51
- export { CloudflareSubscriptionConfigError, CloudflareSubscriptionsClient, SubscriptionAlarmProtocolError, SubscriptionPartitionIdentity, SubscriptionPartitionNamespace, SubscriptionPartitionObjectClass, SubscriptionPartitionObjectInstance, SubscriptionPartitionObjectRpc, SubscriptionPartitionProtocolError, makeSubscriptionPartitionObjectClass, sourcePartitionName, validateCloudflareSubscriptionLimits };
52
- //# sourceMappingURL=subscriptions.d.mts.map
56
+ export { CloudflareSubscriptionConfigError, CloudflareSubscriptionsClient, SubscriptionAlarmProtocolError, SubscriptionPartitionIdentity, SubscriptionPartitionNamespace, SubscriptionPartitionObjectClass, SubscriptionPartitionObjectInstance, SubscriptionPartitionObjectRpc, SubscriptionPartitionProtocolError, makeSubscriptionPartitionObjectClass, sourcePartitionName, CloudflareSubscriptions_d_exports as t, validateCloudflareSubscriptionLimits };
57
+ //# sourceMappingURL=CloudflareSubscriptions.d.mts.map
@@ -1,11 +1,30 @@
1
- import { s as CloudflareThreadClient, t as cloudflarePreparedInputAdmissionLayer } from "./prepared-admission-BhW2eT_a.mjs";
1
+ import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
+ import "./CloudflareBindings.mjs";
3
+ import { CloudflareThreadClient } from "./CloudflareThreadClient.mjs";
4
+ import { t as cloudflarePreparedInputAdmissionLayer } from "./prepared-admission-DRBhl2Sp.mjs";
5
+ import { Principal } from "@effect-agent/thread/SubmissionLedger";
2
6
  import { Cause, Clock, Context, DateTime, Effect, Layer, Schema } from "effect";
3
- import { DoSubscriptionAlarmControl, DoSubscriptionTransaction, doSubscriptionStoreLayer } from "@effect-agent/storage-cloudflare";
4
- import { EventAcknowledgement, EventSourceVersion, PersistedJson, Principal, SourcePartition, SubscriptionConfiguration, SubscriptionDeliverySnapshot, SubscriptionDriver, SubscriptionError, SubscriptionFailpointError, SubscriptionIntake, SubscriptionKey, SubscriptionScope, SubscriptionSnapshot, SubscriptionSourceError, Subscriptions, defaultSubscriptionLimits } from "@effect-agent/thread";
7
+ import { PersistedJson } from "@effect-agent/thread/Records";
8
+ import { DurableObject, DurableObjectAlarm, DurableObjectState } from "effect-cf";
5
9
  import { BrowserCrypto } from "@effect/platform-browser";
6
10
  import { SqliteClient } from "@effect/sql-sqlite-do";
7
- import { DurableObject, DurableObjectAlarm, DurableObjectState } from "effect-cf";
8
- //#region src/subscriptions.ts
11
+ import { EventAcknowledgement, EventSourceVersion, SourcePartition, SubscriptionConfiguration, SubscriptionDeliverySnapshot, SubscriptionError, SubscriptionFailpointError, SubscriptionKey, SubscriptionScope, SubscriptionSnapshot, SubscriptionSourceError, defaultSubscriptionLimits } from "@effect-agent/thread/Subscription";
12
+ import { DoSubscriptionAlarmControl, DoSubscriptionTransaction, doSubscriptionStoreLayer } from "@effect-agent/storage-cloudflare/DoSubscriptionStore";
13
+ import "@effect-agent/thread/EventSource";
14
+ import "@effect-agent/thread/SubscriptionInput";
15
+ import { SubscriptionDriver, SubscriptionIntake, Subscriptions } from "@effect-agent/thread/Subscriptions";
16
+ //#region src/CloudflareSubscriptions.ts
17
+ var CloudflareSubscriptions_exports = /* @__PURE__ */ __exportAll({
18
+ CloudflareSubscriptionConfigError: () => CloudflareSubscriptionConfigError,
19
+ CloudflareSubscriptionsClient: () => CloudflareSubscriptionsClient,
20
+ SubscriptionAlarmProtocolError: () => SubscriptionAlarmProtocolError,
21
+ SubscriptionPartitionIdentity: () => SubscriptionPartitionIdentity,
22
+ SubscriptionPartitionNamespace: () => SubscriptionPartitionNamespace,
23
+ SubscriptionPartitionProtocolError: () => SubscriptionPartitionProtocolError,
24
+ makeSubscriptionPartitionObjectClass: () => makeSubscriptionPartitionObjectClass,
25
+ sourcePartitionName: () => sourcePartitionName,
26
+ validateCloudflareSubscriptionLimits: () => validateCloudflareSubscriptionLimits
27
+ });
9
28
  const SUBSCRIPTION_ALARM_TAG = "effect-agent/SubscriptionPartitionWake";
10
29
  const SUBSCRIPTION_ALARM_ID = "driver";
11
30
  const MAX_ALARM_WALL_MILLIS = 72e4;
@@ -341,6 +360,6 @@ const makeSubscriptionPartitionObjectClass = (host, limits = defaultSubscription
341
360
  return SubscriptionPartitionObject;
342
361
  };
343
362
  //#endregion
344
- export { CloudflareSubscriptionConfigError, CloudflareSubscriptionsClient, SubscriptionAlarmProtocolError, SubscriptionPartitionIdentity, SubscriptionPartitionNamespace, SubscriptionPartitionProtocolError, makeSubscriptionPartitionObjectClass, sourcePartitionName, validateCloudflareSubscriptionLimits };
363
+ export { CloudflareSubscriptionConfigError, CloudflareSubscriptionsClient, SubscriptionAlarmProtocolError, SubscriptionPartitionIdentity, SubscriptionPartitionNamespace, SubscriptionPartitionProtocolError, makeSubscriptionPartitionObjectClass, sourcePartitionName, CloudflareSubscriptions_exports as t, validateCloudflareSubscriptionLimits };
345
364
 
346
- //# sourceMappingURL=subscriptions.mjs.map
365
+ //# sourceMappingURL=CloudflareSubscriptions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CloudflareSubscriptions.mjs","names":["EffectCfDurableObjectState","EffectCfDurableObject"],"sources":["../src/CloudflareSubscriptions.ts"],"sourcesContent":["import {\n DoSubscriptionAlarmControl,\n DoSubscriptionTransaction,\n doSubscriptionStoreLayer,\n} from \"@effect-agent/storage-cloudflare/DoSubscriptionStore\";\nimport { type EventSources } from \"@effect-agent/thread/EventSource\";\nimport { PersistedJson } from \"@effect-agent/thread/Records\";\nimport { Principal } from \"@effect-agent/thread/SubmissionLedger\";\nimport {\n EventAcknowledgement,\n EventSourceVersion,\n SourcePartition,\n type SubscriptionAuthorizer,\n SubscriptionConfiguration,\n SubscriptionDeliverySnapshot,\n SubscriptionError,\n SubscriptionFailpointError,\n SubscriptionKey,\n SubscriptionScope,\n type SubscriptionLimits,\n SubscriptionSnapshot,\n SubscriptionSourceError,\n defaultSubscriptionLimits,\n} from \"@effect-agent/thread/Subscription\";\nimport { type SubscriptionInputBindings } from \"@effect-agent/thread/SubscriptionInput\";\nimport {\n SubscriptionDriver,\n SubscriptionIntake,\n Subscriptions,\n} from \"@effect-agent/thread/Subscriptions\";\nimport { BrowserCrypto } from \"@effect/platform-browser\";\nimport { SqliteClient } from \"@effect/sql-sqlite-do\";\nimport { Cause, Clock, Context, DateTime, Effect, Layer, Schema } from \"effect\";\nimport {\n DurableObject as EffectCfDurableObject,\n DurableObjectAlarm,\n DurableObjectState as EffectCfDurableObjectState,\n type WorkerEnvironment,\n} from \"effect-cf\";\n\nimport { type ThreadObjectNamespace } from \"./CloudflareBindings.ts\";\nimport { CloudflareThreadClient } from \"./CloudflareThreadClient.ts\";\nimport { cloudflarePreparedInputAdmissionLayer } from \"./internal/prepared-admission.ts\";\n\nconst SUBSCRIPTION_ALARM_TAG = \"effect-agent/SubscriptionPartitionWake\";\nconst SUBSCRIPTION_ALARM_ID = \"driver\";\nconst MAX_ALARM_WALL_MILLIS = 12 * 60_000;\n\nconst SubscriptionAlarmPayload = Schema.Struct({\n schemaVersion: Schema.Literal(1),\n generation: Schema.Int.check(Schema.isGreaterThan(0)),\n});\n\nexport class SubscriptionAlarmProtocolError extends Schema.TaggedError<SubscriptionAlarmProtocolError>()(\n \"SubscriptionAlarmProtocolError\",\n { message: Schema.String },\n) {}\n\nexport class SubscriptionPartitionProtocolError extends Schema.TaggedError<SubscriptionPartitionProtocolError>()(\n \"SubscriptionPartitionProtocolError\",\n { message: Schema.String.check(Schema.isMaxLength(4_096)) },\n) {}\n\nexport class CloudflareSubscriptionConfigError extends Schema.TaggedError<CloudflareSubscriptionConfigError>()(\n \"CloudflareSubscriptionConfigError\",\n { message: Schema.String },\n) {}\n\n/** Reject limits whose four bounded phases could exceed the safe Durable Object alarm budget. */\nexport const validateCloudflareSubscriptionLimits = (\n limits: SubscriptionLimits,\n): Effect.Effect<void, CloudflareSubscriptionConfigError> => {\n const worstCaseMillis =\n 4 * Math.ceil(limits.batchSize / limits.concurrency) * limits.operationTimeoutMillis;\n\n return worstCaseMillis <= MAX_ALARM_WALL_MILLIS\n ? Effect.void\n : Effect.fail(\n CloudflareSubscriptionConfigError.make({\n message: \"Subscription limits can exceed the bounded Durable Object alarm wall budget\",\n }),\n );\n};\n\nconst protocolMessage = (message: string): string =>\n message.length <= 4_096 ? message : `${message.slice(0, 4_093)}...`;\n\nconst SubscribeRequest = Schema.TaggedStruct(\"Subscribe\", {\n schemaVersion: Schema.Literal(1),\n scope: Schema.Struct({\n ...SubscriptionScope.fields,\n }),\n options: Schema.Struct({\n subscriptionId: SubscriptionKey.fields.subscriptionId,\n source: EventSourceVersion,\n parameters: PersistedJson,\n context: PersistedJson,\n mode: Schema.Literals([\"once\", \"continuous\"]),\n expiresAtMillis: Schema.Number,\n destination: SubscriptionConfiguration.fields.destination,\n deliveryPrincipal: SubscriptionConfiguration.fields.deliveryPrincipal,\n agentId: SubscriptionConfiguration.fields.agentId,\n definitions: SubscriptionConfiguration.fields.definitions,\n }),\n});\n\nconst ListSubscriptionsRequest = Schema.TaggedStruct(\"ListSubscriptions\", {\n schemaVersion: Schema.Literal(1),\n scope: SubscribeRequest.fields.scope,\n after: Schema.optionalKey(Schema.Natural),\n limit: Schema.optionalKey(Schema.Int.check(Schema.isGreaterThan(0))),\n});\n\nconst CancelSubscriptionRequest = Schema.TaggedStruct(\"CancelSubscription\", {\n schemaVersion: Schema.Literal(1),\n scope: SubscribeRequest.fields.scope,\n key: SubscriptionKey,\n});\n\nconst ListDeliveriesRequest = Schema.TaggedStruct(\"ListDeliveries\", {\n schemaVersion: Schema.Literal(1),\n scope: SubscribeRequest.fields.scope,\n key: SubscriptionKey,\n after: Schema.optionalKey(Schema.String),\n limit: Schema.optionalKey(Schema.Int.check(Schema.isGreaterThan(0))),\n});\n\nconst AcceptRequest = Schema.TaggedStruct(\"Accept\", {\n schemaVersion: Schema.Literal(1),\n partition: SourcePartition,\n principal: Principal,\n source: EventSourceVersion,\n payload: PersistedJson,\n});\n\nconst StatusRequest = Schema.TaggedStruct(\"Status\", {\n schemaVersion: Schema.Literal(1),\n partition: SourcePartition,\n principal: Principal,\n source: EventSourceVersion,\n eventId: Schema.String,\n});\n\nconst SubscriptionPartitionRequest = Schema.Union([\n SubscribeRequest,\n ListSubscriptionsRequest,\n CancelSubscriptionRequest,\n ListDeliveriesRequest,\n AcceptRequest,\n StatusRequest,\n]);\n\ntype SubscriptionPartitionRequest = typeof SubscriptionPartitionRequest.Type;\n\nconst SubscriptionPage = Schema.Struct({\n items: Schema.Array(SubscriptionSnapshot),\n next: Schema.NullOr(Schema.Natural),\n});\n\nconst DeliveryPage = Schema.Struct({\n items: Schema.Array(SubscriptionDeliverySnapshot),\n next: Schema.NullOr(Schema.String),\n});\n\nconst IntakeStatus = Schema.Struct({\n ...EventAcknowledgement.fields,\n routingComplete: Schema.Boolean,\n routingFailure: Schema.NullOr(Schema.String),\n nextAttemptAtMillis: Schema.Number,\n});\n\nconst SubscriptionPartitionFailure = Schema.Union([\n SubscriptionError,\n SubscriptionSourceError,\n SubscriptionFailpointError,\n SubscriptionPartitionProtocolError,\n]);\n\ntype SubscriptionPartitionFailure = typeof SubscriptionPartitionFailure.Type;\n\nconst SubscriptionPartitionResponse = Schema.Union([\n Schema.TaggedStruct(\"Snapshot\", { value: SubscriptionSnapshot }),\n Schema.TaggedStruct(\"SubscriptionPage\", { value: SubscriptionPage }),\n Schema.TaggedStruct(\"DeliveryPage\", { value: DeliveryPage }),\n Schema.TaggedStruct(\"Acknowledgement\", { value: EventAcknowledgement }),\n Schema.TaggedStruct(\"Status\", { value: IntakeStatus }),\n Schema.TaggedStruct(\"Failed\", { failure: SubscriptionPartitionFailure }),\n]);\n\ntype SubscriptionPartitionResponse = typeof SubscriptionPartitionResponse.Type;\n\nconst decodeRequest = Schema.decodeUnknownEffect(SubscriptionPartitionRequest);\nconst encodeRequest = Schema.encodeEffect(SubscriptionPartitionRequest);\nconst decodeResponse = Schema.decodeUnknownEffect(SubscriptionPartitionResponse);\nconst encodeResponse = Schema.encodeEffect(SubscriptionPartitionResponse);\n\nconst protocolFailure = (message: string): SubscriptionPartitionResponse => ({\n _tag: \"Failed\",\n failure: SubscriptionPartitionProtocolError.make({ message: protocolMessage(message) }),\n});\n\nexport const sourcePartitionName = (partition: SourcePartition): string =>\n JSON.stringify([partition.tenantId, partition.address]);\n\nexport interface SubscriptionPartitionObjectRpc extends Rpc.DurableObjectBranded {\n subscription(encoded: unknown): Promise<unknown>;\n}\n\nexport class SubscriptionPartitionNamespace extends Context.Service<\n SubscriptionPartitionNamespace,\n { readonly namespace: DurableObjectNamespace<SubscriptionPartitionObjectRpc> }\n>()(\"@effect-agent/platform-cloudflare/SubscriptionPartitionNamespace\") {}\n\nconst storageFailure = (code: string): SubscriptionError =>\n SubscriptionError.make({ reason: \"storage\", code });\n\nconst corruptFailure = (code: string): SubscriptionError =>\n SubscriptionError.make({ reason: \"corrupt\", code });\n\n/** Worker-side management and trusted intake, routed to one fresh partition stub per call. */\nexport class CloudflareSubscriptionsClient {\n static layer(\n partition: SourcePartition,\n ): Layer.Layer<Subscriptions | SubscriptionIntake, never, SubscriptionPartitionNamespace> {\n return Layer.effectContext(\n Effect.gen(function* () {\n const { namespace } = yield* SubscriptionPartitionNamespace;\n\n const call = Effect.fn(\"CloudflareSubscriptionsClient.call\")(function* (\n addressedPartition: SourcePartition,\n request: SubscriptionPartitionRequest,\n ) {\n if (!samePartition(partition, addressedPartition)) {\n return yield* SubscriptionError.make({ reason: \"unauthorized\", code: \"partition\" });\n }\n\n const encoded = yield* encodeRequest(request).pipe(\n Effect.mapError(() => corruptFailure(\"subscription-partition-protocol\")),\n );\n\n const raw = yield* Effect.tryPromise({\n try: () =>\n namespace\n .get(namespace.idFromName(sourcePartitionName(partition)))\n .subscription(encoded),\n catch: () => storageFailure(\"call-subscription-partition\"),\n });\n\n return yield* decodeResponse(raw).pipe(\n Effect.mapError(() => corruptFailure(\"subscription-partition-protocol\")),\n );\n });\n\n const failed = (response: SubscriptionPartitionResponse): SubscriptionPartitionFailure =>\n response._tag === \"Failed\"\n ? response.failure\n : SubscriptionPartitionProtocolError.make({\n message: \"Unexpected subscription response\",\n });\n\n const asProtocolError = (): SubscriptionError =>\n corruptFailure(\"subscription-partition-protocol\");\n\n const subscriptions = Subscriptions.of({\n subscribe: (scope, options) =>\n Effect.gen(function* () {\n const response = yield* call(scope.partition, {\n _tag: \"Subscribe\",\n schemaVersion: 1,\n scope,\n options,\n });\n\n if (response._tag === \"Snapshot\") return response.value;\n const failure = failed(response);\n\n if (\n failure._tag === \"SubscriptionError\" ||\n failure._tag === \"SubscriptionSourceError\" ||\n failure._tag === \"SubscriptionFailpointError\"\n )\n return yield* failure;\n\n return yield* asProtocolError();\n }),\n listSubscriptions: (scope, after, limit) =>\n Effect.gen(function* () {\n const response = yield* call(scope.partition, {\n _tag: \"ListSubscriptions\",\n schemaVersion: 1,\n scope,\n ...(after === undefined ? {} : { after }),\n ...(limit === undefined ? {} : { limit }),\n });\n\n if (response._tag === \"SubscriptionPage\") return response.value;\n const failure = failed(response);\n\n return yield* failure._tag === \"SubscriptionError\" ? failure : asProtocolError();\n }),\n cancelSubscription: (scope, key) =>\n Effect.gen(function* () {\n const response = yield* call(scope.partition, {\n _tag: \"CancelSubscription\",\n schemaVersion: 1,\n scope,\n key,\n });\n\n if (response._tag === \"Snapshot\") return response.value;\n const failure = failed(response);\n\n if (\n failure._tag === \"SubscriptionError\" ||\n failure._tag === \"SubscriptionFailpointError\"\n )\n return yield* failure;\n\n return yield* asProtocolError();\n }),\n listDeliveries: (scope, key, after, limit) =>\n Effect.gen(function* () {\n const response = yield* call(scope.partition, {\n _tag: \"ListDeliveries\",\n schemaVersion: 1,\n scope,\n key,\n ...(after === undefined ? {} : { after }),\n ...(limit === undefined ? {} : { limit }),\n });\n\n if (response._tag === \"DeliveryPage\") return response.value;\n const failure = failed(response);\n\n return yield* failure._tag === \"SubscriptionError\" ? failure : asProtocolError();\n }),\n });\n\n const intake = SubscriptionIntake.of({\n accept: (principal, source, payload) =>\n Effect.gen(function* () {\n const request = yield* Schema.decodeUnknownEffect(AcceptRequest)({\n _tag: \"Accept\",\n schemaVersion: 1,\n partition,\n principal,\n source,\n payload,\n }).pipe(\n Effect.mapError(() =>\n SubscriptionError.make({ reason: \"validation\", code: \"event-payload\" }),\n ),\n );\n\n const response = yield* call(request.partition, request);\n\n if (response._tag === \"Acknowledgement\") return response.value;\n const failure = failed(response);\n\n if (\n failure._tag === \"SubscriptionError\" ||\n failure._tag === \"SubscriptionSourceError\" ||\n failure._tag === \"SubscriptionFailpointError\"\n )\n return yield* failure;\n\n return yield* asProtocolError();\n }),\n status: (principal, source, eventId) =>\n Effect.gen(function* () {\n const response = yield* call(partition, {\n _tag: \"Status\",\n schemaVersion: 1,\n partition,\n principal,\n source,\n eventId,\n });\n\n if (response._tag === \"Status\") return response.value;\n const failure = failed(response);\n\n return yield* failure._tag === \"SubscriptionError\" ? failure : asProtocolError();\n }),\n });\n\n return Context.make(Subscriptions, subscriptions).pipe(\n Context.add(SubscriptionIntake, intake),\n );\n }),\n );\n }\n}\n\nexport class SubscriptionPartitionIdentity extends Context.Service<\n SubscriptionPartitionIdentity,\n { readonly partition: SourcePartition }\n>()(\"@effect-agent/platform-cloudflare/SubscriptionPartitionIdentity\") {}\n\nconst decodePartitionName = Effect.fn(\"decodeSubscriptionPartitionName\")(function* (\n name: string | null | undefined,\n) {\n if (name === null || name === undefined) {\n return yield* SubscriptionPartitionProtocolError.make({\n message: \"Subscription Partition objects require an idFromName identity\",\n });\n }\n\n const tuple = yield* Schema.decodeUnknownEffect(\n Schema.fromJsonString(Schema.Tuple([Schema.String, Schema.String])),\n )(name).pipe(\n Effect.mapError(() =>\n SubscriptionPartitionProtocolError.make({\n message: \"Subscription Partition name is malformed\",\n }),\n ),\n );\n\n return yield* Schema.decodeUnknownEffect(SourcePartition)({\n tenantId: tuple[0],\n address: tuple[1],\n }).pipe(\n Effect.mapError(() =>\n SubscriptionPartitionProtocolError.make({\n message: \"Subscription Partition identity is invalid\",\n }),\n ),\n );\n});\n\nconst samePartition = Schema.toEquivalence(SourcePartition);\n\nconst requestPartition = (request: SubscriptionPartitionRequest): SourcePartition =>\n request._tag === \"Accept\" || request._tag === \"Status\"\n ? request.partition\n : request.scope.partition;\n\nconst handleRequest = Effect.fn(\"SubscriptionPartition.handleRequest\")(function* (\n encoded: unknown,\n) {\n const decoded = yield* decodeRequest(encoded).pipe(Effect.result);\n\n if (decoded._tag === \"Failure\") {\n return yield* encodeResponse(\n protocolFailure(\"The subscription request could not be decoded\"),\n ).pipe(Effect.orDie);\n }\n const request = decoded.success;\n const { partition } = yield* SubscriptionPartitionIdentity;\n\n if (!samePartition(partition, requestPartition(request))) {\n return yield* encodeResponse(\n protocolFailure(\"The request partition does not match the addressed object\"),\n ).pipe(Effect.orDie);\n }\n const subscriptions = yield* Subscriptions;\n const intake = yield* SubscriptionIntake;\n\n const response = yield* Effect.gen(function* (): Effect.fn.Return<\n SubscriptionPartitionResponse,\n SubscriptionPartitionFailure\n > {\n switch (request._tag) {\n case \"Subscribe\":\n return {\n _tag: \"Snapshot\",\n value: yield* subscriptions.subscribe(request.scope, request.options),\n };\n case \"ListSubscriptions\":\n return {\n _tag: \"SubscriptionPage\",\n value: yield* subscriptions.listSubscriptions(\n request.scope,\n request.after,\n request.limit,\n ),\n };\n case \"CancelSubscription\":\n return {\n _tag: \"Snapshot\",\n value: yield* subscriptions.cancelSubscription(request.scope, request.key),\n };\n case \"ListDeliveries\":\n return {\n _tag: \"DeliveryPage\",\n value: yield* subscriptions.listDeliveries(\n request.scope,\n request.key,\n request.after,\n request.limit,\n ),\n };\n case \"Accept\":\n return {\n _tag: \"Acknowledgement\",\n value: yield* intake.accept(request.principal, request.source, request.payload),\n };\n case \"Status\":\n return {\n _tag: \"Status\",\n value: yield* intake.status(request.principal, request.source, request.eventId),\n };\n }\n }).pipe(\n Effect.catch((failure) =>\n Schema.is(SubscriptionPartitionFailure)(failure)\n ? Effect.succeed({ _tag: \"Failed\" as const, failure })\n : Effect.succeed(protocolFailure(\"The subscription operation failed outside its contract\")),\n ),\n );\n\n return yield* encodeResponse(response).pipe(Effect.orDie);\n});\n\nconst alarmStorageError = (code: string) => () => storageFailure(code);\n\nconst transactionLayer: Layer.Layer<\n DoSubscriptionTransaction,\n never,\n DurableObjectAlarm.DurableObjectAlarm\n> = Layer.effect(\n DoSubscriptionTransaction,\n Effect.gen(function* () {\n const alarms = yield* DurableObjectAlarm.DurableObjectAlarm;\n\n return DoSubscriptionTransaction.of({\n run: (body) =>\n Effect.gen(function* () {\n const nowMillis = yield* Clock.currentTimeMillis;\n\n return yield* alarms\n .transaction((transaction) =>\n body((replacement) =>\n replacement.deadlineAtMillis === null\n ? transaction\n .cancelAlarm({ id: SUBSCRIPTION_ALARM_ID, tag: SUBSCRIPTION_ALARM_TAG })\n .pipe(Effect.mapError(alarmStorageError(\"cancel-subscription-alarm\")))\n : Effect.fromOption(\n DateTime.make(Math.max(replacement.deadlineAtMillis, nowMillis + 1)),\n ).pipe(\n Effect.mapError(() => corruptFailure(\"subscription-alarm-deadline\")),\n Effect.flatMap((runAt) =>\n transaction\n .scheduleAlarm({\n id: SUBSCRIPTION_ALARM_ID,\n tag: SUBSCRIPTION_ALARM_TAG,\n runAt,\n payload: { schemaVersion: 1, generation: replacement.generation },\n })\n .pipe(Effect.mapError(alarmStorageError(\"schedule-subscription-alarm\"))),\n ),\n ),\n ),\n )\n .pipe(\n Effect.catchTag(\"StorageOperationError\", () =>\n storageFailure(\"commit-subscription-transaction\"),\n ),\n );\n }),\n });\n }),\n);\n\nconst alarmHandler = (limits: SubscriptionLimits) =>\n DurableObjectAlarm.processDue(\n (event) =>\n Effect.gen(function* () {\n if (event.tag !== SUBSCRIPTION_ALARM_TAG || event.id !== SUBSCRIPTION_ALARM_ID) {\n return yield* SubscriptionAlarmProtocolError.make({\n message: `Unsupported Subscription Partition alarm ${event.tag}/${event.id}`,\n });\n }\n yield* Schema.decodeUnknownEffect(SubscriptionAlarmPayload)(event.payload).pipe(\n Effect.mapError(() =>\n SubscriptionAlarmProtocolError.make({\n message: \"Unsupported subscription alarm payload\",\n }),\n ),\n );\n const driver = yield* SubscriptionDriver;\n const alarmControl = yield* DoSubscriptionAlarmControl;\n\n yield* alarmControl.prearm((yield* Clock.currentTimeMillis) + limits.retryMillis);\n\n const pass = yield* driver.runDue.pipe(\n Effect.catchCause((cause) =>\n Cause.hasInterrupts(cause)\n ? Effect.failCause(cause)\n : Clock.currentTimeMillis.pipe(\n Effect.flatMap((time) => alarmControl.prearm(time + limits.retryMillis)),\n Effect.andThen(Effect.failCause(cause)),\n ),\n ),\n );\n\n if (pass.failed > 0) {\n yield* alarmControl.prearm((yield* Clock.currentTimeMillis) + limits.retryMillis);\n } else {\n yield* alarmControl.reconcile;\n }\n }),\n { mode: \"ordered\" },\n ).pipe(Effect.asVoid);\n\ntype SubscriptionRuntimeServices =\n | Subscriptions\n | SubscriptionIntake\n | SubscriptionDriver\n | DoSubscriptionAlarmControl\n | SubscriptionPartitionIdentity\n | DurableObjectAlarm.DurableObjectAlarm;\n\nexport interface SubscriptionPartitionObjectInstance extends InstanceType<\n EffectCfDurableObject.DurableObjectClass<Record<never, never>, SubscriptionRuntimeServices>\n> {\n subscription(encoded: unknown): Promise<unknown>;\n alarm(alarmInfo?: AlarmInvocationInfo): Promise<void> | void;\n}\n\nexport interface SubscriptionPartitionObjectClass {\n new (ctx: DurableObjectState, env: Cloudflare.Env): SubscriptionPartitionObjectInstance;\n}\n\n/**\n * Build one source-addressed SQLite Durable Object. The host Layer binds the permitted source\n * catalog and authority. It must not retain cleanup-scoped resources across RPC events.\n */\nexport const makeSubscriptionPartitionObjectClass = <E>(\n host: Layer.Layer<\n SubscriptionAuthorizer | EventSources | SubscriptionInputBindings | ThreadObjectNamespace,\n E,\n | EffectCfDurableObjectState.DurableObjectState\n | WorkerEnvironment\n | SubscriptionPartitionIdentity\n >,\n limits: SubscriptionLimits = defaultSubscriptionLimits,\n): SubscriptionPartitionObjectClass => {\n const cloudflareLimitsLayer = Layer.effectDiscard(validateCloudflareSubscriptionLimits(limits));\n\n const identityLayer = Layer.effect(\n SubscriptionPartitionIdentity,\n Effect.gen(function* () {\n const state = yield* EffectCfDurableObjectState.DurableObjectState;\n\n return SubscriptionPartitionIdentity.of({\n partition: yield* decodePartitionName(state.raw.id.name),\n });\n }),\n );\n\n const sqlLayer = Layer.unwrap(\n Effect.map(EffectCfDurableObjectState.DurableObjectState, (state) =>\n SqliteClient.layer({ storage: state.raw.storage }),\n ),\n );\n\n const partitionStore = Layer.unwrap(\n Effect.map(SubscriptionPartitionIdentity, ({ partition }) =>\n doSubscriptionStoreLayer(partition).pipe(\n Layer.provide(transactionLayer),\n Layer.provide(sqlLayer),\n ),\n ),\n );\n\n const application = Layer.mergeAll(\n Subscriptions.layer(limits),\n SubscriptionIntake.layer(limits),\n SubscriptionDriver.layer(limits),\n cloudflareLimitsLayer,\n ).pipe(\n Layer.provideMerge(partitionStore),\n Layer.provide(\n cloudflarePreparedInputAdmissionLayer.pipe(Layer.provide(CloudflareThreadClient.layer)),\n ),\n Layer.provide(BrowserCrypto.layer),\n Layer.provideMerge(DurableObjectAlarm.DurableObjectAlarm.layer),\n Layer.provide(host),\n Layer.provideMerge(identityLayer),\n );\n\n const runtime: Layer.Layer<\n SubscriptionRuntimeServices,\n E | SubscriptionError | SubscriptionPartitionProtocolError | CloudflareSubscriptionConfigError,\n EffectCfDurableObjectState.DurableObjectState | WorkerEnvironment\n > = Layer.effectContext(\n Effect.gen(function* () {\n const state = yield* EffectCfDurableObjectState.DurableObjectState;\n const scope = yield* Effect.scope;\n\n return yield* state.blockConcurrencyWhile(Layer.buildWithScope(application, scope));\n }),\n );\n\n const rpc = {\n subscription: (encoded: unknown) => handleRequest(encoded),\n } satisfies EffectCfDurableObject.DurableObjectRpc<SubscriptionRuntimeServices>;\n\n const Base = EffectCfDurableObject.make(runtime, {\n initialize: Effect.void,\n rpc,\n alarms: alarmHandler(limits),\n });\n\n class SubscriptionPartitionObject extends Base {\n override alarm(alarmInfo?: AlarmInvocationInfo): Promise<void> | void {\n return super.alarm?.(alarmInfo);\n }\n }\n\n return SubscriptionPartitionObject;\n};\n"],"mappings":"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"}