solid-objects 0.14.9 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/actor.d.ts +16 -3
  3. package/dist/actor.d.ts.map +1 -1
  4. package/dist/actor.js +31 -1
  5. package/dist/actor.js.map +1 -1
  6. package/dist/cloudflare/engine.d.ts.map +1 -1
  7. package/dist/cloudflare/engine.js +7 -1
  8. package/dist/cloudflare/engine.js.map +1 -1
  9. package/dist/core.d.ts +1 -0
  10. package/dist/core.d.ts.map +1 -1
  11. package/dist/core.js +1 -0
  12. package/dist/core.js.map +1 -1
  13. package/dist/doctor.d.ts.map +1 -1
  14. package/dist/doctor.js +10 -2
  15. package/dist/doctor.js.map +1 -1
  16. package/dist/effect-recovery-coordinator.d.ts +29 -0
  17. package/dist/effect-recovery-coordinator.d.ts.map +1 -0
  18. package/dist/effect-recovery-coordinator.js +152 -0
  19. package/dist/effect-recovery-coordinator.js.map +1 -0
  20. package/dist/effect-recovery.d.ts +27 -0
  21. package/dist/effect-recovery.d.ts.map +1 -0
  22. package/dist/effect-recovery.js +10 -0
  23. package/dist/effect-recovery.js.map +1 -0
  24. package/dist/index.d.ts +2 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +1 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/platform/uuid.d.ts.map +1 -1
  29. package/dist/platform/uuid.js +2 -1
  30. package/dist/platform/uuid.js.map +1 -1
  31. package/dist/repository.d.ts +1 -0
  32. package/dist/repository.d.ts.map +1 -1
  33. package/dist/repository.js +45 -5
  34. package/dist/repository.js.map +1 -1
  35. package/dist/runtime.d.ts +0 -1
  36. package/dist/runtime.d.ts.map +1 -1
  37. package/dist/runtime.js +3 -16
  38. package/dist/runtime.js.map +1 -1
  39. package/dist/schema.d.ts.map +1 -1
  40. package/dist/schema.js +42 -1
  41. package/dist/schema.js.map +1 -1
  42. package/dist/types.d.ts +3 -0
  43. package/dist/types.d.ts.map +1 -1
  44. package/dist/version.d.ts +1 -1
  45. package/dist/version.js +1 -1
  46. package/dist/wake-up-notification.d.ts +8 -0
  47. package/dist/wake-up-notification.d.ts.map +1 -0
  48. package/dist/wake-up-notification.js +12 -0
  49. package/dist/wake-up-notification.js.map +1 -0
  50. package/dist/worker.js +11 -1
  51. package/dist/worker.js.map +1 -1
  52. package/docs/api.md +139 -0
  53. package/docs/effect-recovery.md +59 -0
  54. package/docs/parity.md +19 -1
  55. package/examples/failure-recovery/actor.ts +19 -1
  56. package/examples/failure-recovery/demo.ts +47 -7
  57. package/examples/failure-recovery/worker.ts +9 -1
  58. package/package.json +3 -3
@@ -0,0 +1,152 @@
1
+ import { NonRetryableError } from "./errors.js";
2
+ import { EffectRecoveryOutcome, } from "./effect-recovery.js";
3
+ import { jsonObject, normalizeJson } from "./serialization.js";
4
+ import { notifyWakeUp } from "./wake-up-notification.js";
5
+ export class EffectRecoveryCoordinator {
6
+ options;
7
+ constructor(options) {
8
+ this.options = options;
9
+ }
10
+ async recoverAvailable() {
11
+ const candidates = await this.options.settings.database.connection(async (connection) => {
12
+ const now = await connection.nowMilliseconds();
13
+ const threshold = this.options.settings.processAliveThresholdMilliseconds;
14
+ return connection.all(`SELECT recoveries.* FROM ${this.table("effect_recoveries")} recoveries
15
+ JOIN ${this.table("effects")} effects ON effects.id = recoveries.effect_id
16
+ LEFT JOIN ${this.table("processes")} owners ON owners.id = effects.claimed_by
17
+ WHERE recoveries.retired_at_ms IS NULL AND recoveries.recovery_operation IS NOT NULL
18
+ AND effects.status = 'processing'
19
+ AND (owners.id IS NULL OR owners.heartbeat_at_ms <= ? -
20
+ CASE WHEN recoveries.recovery_timeout_ms > ? THEN recoveries.recovery_timeout_ms ELSE ? END)
21
+ ORDER BY recoveries.instance_id, recoveries.effect_id LIMIT ?`, [now, threshold, threshold, this.options.settings.claimScanLimit]);
22
+ });
23
+ for (const candidate of candidates) {
24
+ const retired = await this.options.settings.database.transaction(async (connection) => {
25
+ const origin = await connection.get(`SELECT id, actor_type, actor_id FROM ${this.table("instances")} WHERE id = ?${this.lockClause()}`, [candidate.instance_id]);
26
+ if (!origin)
27
+ return;
28
+ const effect = await connection.get(`SELECT * FROM ${this.table("effects")} WHERE id = ? AND instance_id = ?${this.lockClause()}`, [candidate.effect_id, origin.id]);
29
+ const binding = await connection.get(`SELECT * FROM ${this.table("effect_recoveries")} WHERE effect_id = ? AND instance_id = ?${this.lockClause()}`, [candidate.effect_id, origin.id]);
30
+ if (!effect ||
31
+ !binding ||
32
+ !binding.recovery_operation ||
33
+ binding.retired_at_ms !== null ||
34
+ effect.status !== "processing")
35
+ return;
36
+ const owner = effect.claimed_by === null
37
+ ? undefined
38
+ : await connection.get(`SELECT * FROM ${this.table("processes")} WHERE id = ?${this.lockClause()}`, [effect.claimed_by]);
39
+ const now = await connection.nowMilliseconds();
40
+ if (this.ownerFresh({ binding, owner, now }))
41
+ return;
42
+ await this.retire({ connection, origin, binding, effect, now });
43
+ return true;
44
+ });
45
+ if (retired)
46
+ notifyWakeUp({
47
+ adapter: this.options.settings.wakeUp,
48
+ logger: this.options.settings.logger,
49
+ role: "actors",
50
+ });
51
+ }
52
+ }
53
+ async check(options) {
54
+ const { connection, origin, intents } = options;
55
+ const effectIds = [...new Set(intents.map((intent) => intent.effectId))].sort();
56
+ if (effectIds.length === 0)
57
+ return;
58
+ const placeholders = effectIds.map(() => "?").join(", ");
59
+ const effects = new Map((await connection.all(`SELECT * FROM ${this.table("effects")} WHERE instance_id = ? AND id IN (${placeholders}) ORDER BY id${this.lockClause()}`, [origin.id, ...effectIds])).map((effect) => [effect.id, effect]));
60
+ const bindings = new Map((await connection.all(`SELECT * FROM ${this.table("effect_recoveries")} WHERE instance_id = ? AND effect_id IN (${placeholders}) ORDER BY effect_id${this.lockClause()}`, [origin.id, ...effectIds])).map((binding) => [binding.effect_id, binding]));
61
+ for (const id of effectIds) {
62
+ const binding = bindings.get(id);
63
+ if (!binding?.recovery_operation || !binding.status_operation) {
64
+ throw new NonRetryableError("effect recovery requires an owned handle with onRecovery and onStatus");
65
+ }
66
+ }
67
+ const ownerIds = [
68
+ ...new Set([...effects.values()].flatMap((effect) => effect.claimed_by === null ? [] : [effect.claimed_by])),
69
+ ].sort();
70
+ const owners = new Map();
71
+ for (const id of ownerIds) {
72
+ const owner = await connection.get(`SELECT * FROM ${this.table("processes")} WHERE id = ?${this.lockClause()}`, [id]);
73
+ if (owner)
74
+ owners.set(id, owner);
75
+ }
76
+ const now = await connection.nowMilliseconds();
77
+ for (const intent of intents) {
78
+ const binding = bindings.get(intent.effectId);
79
+ const effect = effects.get(intent.effectId);
80
+ const idempotencyKey = `effect:${intent.effectId}:check:${intent.requestId}`;
81
+ const existing = await connection.get(`SELECT id FROM ${this.table("messages")} WHERE instance_id = ? AND idempotency_key = ?`, [origin.id, idempotencyKey]);
82
+ if (existing)
83
+ continue;
84
+ const payload = this.observe({ binding, effect, owners, now });
85
+ if (payload.outcome === EffectRecoveryOutcome.Retired && effect) {
86
+ await this.retire({ connection, origin, binding, effect, now });
87
+ }
88
+ await this.options.enqueue(connection, {
89
+ actorType: origin.actor_type,
90
+ actorId: origin.actor_id,
91
+ operation: binding.status_operation,
92
+ deliveryMode: "internal",
93
+ arguments: jsonObject(payload),
94
+ idempotencyKey,
95
+ });
96
+ }
97
+ }
98
+ observe(options) {
99
+ const { binding, effect, owners, now } = options;
100
+ const effectId = binding.effect_id;
101
+ if (binding.retired_at_ms !== null)
102
+ return { effectId, outcome: EffectRecoveryOutcome.AlreadyRetired };
103
+ if (!effect)
104
+ return { effectId, outcome: EffectRecoveryOutcome.Missing };
105
+ const argumentsValue = jsonObject(JSON.parse(effect.arguments));
106
+ if (effect.status === "completed")
107
+ return {
108
+ effectId,
109
+ arguments: argumentsValue,
110
+ outcome: EffectRecoveryOutcome.Completed,
111
+ result: normalizeJson(JSON.parse(effect.result ?? "null")),
112
+ };
113
+ if (effect.status === "dead")
114
+ return { effectId, arguments: argumentsValue, outcome: EffectRecoveryOutcome.Dead };
115
+ if (effect.status === "pending")
116
+ return { effectId, arguments: argumentsValue, outcome: EffectRecoveryOutcome.Pending };
117
+ const owner = effect.claimed_by === null ? undefined : owners.get(effect.claimed_by);
118
+ if (this.ownerFresh({ binding, owner, now }))
119
+ return { effectId, arguments: argumentsValue, outcome: EffectRecoveryOutcome.Deferred };
120
+ return { effectId, arguments: argumentsValue, outcome: EffectRecoveryOutcome.Retired };
121
+ }
122
+ ownerFresh(options) {
123
+ const timeout = Math.max(this.options.settings.processAliveThresholdMilliseconds, Number(options.binding.recovery_timeout_ms ?? 0));
124
+ return (options.owner !== undefined && Number(options.owner.heartbeat_at_ms) > options.now - timeout);
125
+ }
126
+ async retire(options) {
127
+ const { connection, origin, binding, effect, now } = options;
128
+ await connection.run(`UPDATE ${this.table("effects")} SET status = 'completed', claimed_by = NULL WHERE id = ?`, [effect.id]);
129
+ await connection.run(`UPDATE ${this.table("effect_recoveries")} SET retired_at_ms = ? WHERE effect_id = ?`, [now, effect.id]);
130
+ const payload = {
131
+ effectId: effect.id,
132
+ arguments: jsonObject(JSON.parse(effect.arguments)),
133
+ outcome: EffectRecoveryOutcome.Retired,
134
+ };
135
+ await this.options.enqueue(connection, {
136
+ actorType: origin.actor_type,
137
+ actorId: origin.actor_id,
138
+ operation: binding.recovery_operation,
139
+ deliveryMode: "internal",
140
+ arguments: jsonObject(payload),
141
+ idempotencyKey: `effect:${effect.id}:recovery`,
142
+ });
143
+ binding.retired_at_ms = now;
144
+ }
145
+ table(name) {
146
+ return `${this.options.settings.tableNamePrefix}${name}`;
147
+ }
148
+ lockClause() {
149
+ return this.options.settings.database.family === "sqlite" ? "" : " FOR UPDATE";
150
+ }
151
+ }
152
+ //# sourceMappingURL=effect-recovery-coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-recovery-coordinator.js","sourceRoot":"","sources":["../src/effect-recovery-coordinator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { JsonObject, JsonValue } from "./types.js";
2
+ export declare const EffectRecoveryOutcome: Readonly<{
3
+ readonly Retired: "retired";
4
+ readonly Deferred: "deferred";
5
+ readonly Pending: "pending";
6
+ readonly Completed: "completed";
7
+ readonly Dead: "dead";
8
+ readonly AlreadyRetired: "alreadyRetired";
9
+ readonly Missing: "missing";
10
+ }>;
11
+ export type EffectRecoveryOutcome = (typeof EffectRecoveryOutcome)[keyof typeof EffectRecoveryOutcome];
12
+ export type EffectRetiredPayload<Arguments extends JsonObject = JsonObject> = {
13
+ effectId: string;
14
+ arguments: Arguments;
15
+ outcome: typeof EffectRecoveryOutcome.Retired;
16
+ };
17
+ export type EffectRecoveryPayload<Arguments extends JsonObject = JsonObject, Result extends JsonValue = JsonValue> = EffectRetiredPayload<Arguments> | {
18
+ effectId: string;
19
+ arguments: Arguments;
20
+ outcome: typeof EffectRecoveryOutcome.Completed;
21
+ result: Result;
22
+ } | {
23
+ effectId: string;
24
+ arguments?: Arguments;
25
+ outcome: typeof EffectRecoveryOutcome.Deferred | typeof EffectRecoveryOutcome.Pending | typeof EffectRecoveryOutcome.Dead | typeof EffectRecoveryOutcome.AlreadyRetired | typeof EffectRecoveryOutcome.Missing;
26
+ };
27
+ //# sourceMappingURL=effect-recovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-recovery.d.ts","sourceRoot":"","sources":["../src/effect-recovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEvD,eAAO,MAAM,qBAAqB;;;;;;;;EAQvB,CAAA;AAEX,MAAM,MAAM,qBAAqB,GAC/B,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,OAAO,qBAAqB,CAAC,CAAA;AAEpE,MAAM,MAAM,oBAAoB,CAAC,SAAS,SAAS,UAAU,GAAG,UAAU,IAAI;IAC5E,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,OAAO,qBAAqB,CAAC,OAAO,CAAA;CAC9C,CAAA;AAED,MAAM,MAAM,qBAAqB,CAC/B,SAAS,SAAS,UAAU,GAAG,UAAU,EACzC,MAAM,SAAS,SAAS,GAAG,SAAS,IAElC,oBAAoB,CAAC,SAAS,CAAC,GAC/B;IACE,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,OAAO,qBAAqB,CAAC,SAAS,CAAA;IAC/C,MAAM,EAAE,MAAM,CAAA;CACf,GACD;IACE,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,OAAO,EACH,OAAO,qBAAqB,CAAC,QAAQ,GACrC,OAAO,qBAAqB,CAAC,OAAO,GACpC,OAAO,qBAAqB,CAAC,IAAI,GACjC,OAAO,qBAAqB,CAAC,cAAc,GAC3C,OAAO,qBAAqB,CAAC,OAAO,CAAA;CACzC,CAAA"}
@@ -0,0 +1,10 @@
1
+ export const EffectRecoveryOutcome = Object.freeze({
2
+ Retired: "retired",
3
+ Deferred: "deferred",
4
+ Pending: "pending",
5
+ Completed: "completed",
6
+ Dead: "dead",
7
+ AlreadyRetired: "alreadyRetired",
8
+ Missing: "missing",
9
+ });
10
+ //# sourceMappingURL=effect-recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-recovery.js","sourceRoot":"","sources":["../src/effect-recovery.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC;IACjD,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;IACZ,cAAc,EAAE,gBAAgB;IAChC,OAAO,EAAE,SAAS;CACV,CAAC,CAAA"}
package/dist/index.d.ts CHANGED
@@ -20,7 +20,8 @@ export { RetentionManager, type RetentionOptions, type RetentionResult, type Ret
20
20
  export { SolidObjectsTestHelper, type RunDueRemindersOptions, type TestDrainOptions, type TestHelperRole, } from "./test-helper.js";
21
21
  export { MessageReference, type ActorOperationNames, type ActorMessageSender, type ActorQueryNames, type ActorReference, type ActorSnapshot, type ScheduledOperations, type ScheduledOperationsFor, type StagedOperations, } from "./reference.js";
22
22
  export type { AdministrationAuthorizationInput, AuthorizationInput, BroadcastEvent, DestroyAuthorizationInput, InstrumentationEvent, SolidObjectsConfiguration, SubscriptionAuthorizationInput, } from "./configuration.js";
23
- export type { AdministrationOptions, ActorIdentifier, AsyncInvocationOptions, CommitActionContext, DeepReadonly, DestroyOptions, EffectContext, EffectFailurePayload, EffectSuccessPayload, InvocationOptions, JsonObject, JsonPrimitive, JsonValue, Logger, LongRunningComponent, MessageContext, MessageStatus, SerializedError, SnapshotOptions, } from "./types.js";
23
+ export type { AdministrationOptions, ActorIdentifier, AsyncInvocationOptions, CommitActionContext, DeepReadonly, DestroyOptions, EffectContext, EffectFailurePayload, EffectHandle, EffectSuccessPayload, InvocationOptions, JsonObject, JsonPrimitive, JsonValue, Logger, LongRunningComponent, MessageContext, MessageStatus, SerializedError, SnapshotOptions, } from "./types.js";
24
24
  export type { Database, DatabaseConnection, DatabaseFamily, DatabaseTransactionOptions, RunResult, } from "./database/types.js";
25
25
  export { ApplicationWriteForbidden, ActorCallCycle, ActorDestroyed, DatabaseDeadlineExceeded, IdempotencyConflict, InvalidActor, InvalidRejectionCode, InvalidPayload, InvalidPayloadBroadcast, LostActivation, MailboxFull, MessageFailed, NonRetryableError, PayloadTooLarge, QueryMutatedState, Rejected, ReminderNotPaused, SolidObjectsError, StateMigrationError, SyncTimeout, SyncEnqueueTimeout, SyncInsideTransaction, type SyncTimeoutDetails, type SyncTimeoutWaitingOn, Unauthorized, UnknownActorType, UnknownCommitAction, UnknownDeadLetter, UnknownEffect, UnknownOperation, UnknownPayloadBroadcast, UnknownReminder, UnsupportedDatabase, } from "./errors.js";
26
+ export * from "./effect-recovery.js";
26
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -20,4 +20,5 @@ export { RetentionManager, } from "./retention.js";
20
20
  export { SolidObjectsTestHelper, } from "./test-helper.js";
21
21
  export { MessageReference, } from "./reference.js";
22
22
  export { ApplicationWriteForbidden, ActorCallCycle, ActorDestroyed, DatabaseDeadlineExceeded, IdempotencyConflict, InvalidActor, InvalidRejectionCode, InvalidPayload, InvalidPayloadBroadcast, LostActivation, MailboxFull, MessageFailed, NonRetryableError, PayloadTooLarge, QueryMutatedState, Rejected, ReminderNotPaused, SolidObjectsError, StateMigrationError, SyncTimeout, SyncEnqueueTimeout, SyncInsideTransaction, Unauthorized, UnknownActorType, UnknownCommitAction, UnknownDeadLetter, UnknownEffect, UnknownOperation, UnknownPayloadBroadcast, UnknownReminder, UnsupportedDatabase, } from "./errors.js";
23
+ export * from "./effect-recovery.js";
23
24
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAA;AAE3B,OAAO,EACL,KAAK,EACL,qBAAqB,EACrB,cAAc,GAaf,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,SAAS,EACT,aAAa,EACb,mBAAmB,GAEpB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,uBAAuB,GAGxB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,MAAM,EAAsB,MAAM,UAAU,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EACL,eAAe,GAMhB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EACL,sBAAsB,GAKvB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,wBAAwB,EACxB,eAAe,GAIhB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,iBAAiB,EAAmB,MAAM,mBAAmB,CAAA;AACtE,OAAO,EACL,qBAAqB,EACrB,cAAc,GAKf,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,MAAM,GAKP,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,qBAAqB,GAOtB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,gBAAgB,GAIjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,sBAAsB,GAIvB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,gBAAgB,GASjB,MAAM,gBAAgB,CAAA;AAsCvB,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,cAAc,EACd,wBAAwB,EACxB,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,cAAc,EACd,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,qBAAqB,EAGrB,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,mBAAmB,GACpB,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAA;AAE3B,OAAO,EACL,KAAK,EACL,qBAAqB,EACrB,cAAc,GAaf,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,SAAS,EACT,aAAa,EACb,mBAAmB,GAEpB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,uBAAuB,GAGxB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,MAAM,EAAsB,MAAM,UAAU,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EACL,eAAe,GAMhB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EACL,sBAAsB,GAKvB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,wBAAwB,EACxB,eAAe,GAIhB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,iBAAiB,EAAmB,MAAM,mBAAmB,CAAA;AACtE,OAAO,EACL,qBAAqB,EACrB,cAAc,GAKf,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,MAAM,GAKP,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,qBAAqB,GAOtB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,gBAAgB,GAIjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,sBAAsB,GAIvB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,gBAAgB,GASjB,MAAM,gBAAgB,CAAA;AAuCvB,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,cAAc,EACd,wBAAwB,EACxB,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,cAAc,EACd,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,qBAAqB,EAGrB,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,mBAAmB,GACpB,MAAM,aAAa,CAAA;AACpB,cAAc,sBAAsB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../src/platform/uuid.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
1
+ {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../src/platform/uuid.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,IAAI,MAAM,CAGnC"}
@@ -1,4 +1,5 @@
1
1
  export function randomUUID() {
2
- return globalThis.crypto.randomUUID();
2
+ const platform = globalThis;
3
+ return platform.crypto.randomUUID();
3
4
  }
4
5
  //# sourceMappingURL=uuid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"uuid.js","sourceRoot":"","sources":["../../src/platform/uuid.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU;IACxB,OAAO,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAA;AACvC,CAAC"}
1
+ {"version":3,"file":"uuid.js","sourceRoot":"","sources":["../../src/platform/uuid.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU;IACxB,MAAM,QAAQ,GAAG,UAAsE,CAAA;IACvF,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,CAAA;AACrC,CAAC"}
@@ -155,6 +155,7 @@ export declare class Repository {
155
155
  completeBroadcast(broadcast: BroadcastRow): Promise<void>;
156
156
  failBroadcast(broadcast: BroadcastRow, error: unknown): Promise<void>;
157
157
  private claimLockClause;
158
+ private effectRecoveryCoordinator;
158
159
  private rowLockClause;
159
160
  private lockActivationFence;
160
161
  private lockMessageClaim;
@@ -1 +1 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { hostIdentity } from "./platform/host-identity.js";
3
3
  import { ActorDestroyed, IdempotencyConflict, LostActivation, MailboxFull, ReminderNotPaused, UnknownDeadLetter, UnknownReminder, } from "./errors.js";
4
4
  import { jsonObject, normalizeJson } from "./serialization.js";
5
5
  import { VERSION } from "./version.js";
6
+ import { EffectRecoveryCoordinator } from "./effect-recovery-coordinator.js";
6
7
  export class Repository {
7
8
  settings;
8
9
  constructor(settings) {
@@ -81,6 +82,7 @@ export class Repository {
81
82
  });
82
83
  }
83
84
  async cleanupStaleProcesses() {
85
+ await this.effectRecoveryCoordinator().recoverAvailable();
84
86
  return this.settings.database.transaction(async (connection) => {
85
87
  const now = await connection.nowMilliseconds();
86
88
  const staleAt = now - this.settings.processAliveThresholdMilliseconds;
@@ -143,14 +145,17 @@ export class Repository {
143
145
  activation_expires_at_ms = NULL, updated_at_ms = ?
144
146
  WHERE activation_owner_id = ?`, [now, processId]);
145
147
  await connection.run(`UPDATE ${this.table("effects")} SET status = 'pending', claimed_by = NULL
146
- WHERE status = 'processing' AND claimed_by = ?`, [processId]);
148
+ WHERE status = 'processing' AND claimed_by = ? AND NOT EXISTS (
149
+ SELECT 1 FROM ${this.table("effect_recoveries")} recoveries
150
+ WHERE recoveries.effect_id = ${this.table("effects")}.id AND recoveries.recovery_operation IS NOT NULL
151
+ )`, [processId]);
147
152
  await connection.run(`UPDATE ${this.table("reminders")} SET claimed_by = NULL, claimed_at_ms = NULL
148
153
  WHERE claimed_by = ?`, [processId]);
149
154
  await connection.run(`UPDATE ${this.table("broadcasts")} SET status = 'pending', claimed_by = NULL
150
155
  WHERE status = 'processing' AND claimed_by = ?`, [processId]);
151
156
  await connection.run(`UPDATE ${this.table("processes")}
152
- SET shutdown_state = 'stopped', stopped_at_ms = ?, heartbeat_at_ms = ?
153
- WHERE id = ? AND shutdown_state <> 'stopped'`, [now, now, processId]);
157
+ SET shutdown_state = 'stopped', stopped_at_ms = ?
158
+ WHERE id = ? AND shutdown_state <> 'stopped'`, [now, processId]);
154
159
  }
155
160
  async enqueue(input) {
156
161
  for (let attempt = 1; attempt <= 8; attempt += 1) {
@@ -466,11 +471,12 @@ export class Repository {
466
471
  turn.message.id,
467
472
  ]);
468
473
  for (const effect of input.intents.effects) {
474
+ const effectId = effect.id ?? randomUUID();
469
475
  await connection.run(`INSERT INTO ${this.table("effects")}
470
476
  (id, message_id, instance_id, name, arguments, success_operation, failure_operation,
471
477
  status, max_attempts, available_at_ms)
472
478
  VALUES (?, ?, ?, ?, ?, ?, ?, 'pending', ?, ?)`, [
473
- randomUUID(),
479
+ effectId,
474
480
  turn.message.id,
475
481
  turn.instance.id,
476
482
  effect.name,
@@ -480,7 +486,23 @@ export class Repository {
480
486
  this.settings.maxAttempts,
481
487
  now,
482
488
  ]);
489
+ if (effect.recoveryOperation !== undefined || effect.statusOperation !== undefined) {
490
+ await connection.run(`INSERT INTO ${this.table("effect_recoveries")}
491
+ (effect_id, instance_id, recovery_operation, status_operation, recovery_timeout_ms)
492
+ VALUES (?, ?, ?, ?, ?)`, [
493
+ effectId,
494
+ turn.instance.id,
495
+ effect.recoveryOperation ?? null,
496
+ effect.statusOperation ?? null,
497
+ effect.recoveryTimeoutMilliseconds ?? null,
498
+ ]);
499
+ }
483
500
  }
501
+ await this.effectRecoveryCoordinator().check({
502
+ connection,
503
+ origin: turn.instance,
504
+ intents: input.intents.effectRecoveries ?? [],
505
+ });
484
506
  for (const reminder of input.intents.reminders) {
485
507
  const existing = await connection.get(`SELECT id, run_at_ms FROM ${this.table("reminders")}
486
508
  WHERE instance_id = ? AND operation = ?`, [turn.instance.id, reminder.name]);
@@ -938,6 +960,9 @@ export class Repository {
938
960
  const table = this.table("processes");
939
961
  return {
940
962
  sql: `${table}.shutdown_state = 'stopped'
963
+ AND NOT EXISTS (
964
+ SELECT 1 FROM ${this.table("effects")} effects WHERE effects.claimed_by = ${table}.id
965
+ )
941
966
  AND ${table}.stopped_at_ms IS NOT NULL
942
967
  AND ${table}.stopped_at_ms < ?
943
968
  AND NOT EXISTS (
@@ -966,6 +991,7 @@ export class Repository {
966
991
  }
967
992
  async resetForTesting() {
968
993
  const tables = [
994
+ "effect_recoveries",
969
995
  "dead_letters",
970
996
  "claimed_messages",
971
997
  "ready_messages",
@@ -982,11 +1008,15 @@ export class Repository {
982
1008
  });
983
1009
  }
984
1010
  async claimEffect(processId) {
1011
+ await this.effectRecoveryCoordinator().recoverAvailable();
985
1012
  return this.settings.database.transaction(async (connection) => {
986
1013
  const now = await connection.nowMilliseconds();
987
1014
  const staleAt = now - this.settings.processAliveThresholdMilliseconds;
988
1015
  await connection.run(`UPDATE ${this.table("effects")} SET status = 'pending', claimed_by = NULL
989
- WHERE status = 'processing' AND (
1016
+ WHERE status = 'processing' AND NOT EXISTS (
1017
+ SELECT 1 FROM ${this.table("effect_recoveries")} recoveries
1018
+ WHERE recoveries.effect_id = ${this.table("effects")}.id AND recoveries.recovery_operation IS NOT NULL
1019
+ ) AND (
990
1020
  claimed_by IS NULL OR NOT EXISTS (
991
1021
  SELECT 1 FROM ${this.table("processes")} processes
992
1022
  WHERE processes.id = ${this.table("effects")}.claimed_by
@@ -1017,6 +1047,8 @@ export class Repository {
1017
1047
  }
1018
1048
  async completeEffect(effect, result) {
1019
1049
  await this.settings.database.transaction(async (connection) => {
1050
+ if (!(await this.lockActivationFence(connection, effect.instance_id)))
1051
+ throw new LostActivation("effect origin no longer exists");
1020
1052
  const now = await connection.nowMilliseconds();
1021
1053
  const updated = await connection.run(`UPDATE ${this.table("effects")}
1022
1054
  SET status = 'completed', result = ?, error = NULL, claimed_by = NULL
@@ -1043,6 +1075,8 @@ export class Repository {
1043
1075
  async failEffect(options) {
1044
1076
  const { effect, error, retryable } = options;
1045
1077
  await this.settings.database.transaction(async (connection) => {
1078
+ if (!(await this.lockActivationFence(connection, effect.instance_id)))
1079
+ throw new LostActivation("effect origin no longer exists");
1046
1080
  const now = await connection.nowMilliseconds();
1047
1081
  const errorRecord = safeError(error);
1048
1082
  const exhausted = !retryable || Number(effect.attempt_count) >= Number(effect.max_attempts);
@@ -1397,6 +1431,12 @@ export class Repository {
1397
1431
  return "";
1398
1432
  return " FOR UPDATE SKIP LOCKED";
1399
1433
  }
1434
+ effectRecoveryCoordinator() {
1435
+ return new EffectRecoveryCoordinator({
1436
+ settings: this.settings,
1437
+ enqueue: (connection, input) => this.enqueueInTransaction(connection, input),
1438
+ });
1439
+ }
1400
1440
  rowLockClause() {
1401
1441
  if (this.settings.database.family === "sqlite")
1402
1442
  return "";