@effect-agent/platform-cloudflare 0.1.0-beta.47 → 0.1.0-beta.48

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.
@@ -1 +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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"}
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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"}
@@ -573,6 +573,11 @@ declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorded | Hos
573
573
  } | {
574
574
  readonly _tag: "HostFailed";
575
575
  readonly failure: {
576
+ readonly _tag: "DurableAlarmError";
577
+ readonly operation: string;
578
+ readonly message: string;
579
+ readonly cause?: Schema.Json | undefined;
580
+ } | {
576
581
  readonly _tag: "HostProtocolError";
577
582
  readonly message: string;
578
583
  } | {
@@ -639,11 +644,6 @@ declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorded | Hos
639
644
  readonly limit: "database-bytes" | "input-bytes" | "queue-depth";
640
645
  readonly actual: number;
641
646
  readonly maximum: number;
642
- } | {
643
- readonly _tag: "DurableAlarmError";
644
- readonly operation: string;
645
- readonly message: string;
646
- readonly cause?: Schema.Json | undefined;
647
647
  } | {
648
648
  readonly _tag: "OperationDenied";
649
649
  readonly operation: "abort" | "awaitSettlement" | "explain" | "observe" | "resolveApproval" | "resolveUnknown" | "retry" | "scanObligations" | "verify" | "wake";
@@ -157,7 +157,7 @@ declare namespace ThreadObject_d_exports {
157
157
  * D-P6-1): a factory returning a class that applications export from their Worker entry.
158
158
  * One SQLite-backed Object per Thread is the serialized owner (durability §6); the
159
159
  * Object never runs `runResolvedWorker`'s infinite loop — each ingress event or alarm runs
160
- * ONE bounded `runRecovery` + `processThreadResolved` pass, and the persisted alarm
160
+ * ONE bounded `runRecovery` + `processThreadHead` pass, and the persisted alarm
161
161
  * (the single multiplexed slot, D-P6-2) finishes accepted work across evictions WITHOUT any
162
162
  * incoming request.
163
163
  *
@@ -632,6 +632,11 @@ declare const encodeAdminResponse: (input: AdminFailed | ExplainedRecovery | Obl
632
632
  } | {
633
633
  readonly _tag: "AdminFailed";
634
634
  readonly failure: {
635
+ readonly _tag: "DurableAlarmError";
636
+ readonly operation: string;
637
+ readonly message: string;
638
+ readonly cause?: Schema.Json | undefined;
639
+ } | {
635
640
  readonly _tag: "HostProtocolError";
636
641
  readonly message: string;
637
642
  } | {
@@ -670,11 +675,6 @@ declare const encodeAdminResponse: (input: AdminFailed | ExplainedRecovery | Obl
670
675
  } | {
671
676
  readonly _tag: "DurableRuntimeFailpointError";
672
677
  readonly location: "abort:after-intent" | "approval:after-request-append" | "approval:after-suspend" | "claim:after-claim" | "compaction:after-canonical-append" | "input:after-canonical-append" | "join:after-canonical-append" | "join:after-claim" | "policy:after-reservation-append" | "policy:before-reservation-append" | "resolve:after-intent" | "run:after-start-append" | "run:before-start-append" | "step:after-step-append" | "subagent:after-admit" | "subagent:after-child-abort-intent" | "subagent:after-child-ready" | "subagent:after-join-append" | "subagent:after-release" | "subagent:after-release-pending" | "subagent:after-request-append" | "subagent:after-reserve" | "subagent:after-sibling-settle" | "subagent:after-start-append" | "subagent:after-suspend" | "submit:after-admit" | "submit:after-materialize" | "terminalize:after-canonical-append" | "terminalize:after-reserve" | "tools:after-prepared-append" | "tools:before-prepared-append" | "turn:after-canonical-append" | "turn:after-response-append" | "turn:after-results-append";
673
- } | {
674
- readonly _tag: "DurableAlarmError";
675
- readonly operation: string;
676
- readonly message: string;
677
- readonly cause?: Schema.Json | undefined;
678
678
  } | {
679
679
  readonly _tag: "OperationDenied";
680
680
  readonly operation: "abort" | "awaitSettlement" | "explain" | "observe" | "resolveApproval" | "resolveUnknown" | "retry" | "scanObligations" | "verify" | "wake";
@@ -732,4 +732,4 @@ interface Class<EventServices = never> {
732
732
  declare const make: <ApplicationServices, ApplicationError, EventServices = never, EventLayerError = never>(applicationLayer: Layer.Layer<CloudflareDurableRuntimeServices | ApplicationServices, ApplicationError, CloudflareBootstrapServices | DurableObjectState$1.DurableObjectState | WorkerEnvironment | DurableObjectContext | ThreadObjectNamespace>, options: Options<ApplicationServices, EventServices, EventLayerError>) => Class<ApplicationServices | EventServices>;
733
733
  //#endregion
734
734
  export { CloudflareDurableRuntimeOptions as C, layerConfig as E, CloudflareDurableRuntimeInitializationError as S, layer as T, decodeObligationThresholds as _, AdminVerifyRequest as a, make as b, Instance as c, RetryExecuted as d, ThreadObject_d_exports as f, decodeAdminVerifyRequest as g, decodeAdminResponse as h, AdminResponse as i, ObligationsScanned as l, decodeAdminExplainRequest as m, AdminFailed as n, Class as o, VerifiedIntegrity as p, AdminFailure as r, ExplainedRecovery as s, AdminExplainRequest as t, Options as u, decodeRetryCommand as v, CloudflareDurableRuntimeServices as w, CloudflareBootstrapServices as x, encodeAdminResponse as y };
735
- //# sourceMappingURL=ThreadObject-TEgOO0YM.d.mts.map
735
+ //# sourceMappingURL=ThreadObject-DH1RYqyz.d.mts.map