@effect/platform-cloudflare 0.0.0 → 4.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +434 -0
- package/CLAUDE.md +434 -0
- package/LICENSE +21 -0
- package/README.md +506 -0
- package/ai-docs/README.md +44 -0
- package/ai-docs/package.json +36 -0
- package/ai-docs/src/01_effect/01_basics/01_effect-gen.ts +30 -0
- package/ai-docs/src/01_effect/01_basics/02_effect-fn.ts +52 -0
- package/ai-docs/src/01_effect/01_basics/10_creating-effects.ts +74 -0
- package/ai-docs/src/01_effect/01_basics/index.md +7 -0
- package/ai-docs/src/01_effect/02_schema/10_schema-basics.ts +43 -0
- package/ai-docs/src/01_effect/02_schema/index.md +7 -0
- package/ai-docs/src/01_effect/03_services/01_service.ts +45 -0
- package/ai-docs/src/01_effect/03_services/10_reference.ts +10 -0
- package/ai-docs/src/01_effect/03_services/20_layer-composition.ts +70 -0
- package/ai-docs/src/01_effect/03_services/20_layer-unwrap.ts +66 -0
- package/ai-docs/src/01_effect/03_services/index.md +5 -0
- package/ai-docs/src/01_effect/04_errors/01_error-handling.ts +30 -0
- package/ai-docs/src/01_effect/04_errors/10_catch-tags.ts +24 -0
- package/ai-docs/src/01_effect/04_errors/20_reason-errors.ts +64 -0
- package/ai-docs/src/01_effect/04_errors/index.md +1 -0
- package/ai-docs/src/01_effect/05_resources/10_acquire-release.ts +105 -0
- package/ai-docs/src/01_effect/05_resources/20_layer-side-effects.ts +31 -0
- package/ai-docs/src/01_effect/05_resources/30_layer-map.ts +86 -0
- package/ai-docs/src/01_effect/05_resources/index.md +3 -0
- package/ai-docs/src/01_effect/06_running/10_run-main.ts +30 -0
- package/ai-docs/src/01_effect/06_running/20_layer-launch.ts +27 -0
- package/ai-docs/src/01_effect/06_running/index.md +1 -0
- package/ai-docs/src/01_effect/07_pubsub/10_pubsub.ts +56 -0
- package/ai-docs/src/01_effect/07_pubsub/index.md +3 -0
- package/ai-docs/src/03_stream/10_creating-streams.ts +103 -0
- package/ai-docs/src/03_stream/20_consuming-streams.ts +137 -0
- package/ai-docs/src/03_stream/30_encoding.ts +163 -0
- package/ai-docs/src/03_stream/index.md +4 -0
- package/ai-docs/src/04_integration/10_managed-runtime.ts +129 -0
- package/ai-docs/src/04_integration/index.md +5 -0
- package/ai-docs/src/05_batching/10_request-resolver.ts +89 -0
- package/ai-docs/src/05_batching/index.md +3 -0
- package/ai-docs/src/06_schedule/10_schedules.ts +111 -0
- package/ai-docs/src/06_schedule/index.md +3 -0
- package/ai-docs/src/07_datetime/10_creating-and-formatting.ts +30 -0
- package/ai-docs/src/07_datetime/20_time-zones.ts +44 -0
- package/ai-docs/src/07_datetime/index.md +5 -0
- package/ai-docs/src/08_observability/10_logging.ts +66 -0
- package/ai-docs/src/08_observability/20_otlp-tracing.ts +95 -0
- package/ai-docs/src/08_observability/index.md +7 -0
- package/ai-docs/src/09_testing/10_effect-tests.ts +55 -0
- package/ai-docs/src/09_testing/20_layer-tests.ts +138 -0
- package/ai-docs/src/09_testing/index.md +1 -0
- package/ai-docs/src/10_predicate/01_basics.ts +14 -0
- package/ai-docs/src/10_predicate/index.md +9 -0
- package/ai-docs/src/40_sql/10_basics.ts +175 -0
- package/ai-docs/src/40_sql/index.md +6 -0
- package/ai-docs/src/50_http-client/10_basics.ts +102 -0
- package/ai-docs/src/50_http-client/index.md +3 -0
- package/ai-docs/src/51_http-server/10_basics.ts +118 -0
- package/ai-docs/src/51_http-server/20_testing.ts +100 -0
- package/ai-docs/src/51_http-server/fixtures/api/Api.ts +14 -0
- package/ai-docs/src/51_http-server/fixtures/api/Authorization.ts +36 -0
- package/ai-docs/src/51_http-server/fixtures/api/System.ts +10 -0
- package/ai-docs/src/51_http-server/fixtures/api/Users.ts +107 -0
- package/ai-docs/src/51_http-server/fixtures/domain/User.ts +21 -0
- package/ai-docs/src/51_http-server/fixtures/domain/UserErrors.ts +22 -0
- package/ai-docs/src/51_http-server/fixtures/server/Authorization.ts +37 -0
- package/ai-docs/src/51_http-server/fixtures/server/Users/http.ts +80 -0
- package/ai-docs/src/51_http-server/fixtures/server/Users.ts +183 -0
- package/ai-docs/src/51_http-server/index.md +3 -0
- package/ai-docs/src/52_graphql/10_basics.ts +117 -0
- package/ai-docs/src/52_graphql/20_testing.ts +45 -0
- package/ai-docs/src/52_graphql/30_batching.ts +118 -0
- package/ai-docs/src/52_graphql/40_aliased-batching.ts +124 -0
- package/ai-docs/src/52_graphql/50_errors-and-retries.ts +74 -0
- package/ai-docs/src/52_graphql/index.md +6 -0
- package/ai-docs/src/60_child-process/10_working-with-child-processes.ts +117 -0
- package/ai-docs/src/60_child-process/index.md +3 -0
- package/ai-docs/src/70_cli/10_basics.ts +162 -0
- package/ai-docs/src/70_cli/index.md +5 -0
- package/ai-docs/src/71_ai/10_language-model.ts +156 -0
- package/ai-docs/src/71_ai/20_tools.ts +226 -0
- package/ai-docs/src/71_ai/30_chat.ts +158 -0
- package/ai-docs/src/71_ai/fixtures/domain/LaunchPlan.ts +9 -0
- package/ai-docs/src/71_ai/index.md +5 -0
- package/ai-docs/src/80_cluster/10_entities.ts +97 -0
- package/ai-docs/src/80_cluster/index.md +4 -0
- package/ai-docs/src/index.md +10 -0
- package/ai-docs/tsconfig.json +28 -0
- package/dist/AlchemyCloudflareCluster.d.ts +134 -0
- package/dist/AlchemyCloudflareCluster.d.ts.map +1 -0
- package/dist/AlchemyCloudflareCluster.js +111 -0
- package/dist/AlchemyCloudflareCluster.js.map +1 -0
- package/dist/CloudflareCluster.d.ts +196 -0
- package/dist/CloudflareCluster.d.ts.map +1 -0
- package/dist/CloudflareCluster.js +533 -0
- package/dist/CloudflareCluster.js.map +1 -0
- package/dist/CloudflareDurableObjectPrograms.d.ts +279 -0
- package/dist/CloudflareDurableObjectPrograms.d.ts.map +1 -0
- package/dist/CloudflareDurableObjectPrograms.js +295 -0
- package/dist/CloudflareDurableObjectPrograms.js.map +1 -0
- package/dist/CloudflareDurableObjects.d.ts +149 -0
- package/dist/CloudflareDurableObjects.d.ts.map +1 -0
- package/dist/CloudflareDurableObjects.js +337 -0
- package/dist/CloudflareDurableObjects.js.map +1 -0
- package/dist/CloudflarePersistedQueue.d.ts +36 -0
- package/dist/CloudflarePersistedQueue.d.ts.map +1 -0
- package/dist/CloudflarePersistedQueue.js +122 -0
- package/dist/CloudflarePersistedQueue.js.map +1 -0
- package/dist/CloudflareWorkflowEngine.d.ts +72 -0
- package/dist/CloudflareWorkflowEngine.d.ts.map +1 -0
- package/dist/CloudflareWorkflowEngine.js +187 -0
- package/dist/CloudflareWorkflowEngine.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/alchemyCluster.d.ts +2 -0
- package/dist/internal/alchemyCluster.d.ts.map +1 -0
- package/dist/internal/alchemyCluster.js +75 -0
- package/dist/internal/alchemyCluster.js.map +1 -0
- package/dist/internal/boundedMap.d.ts +3 -0
- package/dist/internal/boundedMap.d.ts.map +1 -0
- package/dist/internal/boundedMap.js +15 -0
- package/dist/internal/boundedMap.js.map +1 -0
- package/dist/internal/cluster.d.ts +57 -0
- package/dist/internal/cluster.d.ts.map +1 -0
- package/dist/internal/cluster.js +2 -0
- package/dist/internal/cluster.js.map +1 -0
- package/dist/internal/clusterName.d.ts +2 -0
- package/dist/internal/clusterName.d.ts.map +1 -0
- package/dist/internal/clusterName.js +16 -0
- package/dist/internal/clusterName.js.map +1 -0
- package/dist/internal/entityKeepAlive.d.ts +2 -0
- package/dist/internal/entityKeepAlive.d.ts.map +1 -0
- package/dist/internal/entityKeepAlive.js +73 -0
- package/dist/internal/entityKeepAlive.js.map +1 -0
- package/dist/internal/entityMailbox.d.ts +2 -0
- package/dist/internal/entityMailbox.d.ts.map +1 -0
- package/dist/internal/entityMailbox.js +160 -0
- package/dist/internal/entityMailbox.js.map +1 -0
- package/dist/internal/entityRegistry.d.ts +16 -0
- package/dist/internal/entityRegistry.d.ts.map +1 -0
- package/dist/internal/entityRegistry.js +22 -0
- package/dist/internal/entityRegistry.js.map +1 -0
- package/dist/internal/entityReply.d.ts +2 -0
- package/dist/internal/entityReply.d.ts.map +1 -0
- package/dist/internal/entityReply.js +35 -0
- package/dist/internal/entityReply.js.map +1 -0
- package/dist/internal/entityRuntime.d.ts +2 -0
- package/dist/internal/entityRuntime.d.ts.map +1 -0
- package/dist/internal/entityRuntime.js +823 -0
- package/dist/internal/entityRuntime.js.map +1 -0
- package/dist/internal/entitySql.d.ts +2 -0
- package/dist/internal/entitySql.d.ts.map +1 -0
- package/dist/internal/entitySql.js +29 -0
- package/dist/internal/entitySql.js.map +1 -0
- package/dist/internal/entityStorage.d.ts +2 -0
- package/dist/internal/entityStorage.d.ts.map +1 -0
- package/dist/internal/entityStorage.js +98 -0
- package/dist/internal/entityStorage.js.map +1 -0
- package/dist/internal/entityWire.d.ts +2 -0
- package/dist/internal/entityWire.d.ts.map +1 -0
- package/dist/internal/entityWire.js +146 -0
- package/dist/internal/entityWire.js.map +1 -0
- package/dist/internal/queueRuntime.d.ts +2 -0
- package/dist/internal/queueRuntime.d.ts.map +1 -0
- package/dist/internal/queueRuntime.js +88 -0
- package/dist/internal/queueRuntime.js.map +1 -0
- package/dist/internal/queueStorage.d.ts +2 -0
- package/dist/internal/queueStorage.d.ts.map +1 -0
- package/dist/internal/queueStorage.js +129 -0
- package/dist/internal/queueStorage.js.map +1 -0
- package/dist/internal/registry.d.ts +10 -0
- package/dist/internal/registry.d.ts.map +1 -0
- package/dist/internal/registry.js +24 -0
- package/dist/internal/registry.js.map +1 -0
- package/dist/internal/singletonRegistry.d.ts +2 -0
- package/dist/internal/singletonRegistry.d.ts.map +1 -0
- package/dist/internal/singletonRegistry.js +9 -0
- package/dist/internal/singletonRegistry.js.map +1 -0
- package/dist/internal/singletonRuntime.d.ts +2 -0
- package/dist/internal/singletonRuntime.d.ts.map +1 -0
- package/dist/internal/singletonRuntime.js +42 -0
- package/dist/internal/singletonRuntime.js.map +1 -0
- package/dist/internal/singletonStorage.d.ts +2 -0
- package/dist/internal/singletonStorage.d.ts.map +1 -0
- package/dist/internal/singletonStorage.js +34 -0
- package/dist/internal/singletonStorage.js.map +1 -0
- package/dist/internal/transport.d.ts +2 -0
- package/dist/internal/transport.d.ts.map +1 -0
- package/dist/internal/transport.js +49 -0
- package/dist/internal/transport.js.map +1 -0
- package/dist/internal/workflowRegistry.d.ts +2 -0
- package/dist/internal/workflowRegistry.d.ts.map +1 -0
- package/dist/internal/workflowRegistry.js +29 -0
- package/dist/internal/workflowRegistry.js.map +1 -0
- package/dist/internal/workflowRuntime.d.ts +2 -0
- package/dist/internal/workflowRuntime.d.ts.map +1 -0
- package/dist/internal/workflowRuntime.js +322 -0
- package/dist/internal/workflowRuntime.js.map +1 -0
- package/dist/internal/workflowStorage.d.ts +2 -0
- package/dist/internal/workflowStorage.d.ts.map +1 -0
- package/dist/internal/workflowStorage.js +113 -0
- package/dist/internal/workflowStorage.js.map +1 -0
- package/dist/internal/workflowWire.d.ts +2 -0
- package/dist/internal/workflowWire.d.ts.map +1 -0
- package/dist/internal/workflowWire.js +52 -0
- package/dist/internal/workflowWire.js.map +1 -0
- package/package.json +77 -1
- package/src/AlchemyCloudflareCluster.ts +200 -0
- package/src/CloudflareCluster.ts +704 -0
- package/src/CloudflareDurableObjectPrograms.ts +543 -0
- package/src/CloudflareDurableObjects.ts +430 -0
- package/src/CloudflarePersistedQueue.ts +189 -0
- package/src/CloudflareWorkflowEngine.ts +220 -0
- package/src/index.ts +38 -0
- package/src/internal/alchemyCluster.ts +120 -0
- package/src/internal/boundedMap.ts +15 -0
- package/src/internal/cluster.ts +57 -0
- package/src/internal/clusterName.ts +19 -0
- package/src/internal/entityKeepAlive.ts +121 -0
- package/src/internal/entityMailbox.ts +324 -0
- package/src/internal/entityRegistry.ts +46 -0
- package/src/internal/entityReply.ts +54 -0
- package/src/internal/entityRuntime.ts +1318 -0
- package/src/internal/entitySql.ts +60 -0
- package/src/internal/entityStorage.ts +168 -0
- package/src/internal/entityWire.ts +204 -0
- package/src/internal/queueRuntime.ts +174 -0
- package/src/internal/queueStorage.ts +255 -0
- package/src/internal/registry.ts +31 -0
- package/src/internal/singletonRegistry.ts +21 -0
- package/src/internal/singletonRuntime.ts +88 -0
- package/src/internal/singletonStorage.ts +64 -0
- package/src/internal/transport.ts +67 -0
- package/src/internal/workflowRegistry.ts +78 -0
- package/src/internal/workflowRuntime.ts +443 -0
- package/src/internal/workflowStorage.ts +234 -0
- package/src/internal/workflowWire.ts +123 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entityRuntime.js","names":[],"sources":["../../src/internal/entityRuntime.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entitySql.d.ts","sourceRoot":"","sources":["../../src/internal/entitySql.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as SqliteClient from "@effect/sql-sqlite-do/SqliteClient";
|
|
2
|
+
import * as Context from "effect/Context";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import * as Reactivity from "effect/reactivity/Reactivity";
|
|
5
|
+
import * as Semaphore from "effect/Semaphore";
|
|
6
|
+
import { DurableObjectSqlClient } from "../CloudflareCluster.js";
|
|
7
|
+
const InUserTransaction = /*#__PURE__*/Context.Reference("@effect/platform-cloudflare/internal/entitySql/InUserTransaction", {
|
|
8
|
+
defaultValue: () => false
|
|
9
|
+
});
|
|
10
|
+
/** @internal */
|
|
11
|
+
export const makeEntitySql = storage => {
|
|
12
|
+
const gate = Semaphore.makeUnsafe(1);
|
|
13
|
+
const make = Effect.map(Effect.provideServiceEffect(SqliteClient.make({
|
|
14
|
+
storage
|
|
15
|
+
}), Reactivity.Reactivity, Reactivity.make), client => {
|
|
16
|
+
// Nested transactions reuse the outer storage transaction, so only the
|
|
17
|
+
// outermost one takes the gate.
|
|
18
|
+
const withTransaction = client.withTransaction;
|
|
19
|
+
const gated = effect => Effect.withFiber(fiber => fiber.getRef(InUserTransaction) ? withTransaction(effect) : Semaphore.withPermit(gate, withTransaction(Effect.provideService(effect, InUserTransaction, true))));
|
|
20
|
+
return Context.make(DurableObjectSqlClient, Object.assign(client, {
|
|
21
|
+
withTransaction: gated
|
|
22
|
+
}));
|
|
23
|
+
});
|
|
24
|
+
return {
|
|
25
|
+
make,
|
|
26
|
+
guard: effect => Semaphore.withPermit(gate, effect)
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=entitySql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entitySql.js","names":[],"sources":["../../src/internal/entitySql.ts"],"sourcesContent":[null],"mappings":"AAaA,OAAO,KAAK,YAAY,MAAM,oCAAoC;AAClE,OAAO,KAAK,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe;AACvC,OAAO,KAAK,UAAU,MAAM,8BAA8B;AAE1D,OAAO,KAAK,SAAS,MAAM,kBAAkB;AAE7C,SAAS,sBAAsB,QAAQ,yBAAyB;AAUhE,MAAM,iBAAiB,gBAAG,OAAO,CAAC,SAAS,CACzC,kEAAkE,EAClE;EAAE,YAAY,EAAE,MAAM;AAAK,CAAE,CAC9B;AAED;AACA,OAAO,MAAM,aAAa,GAAI,OAA6B,IAAe;EACxE,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;EAEpC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CACrB,MAAM,CAAC,oBAAoB,CAAC,YAAY,CAAC,IAAI,CAAC;IAAE;EAAO,CAAE,CAAC,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,EAClG,MAAM,IAAI;IACT;IACA;IACA,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe;IAC9C,MAAM,KAAK,GAA4C,MAAM,IAC3D,MAAM,CAAC,SAAS,CAAE,KAAK,IACrB,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAC3B,eAAe,CAAC,MAAM,CAAC,GACvB,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC,CACxG;IACH,OAAO,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;MAAE,eAAe,EAAE;IAAK,CAAE,CAAC,CAAC;EAChG,CAAC,CACF;EAED,OAAO;IACL,IAAI;IACJ,KAAK,EAAG,MAAM,IAAK,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM;GACrD;AACH,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entityStorage.d.ts","sourceRoot":"","sources":["../../src/internal/entityStorage.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Result from "effect/Result";
|
|
3
|
+
/**
|
|
4
|
+
* Runs a synchronous storage effect inside `transactionSync`. A defect throws
|
|
5
|
+
* out of the callback and rolls the transaction back; a typed failure happens
|
|
6
|
+
* before any write in the mailbox operations, so it is carried out as a plain
|
|
7
|
+
* failure.
|
|
8
|
+
*
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export const withTransaction = (storage, effect) => Effect.suspend(() => {
|
|
12
|
+
const result = storage.transactionSync(() => Effect.runSync(Effect.result(effect)));
|
|
13
|
+
return Result.isSuccess(result) ? Effect.succeed(result.success) : Effect.fail(result.failure);
|
|
14
|
+
});
|
|
15
|
+
const ddl = [`CREATE TABLE IF NOT EXISTS cluster_messages (
|
|
16
|
+
request_id TEXT PRIMARY KEY,
|
|
17
|
+
message_id TEXT UNIQUE,
|
|
18
|
+
envelope TEXT NOT NULL,
|
|
19
|
+
discard INTEGER NOT NULL DEFAULT 0,
|
|
20
|
+
processed INTEGER NOT NULL DEFAULT 0,
|
|
21
|
+
last_reply_id TEXT,
|
|
22
|
+
deliver_at INTEGER,
|
|
23
|
+
reply_to TEXT
|
|
24
|
+
)`, `CREATE TABLE IF NOT EXISTS cluster_replies (
|
|
25
|
+
reply_id TEXT PRIMARY KEY,
|
|
26
|
+
request_id TEXT NOT NULL,
|
|
27
|
+
reply TEXT NOT NULL,
|
|
28
|
+
kind TEXT NOT NULL,
|
|
29
|
+
sequence INTEGER,
|
|
30
|
+
acked INTEGER NOT NULL DEFAULT 0,
|
|
31
|
+
UNIQUE (request_id, sequence)
|
|
32
|
+
)`, `CREATE INDEX IF NOT EXISTS cluster_messages_deliver_at_idx
|
|
33
|
+
ON cluster_messages (processed, deliver_at)`, `CREATE INDEX IF NOT EXISTS cluster_replies_unacked_idx
|
|
34
|
+
ON cluster_replies (request_id) WHERE kind = 'Chunk' AND acked = 0`,
|
|
35
|
+
// One row: whether the entity wants keep-alive across restarts, and the
|
|
36
|
+
// encoded name for wakes that arrive without one.
|
|
37
|
+
`CREATE TABLE IF NOT EXISTS cluster_entity_state (
|
|
38
|
+
id INTEGER PRIMARY KEY CHECK (id = 0),
|
|
39
|
+
keep_alive INTEGER NOT NULL DEFAULT 0,
|
|
40
|
+
name TEXT
|
|
41
|
+
)`];
|
|
42
|
+
/** @internal */
|
|
43
|
+
export const ensureEntityStorage = sql => {
|
|
44
|
+
for (const statement of ddl) {
|
|
45
|
+
sql.exec(statement);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
/** @internal */
|
|
49
|
+
export const earliestDeliverAt = sql => {
|
|
50
|
+
const rows = sql.exec("SELECT min(deliver_at) AS deliver_at FROM cluster_messages WHERE processed = 0 AND deliver_at IS NOT NULL").toArray();
|
|
51
|
+
return rows[0]?.deliver_at ?? undefined;
|
|
52
|
+
};
|
|
53
|
+
/** @internal */
|
|
54
|
+
export const armAlarm = (alarm, deliverAt) => Effect.promise(() => alarm.getAlarm()).pipe(Effect.flatMap(current => current === null || current > deliverAt ? Effect.promise(() => alarm.setAlarm(deliverAt)) : Effect.void));
|
|
55
|
+
/** @internal */
|
|
56
|
+
export const loadEntityState = sql => {
|
|
57
|
+
const row = sql.exec("SELECT keep_alive, name FROM cluster_entity_state WHERE id = 0").toArray()[0];
|
|
58
|
+
return {
|
|
59
|
+
keepAlive: row?.keep_alive === 1,
|
|
60
|
+
name: row?.name ?? undefined
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
/** @internal */
|
|
64
|
+
export const saveKeepAlive = (sql, enabled) => Effect.sync(() => {
|
|
65
|
+
sql.exec(`INSERT INTO cluster_entity_state (id, keep_alive) VALUES (0, ?)
|
|
66
|
+
ON CONFLICT (id) DO UPDATE SET keep_alive = excluded.keep_alive`, enabled ? 1 : 0);
|
|
67
|
+
});
|
|
68
|
+
/** @internal */
|
|
69
|
+
export const rememberEntityName = (sql, name) => {
|
|
70
|
+
sql.exec(`INSERT INTO cluster_entity_state (id, name) VALUES (0, ?)
|
|
71
|
+
ON CONFLICT (id) DO UPDATE SET name = excluded.name`, name);
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* The single alarm time covering every reason to wake this entity: the
|
|
75
|
+
* earliest due row, `now` for an unprocessed row nothing is running, and a
|
|
76
|
+
* heartbeat while a row is in flight or keep-alive is wanted. An in-flight row
|
|
77
|
+
* counts as a heartbeat rather than `now`, so a long handler does not keep
|
|
78
|
+
* re-firing the alarm.
|
|
79
|
+
*
|
|
80
|
+
* @internal
|
|
81
|
+
*/
|
|
82
|
+
export const nextAlarmAt = (sql, options) => {
|
|
83
|
+
let next = Infinity;
|
|
84
|
+
let heartbeat = loadEntityState(sql).keepAlive;
|
|
85
|
+
const rows = sql.exec("SELECT request_id, deliver_at FROM cluster_messages WHERE processed = 0").toArray();
|
|
86
|
+
for (const row of rows) {
|
|
87
|
+
if (options.isRunning(row.request_id)) {
|
|
88
|
+
heartbeat = true;
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
next = Math.min(next, row.deliver_at === null ? options.now : Math.max(row.deliver_at, options.now));
|
|
92
|
+
}
|
|
93
|
+
if (heartbeat) {
|
|
94
|
+
next = Math.min(next, options.now + options.heartbeatMillis);
|
|
95
|
+
}
|
|
96
|
+
return Number.isFinite(next) ? next : undefined;
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=entityStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entityStorage.js","names":[],"sources":["../../src/internal/entityStorage.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entityWire.d.ts","sourceRoot":"","sources":["../../src/internal/entityWire.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/** @internal */
|
|
2
|
+
import * as EntityAddress from "effect/cluster/EntityAddress";
|
|
3
|
+
import * as EntityId from "effect/cluster/EntityId";
|
|
4
|
+
import * as EntityType from "effect/cluster/EntityType";
|
|
5
|
+
import * as Envelope from "effect/cluster/Envelope";
|
|
6
|
+
import * as Reply from "effect/cluster/Reply";
|
|
7
|
+
import * as ShardId from "effect/cluster/ShardId";
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import * as Headers from "effect/http/Headers";
|
|
10
|
+
import * as Rpc from "effect/rpc/Rpc";
|
|
11
|
+
import * as RpcSchema from "effect/rpc/RpcSchema";
|
|
12
|
+
import * as Schema from "effect/Schema";
|
|
13
|
+
/**
|
|
14
|
+
* The result of a `ClusterEntity.invoke` RPC. Constructed in the Durable
|
|
15
|
+
* Object as this schema's `Type` (its JSON encoding is the identity) and
|
|
16
|
+
* decoded once on the Worker side.
|
|
17
|
+
*
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
export const InvokeResult = /*#__PURE__*/Schema.Union([/*#__PURE__*/Schema.Struct({
|
|
21
|
+
_tag: /*#__PURE__*/Schema.Literal("Success"),
|
|
22
|
+
requestId: Schema.String,
|
|
23
|
+
replies: /*#__PURE__*/Schema.Array(Schema.String)
|
|
24
|
+
}), /*#__PURE__*/Schema.Struct({
|
|
25
|
+
_tag: /*#__PURE__*/Schema.Literal("MailboxFull")
|
|
26
|
+
}), /*#__PURE__*/Schema.Struct({
|
|
27
|
+
_tag: /*#__PURE__*/Schema.Literal("EncodedMessageTooLarge")
|
|
28
|
+
}), /*#__PURE__*/Schema.Struct({
|
|
29
|
+
_tag: /*#__PURE__*/Schema.Literal("AskDeduplicatedToTell")
|
|
30
|
+
})]);
|
|
31
|
+
/** @internal */
|
|
32
|
+
export const decodeInvokeResult = value => Effect.orDie(Schema.decodeUnknownEffect(InvokeResult)(value));
|
|
33
|
+
const EnvelopePeek = /*#__PURE__*/Schema.Struct({
|
|
34
|
+
tag: /*#__PURE__*/Schema.optional(Schema.String)
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* Reads the RPC tag out of a stored envelope without decoding the payload,
|
|
38
|
+
* for rows whose full decode already failed.
|
|
39
|
+
*
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
export const peekEnvelopeTag = envelopeText => Schema.decodeUnknownEffect(EnvelopePeek)(JSON.parse(envelopeText)).pipe(Effect.match({
|
|
43
|
+
onFailure: () => undefined,
|
|
44
|
+
onSuccess: ({
|
|
45
|
+
tag
|
|
46
|
+
}) => tag
|
|
47
|
+
}));
|
|
48
|
+
/** @internal */
|
|
49
|
+
export const runWith = (effect, context) => effect.pipe(Effect.provideContext(context), Effect.orDie);
|
|
50
|
+
// Cached per rpc so the derived AST stays stable and the memoized parser
|
|
51
|
+
// compiler can hit on repeated chunks.
|
|
52
|
+
const chunkValuesCache = /*#__PURE__*/new WeakMap();
|
|
53
|
+
const chunkValuesCodec = rpc => {
|
|
54
|
+
if (chunkValuesCache.has(rpc)) return chunkValuesCache.get(rpc);
|
|
55
|
+
const codec = RpcSchema.isStreamSchema(rpc.successSchema) ? Schema.toCodecJson(Schema.NonEmptyArray(rpc.successSchema.success)) : undefined;
|
|
56
|
+
chunkValuesCache.set(rpc, codec);
|
|
57
|
+
return codec;
|
|
58
|
+
};
|
|
59
|
+
/** @internal */
|
|
60
|
+
export const encodeRequest = options => JSON.stringify({
|
|
61
|
+
_tag: "Request",
|
|
62
|
+
requestId: options.requestId,
|
|
63
|
+
address: {
|
|
64
|
+
shardId: options.address.shardId,
|
|
65
|
+
entityType: options.address.entityType,
|
|
66
|
+
entityId: options.address.entityId
|
|
67
|
+
},
|
|
68
|
+
tag: options.tag,
|
|
69
|
+
payload: options.payload,
|
|
70
|
+
headers: options.headers,
|
|
71
|
+
...(options.traceId === undefined ? undefined : {
|
|
72
|
+
traceId: options.traceId,
|
|
73
|
+
spanId: options.spanId,
|
|
74
|
+
sampled: options.sampled
|
|
75
|
+
})
|
|
76
|
+
});
|
|
77
|
+
/** @internal */
|
|
78
|
+
export const decodeRequest = (registration, envelopeText) => runWith(Effect.gen(function* () {
|
|
79
|
+
const encoded = JSON.parse(envelopeText);
|
|
80
|
+
if (encoded._tag !== "Request" || typeof encoded.requestId !== "string") {
|
|
81
|
+
return yield* Effect.die("Expected an encoded Request envelope");
|
|
82
|
+
}
|
|
83
|
+
const rpc = registration.entity.protocol.requests.get(encoded.tag);
|
|
84
|
+
if (rpc === undefined) return yield* Effect.die(`Unknown entity RPC tag: ${encoded.tag}`);
|
|
85
|
+
const payload = yield* Schema.decodeUnknownEffect(Schema.toCodecJson(rpc.payloadSchema))(encoded.payload);
|
|
86
|
+
return Envelope.makeRequest({
|
|
87
|
+
requestId: encoded.requestId,
|
|
88
|
+
address: EntityAddress.make({
|
|
89
|
+
shardId: ShardId.make(encoded.address.shardId.group, encoded.address.shardId.id),
|
|
90
|
+
entityType: EntityType.make(encoded.address.entityType),
|
|
91
|
+
entityId: EntityId.make(encoded.address.entityId)
|
|
92
|
+
}),
|
|
93
|
+
tag: encoded.tag,
|
|
94
|
+
payload,
|
|
95
|
+
headers: Headers.fromInput(encoded.headers),
|
|
96
|
+
...(encoded.traceId === undefined ? undefined : {
|
|
97
|
+
traceId: encoded.traceId,
|
|
98
|
+
spanId: encoded.spanId,
|
|
99
|
+
sampled: encoded.sampled
|
|
100
|
+
})
|
|
101
|
+
});
|
|
102
|
+
}), registration.context);
|
|
103
|
+
/** @internal */
|
|
104
|
+
export const encodeReplyFor = (registration, rpc, reply) => {
|
|
105
|
+
if (reply._tag === "WithExit") {
|
|
106
|
+
return runWith(Effect.map(Schema.encodeUnknownEffect(Schema.toCodecJson(Rpc.exitSchema(rpc)))(reply.exit), exit => JSON.stringify({
|
|
107
|
+
_tag: "WithExit",
|
|
108
|
+
requestId: String(reply.requestId),
|
|
109
|
+
id: String(reply.id),
|
|
110
|
+
exit
|
|
111
|
+
})), registration.context);
|
|
112
|
+
}
|
|
113
|
+
const codec = chunkValuesCodec(rpc);
|
|
114
|
+
if (codec === undefined) {
|
|
115
|
+
return Effect.die(`Expected a stream RPC: ${rpc._tag}`);
|
|
116
|
+
}
|
|
117
|
+
return runWith(Effect.map(Schema.encodeUnknownEffect(codec)(reply.values), values => JSON.stringify({
|
|
118
|
+
_tag: "Chunk",
|
|
119
|
+
requestId: String(reply.requestId),
|
|
120
|
+
id: String(reply.id),
|
|
121
|
+
sequence: reply.sequence,
|
|
122
|
+
values
|
|
123
|
+
})), registration.context);
|
|
124
|
+
};
|
|
125
|
+
/** @internal */
|
|
126
|
+
export const decodeReplyFor = (rpc, context, replyText) => {
|
|
127
|
+
const encoded = JSON.parse(replyText);
|
|
128
|
+
if (encoded._tag === "WithExit") {
|
|
129
|
+
return runWith(Effect.map(Schema.decodeUnknownEffect(Schema.toCodecJson(Rpc.exitSchema(rpc)))(encoded.exit), exit => new Reply.WithExit({
|
|
130
|
+
requestId: encoded.requestId,
|
|
131
|
+
id: encoded.id,
|
|
132
|
+
exit: exit
|
|
133
|
+
})), context);
|
|
134
|
+
}
|
|
135
|
+
const codec = chunkValuesCodec(rpc);
|
|
136
|
+
if (codec === undefined) {
|
|
137
|
+
return Effect.die(`Expected a stream RPC: ${rpc._tag}`);
|
|
138
|
+
}
|
|
139
|
+
return runWith(Effect.map(Schema.decodeUnknownEffect(codec)(encoded.values), values => new Reply.Chunk({
|
|
140
|
+
requestId: encoded.requestId,
|
|
141
|
+
id: encoded.id,
|
|
142
|
+
sequence: encoded.sequence,
|
|
143
|
+
values: values
|
|
144
|
+
})), context);
|
|
145
|
+
};
|
|
146
|
+
//# sourceMappingURL=entityWire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entityWire.js","names":[],"sources":["../../src/internal/entityWire.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queueRuntime.d.ts","sourceRoot":"","sources":["../../src/internal/queueRuntime.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { armAlarm } from "./entityStorage.js";
|
|
3
|
+
import { completeItem, earliestLeaseExpiry, ensureQueueStorage, expireLeases, extendLease, failItem, leasedItem, leaseNextItem, offerItem, releaseItem, releaseOwnedItem } from "./queueStorage.js";
|
|
4
|
+
/** @internal */
|
|
5
|
+
export const makeQueueRuntime = options => {
|
|
6
|
+
const sql = options.sql;
|
|
7
|
+
ensureQueueStorage(sql);
|
|
8
|
+
const waiters = [];
|
|
9
|
+
// Waiters differ in maxAttempts, so one waiter finding nothing does not mean
|
|
10
|
+
// a later one will; every waiter gets its own lease attempt. Leasing stays
|
|
11
|
+
// fully synchronous so concurrent wake-ups cannot interleave on the waiter
|
|
12
|
+
// list; only the final alarm arm is asynchronous.
|
|
13
|
+
const wakeWaiters = Effect.suspend(() => {
|
|
14
|
+
const now = options.now();
|
|
15
|
+
let index = 0;
|
|
16
|
+
while (index < waiters.length) {
|
|
17
|
+
const waiter = waiters[index];
|
|
18
|
+
const item = leaseNextItem(sql, now, now + waiter.leaseMillis, waiter.maxAttempts, waiter.takerId);
|
|
19
|
+
if (item === undefined) {
|
|
20
|
+
index++;
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
waiters.splice(index, 1);
|
|
24
|
+
waiter.resolve(item);
|
|
25
|
+
}
|
|
26
|
+
// Include initial visibility deadlines even when no taker is waiting.
|
|
27
|
+
const earliest = earliestLeaseExpiry(sql);
|
|
28
|
+
return earliest === undefined ? Effect.void : armAlarm(options.alarm, earliest);
|
|
29
|
+
});
|
|
30
|
+
const mutateAndWake = mutate => Effect.runPromise(Effect.suspend(() => {
|
|
31
|
+
mutate();
|
|
32
|
+
return wakeWaiters;
|
|
33
|
+
}));
|
|
34
|
+
return {
|
|
35
|
+
offer: (id, element, delayMillis = 0, deduplicate) => mutateAndWake(() => {
|
|
36
|
+
offerItem(sql, id, element, delayMillis > 0 ? options.now() + delayMillis : null, deduplicate);
|
|
37
|
+
}),
|
|
38
|
+
// The taker joins the waiter list and the shared wake pass leases to it,
|
|
39
|
+
// so an immediate take and a woken one follow the same code path.
|
|
40
|
+
take: (takerId, maxAttempts, leaseMillis) => {
|
|
41
|
+
// A broken take RPC is retried with the same taker id. The retry must
|
|
42
|
+
// not leave a second waiter that leases an item nobody handles.
|
|
43
|
+
const leased = leasedItem(sql, takerId, options.now());
|
|
44
|
+
if (leased !== undefined) return Promise.resolve(leased);
|
|
45
|
+
const existing = waiters.find(waiter => waiter.takerId === takerId);
|
|
46
|
+
const item = new Promise(resolve => {
|
|
47
|
+
if (existing === undefined) {
|
|
48
|
+
waiters.push({
|
|
49
|
+
takerId,
|
|
50
|
+
maxAttempts,
|
|
51
|
+
leaseMillis,
|
|
52
|
+
resolve
|
|
53
|
+
});
|
|
54
|
+
} else {
|
|
55
|
+
existing.resolve = resolve;
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
return Effect.runPromise(wakeWaiters).then(() => item);
|
|
59
|
+
},
|
|
60
|
+
cancelTake: takerId => {
|
|
61
|
+
const index = waiters.findIndex(waiter => waiter.takerId === takerId);
|
|
62
|
+
if (index >= 0) {
|
|
63
|
+
waiters.splice(index, 1);
|
|
64
|
+
return Promise.resolve();
|
|
65
|
+
}
|
|
66
|
+
// The cancel can race the delivery; release an item already leased to
|
|
67
|
+
// the taker instead of stranding it.
|
|
68
|
+
return mutateAndWake(() => {
|
|
69
|
+
releaseOwnedItem(sql, takerId, options.now());
|
|
70
|
+
});
|
|
71
|
+
},
|
|
72
|
+
complete: (id, takerId) => Promise.resolve(completeItem(sql, id, takerId)),
|
|
73
|
+
fail: (id, lastFailure, takerId, terminal = false, retryDelayMillis = 0) => mutateAndWake(() => {
|
|
74
|
+
failItem(sql, id, lastFailure, takerId, terminal, retryDelayMillis > 0 ? options.now() + retryDelayMillis : null);
|
|
75
|
+
}),
|
|
76
|
+
release: (id, takerId) => mutateAndWake(() => {
|
|
77
|
+
releaseItem(sql, id, takerId);
|
|
78
|
+
}),
|
|
79
|
+
extend: (id, leaseMillis, takerId) => Promise.resolve(extendLease(sql, id, options.now() + leaseMillis, takerId)),
|
|
80
|
+
runAlarm: () => Effect.runPromise(Effect.gen(function* () {
|
|
81
|
+
expireLeases(sql, options.now());
|
|
82
|
+
yield* wakeWaiters;
|
|
83
|
+
const next = earliestLeaseExpiry(sql);
|
|
84
|
+
if (next !== undefined) yield* armAlarm(options.alarm, next);
|
|
85
|
+
}))
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=queueRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queueRuntime.js","names":[],"sources":["../../src/internal/queueRuntime.ts"],"sourcesContent":[null],"mappings":"AAgBA,OAAO,KAAK,MAAM,MAAM,eAAe;AACvC,SAAS,QAAQ,QAA0B,oBAAoB;AAC/D,SACE,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,UAAU,EACV,aAAa,EACb,SAAS,EAET,WAAW,EACX,gBAAgB,QACX,mBAAmB;AAuC1B;AACA,OAAO,MAAM,gBAAgB,GAAI,OAA4B,IAAkB;EAC7E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG;EACvB,kBAAkB,CAAC,GAAG,CAAC;EAEvB,MAAM,OAAO,GAAkB,EAAE;EAEjC;EACA;EACA;EACA;EACA,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,MAAK;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACzB,IAAI,KAAK,GAAG,CAAC;IACb,OAAO,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE;MAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;MAC7B,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC;MAClG,IAAI,IAAI,KAAK,SAAS,EAAE;QACtB,KAAK,EAAE;QACP;MACF;MACA,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;MACxB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IACtB;IACA;IACA,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC;IACzC,OAAO,QAAQ,KAAK,SAAS,GAAG,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;EACjF,CAAC,CAAC;EAEF,MAAM,aAAa,GAAI,MAAkB,IACvC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,MAAK;IACpC,MAAM,EAAE;IACR,OAAO,WAAW;EACpB,CAAC,CAAC,CAAC;EAEL,OAAO;IACL,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,WAAW,GAAG,CAAC,EAAE,WAAW,KAC/C,aAAa,CAAC,MAAK;MACjB,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,WAAW,GAAG,IAAI,EAAE,WAAW,CAAC;IAChG,CAAC,CAAC;IAEJ;IACA;IACA,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,KAAI;MAC1C;MACA;MACA,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;MACtD,IAAI,MAAM,KAAK,SAAS,EAAE,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;MACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAE,MAAM,IAAK,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC;MACrE,MAAM,IAAI,GAAG,IAAI,OAAO,CAAa,OAAO,IAAI;QAC9C,IAAI,QAAQ,KAAK,SAAS,EAAE;UAC1B,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO;YAAE,WAAW;YAAE,WAAW;YAAE;UAAO,CAAE,CAAC;QAC9D,CAAC,MAAM;UACL,QAAQ,CAAC,OAAO,GAAG,OAAO;QAC5B;MACF,CAAC,CAAC;MACF,OAAO,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC;IACxD,CAAC;IAED,UAAU,EAAG,OAAO,IAAI;MACtB,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAE,MAAM,IAAK,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC;MACvE,IAAI,KAAK,IAAI,CAAC,EAAE;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACxB,OAAO,OAAO,CAAC,OAAO,EAAE;MAC1B;MACA;MACA;MACA,OAAO,aAAa,CAAC,MAAK;QACxB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;MAC/C,CAAC,CAAC;IACJ,CAAC;IAED,QAAQ,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAE1E,IAAI,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,GAAG,KAAK,EAAE,gBAAgB,GAAG,CAAC,KACrE,aAAa,CAAC,MAAK;MACjB,QAAQ,CACN,GAAG,EACH,EAAE,EACF,WAAW,EACX,OAAO,EACP,QAAQ,EACR,gBAAgB,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,gBAAgB,GAAG,IAAI,CAC/D;IACH,CAAC,CAAC;IAEJ,OAAO,EAAE,CAAC,EAAE,EAAE,OAAO,KACnB,aAAa,CAAC,MAAK;MACjB,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,CAAC;IAC/B,CAAC,CAAC;IAEJ,MAAM,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,WAAW,EAAE,OAAO,CAAC,CAAC;IAEjH,QAAQ,EAAE,MACR,MAAM,CAAC,UAAU,CACf,MAAM,CAAC,GAAG,CAAC,aAAS;MAClB,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;MAChC,OAAO,WAAW;MAClB,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC;MACrC,IAAI,IAAI,KAAK,SAAS,EAAE,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;IAC9D,CAAC,CAAC;GAEP;AACH,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queueStorage.d.ts","sourceRoot":"","sources":["../../src/internal/queueStorage.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
const ddl = [`CREATE TABLE IF NOT EXISTS queue_items (
|
|
2
|
+
id TEXT PRIMARY KEY,
|
|
3
|
+
element TEXT NOT NULL,
|
|
4
|
+
position INTEGER NOT NULL,
|
|
5
|
+
attempts INTEGER NOT NULL DEFAULT 0,
|
|
6
|
+
completed INTEGER NOT NULL DEFAULT 0,
|
|
7
|
+
lease_until INTEGER,
|
|
8
|
+
lease_owner TEXT,
|
|
9
|
+
max_attempts INTEGER,
|
|
10
|
+
last_failure TEXT
|
|
11
|
+
)`, `CREATE INDEX IF NOT EXISTS queue_items_take_idx
|
|
12
|
+
ON queue_items (completed, position)`, `CREATE INDEX IF NOT EXISTS queue_items_lease_idx
|
|
13
|
+
ON queue_items (lease_until)`,
|
|
14
|
+
// MAX(position) in offerItem/failItem needs a bare position index; the
|
|
15
|
+
// (completed, position) index cannot serve it and completed rows are
|
|
16
|
+
// retained forever for dedup.
|
|
17
|
+
`CREATE INDEX IF NOT EXISTS queue_items_position_idx
|
|
18
|
+
ON queue_items (position)`,
|
|
19
|
+
// A retried take and a cancel look the taker's row up by owner.
|
|
20
|
+
`CREATE INDEX IF NOT EXISTS queue_items_owner_idx
|
|
21
|
+
ON queue_items (lease_owner)`];
|
|
22
|
+
/** @internal */
|
|
23
|
+
export const ensureQueueStorage = sql => {
|
|
24
|
+
for (const statement of ddl) {
|
|
25
|
+
sql.exec(statement);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
/** @internal */
|
|
29
|
+
export const offerItem = (sql, id, element, visibleAt, deduplicate) => {
|
|
30
|
+
if (deduplicate === "untilExecuted") {
|
|
31
|
+
// A completed or failed row releases the id. Deleting it lets the insert
|
|
32
|
+
// below store the offer as new work after every existing row. Both
|
|
33
|
+
// statements run synchronously, so no other offer can interleave.
|
|
34
|
+
sql.exec("DELETE FROM queue_items WHERE id = ? AND completed <> 0", id);
|
|
35
|
+
}
|
|
36
|
+
// Reuse lease_until for initial visibility; INSERT OR IGNORE preserves the
|
|
37
|
+
// original deadline and payload when an id is offered again.
|
|
38
|
+
sql.exec(`INSERT OR IGNORE INTO queue_items (id, element, position, lease_until)
|
|
39
|
+
VALUES (?, ?, (SELECT IFNULL(MAX(position), 0) + 1 FROM queue_items), ?)`, id, element, visibleAt);
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Leases the next available item and counts the attempt. The returned
|
|
43
|
+
* `attempts` is the number of earlier attempts, not counting this one.
|
|
44
|
+
*
|
|
45
|
+
* @internal
|
|
46
|
+
*/
|
|
47
|
+
export const leaseNextItem = (sql, now, leaseUntil, maxAttempts, owner) => {
|
|
48
|
+
const row = sql.exec(`SELECT id, element, attempts FROM queue_items
|
|
49
|
+
WHERE completed = 0 AND attempts < ? AND (lease_until IS NULL OR lease_until <= ?)
|
|
50
|
+
ORDER BY position ASC LIMIT 1`, maxAttempts, now).toArray()[0];
|
|
51
|
+
if (row === undefined) return undefined;
|
|
52
|
+
sql.exec(`UPDATE queue_items SET attempts = attempts + 1, lease_until = ?, lease_owner = ?, max_attempts = ?
|
|
53
|
+
WHERE id = ?`, leaseUntil, owner, maxAttempts, row.id);
|
|
54
|
+
return row;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* The item still leased to `owner` under a live lease, so a retried take can
|
|
58
|
+
* return it. `attempts` counts earlier attempts, as `leaseNextItem` returns.
|
|
59
|
+
*
|
|
60
|
+
* @internal
|
|
61
|
+
*/
|
|
62
|
+
export const leasedItem = (sql, owner, now) => sql.exec(`SELECT id, element, attempts - 1 AS attempts FROM queue_items
|
|
63
|
+
WHERE lease_owner = ? AND completed = 0 AND lease_until > ?
|
|
64
|
+
LIMIT 1`, owner, now).toArray()[0];
|
|
65
|
+
/** @internal */
|
|
66
|
+
export const completeItem = (sql, id, owner) => {
|
|
67
|
+
sql.exec("UPDATE queue_items SET completed = 1, lease_until = NULL WHERE id = ? AND lease_owner = ?", id, owner);
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Records a failed attempt, which the lease already counted. When the attempt
|
|
71
|
+
* reaches the `max_attempts` stored with the lease, or the failure is
|
|
72
|
+
* `terminal`, the row moves to the failed state (2). A row that is already
|
|
73
|
+
* completed is left alone, even when the caller was its last owner.
|
|
74
|
+
* A row that stays pending is hidden until `visibleAt` (null for no delay).
|
|
75
|
+
* Clearing `lease_owner` makes a replayed call a no-op until the next lease
|
|
76
|
+
* assigns a new owner.
|
|
77
|
+
*
|
|
78
|
+
* @internal
|
|
79
|
+
*/
|
|
80
|
+
export const failItem = (sql, id, lastFailure, owner, terminal, visibleAt) => {
|
|
81
|
+
const failed = "? OR attempts >= max_attempts";
|
|
82
|
+
sql.exec(`UPDATE queue_items
|
|
83
|
+
SET lease_until = CASE WHEN ${failed} THEN NULL ELSE ? END, lease_owner = NULL, last_failure = ?,
|
|
84
|
+
completed = CASE WHEN ${failed} THEN 2 ELSE 0 END,
|
|
85
|
+
position = (SELECT IFNULL(MAX(position), 0) + 1 FROM queue_items)
|
|
86
|
+
WHERE id = ? AND lease_owner = ? AND completed = 0`, terminal ? 1 : 0, visibleAt, lastFailure, terminal ? 1 : 0, id, owner);
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Returns the item to the queue and refunds the attempt its lease counted.
|
|
90
|
+
*
|
|
91
|
+
* @internal
|
|
92
|
+
*/
|
|
93
|
+
export const releaseItem = (sql, id, owner) => {
|
|
94
|
+
sql.exec(`UPDATE queue_items SET attempts = attempts - 1, lease_until = NULL, lease_owner = NULL
|
|
95
|
+
WHERE id = ? AND lease_owner = ? AND completed = 0`, id, owner);
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Releases the item `owner` holds under a live lease, as `releaseItem` does.
|
|
99
|
+
* An expired lease can still carry the same owner until its alarm runs; it
|
|
100
|
+
* keeps its spent attempt so it can fail on its own.
|
|
101
|
+
*
|
|
102
|
+
* @internal
|
|
103
|
+
*/
|
|
104
|
+
export const releaseOwnedItem = (sql, owner, now) => {
|
|
105
|
+
sql.exec(`UPDATE queue_items SET attempts = attempts - 1, lease_until = NULL, lease_owner = NULL
|
|
106
|
+
WHERE lease_owner = ? AND completed = 0 AND lease_until > ?`, owner, now);
|
|
107
|
+
};
|
|
108
|
+
/** @internal */
|
|
109
|
+
export const extendLease = (sql, id, leaseUntil, owner) => {
|
|
110
|
+
sql.exec("UPDATE queue_items SET lease_until = ? WHERE id = ? AND lease_owner = ? AND lease_until IS NOT NULL", leaseUntil, id, owner);
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Expires due leases and initial visibility deadlines. A lease that used the
|
|
114
|
+
* row's last attempt moves the row to the failed state (2).
|
|
115
|
+
*
|
|
116
|
+
* @internal
|
|
117
|
+
*/
|
|
118
|
+
export const expireLeases = (sql, now) => {
|
|
119
|
+
sql.exec(`UPDATE queue_items
|
|
120
|
+
SET lease_until = NULL,
|
|
121
|
+
completed = CASE WHEN lease_owner IS NOT NULL AND attempts >= max_attempts THEN 2 ELSE 0 END
|
|
122
|
+
WHERE lease_until IS NOT NULL AND lease_until <= ? AND completed = 0`, now);
|
|
123
|
+
};
|
|
124
|
+
/** @internal */
|
|
125
|
+
export const earliestLeaseExpiry = sql => {
|
|
126
|
+
const row = sql.exec("SELECT min(lease_until) AS lease_until FROM queue_items WHERE lease_until IS NOT NULL").toArray()[0];
|
|
127
|
+
return row?.lease_until ?? undefined;
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=queueStorage.js.map
|