solid-objects 0.15.1 → 0.16.0

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 (127) hide show
  1. package/CHANGELOG.md +141 -0
  2. package/README.md +1 -1
  3. package/dist/actor-runtime.d.ts +9 -1
  4. package/dist/actor-runtime.d.ts.map +1 -1
  5. package/dist/actor.d.ts +22 -4
  6. package/dist/actor.d.ts.map +1 -1
  7. package/dist/actor.js +81 -2
  8. package/dist/actor.js.map +1 -1
  9. package/dist/broadcast-worker.js +1 -1
  10. package/dist/broadcast-worker.js.map +1 -1
  11. package/dist/cloudflare/configuration.d.ts +3 -1
  12. package/dist/cloudflare/configuration.d.ts.map +1 -1
  13. package/dist/cloudflare/configuration.js +4 -0
  14. package/dist/cloudflare/configuration.js.map +1 -1
  15. package/dist/cloudflare/engine.d.ts +4 -0
  16. package/dist/cloudflare/engine.d.ts.map +1 -1
  17. package/dist/cloudflare/engine.js +91 -24
  18. package/dist/cloudflare/engine.js.map +1 -1
  19. package/dist/cloudflare/records.d.ts +2 -0
  20. package/dist/cloudflare/records.d.ts.map +1 -1
  21. package/dist/cloudflare/runtime.d.ts +8 -0
  22. package/dist/cloudflare/runtime.d.ts.map +1 -1
  23. package/dist/cloudflare/runtime.js +52 -1
  24. package/dist/cloudflare/runtime.js.map +1 -1
  25. package/dist/cloudflare/storage.d.ts +2 -0
  26. package/dist/cloudflare/storage.d.ts.map +1 -1
  27. package/dist/cloudflare/storage.js +10 -0
  28. package/dist/cloudflare/storage.js.map +1 -1
  29. package/dist/configuration.d.ts +9 -5
  30. package/dist/configuration.d.ts.map +1 -1
  31. package/dist/configuration.js +43 -7
  32. package/dist/configuration.js.map +1 -1
  33. package/dist/database/types.d.ts +4 -0
  34. package/dist/database/types.d.ts.map +1 -1
  35. package/dist/dead-letter-scopes.d.ts +75 -0
  36. package/dist/dead-letter-scopes.d.ts.map +1 -0
  37. package/dist/dead-letter-scopes.js +157 -0
  38. package/dist/dead-letter-scopes.js.map +1 -0
  39. package/dist/dead-letters.d.ts +5 -0
  40. package/dist/dead-letters.d.ts.map +1 -1
  41. package/dist/dead-letters.js +16 -0
  42. package/dist/dead-letters.js.map +1 -1
  43. package/dist/definition.d.ts +2 -0
  44. package/dist/definition.d.ts.map +1 -1
  45. package/dist/definition.js +1 -1
  46. package/dist/definition.js.map +1 -1
  47. package/dist/doctor.d.ts +1 -0
  48. package/dist/doctor.d.ts.map +1 -1
  49. package/dist/doctor.js +35 -2
  50. package/dist/doctor.js.map +1 -1
  51. package/dist/effect-recovery-coordinator.d.ts +2 -0
  52. package/dist/effect-recovery-coordinator.d.ts.map +1 -1
  53. package/dist/effect-recovery-coordinator.js +1 -1
  54. package/dist/effect-recovery-coordinator.js.map +1 -1
  55. package/dist/effect-worker.js +1 -1
  56. package/dist/effect-worker.js.map +1 -1
  57. package/dist/errors.d.ts +4 -0
  58. package/dist/errors.d.ts.map +1 -1
  59. package/dist/errors.js +7 -0
  60. package/dist/errors.js.map +1 -1
  61. package/dist/index.d.ts +9 -5
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +5 -2
  64. package/dist/index.js.map +1 -1
  65. package/dist/outcome.d.ts +18 -0
  66. package/dist/outcome.d.ts.map +1 -0
  67. package/dist/outcome.js +2 -0
  68. package/dist/outcome.js.map +1 -0
  69. package/dist/platform/uuid.d.ts +1 -0
  70. package/dist/platform/uuid.d.ts.map +1 -1
  71. package/dist/platform/uuid.js +5 -0
  72. package/dist/platform/uuid.js.map +1 -1
  73. package/dist/records.d.ts +6 -0
  74. package/dist/records.d.ts.map +1 -1
  75. package/dist/redrive.d.ts +60 -0
  76. package/dist/redrive.d.ts.map +1 -0
  77. package/dist/redrive.js +239 -0
  78. package/dist/redrive.js.map +1 -0
  79. package/dist/reference.d.ts +17 -3
  80. package/dist/reference.d.ts.map +1 -1
  81. package/dist/reference.js +10 -0
  82. package/dist/reference.js.map +1 -1
  83. package/dist/reminder-scheduler.js +1 -1
  84. package/dist/reminder-scheduler.js.map +1 -1
  85. package/dist/repository.d.ts +35 -4
  86. package/dist/repository.d.ts.map +1 -1
  87. package/dist/repository.js +136 -29
  88. package/dist/repository.js.map +1 -1
  89. package/dist/runtime.d.ts +42 -1
  90. package/dist/runtime.d.ts.map +1 -1
  91. package/dist/runtime.js +263 -6
  92. package/dist/runtime.js.map +1 -1
  93. package/dist/schema.d.ts +1 -0
  94. package/dist/schema.d.ts.map +1 -1
  95. package/dist/schema.js +97 -1
  96. package/dist/schema.js.map +1 -1
  97. package/dist/types.d.ts +15 -0
  98. package/dist/types.d.ts.map +1 -1
  99. package/dist/version.d.ts +1 -1
  100. package/dist/version.js +1 -1
  101. package/dist/wake-up/postgresql.d.ts +4 -2
  102. package/dist/wake-up/postgresql.d.ts.map +1 -1
  103. package/dist/wake-up/postgresql.js +9 -0
  104. package/dist/wake-up/postgresql.js.map +1 -1
  105. package/dist/wake-up/redis.d.ts +2 -1
  106. package/dist/wake-up/redis.d.ts.map +1 -1
  107. package/dist/wake-up/redis.js +6 -0
  108. package/dist/wake-up/redis.js.map +1 -1
  109. package/dist/wake-up-selection.d.ts +22 -0
  110. package/dist/wake-up-selection.d.ts.map +1 -0
  111. package/dist/wake-up-selection.js +198 -0
  112. package/dist/wake-up-selection.js.map +1 -0
  113. package/dist/wake-up.d.ts +15 -0
  114. package/dist/wake-up.d.ts.map +1 -1
  115. package/dist/wake-up.js +6 -0
  116. package/dist/wake-up.js.map +1 -1
  117. package/dist/worker.js +1 -1
  118. package/dist/worker.js.map +1 -1
  119. package/docs/api.md +202 -6
  120. package/docs/cloudflare.md +1 -0
  121. package/docs/configuration.md +52 -22
  122. package/docs/correctness.md +11 -0
  123. package/docs/dashboard.md +9 -0
  124. package/docs/fit.md +3 -1
  125. package/docs/operations.md +104 -7
  126. package/docs/parity.md +100 -25
  127. package/package.json +1 -1
package/dist/runtime.d.ts CHANGED
@@ -1,7 +1,10 @@
1
1
  import type { Actor, ActorClass } from "./actor.js";
2
2
  import { BroadcastWorker } from "./broadcast-worker.js";
3
3
  import { type BroadcastEvent, type SolidObjectsConfiguration } from "./configuration.js";
4
+ import type { Outcome } from "./outcome.js";
4
5
  import { DeadLetterManager, type DeadLetter } from "./dead-letters.js";
6
+ import type { DeadLetterKind, RedriveFilters } from "./dead-letter-scopes.js";
7
+ import { RedriveManager } from "./redrive.js";
5
8
  import { Doctor } from "./doctor.js";
6
9
  import { ActorReferenceCore, MessageReference, type ActorReference, type ActorSnapshot } from "./reference.js";
7
10
  import { ReconciliationManager, type OrphanedReconciliationOptions, type QuietReconciliationOptions, type ReconciliationPage, type ReconciliationPageOptions, type ReconciliationStatesOptions } from "./reconciliation.js";
@@ -17,6 +20,7 @@ import type { ActorIdentifier, AdministrationOptions, AsyncInvocationOptions, Co
17
20
  import { SolidObjectsTestHelper } from "./test-helper.js";
18
21
  import { Worker } from "./worker.js";
19
22
  import { EffectWorker } from "./effect-worker.js";
23
+ import type { WakeUpAdapter, WakeUpCapability, WakeUpRole, WakeUpWatch } from "./wake-up.js";
20
24
  import type { DatabaseConnection } from "./database/types.js";
21
25
  export interface SnapshotWithIncarnation<ActorType extends Actor> {
22
26
  snapshot: ActorSnapshot<ActorType>;
@@ -30,6 +34,7 @@ export declare class SolidObjectsRuntime {
30
34
  readonly settings: import("./configuration.js").RuntimeSettings;
31
35
  readonly repository: Repository;
32
36
  readonly deadLetters: DeadLetterManager;
37
+ readonly redrives: RedriveManager;
33
38
  readonly reconciliation: ReconciliationManager;
34
39
  readonly retention: RetentionManager;
35
40
  readonly doctor: Doctor;
@@ -46,6 +51,8 @@ export declare class SolidObjectsRuntime {
46
51
  private running;
47
52
  private pollingOnlyWakeUpWarningEmitted;
48
53
  private pollingOnlyWakeUpWarningCheck;
54
+ private wakeUpSelection;
55
+ private wakeUpSelectionFailureLogged;
49
56
  constructor(configuration: SolidObjectsConfiguration);
50
57
  install(): Promise<void>;
51
58
  register<ActorType extends Actor>(actorClass: ActorClass<ActorType>): ActorClass<ActorType>;
@@ -77,6 +84,13 @@ export declare class SolidObjectsRuntime {
77
84
  private messageSnapshotBeforeDeadline;
78
85
  private syncTimeout;
79
86
  private databaseContentionTimeout;
87
+ findBy(input: {
88
+ reference?: ActorReferenceCore<Actor>;
89
+ requestId?: string;
90
+ idempotencyKey?: string;
91
+ authorizationContext?: AdministrationOptions["authorizationContext"];
92
+ }): Promise<MessageReference | undefined>;
93
+ messageOutcome<Result>(messageReference: MessageReference<Result>, options?: SnapshotOptions): Promise<Outcome<Result>>;
80
94
  messageStatus(messageReference: MessageReference, options?: SnapshotOptions): Promise<MessageStatus>;
81
95
  messageResult<Result>(messageReference: MessageReference<Result>, options?: SnapshotOptions): Promise<DeepReadonly<Result> | undefined>;
82
96
  snapshot<ActorType extends Actor>(reference: ActorReferenceCore<ActorType>, options?: SnapshotOptions): Promise<ActorSnapshot<ActorType>>;
@@ -95,6 +109,16 @@ export declare class SolidObjectsRuntime {
95
109
  authorizationContext: unknown;
96
110
  }): Promise<PayloadEnvelope[]>;
97
111
  destroy(reference: ActorReferenceCore<Actor>, options?: DestroyOptions): Promise<boolean>;
112
+ wakeUpAfterRevival(kind: DeadLetterKind): void;
113
+ administrationIdentity(authorizationContext: AdministrationOptions["authorizationContext"]): Promise<string | null>;
114
+ writeAdministrationEvent(input: {
115
+ connection: DatabaseConnection;
116
+ action: string;
117
+ kind: string;
118
+ subjectId?: string;
119
+ filters?: RedriveFilters;
120
+ actor: string | null;
121
+ }): Promise<void>;
98
122
  inspectDeadLetters(options?: AdministrationOptions): Promise<readonly DeadLetter[]>;
99
123
  retryDeadLetter(id: string, options?: AdministrationOptions): Promise<MessageReference>;
100
124
  activeInstances(options?: ReconciliationPageOptions): Promise<ReconciliationPage>;
@@ -119,6 +143,9 @@ export declare class SolidObjectsRuntime {
119
143
  lifecycle: "activated" | "unactivated";
120
144
  }): Promise<void>;
121
145
  close(): Promise<void>;
146
+ wakeUpAdapter(): Promise<WakeUpAdapter>;
147
+ wakeUpCapability(): Promise<WakeUpCapability>;
148
+ watchWakeUp(role: WakeUpRole): Promise<WakeUpWatch>;
122
149
  warnIfPollingIsOnlyCrossProcessWakeUp(): Promise<void>;
123
150
  private checkPollingOnlyCrossProcessWakeUp;
124
151
  resetForTesting(): Promise<void>;
@@ -144,6 +171,10 @@ export declare class SolidObjectsRuntime {
144
171
  }): Promise<MessageRow>;
145
172
  announceInternalMessage(message: MessageRow): void;
146
173
  private enqueue;
174
+ private lookedUpMessage;
175
+ private absentMessage;
176
+ private readableOperation;
177
+ private readableMessage;
147
178
  private messageReferenceFromRow;
148
179
  private renewLease;
149
180
  private buildComponentSlots;
@@ -171,9 +202,19 @@ export declare class SolidObjectsRuntime {
171
202
  * reports only after the commit succeeds, so a rolled-back turn stays silent.
172
203
  */
173
204
  private warnAboutLargeState;
205
+ private resolveWakeUp;
206
+ private closeWakeUp;
207
+ private discardWakeUp;
174
208
  private wakeUp;
209
+ private notifyWhenSelected;
210
+ private reportWakeUpSelectionFailure;
175
211
  private authorize;
176
- private authorizeAdministration;
212
+ authorizeAdministration(options: {
213
+ action: string;
214
+ resource: string;
215
+ resourceId?: string;
216
+ authorizationContext: unknown;
217
+ }): Promise<void>;
177
218
  private authorizeMessageReference;
178
219
  }
179
220
  export declare function createRuntime(configuration: SolidObjectsConfiguration): SolidObjectsRuntime;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
package/dist/runtime.js CHANGED
@@ -1,11 +1,13 @@
1
1
  import { BroadcastWorker } from "./broadcast-worker.js";
2
2
  import { buildSettings, broadcastsEnabled, validateComponent, } from "./configuration.js";
3
3
  import { currentActor, withActorContext, withActorProjection, withApplicationWritesForbidden, } from "./context.js";
4
+ import { randomUUID } from "./platform/uuid.js";
4
5
  import { DeadLetterManager } from "./dead-letters.js";
6
+ import { RedriveManager, RedriveScheduler } from "./redrive.js";
5
7
  import { Doctor } from "./doctor.js";
6
8
  import { clearDefaultRuntime, setDefaultRuntime } from "./default-runtime.js";
7
9
  import { actorState, hydrateActor, initialStateFor, migrateState, validateDefinition, } from "./definition.js";
8
- import { ActorCallCycle, ActorSetupFailed, ActorDestroyed, DatabaseDeadlineExceeded, InvalidPayloadBroadcast, InvalidActor, LostActivation, MessageFailed, NonRetryableError, QueryMutatedState, Rejected, SyncTimeout, SyncEnqueueTimeout, SyncInsideTransaction, Unauthorized, UnknownCommitAction, UnknownDeadLetter, UnknownEffect, UnknownActorType, UnknownOperation, UnknownPayloadBroadcast, } from "./errors.js";
10
+ import { ActorCallCycle, ActorSetupFailed, ActorDestroyed, DatabaseDeadlineExceeded, InvalidPayloadBroadcast, InvalidActor, LostActivation, MessageFailed, MessagePruned, NonRetryableError, QueryMutatedState, Rejected, SyncTimeout, SyncEnqueueTimeout, SyncInsideTransaction, Unauthorized, UnknownCommitAction, UnknownDeadLetter, UnknownEffect, UnknownActorType, UnknownOperation, UnknownPayloadBroadcast, } from "./errors.js";
9
11
  import { ActorReferenceCore, createActorReference, MessageReference, } from "./reference.js";
10
12
  import { ReconciliationManager, } from "./reconciliation.js";
11
13
  import { Repository } from "./repository.js";
@@ -21,12 +23,35 @@ import { SolidObjectsTestHelper } from "./test-helper.js";
21
23
  import { waitFor, Worker } from "./worker.js";
22
24
  import { EffectWorker } from "./effect-worker.js";
23
25
  import { notifyWakeUp } from "./wake-up-notification.js";
26
+ import { selectWakeUp } from "./wake-up-selection.js";
24
27
  import { withDatabaseDeadline } from "./database/deadline.js";
25
28
  import { evaluateActorTurn, readActorObservables } from "./turn.js";
29
+ function scheduledReminderOf(row) {
30
+ const operation = row.message_operation ?? row.operation;
31
+ const name = row.operation;
32
+ return {
33
+ name,
34
+ operation,
35
+ key: name === operation ? null : name.slice(operation.length + 1),
36
+ runAtMilliseconds: Number(row.run_at_ms),
37
+ intervalMilliseconds: row.interval_ms === null ? null : Number(row.interval_ms),
38
+ missedPolicy: row.missed_policy,
39
+ status: row.status,
40
+ handle: { name },
41
+ };
42
+ }
43
+ let administrationEventCounter = 0;
44
+ function administrationEventId(occurredAtMilliseconds) {
45
+ administrationEventCounter = (administrationEventCounter + 1) % 1_000_000;
46
+ const stamp = String(occurredAtMilliseconds).padStart(15, "0");
47
+ const counter = String(administrationEventCounter).padStart(6, "0");
48
+ return `${stamp}-${counter}-${randomUUID()}`;
49
+ }
26
50
  export class SolidObjectsRuntime {
27
51
  settings;
28
52
  repository;
29
53
  deadLetters;
54
+ redrives;
30
55
  reconciliation;
31
56
  retention;
32
57
  doctor;
@@ -43,10 +68,15 @@ export class SolidObjectsRuntime {
43
68
  running = false;
44
69
  pollingOnlyWakeUpWarningEmitted = false;
45
70
  pollingOnlyWakeUpWarningCheck;
71
+ wakeUpSelection;
72
+ wakeUpSelectionFailureLogged = false;
46
73
  constructor(configuration) {
47
74
  this.settings = buildSettings(configuration);
48
- this.repository = new Repository(this.settings);
75
+ this.repository = new Repository(this.settings, {
76
+ wakeUpAdapter: () => this.wakeUpAdapter(),
77
+ });
49
78
  this.deadLetters = new DeadLetterManager(this);
79
+ this.redrives = new RedriveManager(this);
50
80
  this.reconciliation = new ReconciliationManager(this);
51
81
  this.retention = new RetentionManager(this);
52
82
  this.doctor = new Doctor(this);
@@ -451,6 +481,50 @@ export class SolidObjectsRuntime {
451
481
  });
452
482
  return error;
453
483
  }
484
+ // A request id is unique across the table, so the runtime answers it. An
485
+ // idempotency key is unique per actor, so a reference supplies that scope.
486
+ async findBy(input) {
487
+ const named = [input.requestId, input.idempotencyKey].filter((value) => value !== undefined).length;
488
+ if (named !== 1) {
489
+ throw new TypeError("findBy expects exactly one of requestId or idempotencyKey");
490
+ }
491
+ if (input.idempotencyKey !== undefined && !input.reference) {
492
+ throw new TypeError("findBy with idempotencyKey requires reference");
493
+ }
494
+ const message = await this.lookedUpMessage(input);
495
+ if (!message)
496
+ return await this.absentMessage(input);
497
+ if (!(await this.readableMessage(message, input.authorizationContext)))
498
+ return undefined;
499
+ return this.messageReferenceFromRow(message);
500
+ }
501
+ async messageOutcome(messageReference, options = {}) {
502
+ const message = await this.authorizeMessageReference(messageReference, options.authorizationContext);
503
+ const found = await this.repository.messageWithStatus(message.id);
504
+ if (!found) {
505
+ return Object.freeze({
506
+ status: "unknown",
507
+ result: undefined,
508
+ error: undefined,
509
+ rejection: undefined,
510
+ attempts: 0,
511
+ });
512
+ }
513
+ const snapshot = found.message;
514
+ return Object.freeze({
515
+ status: found.status,
516
+ result: snapshot.result === null
517
+ ? undefined
518
+ : readonlyCopy(normalizeJson(JSON.parse(snapshot.result))),
519
+ error: snapshot.error === null
520
+ ? undefined
521
+ : readonlyCopy(JSON.parse(snapshot.error)),
522
+ rejection: snapshot.rejection === null
523
+ ? undefined
524
+ : readonlyCopy(JSON.parse(snapshot.rejection)),
525
+ attempts: Number(snapshot.attempt_count),
526
+ });
527
+ }
454
528
  async messageStatus(messageReference, options = {}) {
455
529
  const message = await this.authorizeMessageReference(messageReference, options.authorizationContext);
456
530
  return this.repository.messageStatus(message.id);
@@ -501,6 +575,9 @@ export class SolidObjectsRuntime {
501
575
  definition: registered.definition,
502
576
  actorId: reference.actorId,
503
577
  state,
578
+ readReminders: async () => instance === undefined
579
+ ? []
580
+ : (await this.repository.remindersForInstance(instance.id)).map(scheduledReminderOf),
504
581
  });
505
582
  const stateBefore = stableJson(actorState(actor, registered.definition.stateKeys));
506
583
  const intentCount = actor.intentCount();
@@ -544,6 +621,11 @@ export class SolidObjectsRuntime {
544
621
  definition: registered.definition,
545
622
  actorId: options.actorId,
546
623
  state,
624
+ ...(instance === undefined
625
+ ? {}
626
+ : {
627
+ readReminders: async () => (await this.repository.remindersForInstance(instance.id)).map(scheduledReminderOf),
628
+ }),
547
629
  });
548
630
  return readonlyCopy({
549
631
  actorType: options.actorType,
@@ -597,6 +679,27 @@ export class SolidObjectsRuntime {
597
679
  }
598
680
  return destroyed;
599
681
  }
682
+ wakeUpAfterRevival(kind) {
683
+ this.wakeUp(kind === "effect" ? "effects" : "broadcasts");
684
+ }
685
+ async administrationIdentity(authorizationContext) {
686
+ const identity = await this.settings.administrationIdentity(authorizationContext);
687
+ return identity === null || identity === undefined ? null : String(identity).slice(0, 255);
688
+ }
689
+ async writeAdministrationEvent(input) {
690
+ const occurredAt = await input.connection.nowMilliseconds();
691
+ await input.connection.run(`INSERT INTO ${this.repository.table("administration_events")}
692
+ (id, action, kind, subject_id, filters, actor, occurred_at_ms)
693
+ VALUES (?, ?, ?, ?, ?, ?, ?)`, [
694
+ administrationEventId(occurredAt),
695
+ input.action,
696
+ input.kind,
697
+ input.subjectId ?? null,
698
+ input.filters === undefined ? null : JSON.stringify(input.filters),
699
+ input.actor,
700
+ occurredAt,
701
+ ]);
702
+ }
600
703
  async inspectDeadLetters(options = {}) {
601
704
  await this.authorizeAdministration({
602
705
  action: "inspect",
@@ -620,10 +723,18 @@ export class SolidObjectsRuntime {
620
723
  if (!actor.operations.has(deadLetter.operation)) {
621
724
  throw new UnknownOperation(`unknown dead-letter operation ${JSON.stringify(deadLetter.operation)}`);
622
725
  }
726
+ const actorIdentity = await this.administrationIdentity(options.authorizationContext);
623
727
  const message = await this.repository.retryDeadLetter({
624
728
  id,
625
729
  initialState: initialStateFor(actor.definition),
626
730
  stateVersion: actor.definition.stateVersion,
731
+ audit: (connection) => this.writeAdministrationEvent({
732
+ connection,
733
+ action: "dead_letter.retry",
734
+ kind: "message",
735
+ subjectId: id,
736
+ actor: actorIdentity,
737
+ }),
627
738
  });
628
739
  this.emitInstrumentation("dead_letter.retried", {
629
740
  deadLetterId: id,
@@ -840,6 +951,7 @@ export class SolidObjectsRuntime {
840
951
  definition,
841
952
  actorId: turn.message.actor_id,
842
953
  state: deepCopy(state),
954
+ readReminders: async () => (await this.repository.remindersForInstance(turn.instance.id)).map(scheduledReminderOf),
843
955
  });
844
956
  }
845
957
  catch (error) {
@@ -1040,12 +1152,21 @@ export class SolidObjectsRuntime {
1040
1152
  throw new Error("abort runtime.run() and wait for it before closing the runtime");
1041
1153
  await this.callerWorker?.stop();
1042
1154
  this.realtime.close();
1043
- await this.settings.wakeUp.close();
1155
+ await this.closeWakeUp();
1044
1156
  await this.settings.database.close();
1045
1157
  clearDefaultRuntime(this);
1046
1158
  }
1159
+ async wakeUpAdapter() {
1160
+ return (await this.resolveWakeUp()).adapter;
1161
+ }
1162
+ async wakeUpCapability() {
1163
+ return (await this.resolveWakeUp()).capability;
1164
+ }
1165
+ async watchWakeUp(role) {
1166
+ return await (await this.wakeUpAdapter()).watch(role);
1167
+ }
1047
1168
  async warnIfPollingIsOnlyCrossProcessWakeUp() {
1048
- if (this.settings.wakeUpConfigured || this.pollingOnlyWakeUpWarningEmitted)
1169
+ if (this.pollingOnlyWakeUpWarningEmitted)
1049
1170
  return;
1050
1171
  if (this.pollingOnlyWakeUpWarningCheck)
1051
1172
  return this.pollingOnlyWakeUpWarningCheck;
@@ -1061,6 +1182,8 @@ export class SolidObjectsRuntime {
1061
1182
  }
1062
1183
  }
1063
1184
  async checkPollingOnlyCrossProcessWakeUp() {
1185
+ if ((await this.wakeUpCapability()).crossesProcesses)
1186
+ return;
1064
1187
  if (!(await this.repository.hasLiveProcessOutsideCurrentHostProcess()))
1065
1188
  return;
1066
1189
  if (this.pollingOnlyWakeUpWarningEmitted)
@@ -1082,6 +1205,7 @@ export class SolidObjectsRuntime {
1082
1205
  await this.callerWorker?.stop();
1083
1206
  this.callerWorker = undefined;
1084
1207
  this.realtime.close();
1208
+ await this.discardWakeUp();
1085
1209
  await this.repository.resetForTesting();
1086
1210
  }
1087
1211
  emitInstrumentation(name, attributes) {
@@ -1142,7 +1266,8 @@ export class SolidObjectsRuntime {
1142
1266
  if (!actor.operations.has(dispatchOperation)) {
1143
1267
  throw new UnknownOperation(`unknown reminder operation ${JSON.stringify(dispatchOperation)}`);
1144
1268
  }
1145
- await this.repository.enqueueReminder(reminder, options);
1269
+ if (!(await this.repository.enqueueReminder(reminder, options)))
1270
+ return;
1146
1271
  this.wakeUp("actors");
1147
1272
  this.emitInstrumentation("reminder.enqueued", {
1148
1273
  reminderId: reminder.id,
@@ -1240,6 +1365,101 @@ export class SolidObjectsRuntime {
1240
1365
  this.wakeUp("actors");
1241
1366
  return this.messageReferenceFromRow(message);
1242
1367
  }
1368
+ async lookedUpMessage(input) {
1369
+ if (input.requestId !== undefined) {
1370
+ return await this.repository.findMessageByRequestId(input.requestId);
1371
+ }
1372
+ return await this.repository.findMessageByIdempotencyKey({
1373
+ actorType: input.reference.actorType,
1374
+ actorId: input.reference.actorId,
1375
+ idempotencyKey: input.idempotencyKey,
1376
+ });
1377
+ }
1378
+ // An actor remembers the idempotency keys of its own finished turns, so a
1379
+ // key it remembers and no longer has a row for was pruned. A request id is
1380
+ // generated by the runtime, so no actor remembers one and both cases read
1381
+ // the same. A caller the policy refuses learns nothing either way.
1382
+ async absentMessage(input) {
1383
+ if (input.idempotencyKey === undefined)
1384
+ return undefined;
1385
+ const reference = input.reference;
1386
+ const remembered = await this.repository.rememberedIdempotencyKey({
1387
+ actorType: reference.actorType,
1388
+ actorId: reference.actorId,
1389
+ idempotencyKey: input.idempotencyKey,
1390
+ });
1391
+ if (!remembered)
1392
+ return undefined;
1393
+ const readable = await this.readableOperation({
1394
+ actorType: reference.actorType,
1395
+ actorId: reference.actorId,
1396
+ operation: remembered.operation,
1397
+ argumentsValue: remembered.arguments,
1398
+ authorizationContext: input.authorizationContext,
1399
+ });
1400
+ if (!readable)
1401
+ return undefined;
1402
+ throw new MessagePruned(input.idempotencyKey);
1403
+ }
1404
+ async readableOperation(input) {
1405
+ try {
1406
+ const registered = this.fetchActor(input.actorType);
1407
+ if (!registered.operations.has(input.operation) && !registered.queries.has(input.operation))
1408
+ return false;
1409
+ await this.authorize({
1410
+ kind: this.isQuery(registered.definition, input.operation) ? "query" : "message",
1411
+ reference: new ActorReferenceCore({
1412
+ runtime: this,
1413
+ actorClass: registered.actorClass,
1414
+ actorType: input.actorType,
1415
+ actorId: input.actorId,
1416
+ operations: registered.operations,
1417
+ queries: registered.queries,
1418
+ }),
1419
+ operation: input.operation,
1420
+ argumentsValue: input.argumentsValue,
1421
+ authorizationContext: input.authorizationContext,
1422
+ });
1423
+ return true;
1424
+ }
1425
+ catch (error) {
1426
+ if (error instanceof Unauthorized || error instanceof UnknownActorType)
1427
+ return false;
1428
+ throw error;
1429
+ }
1430
+ }
1431
+ // A lookup answers a question, so an absent row, an actor this process no
1432
+ // longer registers, and a caller the policy refuses all read the same. A
1433
+ // request id that threw where it was refused would be a way to ask whether
1434
+ // one exists.
1435
+ async readableMessage(message, authorizationContext) {
1436
+ try {
1437
+ const registered = this.fetchActor(message.actor_type);
1438
+ if (!registered.operations.has(message.operation) &&
1439
+ !registered.queries.has(message.operation))
1440
+ return false;
1441
+ await this.authorize({
1442
+ kind: this.isQuery(registered.definition, message.operation) ? "query" : "message",
1443
+ reference: new ActorReferenceCore({
1444
+ runtime: this,
1445
+ actorClass: registered.actorClass,
1446
+ actorType: message.actor_type,
1447
+ actorId: message.actor_id,
1448
+ operations: registered.operations,
1449
+ queries: registered.queries,
1450
+ }),
1451
+ operation: message.operation,
1452
+ argumentsValue: jsonObject(JSON.parse(message.arguments)),
1453
+ authorizationContext,
1454
+ });
1455
+ return true;
1456
+ }
1457
+ catch (error) {
1458
+ if (error instanceof Unauthorized || error instanceof UnknownActorType)
1459
+ return false;
1460
+ throw error;
1461
+ }
1462
+ }
1243
1463
  messageReferenceFromRow(message) {
1244
1464
  return new MessageReference({
1245
1465
  runtime: this,
@@ -1268,6 +1488,7 @@ export class SolidObjectsRuntime {
1268
1488
  ...(broadcastsEnabled(this.settings)
1269
1489
  ? Array.from({ length: this.settings.broadcastWorkerCount }, () => () => this.broadcastWorker())
1270
1490
  : []),
1491
+ () => new RedriveScheduler(this),
1271
1492
  ...(this.settings.retentionIntervalMilliseconds > 0
1272
1493
  ? [
1273
1494
  () => new MaintenanceScheduler({
@@ -1564,8 +1785,44 @@ export class SolidObjectsRuntime {
1564
1785
  thresholdBytes: this.settings.warnStateBytes,
1565
1786
  });
1566
1787
  }
1788
+ resolveWakeUp() {
1789
+ this.wakeUpSelection ??= selectWakeUp({
1790
+ setting: this.settings.wakeUp,
1791
+ database: this.settings.database,
1792
+ idlePollingIntervalMilliseconds: this.settings.idlePollingIntervalMilliseconds,
1793
+ logger: this.settings.logger,
1794
+ });
1795
+ return this.wakeUpSelection;
1796
+ }
1797
+ async closeWakeUp() {
1798
+ const selection = this.wakeUpSelection;
1799
+ if (!selection)
1800
+ return;
1801
+ const selected = await selection.catch(() => undefined);
1802
+ await selected?.adapter.close();
1803
+ }
1804
+ async discardWakeUp() {
1805
+ await this.closeWakeUp();
1806
+ this.wakeUpSelection = undefined;
1807
+ this.wakeUpSelectionFailureLogged = false;
1808
+ }
1567
1809
  wakeUp(role) {
1568
- notifyWakeUp({ adapter: this.settings.wakeUp, logger: this.settings.logger, role });
1810
+ void this.notifyWhenSelected(role);
1811
+ }
1812
+ async notifyWhenSelected(role) {
1813
+ try {
1814
+ const selected = await this.resolveWakeUp();
1815
+ notifyWakeUp({ adapter: selected.adapter, logger: this.settings.logger, role });
1816
+ }
1817
+ catch (error) {
1818
+ this.reportWakeUpSelectionFailure(error instanceof Error ? error.name : "Error");
1819
+ }
1820
+ }
1821
+ reportWakeUpSelectionFailure(errorName) {
1822
+ if (this.wakeUpSelectionFailureLogged)
1823
+ return;
1824
+ this.wakeUpSelectionFailureLogged = true;
1825
+ this.settings.logger.error({ event: "solid_objects.wake_up.selection_failed", errorName });
1569
1826
  }
1570
1827
  async authorize(options) {
1571
1828
  const { kind, reference, operation, argumentsValue, authorizationContext } = options;