rivetkit 2.1.1 → 2.1.2

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 (108) hide show
  1. package/dist/browser/client.d.ts +22 -2
  2. package/dist/browser/client.js +1 -1
  3. package/dist/browser/client.js.map +1 -1
  4. package/dist/browser/inspector/client.js +1 -1
  5. package/dist/browser/inspector/client.js.map +1 -1
  6. package/dist/inspector.tar.gz +0 -0
  7. package/dist/tsup/{chunk-65RINRXE.cjs → chunk-772NPMTY.cjs} +98 -98
  8. package/dist/tsup/{chunk-65RINRXE.cjs.map → chunk-772NPMTY.cjs.map} +1 -1
  9. package/dist/tsup/{chunk-NAM3D5W5.js → chunk-BFI4LYS2.js} +5 -6
  10. package/dist/tsup/chunk-BFI4LYS2.js.map +1 -0
  11. package/dist/tsup/{chunk-OONQLPOH.js → chunk-BSIJG3LG.js} +7 -7
  12. package/dist/tsup/chunk-BSIJG3LG.js.map +1 -0
  13. package/dist/tsup/{chunk-WPDQXB7R.cjs → chunk-GVQAVU7R.cjs} +4 -4
  14. package/dist/tsup/{chunk-WPDQXB7R.cjs.map → chunk-GVQAVU7R.cjs.map} +1 -1
  15. package/dist/tsup/{chunk-AWJU3AZB.js → chunk-HB4RGGMC.js} +5 -5
  16. package/dist/tsup/{chunk-LNDVGTPQ.cjs → chunk-HFWRHT5T.cjs} +24 -10
  17. package/dist/tsup/chunk-HFWRHT5T.cjs.map +1 -0
  18. package/dist/tsup/{chunk-Q5CW77IT.cjs → chunk-MNS5LY6M.cjs} +81 -75
  19. package/dist/tsup/chunk-MNS5LY6M.cjs.map +1 -0
  20. package/dist/tsup/{chunk-ZR76ZGYS.cjs → chunk-NXEHFUDB.cjs} +20 -20
  21. package/dist/tsup/chunk-NXEHFUDB.cjs.map +1 -0
  22. package/dist/tsup/{chunk-XQWBEBLD.js → chunk-PSUVV4HM.js} +23 -9
  23. package/dist/tsup/{chunk-XQWBEBLD.js.map → chunk-PSUVV4HM.js.map} +1 -1
  24. package/dist/tsup/{chunk-VBU4P2IX.js → chunk-PW3YONDJ.js} +2 -2
  25. package/dist/tsup/{chunk-AGERRJ32.cjs → chunk-PZAV6PP2.cjs} +152 -152
  26. package/dist/tsup/{chunk-AGERRJ32.cjs.map → chunk-PZAV6PP2.cjs.map} +1 -1
  27. package/dist/tsup/{chunk-LPXB254R.cjs → chunk-QABDKI3W.cjs} +236 -237
  28. package/dist/tsup/chunk-QABDKI3W.cjs.map +1 -0
  29. package/dist/tsup/{chunk-T4PQK4WA.js → chunk-RHUII57M.js} +7 -8
  30. package/dist/tsup/chunk-RHUII57M.js.map +1 -0
  31. package/dist/tsup/{chunk-MMUXNMJF.cjs → chunk-RMJJE43B.cjs} +2 -2
  32. package/dist/tsup/{chunk-MMUXNMJF.cjs.map → chunk-RMJJE43B.cjs.map} +1 -1
  33. package/dist/tsup/{chunk-WTRB56DR.js → chunk-TDFDR7AO.js} +2 -2
  34. package/dist/tsup/{chunk-F5B36GL7.cjs → chunk-UZV7NXC6.cjs} +31 -32
  35. package/dist/tsup/chunk-UZV7NXC6.cjs.map +1 -0
  36. package/dist/tsup/{chunk-MICYEINX.js → chunk-VMX4I4MP.js} +10 -4
  37. package/dist/tsup/{chunk-MICYEINX.js.map → chunk-VMX4I4MP.js.map} +1 -1
  38. package/dist/tsup/{chunk-IZ4M5TJU.js → chunk-WUXR722E.js} +2 -2
  39. package/dist/tsup/{chunk-IZ4M5TJU.js.map → chunk-WUXR722E.js.map} +1 -1
  40. package/dist/tsup/{chunk-74ER4FEE.js → chunk-YQ5P6KMN.js} +4 -4
  41. package/dist/tsup/chunk-YQ5P6KMN.js.map +1 -0
  42. package/dist/tsup/{chunk-FUBHHHK5.cjs → chunk-ZHQDRRMY.cjs} +3 -3
  43. package/dist/tsup/{chunk-FUBHHHK5.cjs.map → chunk-ZHQDRRMY.cjs.map} +1 -1
  44. package/dist/tsup/client/mod.cjs +6 -6
  45. package/dist/tsup/client/mod.d.cts +2 -2
  46. package/dist/tsup/client/mod.d.ts +2 -2
  47. package/dist/tsup/client/mod.js +5 -5
  48. package/dist/tsup/common/log.cjs +2 -2
  49. package/dist/tsup/common/log.js +1 -1
  50. package/dist/tsup/common/websocket.cjs +3 -3
  51. package/dist/tsup/common/websocket.js +2 -2
  52. package/dist/tsup/{config-BFqid9Gr.d.ts → config-P3XujgRr.d.ts} +23 -3
  53. package/dist/tsup/{config-CAZphOS1.d.cts → config-_gfywqqI.d.cts} +23 -3
  54. package/dist/tsup/{context-7X-Dm6_f.d.cts → context-Bxd8Cx4H.d.cts} +5 -5
  55. package/dist/tsup/{context-x9zKhx5T.d.ts → context-uNA4TRn3.d.ts} +5 -5
  56. package/dist/tsup/{driver-DYXwJR5D.d.cts → driver-BcLvZcKl.d.cts} +1 -1
  57. package/dist/tsup/{driver-Bxv62E2p.d.ts → driver-CPGHKXyh.d.ts} +1 -1
  58. package/dist/tsup/driver-helpers/mod.cjs +6 -4
  59. package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
  60. package/dist/tsup/driver-helpers/mod.d.cts +16 -4
  61. package/dist/tsup/driver-helpers/mod.d.ts +16 -4
  62. package/dist/tsup/driver-helpers/mod.js +6 -4
  63. package/dist/tsup/driver-test-suite/mod.cjs +64 -64
  64. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
  65. package/dist/tsup/driver-test-suite/mod.d.cts +2 -2
  66. package/dist/tsup/driver-test-suite/mod.d.ts +2 -2
  67. package/dist/tsup/driver-test-suite/mod.js +14 -14
  68. package/dist/tsup/driver-test-suite/mod.js.map +1 -1
  69. package/dist/tsup/inspector/mod.cjs +3 -3
  70. package/dist/tsup/inspector/mod.js +2 -2
  71. package/dist/tsup/mod.cjs +8 -8
  72. package/dist/tsup/mod.d.cts +5 -5
  73. package/dist/tsup/mod.d.ts +5 -5
  74. package/dist/tsup/mod.js +7 -7
  75. package/dist/tsup/serve-test-suite/mod.cjs +126 -118
  76. package/dist/tsup/serve-test-suite/mod.cjs.map +1 -1
  77. package/dist/tsup/serve-test-suite/mod.js +37 -29
  78. package/dist/tsup/serve-test-suite/mod.js.map +1 -1
  79. package/dist/tsup/test/mod.cjs +10 -10
  80. package/dist/tsup/test/mod.d.cts +1 -1
  81. package/dist/tsup/test/mod.d.ts +1 -1
  82. package/dist/tsup/test/mod.js +6 -6
  83. package/dist/tsup/utils.cjs +2 -2
  84. package/dist/tsup/utils.js +1 -1
  85. package/dist/tsup/workflow/mod.cjs +5 -5
  86. package/dist/tsup/workflow/mod.d.cts +3 -3
  87. package/dist/tsup/workflow/mod.d.ts +3 -3
  88. package/dist/tsup/workflow/mod.js +4 -4
  89. package/package.json +5 -5
  90. package/src/actor/instance/queue.ts +67 -9
  91. package/src/driver-helpers/mod.ts +1 -1
  92. package/src/driver-helpers/utils.ts +18 -0
  93. package/src/driver-test-suite/tests/actor-queue.ts +4 -4
  94. package/src/drivers/file-system/actor.ts +6 -16
  95. package/src/engine-process/mod.ts +1 -1
  96. package/src/workflow/context.ts +5 -4
  97. package/dist/tsup/chunk-74ER4FEE.js.map +0 -1
  98. package/dist/tsup/chunk-F5B36GL7.cjs.map +0 -1
  99. package/dist/tsup/chunk-LNDVGTPQ.cjs.map +0 -1
  100. package/dist/tsup/chunk-LPXB254R.cjs.map +0 -1
  101. package/dist/tsup/chunk-NAM3D5W5.js.map +0 -1
  102. package/dist/tsup/chunk-OONQLPOH.js.map +0 -1
  103. package/dist/tsup/chunk-Q5CW77IT.cjs.map +0 -1
  104. package/dist/tsup/chunk-T4PQK4WA.js.map +0 -1
  105. package/dist/tsup/chunk-ZR76ZGYS.cjs.map +0 -1
  106. /package/dist/tsup/{chunk-AWJU3AZB.js.map → chunk-HB4RGGMC.js.map} +0 -0
  107. /package/dist/tsup/{chunk-VBU4P2IX.js.map → chunk-PW3YONDJ.js.map} +0 -0
  108. /package/dist/tsup/{chunk-WTRB56DR.js.map → chunk-TDFDR7AO.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/actor/config.ts","../../src/actor/instance/keys.ts","../../src/actor/instance/kv.ts","../../src/actor/log.ts","../../src/actor/utils.ts","../../src/actor/instance/queue.ts","../../src/actor/schema.ts","../../src/actor/contexts/base/actor.ts"],"sourcesContent":["import { z } from \"zod/v4\";\nimport type { UniversalWebSocket } from \"@/common/websocket-interface\";\nimport type { Conn } from \"./conn/mod\";\nimport type {\n\tActionContext,\n\tActorContext,\n\tBeforeActionResponseContext,\n\tBeforeConnectContext,\n\tConnectContext,\n\tCreateConnStateContext,\n\tCreateContext,\n\tCreateVarsContext,\n\tDestroyContext,\n\tDisconnectContext,\n\tRequestContext,\n\tRunContext,\n\tSleepContext,\n\tStateChangeContext,\n\tWakeContext,\n\tWebSocketContext,\n} from \"./contexts\";\nimport type { AnyDatabaseProvider } from \"./database\";\nimport type { EventSchemaConfig, QueueSchemaConfig } from \"./schema\";\n\nexport interface ActorTypes<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n> {\n\tstate?: TState;\n\tconnParams?: TConnParams;\n\tconnState?: TConnState;\n\tvars?: TVars;\n\tinput?: TInput;\n\tdatabase?: TDatabase;\n}\n\n// Helper for validating function types - accepts generic for specific function signatures\nconst zFunction = <\n\tT extends (...args: any[]) => any = (...args: unknown[]) => unknown,\n>() => z.custom<T>((val) => typeof val === \"function\");\n\nexport type InspectorUnsubscribe = () => void;\n\nexport interface WorkflowInspectorConfig<THistory = unknown> {\n\tgetHistory: () => THistory | null;\n\tonHistoryUpdated?: (\n\t\tlistener: (history: THistory) => void,\n\t) => InspectorUnsubscribe;\n}\n\nexport interface RunInspectorConfig<THistory = unknown> {\n\tworkflow?: WorkflowInspectorConfig<THistory>;\n}\n\nconst WorkflowInspectorConfigSchema = z.object({\n\tgetHistory: zFunction<WorkflowInspectorConfig<unknown>[\"getHistory\"]>(),\n\tonHistoryUpdated:\n\t\tzFunction<\n\t\t\tNonNullable<WorkflowInspectorConfig<unknown>[\"onHistoryUpdated\"]>\n\t\t>().optional(),\n});\n\nconst RunInspectorConfigSchema = z\n\t.object({\n\t\tworkflow: WorkflowInspectorConfigSchema.optional(),\n\t})\n\t.optional();\n\n// Schema for run handler with metadata\nexport const RunConfigSchema = z.object({\n\t/** Display name for the actor in the Inspector UI. */\n\tname: z.string().optional(),\n\t/** Icon for the actor in the Inspector UI. Can be an emoji or FontAwesome icon name. */\n\ticon: z.string().optional(),\n\t/** The run handler function. */\n\trun: zFunction(),\n\t/** Inspector integration for long-running run handlers. */\n\tinspector: RunInspectorConfigSchema.optional(),\n});\ntype RunConfigRuntime = z.infer<typeof RunConfigSchema>;\nexport type RunConfig<\n\tTState = unknown,\n\tTConnParams = unknown,\n\tTConnState = unknown,\n\tTVars = unknown,\n\tTInput = unknown,\n\tTDatabase extends AnyDatabaseProvider = AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig = Record<never, never>,\n\tTQueues extends QueueSchemaConfig = Record<never, never>,\n> = Omit<RunConfigRuntime, \"run\"> & {\n\trun: (\n\t\tc: RunContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) => void | Promise<void>;\n};\n\ntype AnyRunConfig = RunConfig<\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tAnyDatabaseProvider,\n\tany,\n\tany\n>;\n\nexport const RUN_FUNCTION_CONFIG_SYMBOL = Symbol.for(\n\t\"rivetkit.run_function_config\",\n);\n\ninterface RunFunctionConfig {\n\tname?: string;\n\ticon?: string;\n\tinspector?: RunInspectorConfig;\n}\n\ntype RunFunctionWithConfig = ((...args: any[]) => any) & {\n\t[RUN_FUNCTION_CONFIG_SYMBOL]?: RunFunctionConfig;\n};\n\n// Run can be either a function or an object with name/icon/run\nconst zRunHandler = z.union([zFunction(), RunConfigSchema]).optional();\n\n/** Extract the run function from either a function or RunConfig object. */\nexport function getRunFunction(\n\trun: ((...args: any[]) => any) | AnyRunConfig | undefined,\n): ((...args: any[]) => any) | undefined {\n\tif (!run) return undefined;\n\tif (typeof run === \"function\") return run;\n\treturn run.run;\n}\n\n/** Extract run metadata (name/icon) from RunConfig if provided. */\nexport function getRunMetadata(\n\trun: ((...args: any[]) => any) | AnyRunConfig | undefined,\n): { name?: string; icon?: string } {\n\tif (!run) return {};\n\tif (typeof run === \"function\") {\n\t\tconst config = (run as RunFunctionWithConfig)[\n\t\t\tRUN_FUNCTION_CONFIG_SYMBOL\n\t\t];\n\t\tif (!config) return {};\n\t\treturn { name: config.name, icon: config.icon };\n\t}\n\treturn { name: run.name, icon: run.icon };\n}\n\n/** Extract run inspector configuration if provided. */\nexport function getRunInspectorConfig(\n\trun: ((...args: any[]) => any) | AnyRunConfig | undefined,\n): RunInspectorConfig | undefined {\n\tif (!run) return undefined;\n\tif (typeof run === \"function\") {\n\t\treturn (run as RunFunctionWithConfig)[RUN_FUNCTION_CONFIG_SYMBOL]\n\t\t\t?.inspector;\n\t}\n\treturn run.inspector;\n}\n\n// This schema is used to validate the input at runtime. The generic types are defined below in `ActorConfig`.\n//\n// We don't use Zod generics with `z.custom` because:\n// (a) there seems to be a weird bug in either Zod, tsup, or TSC that causese external packages to have different types from `z.infer` than from within the same package and\n// (b) it makes the type definitions incredibly difficult to read as opposed to vanilla TypeScript.\nexport const ActorConfigSchema = z\n\t.object({\n\t\tonCreate: zFunction().optional(),\n\t\tonDestroy: zFunction().optional(),\n\t\tonWake: zFunction().optional(),\n\t\tonSleep: zFunction().optional(),\n\t\trun: zRunHandler,\n\t\tonStateChange: zFunction().optional(),\n\t\tonBeforeConnect: zFunction().optional(),\n\t\tonConnect: zFunction().optional(),\n\t\tonDisconnect: zFunction().optional(),\n\t\tonBeforeActionResponse: zFunction().optional(),\n\t\tonRequest: zFunction().optional(),\n\t\tonWebSocket: zFunction().optional(),\n\t\tactions: z.record(z.string(), zFunction()).default(() => ({})),\n\t\tevents: z.record(z.string(), z.any()).optional(),\n\t\tqueues: z.record(z.string(), z.any()).optional(),\n\t\tstate: z.any().optional(),\n\t\tcreateState: zFunction().optional(),\n\t\tconnState: z.any().optional(),\n\t\tcreateConnState: zFunction().optional(),\n\t\tvars: z.any().optional(),\n\t\tdb: z.any().optional(),\n\t\tcreateVars: zFunction().optional(),\n\t\toptions: z\n\t\t\t.object({\n\t\t\t\t/** Display name for the actor in the Inspector UI. */\n\t\t\t\tname: z.string().optional(),\n\t\t\t\t/** Icon for the actor in the Inspector UI. Can be an emoji or FontAwesome icon name. */\n\t\t\t\ticon: z.string().optional(),\n\t\t\t\tcreateVarsTimeout: z.number().positive().default(5000),\n\t\t\t\tcreateConnStateTimeout: z.number().positive().default(5000),\n\t\t\t\tonConnectTimeout: z.number().positive().default(5000),\n\t\t\t\t// This must be less than engine config > pegboard.actor_stop_threshold\n\t\t\t\tonSleepTimeout: z.number().positive().default(5000),\n\t\t\t\t// This must be less than engine config > pegboard.actor_stop_threshold\n\t\t\t\tonDestroyTimeout: z.number().positive().default(5000),\n\t\t\t\tstateSaveInterval: z.number().positive().default(10_000),\n\t\t\t\tactionTimeout: z.number().positive().default(60_000),\n\t\t\t\t// Max time to wait for waitUntil background promises during shutdown\n\t\t\t\twaitUntilTimeout: z.number().positive().default(15_000),\n\t\t\t\t// Max time to wait for run handler to stop during shutdown\n\t\t\t\trunStopTimeout: z.number().positive().default(15_000),\n\t\t\t\tconnectionLivenessTimeout: z.number().positive().default(2500),\n\t\t\t\tconnectionLivenessInterval: z.number().positive().default(5000),\n\t\t\t\tnoSleep: z.boolean().default(false),\n\t\t\t\tsleepTimeout: z.number().positive().default(30_000),\n\t\t\t\tmaxQueueSize: z.number().positive().default(1000),\n\t\t\t\tmaxQueueMessageSize: z\n\t\t\t\t\t.number()\n\t\t\t\t\t.positive()\n\t\t\t\t\t.default(64 * 1024),\n\t\t\t\t/**\n\t\t\t\t * Can hibernate WebSockets for onWebSocket.\n\t\t\t\t *\n\t\t\t\t * WebSockets using actions/events are hibernatable by default.\n\t\t\t\t *\n\t\t\t\t * @experimental\n\t\t\t\t **/\n\t\t\t\tcanHibernateWebSocket: z\n\t\t\t\t\t.union([\n\t\t\t\t\t\tz.boolean(),\n\t\t\t\t\t\tzFunction<(request: Request) => boolean>(),\n\t\t\t\t\t])\n\t\t\t\t\t.default(false),\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.prefault(() => ({})),\n\t})\n\t.strict()\n\t.refine(\n\t\t(data) => !(data.state !== undefined && data.createState !== undefined),\n\t\t{\n\t\t\tmessage: \"Cannot define both 'state' and 'createState'\",\n\t\t\tpath: [\"state\"],\n\t\t},\n\t)\n\t.refine(\n\t\t(data) =>\n\t\t\t!(\n\t\t\t\tdata.connState !== undefined &&\n\t\t\t\tdata.createConnState !== undefined\n\t\t\t),\n\t\t{\n\t\t\tmessage: \"Cannot define both 'connState' and 'createConnState'\",\n\t\t\tpath: [\"connState\"],\n\t\t},\n\t)\n\t.refine(\n\t\t(data) => !(data.vars !== undefined && data.createVars !== undefined),\n\t\t{\n\t\t\tmessage: \"Cannot define both 'vars' and 'createVars'\",\n\t\t\tpath: [\"vars\"],\n\t\t},\n\t);\n\n// Creates state config\n//\n// This must have only one or the other or else TState will not be able to be inferred\n//\n// Data returned from this handler will be available on `c.state`.\ntype CreateState<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n> =\n\t| { state: TState }\n\t| {\n\t\tcreateState: (\n\t\t\tc: CreateContext<TState, TInput, TDatabase, TEvents, TQueues>,\n\t\t\tinput: TInput,\n\t\t) => TState | Promise<TState>;\n\t}\n\t| Record<never, never>;\n\n// Creates connection state config\n//\n// This must have only one or the other or else TState will not be able to be inferred\n//\n// Data returned from this handler will be available on `c.conn.state`.\ntype CreateConnState<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n> =\n\t| { connState: TConnState }\n\t| {\n\t\tcreateConnState: (\n\t\t\tc: CreateConnStateContext<\n\t\t\t\tTState,\n\t\t\t\tTVars,\n\t\t\t\tTInput,\n\t\t\t\tTDatabase,\n\t\t\t\tTEvents,\n\t\t\t\tTQueues\n\t\t\t>,\n\t\t\tparams: TConnParams,\n\t\t) => TConnState | Promise<TConnState>;\n\t}\n\t| Record<never, never>;\n\n// Creates vars config\n//\n// This must have only one or the other or else TState will not be able to be inferred\n/**\n * @experimental\n */\ntype CreateVars<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n> =\n\t| {\n\t\t/**\n\t\t * @experimental\n\t\t */\n\t\tvars: TVars;\n\t}\n\t| {\n\t\t/**\n\t\t * @experimental\n\t\t */\n\t\tcreateVars: (\n\t\t\tc: CreateVarsContext<\n\t\t\t\tTState,\n\t\t\t\tTInput,\n\t\t\t\tTDatabase,\n\t\t\t\tTEvents,\n\t\t\t\tTQueues\n\t\t\t>,\n\t\t\tdriverCtx: any,\n\t\t) => TVars | Promise<TVars>;\n\t}\n\t| Record<never, never>;\n\nexport interface Actions<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig = Record<never, never>,\n\tTQueues extends QueueSchemaConfig = Record<never, never>,\n> {\n\t[Action: string]: (\n\t\tc: ActionContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\t...args: any[]\n\t) => any;\n}\n\n//export type ActorConfig<TState, TConnParams, TConnState, TVars, TInput, TAuthData> = BaseActorConfig<TState, TConnParams, TConnState, TVars, TInput, TAuthData> &\n//\tActorConfigLifecycle<TState, TConnParams, TConnState, TVars, TInput, TAuthData> &\n//\tCreateState<TState, TConnParams, TConnState, TVars, TInput, TAuthData> &\n//\tCreateConnState<TState, TConnParams, TConnState, TVars, TInput, TAuthData>;\n\n/**\n * @experimental\n */\nexport type AuthIntent = \"get\" | \"create\" | \"connect\" | \"action\" | \"message\";\n\ninterface BaseActorConfig<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n\tTActions extends Actions<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>,\n> {\n\t/**\n\t * Called when the actor is first initialized.\n\t *\n\t * Use this hook to initialize your actor's state.\n\t * This is called before any other lifecycle hooks.\n\t */\n\tonCreate?: (\n\t\tc: CreateContext<TState, TInput, TDatabase, TEvents, TQueues>,\n\t\tinput: TInput,\n\t) => void | Promise<void>;\n\n\t/**\n\t * Called when the actor is destroyed.\n\t */\n\tonDestroy?: (\n\t\tc: DestroyContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) => void | Promise<void>;\n\n\t/**\n\t * Called when the actor is started and ready to receive connections and action.\n\t *\n\t * Use this hook to initialize resources needed for the actor's operation\n\t * (timers, external connections, etc.)\n\t *\n\t * @returns Void or a Promise that resolves when startup is complete\n\t */\n\tonWake?: (\n\t\tc: WakeContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) => void | Promise<void>;\n\n\t/**\n\t * Called when the actor is stopping or sleeping.\n\t *\n\t * Use this hook to clean up resources, save state, or perform\n\t * any shutdown operations before the actor sleeps or stops.\n\t *\n\t * Not supported on all platforms.\n\t *\n\t * @returns Void or a Promise that resolves when shutdown is complete\n\t */\n\tonSleep?: (\n\t\tc: SleepContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) => void | Promise<void>;\n\n\t/**\n\t * Called after the actor starts up. Does not block actor startup.\n\t *\n\t * Use this for background tasks like:\n\t * - Reading from queues in a loop\n\t * - Tick loops for periodic work\n\t * - Custom workflow logic\n\t *\n\t * **Important:** The actor may go to sleep at any time during the `run`\n\t * handler. Use `c.keepAwake(promise)` to wrap async operations that should\n\t * not be interrupted by sleep.\n\t *\n\t * The handler receives an abort signal via `c.abortSignal` and a\n\t * `c.aborted` alias for loop checks. Use these to gracefully exit.\n\t *\n\t * If this handler exits or throws, the actor will crash and reschedule.\n\t * On shutdown, the actor waits for this handler to complete with a\n\t * configurable timeout (options.runStopTimeout, default 15s).\n\t *\n\t * Can be either a function or a RunConfig object with optional name/icon metadata.\n\t *\n\t * @returns Void or a Promise. If the promise exits, the actor crashes.\n\t */\n\trun?:\n\t| ((\n\t\tc: RunContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) => void | Promise<void>)\n\t| RunConfig<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>;\n\n\t/**\n\t * Called when the actor's state changes.\n\t *\n\t * Use this hook to react to state changes, such as updating\n\t * external systems or triggering events.\n\t *\n\t * State changes made within this hook will NOT trigger\n\t * another onStateChange call, preventing infinite recursion.\n\t *\n\t * @param newState The updated state\n\t */\n\tonStateChange?: (\n\t\tc: StateChangeContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\tnewState: TState,\n\t) => void;\n\n\t/**\n\t * Called before a client connects to the actor.\n\t *\n\t * Use this hook to determine if a connection should be accepted\n\t * and to initialize connection-specific state.\n\t *\n\t * @param opts Connection parameters including client-provided data\n\t * @returns The initial connection state or a Promise that resolves to it\n\t * @throws Throw an error to reject the connection\n\t */\n\tonBeforeConnect?: (\n\t\tc: BeforeConnectContext<\n\t\t\tTState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\tparams: TConnParams,\n\t) => void | Promise<void>;\n\n\t/**\n\t * Called when a client successfully connects to the actor.\n\t *\n\t * Use this hook to perform actions when a connection is established,\n\t * such as sending initial data or updating the actor's state.\n\t *\n\t * @param conn The connection object\n\t * @returns Void or a Promise that resolves when connection handling is complete\n\t */\n\tonConnect?: (\n\t\tc: ConnectContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\tconn: Conn<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) => void | Promise<void>;\n\n\t/**\n\t * Called when a client disconnects from the actor.\n\t *\n\t * Use this hook to clean up resources associated with the connection\n\t * or update the actor's state.\n\t *\n\t * @param conn The connection that is being closed\n\t * @returns Void or a Promise that resolves when disconnect handling is complete\n\t */\n\tonDisconnect?: (\n\t\tc: DisconnectContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\tconn: Conn<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) => void | Promise<void>;\n\n\t/**\n\t * Called before sending an action response to the client.\n\t *\n\t * Use this hook to modify or transform the output of an action before it's sent\n\t * to the client. This is useful for formatting responses, adding metadata,\n\t * or applying transformations to the output.\n\t *\n\t * @param name The name of the action that was called\n\t * @param args The arguments that were passed to the action\n\t * @param output The output that will be sent to the client\n\t * @returns The modified output to send to the client\n\t */\n\tonBeforeActionResponse?: <Out>(\n\t\tc: BeforeActionResponseContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\tname: string,\n\t\targs: unknown[],\n\t\toutput: Out,\n\t) => Out | Promise<Out>;\n\n\t/**\n\t * Called when a raw HTTP request is made to the actor.\n\t *\n\t * This handler receives raw HTTP requests made to `/actors/{actorName}/http/*` endpoints.\n\t * Use this hook to handle custom HTTP patterns, REST APIs, or other HTTP-based protocols.\n\t *\n\t * @param c The request context with access to the connection\n\t * @param request The raw HTTP request object\n\t * @param opts Additional options\n\t * @returns A Response object to send back, or void to continue with default routing\n\t */\n\tonRequest?: (\n\t\tc: RequestContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\trequest: Request,\n\t) => Response | Promise<Response>;\n\n\t/**\n\t * Called when a raw WebSocket connection is established to the actor.\n\t *\n\t * This handler receives WebSocket connections made to `/actors/{actorName}/websocket/*` endpoints.\n\t * Use this hook to handle custom WebSocket protocols, binary streams, or other WebSocket-based communication.\n\t *\n\t * @param c The WebSocket context with access to the connection\n\t * @param websocket The raw WebSocket connection\n\t * @param opts Additional options including the original HTTP upgrade request\n\t */\n\tonWebSocket?: (\n\t\tc: WebSocketContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\twebsocket: UniversalWebSocket,\n\t) => void | Promise<void>;\n\n\tactions?: TActions;\n\n\t/**\n\t * Schema map for events broadcasted by this actor.\n\t */\n\tevents?: TEvents;\n\n\t/**\n\t * Schema map for queue payloads sent by this actor.\n\t */\n\tqueues?: TQueues;\n}\n\ntype ActorDatabaseConfig<TDatabase extends AnyDatabaseProvider> =\n\t| {\n\t\t/**\n\t\t * @experimental\n\t\t */\n\t\tdb: TDatabase;\n\t}\n\t| Record<never, never>;\n\n// 1. Infer schema\n// 2. Omit keys that we'll manually define (because of generics)\n// 3. Define our own types that have generic constraints\nexport type ActorConfig<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig = Record<never, never>,\n\tTQueues extends QueueSchemaConfig = Record<never, never>,\n> = Omit<\n\tz.infer<typeof ActorConfigSchema>,\n\t| \"actions\"\n\t| \"events\"\n\t| \"queues\"\n\t| \"onCreate\"\n\t| \"onDestroy\"\n\t| \"onWake\"\n\t| \"onSleep\"\n\t| \"run\"\n\t| \"onStateChange\"\n\t| \"onBeforeConnect\"\n\t| \"onConnect\"\n\t| \"onDisconnect\"\n\t| \"onBeforeActionResponse\"\n\t| \"onRequest\"\n\t| \"onWebSocket\"\n\t| \"state\"\n\t| \"createState\"\n\t| \"connState\"\n\t| \"createConnState\"\n\t| \"vars\"\n\t| \"createVars\"\n\t| \"db\"\n> &\n\tBaseActorConfig<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues,\n\t\tActions<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>\n\t> &\n\tCreateState<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> &\n\tCreateConnState<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> &\n\tCreateVars<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> &\n\tActorDatabaseConfig<TDatabase>;\n\n// See description on `ActorConfig`\nexport type ActorConfigInput<\n\tTState = undefined,\n\tTConnParams = undefined,\n\tTConnState = undefined,\n\tTVars = undefined,\n\tTInput = undefined,\n\tTDatabase extends AnyDatabaseProvider = undefined,\n\tTEvents extends EventSchemaConfig = Record<never, never>,\n\tTQueues extends QueueSchemaConfig = Record<never, never>,\n\tTActions extends Actions<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> = Record<never, never>,\n> = {\n\ttypes?: ActorTypes<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase\n\t>;\n} & Omit<\n\tz.input<typeof ActorConfigSchema>,\n\t| \"actions\"\n\t| \"events\"\n\t| \"queues\"\n\t| \"onCreate\"\n\t| \"onDestroy\"\n\t| \"onWake\"\n\t| \"onSleep\"\n\t| \"run\"\n\t| \"onStateChange\"\n\t| \"onBeforeConnect\"\n\t| \"onConnect\"\n\t| \"onDisconnect\"\n\t| \"onBeforeActionResponse\"\n\t| \"onRequest\"\n\t| \"onWebSocket\"\n\t| \"state\"\n\t| \"createState\"\n\t| \"connState\"\n\t| \"createConnState\"\n\t| \"vars\"\n\t| \"createVars\"\n\t| \"db\"\n> &\n\tBaseActorConfig<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues,\n\t\tTActions\n\t> &\n\tCreateState<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> &\n\tCreateConnState<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> &\n\tCreateVars<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> &\n\tActorDatabaseConfig<TDatabase>;\n\n// For testing type definitions:\nexport function test<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n\tTActions extends Actions<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>,\n>(\n\tinput: ActorConfigInput<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues,\n\t\tTActions\n\t>,\n): ActorConfig<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase,\n\tTEvents,\n\tTQueues\n> {\n\tconst config = ActorConfigSchema.parse(input) as ActorConfig<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>;\n\treturn config;\n}\n\n// MARK: Documentation Schema\n// This schema is JSON-serializable for documentation generation.\n// It excludes function types and focuses on the configurable options.\n\nexport const DocActorOptionsSchema = z\n\t.object({\n\t\tname: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\"Display name for the actor in the Inspector UI.\"),\n\t\ticon: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Icon for the actor in the Inspector UI. Can be an emoji (e.g., '🚀') or FontAwesome icon name (e.g., 'rocket').\",\n\t\t\t),\n\t\tcreateVarsTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\"Timeout in ms for createVars handler. Default: 5000\"),\n\t\tcreateConnStateTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Timeout in ms for createConnState handler. Default: 5000\",\n\t\t\t),\n\t\tonConnectTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\"Timeout in ms for onConnect handler. Default: 5000\"),\n\t\tonSleepTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Timeout in ms for onSleep handler. Must be less than ACTOR_STOP_THRESHOLD_MS. Default: 5000\",\n\t\t\t),\n\t\tonDestroyTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\"Timeout in ms for onDestroy handler. Default: 5000\"),\n\t\tstateSaveInterval: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Interval in ms between automatic state saves. Default: 10000\",\n\t\t\t),\n\t\tactionTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\"Timeout in ms for action handlers. Default: 60000\"),\n\t\twaitUntilTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Max time in ms to wait for waitUntil background promises during shutdown. Default: 15000\",\n\t\t\t),\n\t\trunStopTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Max time in ms to wait for run handler to stop during shutdown. Default: 15000\",\n\t\t\t),\n\t\tconnectionLivenessTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Timeout in ms for connection liveness checks. Default: 2500\",\n\t\t\t),\n\t\tconnectionLivenessInterval: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Interval in ms between connection liveness checks. Default: 5000\",\n\t\t\t),\n\t\tnoSleep: z\n\t\t\t.boolean()\n\t\t\t.optional()\n\t\t\t.describe(\"If true, the actor will never sleep. Default: false\"),\n\t\tsleepTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Time in ms of inactivity before the actor sleeps. Default: 30000\",\n\t\t\t),\n\t\tmaxQueueSize: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Maximum number of queue messages before rejecting new messages. Default: 1000\",\n\t\t\t),\n\t\tmaxQueueMessageSize: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Maximum size of each queue message in bytes. Default: 65536\",\n\t\t\t),\n\t\tcanHibernateWebSocket: z\n\t\t\t.boolean()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Whether WebSockets using onWebSocket can be hibernated. WebSockets using actions/events are hibernatable by default. Default: false\",\n\t\t\t),\n\t})\n\t.describe(\"Actor options for timeouts and behavior configuration.\");\n\nexport const DocActorConfigSchema = z\n\t.object({\n\t\tstate: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Initial state value for the actor. Cannot be used with createState.\",\n\t\t\t),\n\t\tcreateState: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Function to create initial state. Receives context and input. Cannot be used with state.\",\n\t\t\t),\n\t\tconnState: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Initial connection state value. Cannot be used with createConnState.\",\n\t\t\t),\n\t\tcreateConnState: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Function to create connection state. Receives context and connection params. Cannot be used with connState.\",\n\t\t\t),\n\t\tvars: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Initial ephemeral variables value. Cannot be used with createVars.\",\n\t\t\t),\n\t\tcreateVars: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Function to create ephemeral variables. Receives context and driver context. Cannot be used with vars.\",\n\t\t\t),\n\t\tdb: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\"Database provider instance for the actor.\"),\n\t\tonCreate: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Called when the actor is first initialized. Use to initialize state.\",\n\t\t\t),\n\t\tonDestroy: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\"Called when the actor is destroyed.\"),\n\t\tonWake: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Called when the actor wakes up and is ready to receive connections and actions.\",\n\t\t\t),\n\t\tonSleep: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Called when the actor is stopping or sleeping. Use to clean up resources.\",\n\t\t\t),\n\t\trun: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Called after actor starts. Does not block startup. Use for background tasks like queue processing or tick loops. If it exits or throws, the actor crashes.\",\n\t\t\t),\n\t\t\tonStateChange: z\n\t\t\t\t.unknown()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Called when the actor's state changes. State changes within this hook won't trigger recursion.\",\n\t\t\t\t),\n\t\t\tonBeforeConnect: z\n\t\t\t\t.unknown()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Called before a client connects. Throw an error to reject the connection.\",\n\t\t\t\t),\n\t\t\tonConnect: z\n\t\t\t\t.unknown()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Called when a client successfully connects.\"),\n\t\tonDisconnect: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\"Called when a client disconnects.\"),\n\t\tonBeforeActionResponse: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Called before sending an action response. Use to transform output.\",\n\t\t\t),\n\t\tonRequest: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Called for raw HTTP requests to /actors/{name}/http/* endpoints.\",\n\t\t\t),\n\t\tonWebSocket: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Called for raw WebSocket connections to /actors/{name}/websocket/* endpoints.\",\n\t\t\t),\n\t\tactions: z\n\t\t\t.record(z.string(), z.unknown())\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Map of action name to handler function. Defaults to an empty object.\",\n\t\t\t),\n\t\tevents: z\n\t\t\t.record(z.string(), z.unknown())\n\t\t\t.optional()\n\t\t\t.describe(\"Map of event names to schemas.\"),\n\t\tqueues: z\n\t\t\t.record(z.string(), z.unknown())\n\t\t\t.optional()\n\t\t\t.describe(\"Map of queue names to schemas.\"),\n\t\toptions: DocActorOptionsSchema.optional(),\n\t})\n\t.describe(\"Actor configuration passed to the actor() function.\");\n","export const KEYS = {\n\tPERSIST_DATA: Uint8Array.from([1]),\n\tCONN_PREFIX: Uint8Array.from([2]), // Prefix for connection keys\n\tINSPECTOR_TOKEN: Uint8Array.from([3]), // Inspector token key\n\tKV: Uint8Array.from([4]), // Prefix for user-facing KV storage\n\tQUEUE_PREFIX: Uint8Array.from([5]), // Prefix for queue storage\n\tWORKFLOW_PREFIX: Uint8Array.from([6]), // Prefix for workflow storage\n\tTRACES_PREFIX: Uint8Array.from([7]), // Prefix for traces storage\n\tSQLITE_PREFIX: Uint8Array.from([8]), // Prefix for SQLite VFS data\n};\n\nexport const STORAGE_VERSION = {\n\tQUEUE: 1,\n\tWORKFLOW: 1,\n\tTRACES: 1,\n\tSQLITE: 1,\n} as const;\n\nconst STORAGE_VERSION_BYTES = {\n\tQUEUE: Uint8Array.from([STORAGE_VERSION.QUEUE]),\n\tWORKFLOW: Uint8Array.from([STORAGE_VERSION.WORKFLOW]),\n\tTRACES: Uint8Array.from([STORAGE_VERSION.TRACES]),\n\tSQLITE: Uint8Array.from([STORAGE_VERSION.SQLITE]),\n} as const;\n\nconst QUEUE_NAMESPACE = {\n\tMETADATA: Uint8Array.from([1]),\n\tMESSAGES: Uint8Array.from([2]),\n} as const;\n\nconst QUEUE_ID_BYTES = 8;\n\nfunction concatPrefix(prefix: Uint8Array, suffix: Uint8Array): Uint8Array {\n\tconst merged = new Uint8Array(prefix.length + suffix.length);\n\tmerged.set(prefix, 0);\n\tmerged.set(suffix, prefix.length);\n\treturn merged;\n}\n\nconst QUEUE_STORAGE_PREFIX = concatPrefix(\n\tKEYS.QUEUE_PREFIX,\n\tSTORAGE_VERSION_BYTES.QUEUE,\n);\nconst QUEUE_METADATA_KEY = concatPrefix(\n\tQUEUE_STORAGE_PREFIX,\n\tQUEUE_NAMESPACE.METADATA,\n);\nconst QUEUE_MESSAGES_PREFIX = concatPrefix(\n\tQUEUE_STORAGE_PREFIX,\n\tQUEUE_NAMESPACE.MESSAGES,\n);\nconst WORKFLOW_STORAGE_PREFIX = concatPrefix(\n\tKEYS.WORKFLOW_PREFIX,\n\tSTORAGE_VERSION_BYTES.WORKFLOW,\n);\nconst TRACES_STORAGE_PREFIX = concatPrefix(\n\tKEYS.TRACES_PREFIX,\n\tSTORAGE_VERSION_BYTES.TRACES,\n);\nconst SQLITE_STORAGE_PREFIX = concatPrefix(\n\tKEYS.SQLITE_PREFIX,\n\tSTORAGE_VERSION_BYTES.SQLITE,\n);\n\n// Helper to create a prefixed key for user-facing KV storage\nexport function makePrefixedKey(key: Uint8Array): Uint8Array {\n\tconst prefixed = new Uint8Array(KEYS.KV.length + key.length);\n\tprefixed.set(KEYS.KV, 0);\n\tprefixed.set(key, KEYS.KV.length);\n\treturn prefixed;\n}\n\n// Helper to remove the prefix from a key\nexport function removePrefixFromKey(prefixedKey: Uint8Array): Uint8Array {\n\treturn prefixedKey.slice(KEYS.KV.length);\n}\n\nexport function makeWorkflowKey(key: Uint8Array): Uint8Array {\n\treturn concatPrefix(WORKFLOW_STORAGE_PREFIX, key);\n}\n\nexport function makeTracesKey(key: Uint8Array): Uint8Array {\n\treturn concatPrefix(TRACES_STORAGE_PREFIX, key);\n}\n\nexport function workflowStoragePrefix(): Uint8Array {\n\treturn Uint8Array.from(WORKFLOW_STORAGE_PREFIX);\n}\n\nexport function tracesStoragePrefix(): Uint8Array {\n\treturn Uint8Array.from(TRACES_STORAGE_PREFIX);\n}\n\nexport function sqliteStoragePrefix(): Uint8Array {\n\treturn Uint8Array.from(SQLITE_STORAGE_PREFIX);\n}\n\nexport function queueStoragePrefix(): Uint8Array {\n\treturn Uint8Array.from(QUEUE_STORAGE_PREFIX);\n}\n\nexport function queueMetadataKey(): Uint8Array {\n\treturn Uint8Array.from(QUEUE_METADATA_KEY);\n}\n\nexport function queueMessagesPrefix(): Uint8Array {\n\treturn Uint8Array.from(QUEUE_MESSAGES_PREFIX);\n}\n\n// Helper to create a connection key\nexport function makeConnKey(connId: string): Uint8Array {\n\tconst encoder = new TextEncoder();\n\tconst connIdBytes = encoder.encode(connId);\n\tconst key = new Uint8Array(KEYS.CONN_PREFIX.length + connIdBytes.length);\n\tkey.set(KEYS.CONN_PREFIX, 0);\n\tkey.set(connIdBytes, KEYS.CONN_PREFIX.length);\n\treturn key;\n}\n\n// Helper to create a queue message key\nexport function makeQueueMessageKey(id: bigint): Uint8Array {\n\tconst key = new Uint8Array(QUEUE_MESSAGES_PREFIX.length + QUEUE_ID_BYTES);\n\tkey.set(QUEUE_MESSAGES_PREFIX, 0);\n\tconst view = new DataView(key.buffer, key.byteOffset, key.byteLength);\n\tview.setBigUint64(QUEUE_MESSAGES_PREFIX.length, id, false);\n\treturn key;\n}\n\n// Helper to decode a queue message key\nexport function decodeQueueMessageKey(key: Uint8Array): bigint {\n\tconst offset = QUEUE_MESSAGES_PREFIX.length;\n\tif (key.length < offset + QUEUE_ID_BYTES) {\n\t\tthrow new Error(\"Queue key is too short\");\n\t}\n\tfor (let i = 0; i < QUEUE_MESSAGES_PREFIX.length; i++) {\n\t\tif (key[i] !== QUEUE_MESSAGES_PREFIX[i]) {\n\t\t\tthrow new Error(\"Queue key has invalid prefix\");\n\t\t}\n\t}\n\tconst view = new DataView(\n\t\tkey.buffer,\n\t\tkey.byteOffset + offset,\n\t\tQUEUE_ID_BYTES,\n\t);\n\treturn view.getBigUint64(0, false);\n}\n","import type { ActorDriver } from \"../driver\";\nimport { makePrefixedKey, removePrefixFromKey } from \"./keys\";\n\n/**\n * User-facing KV storage interface exposed on ActorContext.\n */\ntype KvValueType = \"text\" | \"arrayBuffer\" | \"binary\";\ntype KvKeyType = \"text\" | \"binary\";\ntype KvKey = Uint8Array | string;\n\ntype KvValueTypeMap = {\n\ttext: string;\n\tarrayBuffer: ArrayBuffer;\n\tbinary: Uint8Array;\n};\n\ntype KvKeyTypeMap = {\n\ttext: string;\n\tbinary: Uint8Array;\n};\n\ntype KvValueOptions<T extends KvValueType = \"text\"> = {\n\ttype?: T;\n};\n\ntype KvListOptions<\n\tT extends KvValueType = \"text\",\n\tK extends KvKeyType = \"text\",\n> = KvValueOptions<T> & {\n\tkeyType?: K;\n};\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nfunction encodeKey<K extends KvKeyType = KvKeyType>(\n\tkey: KvKeyTypeMap[K],\n\tkeyType?: K,\n): Uint8Array {\n\tif (key instanceof Uint8Array) {\n\t\treturn key;\n\t}\n\tconst resolvedKeyType = keyType ?? \"text\";\n\tif (resolvedKeyType === \"binary\") {\n\t\tthrow new TypeError(\"Expected a Uint8Array when keyType is binary\");\n\t}\n\treturn textEncoder.encode(key);\n}\n\nfunction decodeKey<K extends KvKeyType = \"text\">(\n\tkey: Uint8Array,\n\tkeyType?: K,\n): KvKeyTypeMap[K] {\n\tconst resolvedKeyType = keyType ?? \"text\";\n\tswitch (resolvedKeyType) {\n\t\tcase \"text\":\n\t\t\treturn textDecoder.decode(key) as KvKeyTypeMap[K];\n\t\tcase \"binary\":\n\t\t\treturn key as KvKeyTypeMap[K];\n\t\tdefault:\n\t\t\tthrow new TypeError(\"Invalid kv key type\");\n\t}\n}\n\nfunction resolveValueType(\n\tvalue: string | Uint8Array | ArrayBuffer,\n): KvValueType {\n\tif (typeof value === \"string\") {\n\t\treturn \"text\";\n\t}\n\tif (value instanceof Uint8Array) {\n\t\treturn \"binary\";\n\t}\n\tif (value instanceof ArrayBuffer) {\n\t\treturn \"arrayBuffer\";\n\t}\n\tthrow new TypeError(\"Invalid kv value\");\n}\n\nfunction encodeValue<T extends KvValueType = KvValueType>(\n\tvalue: KvValueTypeMap[T],\n\toptions?: KvValueOptions<T>,\n): Uint8Array {\n\tconst type =\n\t\toptions?.type ??\n\t\tresolveValueType(value as string | Uint8Array | ArrayBuffer);\n\tswitch (type) {\n\t\tcase \"text\":\n\t\t\tif (typeof value !== \"string\") {\n\t\t\t\tthrow new TypeError(\"Expected a string when type is text\");\n\t\t\t}\n\t\t\treturn textEncoder.encode(value);\n\t\tcase \"arrayBuffer\":\n\t\t\tif (!(value instanceof ArrayBuffer)) {\n\t\t\t\tthrow new TypeError(\"Expected an ArrayBuffer when type is arrayBuffer\");\n\t\t\t}\n\t\t\treturn new Uint8Array(value);\n\t\tcase \"binary\":\n\t\t\tif (!(value instanceof Uint8Array)) {\n\t\t\t\tthrow new TypeError(\"Expected a Uint8Array when type is binary\");\n\t\t\t}\n\t\t\treturn value;\n\t\tdefault:\n\t\t\tthrow new TypeError(\"Invalid kv value type\");\n\t}\n}\n\nfunction decodeValue<T extends KvValueType = \"text\">(\n\tvalue: Uint8Array,\n\toptions?: KvValueOptions<T>,\n): KvValueTypeMap[T] {\n\tconst type = options?.type ?? \"text\";\n\tswitch (type) {\n\t\tcase \"text\":\n\t\t\treturn textDecoder.decode(value) as KvValueTypeMap[T];\n\t\tcase \"arrayBuffer\": {\n\t\t\tconst copy = new Uint8Array(value.byteLength);\n\t\t\tcopy.set(value);\n\t\t\treturn copy.buffer as KvValueTypeMap[T];\n\t\t}\n\t\tcase \"binary\":\n\t\t\treturn value as KvValueTypeMap[T];\n\t\tdefault:\n\t\t\tthrow new TypeError(\"Invalid kv value type\");\n\t}\n}\n\nexport class ActorKv {\n\t#driver: ActorDriver;\n\t#actorId: string;\n\n\tconstructor(driver: ActorDriver, actorId: string) {\n\t\tthis.#driver = driver;\n\t\tthis.#actorId = actorId;\n\t}\n\n\t/**\n\t * Get a single value by key.\n\t */\n\tasync get<T extends KvValueType = \"text\">(\n\t\tkey: KvKey,\n\t\toptions?: KvValueOptions<T>,\n\t): Promise<KvValueTypeMap[T] | null> {\n\t\tconst results = await this.#driver.kvBatchGet(this.#actorId, [\n\t\t\tmakePrefixedKey(encodeKey(key)),\n\t\t]);\n\t\tconst result = results[0];\n\t\tif (!result) {\n\t\t\treturn null;\n\t\t}\n\t\treturn decodeValue(result, options);\n\t}\n\n\t/**\n\t * Get multiple values by keys.\n\t */\n\tasync getBatch<T extends KvValueType = \"text\">(\n\t\tkeys: KvKey[],\n\t\toptions?: KvValueOptions<T>,\n\t): Promise<(KvValueTypeMap[T] | null)[]> {\n\t\tconst prefixedKeys = keys.map((key) =>\n\t\t\tmakePrefixedKey(encodeKey(key)),\n\t\t);\n\t\tconst results = await this.#driver.kvBatchGet(\n\t\t\tthis.#actorId,\n\t\t\tprefixedKeys,\n\t\t);\n\t\treturn results.map((result) =>\n\t\t\tresult ? decodeValue(result, options) : null,\n\t\t);\n\t}\n\n\t/**\n\t * Put a single key-value pair.\n\t */\n\tasync put<T extends KvValueType = KvValueType>(\n\t\tkey: KvKey,\n\t\tvalue: KvValueTypeMap[T],\n\t\toptions?: KvValueOptions<T>,\n\t): Promise<void> {\n\t\tawait this.#driver.kvBatchPut(this.#actorId, [\n\t\t\t[makePrefixedKey(encodeKey(key)), encodeValue(value, options)],\n\t\t]);\n\t}\n\n\t/**\n\t * Put multiple key-value pairs.\n\t */\n\tasync putBatch<T extends KvValueType = KvValueType>(\n\t\tentries: [KvKey, KvValueTypeMap[T]][],\n\t\toptions?: KvValueOptions<T>,\n\t): Promise<void> {\n\t\tconst prefixedEntries: [Uint8Array, Uint8Array][] = entries.map(\n\t\t\t([key, value]) => [\n\t\t\t\tmakePrefixedKey(encodeKey(key)),\n\t\t\t\tencodeValue(value, options),\n\t\t\t],\n\t\t);\n\t\tawait this.#driver.kvBatchPut(this.#actorId, prefixedEntries);\n\t}\n\n\t/**\n\t * Delete a single key.\n\t */\n\tasync delete(key: KvKey): Promise<void> {\n\t\tawait this.#driver.kvBatchDelete(this.#actorId, [\n\t\t\tmakePrefixedKey(encodeKey(key)),\n\t\t]);\n\t}\n\n\t/**\n\t * Delete multiple keys.\n\t */\n\tasync deleteBatch(keys: KvKey[]): Promise<void> {\n\t\tconst prefixedKeys = keys.map((key) =>\n\t\t\tmakePrefixedKey(encodeKey(key)),\n\t\t);\n\t\tawait this.#driver.kvBatchDelete(this.#actorId, prefixedKeys);\n\t}\n\n\t/**\n\t * List all keys with a given prefix.\n\t * Returns key-value pairs where keys have the user prefix removed.\n\t */\n\tasync list<T extends KvValueType = \"text\", K extends KvKeyType = \"text\">(\n\t\tprefix: KvKeyTypeMap[K],\n\t\toptions?: KvListOptions<T, K>,\n\t): Promise<[KvKeyTypeMap[K], KvValueTypeMap[T]][]> {\n\t\tconst prefixedPrefix = makePrefixedKey(\n\t\t\tencodeKey(prefix, options?.keyType),\n\t\t);\n\t\tconst results = await this.#driver.kvListPrefix(\n\t\t\tthis.#actorId,\n\t\t\tprefixedPrefix,\n\t\t);\n\t\treturn results.map(([key, value]) => [\n\t\t\tdecodeKey<K>(removePrefixFromKey(key), options?.keyType),\n\t\t\tdecodeValue<T>(value, options),\n\t\t]);\n\t}\n}\n","import { getLogger } from \"@/common/log\";\n\n/** Prever to use ActorInstance.rlog child logger. This does not provide context in the log, should only be used as a last resort if you cannot pass the actor's child logger. */\nexport function loggerWithoutContext() {\n\treturn getLogger(\"actor-runtime\");\n}\n","import * as errors from \"./errors\";\nimport { loggerWithoutContext } from \"./log\";\n\nexport function assertUnreachable(x: never): never {\n\tloggerWithoutContext().error({\n\t\tmsg: \"unreachable\",\n\t\tvalue: `${x}`,\n\t\tstack: new Error().stack,\n\t});\n\tthrow new errors.Unreachable(x);\n}\n\nexport const throttle = <\n\t// biome-ignore lint/suspicious/noExplicitAny: we want to allow any function\n\tFn extends (...args: any) => any,\n>(\n\tfn: Fn,\n\tdelay: number,\n) => {\n\tlet lastRan = false;\n\tlet lastArgs: Parameters<Fn> | null = null;\n\n\treturn (...args: Parameters<Fn>) => {\n\t\tif (!lastRan) {\n\t\t\tfn.apply(this, args);\n\t\t\tlastRan = true;\n\t\t\tconst timer = () =>\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tlastRan = false;\n\t\t\t\t\tif (lastArgs) {\n\t\t\t\t\t\tfn.apply(this, lastArgs);\n\t\t\t\t\t\tlastRan = true;\n\t\t\t\t\t\tlastArgs = null;\n\t\t\t\t\t\ttimer();\n\t\t\t\t\t}\n\t\t\t\t}, delay);\n\t\t\ttimer();\n\t\t} else lastArgs = args;\n\t};\n};\n\nexport class DeadlineError extends Error {\n\tconstructor() {\n\t\tsuper(\"Promise did not complete before deadline.\");\n\t}\n}\n\nexport function deadline<T>(promise: Promise<T>, timeout: number): Promise<T> {\n\tconst controller = new AbortController();\n\tconst signal = controller.signal;\n\n\t// Set a timeout to abort the operation\n\tconst timeoutId = setTimeout(() => controller.abort(), timeout);\n\n\treturn Promise.race<T>([\n\t\tpromise,\n\t\tnew Promise<T>((_, reject) => {\n\t\t\tsignal.addEventListener(\"abort\", () => reject(new DeadlineError()));\n\t\t}),\n\t]).finally(() => {\n\t\tclearTimeout(timeoutId);\n\t});\n}\n\nexport class Lock<T> {\n\tprivate _locked = false;\n\tprivate _waiting: Array<() => void> = [];\n\n\tconstructor(private _value: T) {}\n\n\tasync lock(fn: (value: T) => Promise<void>): Promise<void> {\n\t\tif (this._locked) {\n\t\t\tawait new Promise<void>((resolve) => this._waiting.push(resolve));\n\t\t}\n\t\tthis._locked = true;\n\n\t\ttry {\n\t\t\tawait fn(this._value);\n\t\t} finally {\n\t\t\tthis._locked = false;\n\t\t\tconst next = this._waiting.shift();\n\t\t\tif (next) next();\n\t\t}\n\t}\n}\n\nexport interface JoinedAbortSignal {\n\tsignal?: AbortSignal;\n\tcleanup: () => void;\n}\n\nexport function joinAbortSignals(\n\t...signals: Array<AbortSignal | undefined>\n): JoinedAbortSignal {\n\tconst activeSignals = signals.filter(\n\t\t(signal): signal is AbortSignal => signal !== undefined,\n\t);\n\tif (activeSignals.length === 0) {\n\t\treturn { signal: undefined, cleanup: () => {} };\n\t}\n\tif (activeSignals.length === 1) {\n\t\treturn { signal: activeSignals[0], cleanup: () => {} };\n\t}\n\n\tconst controller = new AbortController();\n\tif (activeSignals.some((signal) => signal.aborted)) {\n\t\tcontroller.abort();\n\t\treturn { signal: controller.signal, cleanup: () => {} };\n\t}\n\n\tconst cleanup = () => {\n\t\tfor (const signal of activeSignals) {\n\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t}\n\t};\n\tconst onAbort = () => {\n\t\tcontroller.abort();\n\t\tcleanup();\n\t};\n\tfor (const signal of activeSignals) {\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t}\n\n\treturn { signal: controller.signal, cleanup };\n}\n\nexport function generateSecureToken(length = 32) {\n\tconst array = new Uint8Array(length);\n\tcrypto.getRandomValues(array);\n\t// Replace base64 chars that are not URL safe with URL-safe chars and strip padding\n\treturn btoa(String.fromCharCode(...array))\n\t\t.replace(/\\+/g, \"-\")\n\t\t.replace(/\\//g, \"_\")\n\t\t.replace(/=/g, \"\");\n}\n\n/**\n * Checks if a path is an actor state path within the persisted actor data.\n */\nexport function isStatePath(path: string): boolean {\n\treturn path === \"state\" || path.startsWith(\"state.\");\n}\n\n/**\n * Checks if a path is a connection state path within the persisted actor data.\n */\nexport function isConnStatePath(path: string): boolean {\n\tif (!path.startsWith(\"connections.\")) {\n\t\treturn false;\n\t}\n\tconst stateIndex = path.indexOf(\".state\", 12); // Start after \"connections.\"\n\tif (stateIndex === -1) {\n\t\treturn false;\n\t}\n\tconst afterState = stateIndex + 6; // \".state\".length = 6\n\t// Check if \".state\" is followed by end of string or \".\"\n\treturn path.length === afterState || path[afterState] === \".\";\n}\n","import * as errors from \"../errors\";\nimport type { AnyDatabaseProvider } from \"../database\";\nimport type {\n\tEventSchemaConfig,\n\tInferQueueCompleteMap,\n\tInferSchemaMap,\n\tQueueSchemaConfig,\n} from \"../schema\";\nimport { joinAbortSignals } from \"../utils\";\nimport type { QueueManager, QueueMessage } from \"./queue-manager\";\n\nexport type QueueMessageOf<Name extends string, Body> = Omit<\n\tQueueMessage,\n\t\"name\" | \"body\"\n> & {\n\tname: Name;\n\tbody: Body;\n};\n\nexport type QueueName<TQueues extends QueueSchemaConfig> = keyof TQueues & string;\nexport type QueueFilterName<TQueues extends QueueSchemaConfig> =\n\tkeyof TQueues extends never ? string : QueueName<TQueues>;\n\ntype QueueMessageForName<\n\tTQueues extends QueueSchemaConfig,\n\tTName extends QueueFilterName<TQueues>,\n> = keyof TQueues extends never\n\t? QueueMessage\n\t: TName extends QueueName<TQueues>\n\t\t? QueueMessageOf<TName, InferSchemaMap<TQueues>[TName]>\n\t\t: never;\n\ntype QueueCompleteArgs<T> = undefined extends T\n\t? [response?: T]\n\t: [response: T];\n\ntype QueueCompleteArgsForName<\n\tTQueues extends QueueSchemaConfig,\n\tTName extends QueueFilterName<TQueues>,\n> = keyof TQueues extends never\n\t? [response?: unknown]\n\t: TName extends QueueName<TQueues>\n\t\t? [InferQueueCompleteMap<TQueues>[TName]] extends [never]\n\t\t\t? [response?: unknown]\n\t\t\t: QueueCompleteArgs<InferQueueCompleteMap<TQueues>[TName]>\n\t\t: [response?: unknown];\n\ntype QueueCompletableMessageForName<\n\tTQueues extends QueueSchemaConfig,\n\tTName extends QueueFilterName<TQueues>,\n> = QueueMessageForName<TQueues, TName> & {\n\tcomplete(\n\t\t...args: QueueCompleteArgsForName<TQueues, TName>\n\t): Promise<void>;\n};\n\nexport type QueueResultMessageForName<\n\tTQueues extends QueueSchemaConfig,\n\tTName extends QueueFilterName<TQueues>,\n\tTCompletable extends boolean,\n> = TCompletable extends true\n\t? QueueCompletableMessageForName<TQueues, TName>\n\t: QueueMessageForName<TQueues, TName>;\n\n/** Options for receiving queue messages. */\nexport interface QueueNextOptions<\n\tTName extends string = string,\n\tTCompletable extends boolean = boolean,\n> {\n\t/** Queue names to receive from. If omitted, reads from all queue names. */\n\tnames?: readonly TName[];\n\t/** Maximum number of messages to receive. Defaults to 1. */\n\tcount?: number;\n\t/** Timeout in milliseconds. Omit to wait indefinitely. */\n\ttimeout?: number;\n\t/** Optional abort signal for this receive call. */\n\tsignal?: AbortSignal;\n\t/** Whether to return completable messages. */\n\tcompletable?: TCompletable;\n}\n\n/** Options for non-blocking queue reads. */\nexport interface QueueTryNextOptions<\n\tTName extends string = string,\n\tTCompletable extends boolean = boolean,\n> {\n\t/** Queue names to receive from. If omitted, reads from all queue names. */\n\tnames?: readonly TName[];\n\t/** Maximum number of messages to receive. Defaults to 1. */\n\tcount?: number;\n\t/** Whether to return completable messages. */\n\tcompletable?: TCompletable;\n}\n\n/** Options for queue async iteration. */\nexport interface QueueIterOptions<\n\tTName extends string = string,\n\tTCompletable extends boolean = boolean,\n> {\n\t/** Queue names to receive from. If omitted, reads from all queue names. */\n\tnames?: readonly TName[];\n\t/** Optional abort signal for this iterator. */\n\tsignal?: AbortSignal;\n\t/** Whether to return completable messages. */\n\tcompletable?: TCompletable;\n}\n\n/** User-facing queue interface exposed on ActorContext. */\nexport class ActorQueue<\n\tS,\n\tCP,\n\tCS,\n\tV,\n\tI,\n\tDB extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig = Record<never, never>,\n\tTQueues extends QueueSchemaConfig = Record<never, never>,\n> {\n\t#queueManager: QueueManager<S, CP, CS, V, I, DB, TEvents, TQueues>;\n\t#abortSignal: AbortSignal;\n\t#pendingCompletableMessageIds = new Set<string>();\n\n\tconstructor(\n\t\tqueueManager: QueueManager<S, CP, CS, V, I, DB, TEvents, TQueues>,\n\t\tabortSignal: AbortSignal,\n\t) {\n\t\tthis.#queueManager = queueManager;\n\t\tthis.#abortSignal = abortSignal;\n\t}\n\n\tasync next<\n\t\tconst TName extends QueueFilterName<TQueues>,\n\t\tconst TCompletable extends boolean = false,\n\t>(\n\t\topts?: QueueNextOptions<TName, TCompletable>,\n\t): Promise<Array<QueueResultMessageForName<TQueues, TName, TCompletable>>> {\n\t\tconst resolvedOpts = (opts ?? {}) as QueueNextOptions<\n\t\t\tTName,\n\t\t\tTCompletable\n\t\t>;\n\t\tconst completable = resolvedOpts.completable === true;\n\n\t\tif (this.#pendingCompletableMessageIds.size > 0) {\n\t\t\tthrow new errors.QueuePreviousMessageNotCompleted();\n\t\t}\n\n\t\tconst names = this.#normalizeNames(resolvedOpts.names);\n\t\tconst count = Math.max(1, resolvedOpts.count ?? 1);\n\t\tconst { signal, cleanup } = joinAbortSignals(\n\t\t\tthis.#abortSignal,\n\t\t\tresolvedOpts.signal,\n\t\t);\n\t\tconst messages = await this.#queueManager\n\t\t\t.receive(\n\t\t\t\tnames,\n\t\t\t\tcount,\n\t\t\t\tresolvedOpts.timeout,\n\t\t\t\tsignal,\n\t\t\t\tcompletable,\n\t\t\t)\n\t\t\t.finally(cleanup);\n\t\tif (!completable) {\n\t\t\treturn messages as Array<\n\t\t\t\tQueueResultMessageForName<TQueues, TName, TCompletable>\n\t\t\t>;\n\t\t}\n\t\treturn messages.map((message) => this.#makeCompletableMessage(message)) as unknown as Array<\n\t\t\tQueueResultMessageForName<TQueues, TName, TCompletable>\n\t\t>;\n\t}\n\n\tasync tryNext<\n\t\tconst TName extends QueueFilterName<TQueues>,\n\t\tconst TCompletable extends boolean = false,\n\t>(\n\t\topts?: QueueTryNextOptions<TName, TCompletable>,\n\t): Promise<Array<QueueResultMessageForName<TQueues, TName, TCompletable>>> {\n\t\tconst resolvedOpts = (opts ?? {}) as QueueTryNextOptions<\n\t\t\tTName,\n\t\t\tTCompletable\n\t\t>;\n\t\tif (resolvedOpts.completable === true) {\n\t\t\treturn (await this.next<TName, true>({\n\t\t\t\tnames: resolvedOpts.names,\n\t\t\t\tcount: resolvedOpts.count,\n\t\t\t\ttimeout: 0,\n\t\t\t\tcompletable: true,\n\t\t\t})) as Array<QueueResultMessageForName<TQueues, TName, TCompletable>>;\n\t\t}\n\t\treturn (await this.next<TName, false>({\n\t\t\tnames: resolvedOpts.names,\n\t\t\tcount: resolvedOpts.count,\n\t\t\ttimeout: 0,\n\t\t})) as Array<QueueResultMessageForName<TQueues, TName, TCompletable>>;\n\t}\n\n\tasync *iter<\n\t\tconst TName extends QueueFilterName<TQueues>,\n\t\tconst TCompletable extends boolean = false,\n\t>(\n\t\topts?: QueueIterOptions<TName, TCompletable>,\n\t): AsyncIterableIterator<\n\t\tQueueResultMessageForName<TQueues, TName, TCompletable>\n\t> {\n\t\tconst resolvedOpts = (opts ?? {}) as QueueIterOptions<\n\t\t\tTName,\n\t\t\tTCompletable\n\t\t>;\n\t\twhile (!this.#abortSignal.aborted) {\n\t\t\ttry {\n\t\t\t\tconst messages = resolvedOpts.completable === true\n\t\t\t\t\t? await this.next<TName, true>({\n\t\t\t\t\t\t\tnames: resolvedOpts.names,\n\t\t\t\t\t\t\tcount: 1,\n\t\t\t\t\t\t\tsignal: resolvedOpts.signal,\n\t\t\t\t\t\t\tcompletable: true,\n\t\t\t\t\t\t})\n\t\t\t\t\t: await this.next<TName, false>({\n\t\t\t\t\t\t\tnames: resolvedOpts.names,\n\t\t\t\t\t\t\tcount: 1,\n\t\t\t\t\t\t\tsignal: resolvedOpts.signal,\n\t\t\t\t\t\t});\n\t\t\t\tif (messages.length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tyield messages[0] as QueueResultMessageForName<\n\t\t\t\t\tTQueues,\n\t\t\t\t\tTName,\n\t\t\t\t\tTCompletable\n\t\t\t\t>;\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof errors.ActorAborted) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Sends a message to the specified queue. */\n\tsend<K extends keyof TQueues & string>(\n\t\tname: K,\n\t\tbody: InferSchemaMap<TQueues>[K],\n\t): Promise<QueueMessage>;\n\tsend(\n\t\tname: keyof TQueues extends never ? string : never,\n\t\tbody: unknown,\n\t): Promise<QueueMessage>;\n\tasync send(name: string, body: unknown): Promise<QueueMessage> {\n\t\treturn await this.#queueManager.enqueue(name, body);\n\t}\n\n\t#normalizeNames(names: readonly string[] | undefined): string[] | undefined {\n\t\tif (!names || names.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn [...new Set(names)];\n\t}\n\n\t#makeCompletableMessage(\n\t\tmessage: QueueMessage,\n\t): QueueMessage & {\n\t\tcomplete: (response?: unknown) => Promise<void>;\n\t} {\n\t\tconst messageId = message.id.toString();\n\t\tthis.#pendingCompletableMessageIds.add(messageId);\n\n\t\tlet completed = false;\n\t\tconst completableMessage = {\n\t\t\t...message,\n\t\t\tcomplete: async (response?: unknown) => {\n\t\t\t\tif (completed) {\n\t\t\t\t\tthrow new errors.QueueAlreadyCompleted();\n\t\t\t\t}\n\t\t\t\tcompleted = true;\n\t\t\t\ttry {\n\t\t\t\t\tawait this.#queueManager.completeMessage(message, response);\n\t\t\t\t\tthis.#pendingCompletableMessageIds.delete(messageId);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\treturn completableMessage;\n\t}\n}\n","import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { Unsupported } from \"./errors\";\n\nexport type SchemaHookResult = boolean | Promise<boolean>;\n\ntype SchemaHook<TContext = any> = (ctx: TContext) => SchemaHookResult;\n\nexport interface EventTypeToken<T, TContext = any> {\n\treadonly _eventType?: T;\n\treadonly canSubscribe?: SchemaHook<TContext>;\n\treadonly schema?: PrimitiveSchema;\n}\n\nexport interface QueueTypeToken<\n\tTMessage,\n\tTComplete = never,\n\tTContext = any,\n> {\n\treadonly _queueMessage?: TMessage;\n\treadonly _queueComplete?: TComplete;\n\treadonly canPublish?: SchemaHook<TContext>;\n\treadonly message?: PrimitiveSchema;\n\treadonly complete?: PrimitiveSchema;\n}\n\n/** @deprecated Use `event<T>()`. */\nexport type Type<T> = EventTypeToken<T, any>;\n\ninterface EventOptions<TContext = any> {\n\tcanSubscribe?: SchemaHook<TContext>;\n\tschema?: PrimitiveSchema;\n}\n\ninterface QueueOptions<TContext = any> {\n\tcanPublish?: SchemaHook<TContext>;\n\tmessage?: PrimitiveSchema;\n\tcomplete?: PrimitiveSchema;\n}\n\nexport function event<T, TContext = any>(\n\toptions?: EventOptions<TContext>,\n): EventTypeToken<T, TContext> {\n\treturn (options ?? {}) as EventTypeToken<T, TContext>;\n}\n\nexport function queue<TMessage, TComplete = never, TContext = any>(\n\toptions?: QueueOptions<TContext>,\n): QueueTypeToken<\n\tTMessage,\n\tTComplete,\n\tTContext\n> {\n\treturn (options ?? {}) as QueueTypeToken<TMessage, TComplete, TContext>;\n}\n\nexport type PrimitiveSchema = StandardSchemaV1 | EventTypeToken<unknown, any>;\n\nexport interface EventSchemaDefinition<TContext = any> {\n\tschema: PrimitiveSchema;\n\tcanSubscribe?: SchemaHook<TContext>;\n}\n\nexport interface QueueSchemaDefinition<TContext = any> {\n\tmessage: PrimitiveSchema;\n\tcomplete?: PrimitiveSchema;\n\tcanPublish?: SchemaHook<TContext>;\n}\n\nexport type EventSchema<TContext = any> =\n\t| PrimitiveSchema\n\t| EventSchemaDefinition<TContext>;\nexport type QueueSchema =\n\t| PrimitiveSchema\n\t| QueueSchemaDefinition<any>\n\t| QueueTypeToken<unknown, unknown, any>;\nexport type EventSchemaConfig<TContext = any> = Record<\n\tstring,\n\tEventSchema<TContext>\n>;\nexport type QueueSchemaConfig<TContext = any> = Record<string, QueueSchema>;\nexport type AnySchemaConfig = EventSchemaConfig | QueueSchemaConfig;\n\n/** @deprecated Use `EventSchema` or `QueueSchema`. */\nexport type Schema = QueueSchema;\n/** @deprecated Use `EventSchemaConfig` or `QueueSchemaConfig`. */\nexport type SchemaConfig = QueueSchemaConfig;\n\nexport type InferSchema<T> =\n\tT extends QueueSchemaDefinition<any>\n\t\t\t? InferSchema<T[\"message\"]>\n\t\t\t: T extends QueueTypeToken<infer M, unknown, any>\n\t\t\t? M\n\t\t\t: T extends EventSchemaDefinition<any>\n\t\t\t? InferSchema<T[\"schema\"]>\n\t\t\t: T extends StandardSchemaV1<any, infer O>\n\t\t\t? O\n\t\t\t: T extends EventTypeToken<infer R, any>\n\t\t\t\t? R\n\t\t\t\t: never;\n\nexport type InferSchemaMap<T extends Record<string, unknown>> = {\n\t[K in keyof T]: InferSchema<T[K]>;\n};\n\nexport type InferQueueComplete<T> =\n\tT extends QueueTypeToken<unknown, infer C, any>\n\t\t\t? [C] extends [never]\n\t\t\t\t? never\n\t\t\t\t: C\n\t\t\t: T extends QueueSchemaDefinition<any>\n\t\t\t? T[\"complete\"] extends PrimitiveSchema\n\t\t\t\t? InferSchema<T[\"complete\"]>\n\t\t\t\t: never\n\t\t\t: never;\n\nexport type InferQueueCompleteMap<T extends QueueSchemaConfig> = {\n\t[K in keyof T]: InferQueueComplete<T[K]>;\n};\n\nexport type InferEventArgs<T> = T extends readonly unknown[]\n\t? number extends T[\"length\"]\n\t\t? [T]\n\t\t: T\n\t: [T];\n\nexport type ValidationResult<T> =\n\t| { success: true; data: T }\n\t| { success: false; issues: unknown[] };\n\nexport function isStandardSchema(value: unknown): value is StandardSchemaV1 {\n\treturn typeof value === \"object\" && value !== null && \"~standard\" in value;\n}\n\nexport function isQueueSchemaDefinition(\n\tvalue: unknown,\n): value is QueueSchemaDefinition<any> {\n\tif (isEventSchemaDefinition(value)) {\n\t\treturn false;\n\t}\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"message\" in value &&\n\t\t(value as { message?: unknown }).message !== undefined\n\t);\n}\n\nexport function isEventSchemaDefinition(\n\tvalue: unknown,\n): value is EventSchemaDefinition<any> {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"schema\" in value &&\n\t\t(value as { schema?: unknown }).schema !== undefined\n\t);\n}\n\nexport function hasSchemaConfigKey<T extends AnySchemaConfig>(\n\tschemas: T | undefined,\n\tkey: string,\n): boolean {\n\tif (!schemas) {\n\t\treturn false;\n\t}\n\treturn Object.prototype.hasOwnProperty.call(schemas, key);\n}\n\nexport function getEventCanSubscribe<TContext = any>(\n\tschemas: EventSchemaConfig<TContext> | undefined,\n\tkey: string,\n): SchemaHook<TContext> | undefined {\n\tconst schema = schemas?.[key];\n\tif (!schema || isStandardSchema(schema)) {\n\t\treturn undefined;\n\t}\n\n\tconst maybeCanSubscribe = (schema as { canSubscribe?: unknown })\n\t\t.canSubscribe;\n\treturn typeof maybeCanSubscribe === \"function\"\n\t\t? (maybeCanSubscribe as SchemaHook<TContext>)\n\t\t: undefined;\n}\n\nexport function getQueueCanPublish<TContext = any>(\n\tschemas: QueueSchemaConfig | undefined,\n\tkey: string,\n): SchemaHook<TContext> | undefined {\n\tconst schema = schemas?.[key];\n\tif (!schema || isStandardSchema(schema)) {\n\t\treturn undefined;\n\t}\n\n\tconst maybeCanPublish = (schema as { canPublish?: unknown }).canPublish;\n\treturn typeof maybeCanPublish === \"function\"\n\t\t? (maybeCanPublish as SchemaHook<TContext>)\n\t\t: undefined;\n}\n\nfunction getValidationSchema(\n\tschema: QueueSchema | EventSchema | undefined,\n): QueueSchema | EventSchema | undefined {\n\tif (!schema) {\n\t\treturn undefined;\n\t}\n\tif (isEventSchemaDefinition(schema)) {\n\t\treturn schema.schema;\n\t}\n\tif (isQueueSchemaDefinition(schema)) {\n\t\treturn schema.message;\n\t}\n\tif (\n\t\ttypeof schema === \"object\" &&\n\t\tschema !== null &&\n\t\t\"schema\" in schema &&\n\t\t(schema as { schema?: unknown }).schema !== undefined\n\t) {\n\t\treturn (schema as { schema: QueueSchema | EventSchema }).schema;\n\t}\n\tif (\n\t\ttypeof schema === \"object\" &&\n\t\tschema !== null &&\n\t\t\"message\" in schema &&\n\t\t(schema as { message?: unknown }).message !== undefined\n\t) {\n\t\treturn (schema as { message: QueueSchema | EventSchema }).message;\n\t}\n\treturn schema;\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"then\" in value &&\n\t\ttypeof (value as { then?: unknown }).then === \"function\"\n\t);\n}\n\nexport async function validateSchema<T extends AnySchemaConfig>(\n\tschemas: T | undefined,\n\tkey: keyof T & string,\n\tdata: unknown,\n): Promise<ValidationResult<InferSchemaMap<T>[typeof key]>> {\n\tconst schema = getValidationSchema(schemas?.[key]);\n\n\tif (!schema) {\n\t\treturn { success: true, data: data as InferSchemaMap<T>[typeof key] };\n\t}\n\n\tif (isStandardSchema(schema)) {\n\t\tconst result = await schema[\"~standard\"].validate(data);\n\t\tif (result.issues) {\n\t\t\treturn { success: false, issues: [...result.issues] };\n\t\t}\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tdata: result.value as InferSchemaMap<T>[typeof key],\n\t\t};\n\t}\n\n\treturn { success: true, data: data as InferSchemaMap<T>[typeof key] };\n}\n\nexport function validateSchemaSync<T extends AnySchemaConfig>(\n\tschemas: T | undefined,\n\tkey: keyof T & string,\n\tdata: unknown,\n): ValidationResult<InferSchemaMap<T>[typeof key]> {\n\tconst schema = getValidationSchema(schemas?.[key]);\n\n\tif (!schema) {\n\t\treturn { success: true, data: data as InferSchemaMap<T>[typeof key] };\n\t}\n\n\tif (isStandardSchema(schema)) {\n\t\tconst result = schema[\"~standard\"].validate(data);\n\t\tif (isPromiseLike(result)) {\n\t\t\tthrow new Unsupported(\"async schema validation\");\n\t\t}\n\t\tif (result.issues) {\n\t\t\treturn { success: false, issues: [...result.issues] };\n\t\t}\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tdata: result.value as InferSchemaMap<T>[typeof key],\n\t\t};\n\t}\n\n\treturn { success: true, data: data as InferSchemaMap<T>[typeof key] };\n}\n","import type { ActorKey } from \"@/actor/mod\";\nimport type { Client } from \"@/client/client\";\nimport type { Logger } from \"@/common/log\";\nimport type { Registry } from \"@/registry\";\nimport type { Conn, ConnId } from \"../../conn/mod\";\nimport type { AnyDatabaseProvider, InferDatabaseClient } from \"../../database\";\nimport type { ActorDefinition, AnyActorDefinition } from \"../../definition\";\nimport * as errors from \"../../errors\";\nimport { ActorKv } from \"../../instance/kv\";\nimport type {\n\tActorInstance,\n\tAnyActorInstance,\n\tSaveStateOptions,\n} from \"../../instance/mod\";\nimport { ActorQueue } from \"../../instance/queue\";\nimport type { Schedule } from \"../../schedule\";\nimport {\n\ttype EventSchemaConfig,\n\ttype InferEventArgs,\n\ttype InferSchemaMap,\n\ttype QueueSchemaConfig,\n\thasSchemaConfigKey,\n\tvalidateSchemaSync,\n} from \"../../schema\";\n\nexport const ACTOR_CONTEXT_INTERNAL_SYMBOL = Symbol.for(\n\t\"rivetkit.actorContextInternal\",\n);\n\n/**\n * ActorContext class that provides access to actor methods and state\n */\nexport class ActorContext<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig = Record<never, never>,\n\tTQueues extends QueueSchemaConfig = Record<never, never>,\n> {\n\t[ACTOR_CONTEXT_INTERNAL_SYMBOL]!: AnyActorInstance;\n\t#actor: ActorInstance<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>;\n\t#kv: ActorKv | undefined;\n\t#queue:\n\t\t| ActorQueue<\n\t\t\t\tTState,\n\t\t\t\tTConnParams,\n\t\t\t\tTConnState,\n\t\t\t\tTVars,\n\t\t\t\tTInput,\n\t\t\t\tTDatabase,\n\t\t\t\tTEvents,\n\t\t\t\tTQueues\n\t\t >\n\t\t| undefined;\n\n\tconstructor(\n\t\tactor: ActorInstance<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) {\n\t\tthis.#actor = actor;\n\t\tthis[ACTOR_CONTEXT_INTERNAL_SYMBOL] = actor as AnyActorInstance;\n\t}\n\n\t/**\n\t * Gets the KV storage interface.\n\t */\n\tget kv(): ActorKv {\n\t\tif (!this.#kv) {\n\t\t\tthis.#kv = new ActorKv(this.#actor.driver, this.#actor.id);\n\t\t}\n\t\treturn this.#kv;\n\t}\n\n\t/**\n\t * Get the actor state\n\t *\n\t * @remarks\n\t * This property is not available in `createState` since the state hasn't been created yet.\n\t */\n\tget state(): TState extends never ? never : TState {\n\t\treturn this.#actor.state as TState extends never ? never : TState;\n\t}\n\n\t/**\n\t * Get the actor variables\n\t *\n\t * @remarks\n\t * This property is not available in `createVars` since the variables haven't been created yet.\n\t * Variables are only available if you define `vars` or `createVars` in your actor config.\n\t */\n\tget vars(): TVars extends never ? never : TVars {\n\t\treturn this.#actor.vars as TVars extends never ? never : TVars;\n\t}\n\n\t/**\n\t * Broadcasts an event to all connected clients.\n\t * @param name - The name of the event.\n\t * @param args - The arguments to send with the event.\n\t */\n\tbroadcast<K extends keyof TEvents & string>(\n\t\tname: K,\n\t\t...args: InferEventArgs<InferSchemaMap<TEvents>[K]>\n\t): void;\n\tbroadcast(\n\t\tname: keyof TEvents extends never ? string : never,\n\t\t...args: Array<unknown>\n\t): void;\n\tbroadcast(name: string, ...args: Array<unknown>): void {\n\t\tif (\n\t\t\tthis.#actor.config.events !== undefined &&\n\t\t\t!hasSchemaConfigKey(this.#actor.config.events, name)\n\t\t) {\n\t\t\tthis.#actor.rLog.warn({\n\t\t\t\tmsg: \"broadcasting event not defined in actor events config\",\n\t\t\t\teventName: name,\n\t\t\t});\n\t\t}\n\n\t\tconst payload = args.length === 1 ? args[0] : args;\n\t\tconst result = validateSchemaSync(\n\t\t\tthis.#actor.config.events,\n\t\t\tname as keyof TEvents & string,\n\t\t\tpayload,\n\t\t);\n\t\tif (!result.success) {\n\t\t\tthrow new errors.EventPayloadInvalid(name, result.issues);\n\t\t}\n\t\tif (args.length === 1) {\n\t\t\tthis.#actor.eventManager.broadcast(name, result.data);\n\t\t\treturn;\n\t\t}\n\t\tif (Array.isArray(result.data)) {\n\t\t\tthis.#actor.eventManager.broadcast(\n\t\t\t\tname,\n\t\t\t\t...(result.data as unknown[]),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tthis.#actor.eventManager.broadcast(name, ...args);\n\t}\n\n\t/**\n\t * Gets the logger instance.\n\t */\n\tget log(): Logger {\n\t\treturn this.#actor.log;\n\t}\n\n\t/**\n\t * Access to queue receive helpers.\n\t */\n\tget queue(): ActorQueue<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> {\n\t\tif (!this.#queue) {\n\t\t\tthis.#queue = new ActorQueue(\n\t\t\t\tthis.#actor.queueManager,\n\t\t\t\tthis.#actor.abortSignal,\n\t\t\t);\n\t\t}\n\t\treturn this.#queue;\n\t}\n\n\t/**\n\t * Gets actor ID.\n\t */\n\tget actorId(): string {\n\t\treturn this.#actor.id;\n\t}\n\n\t/**\n\t * Gets the actor name.\n\t */\n\tget name(): string {\n\t\treturn this.#actor.name;\n\t}\n\n\t/**\n\t * Gets the actor key.\n\t */\n\tget key(): ActorKey {\n\t\treturn this.#actor.key;\n\t}\n\n\t/**\n\t * Gets the region.\n\t */\n\tget region(): string {\n\t\treturn this.#actor.region;\n\t}\n\n\t/**\n\t * Gets the scheduler.\n\t */\n\tget schedule(): Schedule {\n\t\treturn this.#actor.schedule;\n\t}\n\n\t/**\n\t * Gets the map of connections.\n\t */\n\tget conns(): Map<\n\t\tConnId,\n\t\tConn<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>\n\t> {\n\t\treturn this.#actor.conns;\n\t}\n\n\t/**\n\t * Returns the client for the given registry.\n\t */\n\tclient<R extends Registry<any>>(): Client<R> {\n\t\treturn this.#actor.inlineClient as Client<R>;\n\t}\n\n\t/**\n\t * Gets the database.\n\t *\n\t * @experimental\n\t * @remarks\n\t * This property is only available if you define a `db` provider in your actor config.\n\t * @throws {DatabaseNotEnabled} If the database is not enabled.\n\t */\n\tget db(): TDatabase extends never ? never : InferDatabaseClient<TDatabase> {\n\t\treturn this.#actor.db as TDatabase extends never\n\t\t\t? never\n\t\t\t: InferDatabaseClient<TDatabase>;\n\t}\n\n\t/**\n\t * Forces the state to get saved.\n\t *\n\t * @param opts - Options for saving the state.\n\t */\n\tasync saveState(opts: SaveStateOptions): Promise<void> {\n\t\treturn this.#actor.stateManager.saveState(opts);\n\t}\n\n\t/**\n\t * Prevents the actor from sleeping until promise is complete.\n\t */\n\twaitUntil(promise: Promise<void>): void {\n\t\tthis.#actor.waitUntil(promise);\n\t}\n\n\t/**\n\t * Prevents the actor from sleeping while the given promise is running.\n\t *\n\t * Use this when performing async operations in the `run` handler or other\n\t * background contexts where you need to ensure the actor stays awake.\n\t *\n\t * Returns the resolved value and resets the sleep timer on completion.\n\t * Errors are propagated to the caller.\n\t */\n\tkeepAwake<T>(promise: Promise<T>): Promise<T> {\n\t\treturn this.#actor.keepAwake(promise);\n\t}\n\n\t/**\n\t * AbortSignal that fires when the actor is stopping.\n\t */\n\tget abortSignal(): AbortSignal {\n\t\treturn this.#actor.abortSignal;\n\t}\n\n\t/**\n\t * True when the actor is stopping.\n\t *\n\t * Alias for `c.abortSignal.aborted`.\n\t */\n\tget aborted(): boolean {\n\t\treturn this.#actor.abortSignal.aborted;\n\t}\n\n\t/**\n\t * Forces the actor to sleep.\n\t *\n\t * Not supported on all drivers.\n\t *\n\t * @experimental\n\t */\n\tsleep() {\n\t\tthis.#actor.startSleep();\n\t}\n\n\t/**\n\t * Forces the actor to destroy.\n\t *\n\t * This will return immediately, then call `onStop` and `onDestroy`.\n\t *\n\t * @experimental\n\t */\n\tdestroy() {\n\t\tthis.#actor.startDestroy();\n\t}\n}\n\nexport type ActorContextOf<AD extends AnyActorDefinition> =\n\tAD extends ActorDefinition<\n\t\tinfer S,\n\t\tinfer CP,\n\t\tinfer CS,\n\t\tinfer V,\n\t\tinfer I,\n\t\tinfer DB extends AnyDatabaseProvider,\n\t\tinfer E extends EventSchemaConfig,\n\t\tinfer Q extends QueueSchemaConfig,\n\t\tany\n\t>\n\t\t? ActorContext<S, CP, CS, V, I, DB, E, Q>\n\t\t: never;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/actor/config.ts","../../src/actor/instance/keys.ts","../../src/actor/instance/kv.ts","../../src/actor/log.ts","../../src/actor/utils.ts","../../src/actor/instance/queue.ts","../../src/actor/schema.ts","../../src/actor/contexts/base/actor.ts"],"sourcesContent":["import { z } from \"zod/v4\";\nimport type { UniversalWebSocket } from \"@/common/websocket-interface\";\nimport type { Conn } from \"./conn/mod\";\nimport type {\n\tActionContext,\n\tActorContext,\n\tBeforeActionResponseContext,\n\tBeforeConnectContext,\n\tConnectContext,\n\tCreateConnStateContext,\n\tCreateContext,\n\tCreateVarsContext,\n\tDestroyContext,\n\tDisconnectContext,\n\tRequestContext,\n\tRunContext,\n\tSleepContext,\n\tStateChangeContext,\n\tWakeContext,\n\tWebSocketContext,\n} from \"./contexts\";\nimport type { AnyDatabaseProvider } from \"./database\";\nimport type { EventSchemaConfig, QueueSchemaConfig } from \"./schema\";\n\nexport interface ActorTypes<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n> {\n\tstate?: TState;\n\tconnParams?: TConnParams;\n\tconnState?: TConnState;\n\tvars?: TVars;\n\tinput?: TInput;\n\tdatabase?: TDatabase;\n}\n\n// Helper for validating function types - accepts generic for specific function signatures\nconst zFunction = <\n\tT extends (...args: any[]) => any = (...args: unknown[]) => unknown,\n>() => z.custom<T>((val) => typeof val === \"function\");\n\nexport type InspectorUnsubscribe = () => void;\n\nexport interface WorkflowInspectorConfig<THistory = unknown> {\n\tgetHistory: () => THistory | null;\n\tonHistoryUpdated?: (\n\t\tlistener: (history: THistory) => void,\n\t) => InspectorUnsubscribe;\n}\n\nexport interface RunInspectorConfig<THistory = unknown> {\n\tworkflow?: WorkflowInspectorConfig<THistory>;\n}\n\nconst WorkflowInspectorConfigSchema = z.object({\n\tgetHistory: zFunction<WorkflowInspectorConfig<unknown>[\"getHistory\"]>(),\n\tonHistoryUpdated:\n\t\tzFunction<\n\t\t\tNonNullable<WorkflowInspectorConfig<unknown>[\"onHistoryUpdated\"]>\n\t\t>().optional(),\n});\n\nconst RunInspectorConfigSchema = z\n\t.object({\n\t\tworkflow: WorkflowInspectorConfigSchema.optional(),\n\t})\n\t.optional();\n\n// Schema for run handler with metadata\nexport const RunConfigSchema = z.object({\n\t/** Display name for the actor in the Inspector UI. */\n\tname: z.string().optional(),\n\t/** Icon for the actor in the Inspector UI. Can be an emoji or FontAwesome icon name. */\n\ticon: z.string().optional(),\n\t/** The run handler function. */\n\trun: zFunction(),\n\t/** Inspector integration for long-running run handlers. */\n\tinspector: RunInspectorConfigSchema.optional(),\n});\ntype RunConfigRuntime = z.infer<typeof RunConfigSchema>;\nexport type RunConfig<\n\tTState = unknown,\n\tTConnParams = unknown,\n\tTConnState = unknown,\n\tTVars = unknown,\n\tTInput = unknown,\n\tTDatabase extends AnyDatabaseProvider = AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig = Record<never, never>,\n\tTQueues extends QueueSchemaConfig = Record<never, never>,\n> = Omit<RunConfigRuntime, \"run\"> & {\n\trun: (\n\t\tc: RunContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) => void | Promise<void>;\n};\n\ntype AnyRunConfig = RunConfig<\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tAnyDatabaseProvider,\n\tany,\n\tany\n>;\n\nexport const RUN_FUNCTION_CONFIG_SYMBOL = Symbol.for(\n\t\"rivetkit.run_function_config\",\n);\n\ninterface RunFunctionConfig {\n\tname?: string;\n\ticon?: string;\n\tinspector?: RunInspectorConfig;\n}\n\ntype RunFunctionWithConfig = ((...args: any[]) => any) & {\n\t[RUN_FUNCTION_CONFIG_SYMBOL]?: RunFunctionConfig;\n};\n\n// Run can be either a function or an object with name/icon/run\nconst zRunHandler = z.union([zFunction(), RunConfigSchema]).optional();\n\n/** Extract the run function from either a function or RunConfig object. */\nexport function getRunFunction(\n\trun: ((...args: any[]) => any) | AnyRunConfig | undefined,\n): ((...args: any[]) => any) | undefined {\n\tif (!run) return undefined;\n\tif (typeof run === \"function\") return run;\n\treturn run.run;\n}\n\n/** Extract run metadata (name/icon) from RunConfig if provided. */\nexport function getRunMetadata(\n\trun: ((...args: any[]) => any) | AnyRunConfig | undefined,\n): { name?: string; icon?: string } {\n\tif (!run) return {};\n\tif (typeof run === \"function\") {\n\t\tconst config = (run as RunFunctionWithConfig)[\n\t\t\tRUN_FUNCTION_CONFIG_SYMBOL\n\t\t];\n\t\tif (!config) return {};\n\t\treturn { name: config.name, icon: config.icon };\n\t}\n\treturn { name: run.name, icon: run.icon };\n}\n\n/** Extract run inspector configuration if provided. */\nexport function getRunInspectorConfig(\n\trun: ((...args: any[]) => any) | AnyRunConfig | undefined,\n): RunInspectorConfig | undefined {\n\tif (!run) return undefined;\n\tif (typeof run === \"function\") {\n\t\treturn (run as RunFunctionWithConfig)[RUN_FUNCTION_CONFIG_SYMBOL]\n\t\t\t?.inspector;\n\t}\n\treturn run.inspector;\n}\n\n// This schema is used to validate the input at runtime. The generic types are defined below in `ActorConfig`.\n//\n// We don't use Zod generics with `z.custom` because:\n// (a) there seems to be a weird bug in either Zod, tsup, or TSC that causese external packages to have different types from `z.infer` than from within the same package and\n// (b) it makes the type definitions incredibly difficult to read as opposed to vanilla TypeScript.\nexport const ActorConfigSchema = z\n\t.object({\n\t\tonCreate: zFunction().optional(),\n\t\tonDestroy: zFunction().optional(),\n\t\tonWake: zFunction().optional(),\n\t\tonSleep: zFunction().optional(),\n\t\trun: zRunHandler,\n\t\tonStateChange: zFunction().optional(),\n\t\tonBeforeConnect: zFunction().optional(),\n\t\tonConnect: zFunction().optional(),\n\t\tonDisconnect: zFunction().optional(),\n\t\tonBeforeActionResponse: zFunction().optional(),\n\t\tonRequest: zFunction().optional(),\n\t\tonWebSocket: zFunction().optional(),\n\t\tactions: z.record(z.string(), zFunction()).default(() => ({})),\n\t\tevents: z.record(z.string(), z.any()).optional(),\n\t\tqueues: z.record(z.string(), z.any()).optional(),\n\t\tstate: z.any().optional(),\n\t\tcreateState: zFunction().optional(),\n\t\tconnState: z.any().optional(),\n\t\tcreateConnState: zFunction().optional(),\n\t\tvars: z.any().optional(),\n\t\tdb: z.any().optional(),\n\t\tcreateVars: zFunction().optional(),\n\t\toptions: z\n\t\t\t.object({\n\t\t\t\t/** Display name for the actor in the Inspector UI. */\n\t\t\t\tname: z.string().optional(),\n\t\t\t\t/** Icon for the actor in the Inspector UI. Can be an emoji or FontAwesome icon name. */\n\t\t\t\ticon: z.string().optional(),\n\t\t\t\tcreateVarsTimeout: z.number().positive().default(5000),\n\t\t\t\tcreateConnStateTimeout: z.number().positive().default(5000),\n\t\t\t\tonConnectTimeout: z.number().positive().default(5000),\n\t\t\t\t// This must be less than engine config > pegboard.actor_stop_threshold\n\t\t\t\tonSleepTimeout: z.number().positive().default(5000),\n\t\t\t\t// This must be less than engine config > pegboard.actor_stop_threshold\n\t\t\t\tonDestroyTimeout: z.number().positive().default(5000),\n\t\t\t\tstateSaveInterval: z.number().positive().default(10_000),\n\t\t\t\tactionTimeout: z.number().positive().default(60_000),\n\t\t\t\t// Max time to wait for waitUntil background promises during shutdown\n\t\t\t\twaitUntilTimeout: z.number().positive().default(15_000),\n\t\t\t\t// Max time to wait for run handler to stop during shutdown\n\t\t\t\trunStopTimeout: z.number().positive().default(15_000),\n\t\t\t\tconnectionLivenessTimeout: z.number().positive().default(2500),\n\t\t\t\tconnectionLivenessInterval: z.number().positive().default(5000),\n\t\t\t\tnoSleep: z.boolean().default(false),\n\t\t\t\tsleepTimeout: z.number().positive().default(30_000),\n\t\t\t\tmaxQueueSize: z.number().positive().default(1000),\n\t\t\t\tmaxQueueMessageSize: z\n\t\t\t\t\t.number()\n\t\t\t\t\t.positive()\n\t\t\t\t\t.default(64 * 1024),\n\t\t\t\t/**\n\t\t\t\t * Can hibernate WebSockets for onWebSocket.\n\t\t\t\t *\n\t\t\t\t * WebSockets using actions/events are hibernatable by default.\n\t\t\t\t *\n\t\t\t\t * @experimental\n\t\t\t\t **/\n\t\t\t\tcanHibernateWebSocket: z\n\t\t\t\t\t.union([\n\t\t\t\t\t\tz.boolean(),\n\t\t\t\t\t\tzFunction<(request: Request) => boolean>(),\n\t\t\t\t\t])\n\t\t\t\t\t.default(false),\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.prefault(() => ({})),\n\t})\n\t.strict()\n\t.refine(\n\t\t(data) => !(data.state !== undefined && data.createState !== undefined),\n\t\t{\n\t\t\tmessage: \"Cannot define both 'state' and 'createState'\",\n\t\t\tpath: [\"state\"],\n\t\t},\n\t)\n\t.refine(\n\t\t(data) =>\n\t\t\t!(\n\t\t\t\tdata.connState !== undefined &&\n\t\t\t\tdata.createConnState !== undefined\n\t\t\t),\n\t\t{\n\t\t\tmessage: \"Cannot define both 'connState' and 'createConnState'\",\n\t\t\tpath: [\"connState\"],\n\t\t},\n\t)\n\t.refine(\n\t\t(data) => !(data.vars !== undefined && data.createVars !== undefined),\n\t\t{\n\t\t\tmessage: \"Cannot define both 'vars' and 'createVars'\",\n\t\t\tpath: [\"vars\"],\n\t\t},\n\t);\n\n// Creates state config\n//\n// This must have only one or the other or else TState will not be able to be inferred\n//\n// Data returned from this handler will be available on `c.state`.\ntype CreateState<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n> =\n\t| { state: TState }\n\t| {\n\t\tcreateState: (\n\t\t\tc: CreateContext<TState, TInput, TDatabase, TEvents, TQueues>,\n\t\t\tinput: TInput,\n\t\t) => TState | Promise<TState>;\n\t}\n\t| Record<never, never>;\n\n// Creates connection state config\n//\n// This must have only one or the other or else TState will not be able to be inferred\n//\n// Data returned from this handler will be available on `c.conn.state`.\ntype CreateConnState<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n> =\n\t| { connState: TConnState }\n\t| {\n\t\tcreateConnState: (\n\t\t\tc: CreateConnStateContext<\n\t\t\t\tTState,\n\t\t\t\tTVars,\n\t\t\t\tTInput,\n\t\t\t\tTDatabase,\n\t\t\t\tTEvents,\n\t\t\t\tTQueues\n\t\t\t>,\n\t\t\tparams: TConnParams,\n\t\t) => TConnState | Promise<TConnState>;\n\t}\n\t| Record<never, never>;\n\n// Creates vars config\n//\n// This must have only one or the other or else TState will not be able to be inferred\n/**\n * @experimental\n */\ntype CreateVars<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n> =\n\t| {\n\t\t/**\n\t\t * @experimental\n\t\t */\n\t\tvars: TVars;\n\t}\n\t| {\n\t\t/**\n\t\t * @experimental\n\t\t */\n\t\tcreateVars: (\n\t\t\tc: CreateVarsContext<\n\t\t\t\tTState,\n\t\t\t\tTInput,\n\t\t\t\tTDatabase,\n\t\t\t\tTEvents,\n\t\t\t\tTQueues\n\t\t\t>,\n\t\t\tdriverCtx: any,\n\t\t) => TVars | Promise<TVars>;\n\t}\n\t| Record<never, never>;\n\nexport interface Actions<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig = Record<never, never>,\n\tTQueues extends QueueSchemaConfig = Record<never, never>,\n> {\n\t[Action: string]: (\n\t\tc: ActionContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\t...args: any[]\n\t) => any;\n}\n\n//export type ActorConfig<TState, TConnParams, TConnState, TVars, TInput, TAuthData> = BaseActorConfig<TState, TConnParams, TConnState, TVars, TInput, TAuthData> &\n//\tActorConfigLifecycle<TState, TConnParams, TConnState, TVars, TInput, TAuthData> &\n//\tCreateState<TState, TConnParams, TConnState, TVars, TInput, TAuthData> &\n//\tCreateConnState<TState, TConnParams, TConnState, TVars, TInput, TAuthData>;\n\n/**\n * @experimental\n */\nexport type AuthIntent = \"get\" | \"create\" | \"connect\" | \"action\" | \"message\";\n\ninterface BaseActorConfig<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n\tTActions extends Actions<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>,\n> {\n\t/**\n\t * Called when the actor is first initialized.\n\t *\n\t * Use this hook to initialize your actor's state.\n\t * This is called before any other lifecycle hooks.\n\t */\n\tonCreate?: (\n\t\tc: CreateContext<TState, TInput, TDatabase, TEvents, TQueues>,\n\t\tinput: TInput,\n\t) => void | Promise<void>;\n\n\t/**\n\t * Called when the actor is destroyed.\n\t */\n\tonDestroy?: (\n\t\tc: DestroyContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) => void | Promise<void>;\n\n\t/**\n\t * Called when the actor is started and ready to receive connections and action.\n\t *\n\t * Use this hook to initialize resources needed for the actor's operation\n\t * (timers, external connections, etc.)\n\t *\n\t * @returns Void or a Promise that resolves when startup is complete\n\t */\n\tonWake?: (\n\t\tc: WakeContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) => void | Promise<void>;\n\n\t/**\n\t * Called when the actor is stopping or sleeping.\n\t *\n\t * Use this hook to clean up resources, save state, or perform\n\t * any shutdown operations before the actor sleeps or stops.\n\t *\n\t * Not supported on all platforms.\n\t *\n\t * @returns Void or a Promise that resolves when shutdown is complete\n\t */\n\tonSleep?: (\n\t\tc: SleepContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) => void | Promise<void>;\n\n\t/**\n\t * Called after the actor starts up. Does not block actor startup.\n\t *\n\t * Use this for background tasks like:\n\t * - Reading from queues in a loop\n\t * - Tick loops for periodic work\n\t * - Custom workflow logic\n\t *\n\t * **Important:** The actor may go to sleep at any time during the `run`\n\t * handler. Use `c.keepAwake(promise)` to wrap async operations that should\n\t * not be interrupted by sleep.\n\t *\n\t * The handler receives an abort signal via `c.abortSignal` and a\n\t * `c.aborted` alias for loop checks. Use these to gracefully exit.\n\t *\n\t * If this handler exits or throws, the actor will crash and reschedule.\n\t * On shutdown, the actor waits for this handler to complete with a\n\t * configurable timeout (options.runStopTimeout, default 15s).\n\t *\n\t * Can be either a function or a RunConfig object with optional name/icon metadata.\n\t *\n\t * @returns Void or a Promise. If the promise exits, the actor crashes.\n\t */\n\trun?:\n\t| ((\n\t\tc: RunContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) => void | Promise<void>)\n\t| RunConfig<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>;\n\n\t/**\n\t * Called when the actor's state changes.\n\t *\n\t * Use this hook to react to state changes, such as updating\n\t * external systems or triggering events.\n\t *\n\t * State changes made within this hook will NOT trigger\n\t * another onStateChange call, preventing infinite recursion.\n\t *\n\t * @param newState The updated state\n\t */\n\tonStateChange?: (\n\t\tc: StateChangeContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\tnewState: TState,\n\t) => void;\n\n\t/**\n\t * Called before a client connects to the actor.\n\t *\n\t * Use this hook to determine if a connection should be accepted\n\t * and to initialize connection-specific state.\n\t *\n\t * @param opts Connection parameters including client-provided data\n\t * @returns The initial connection state or a Promise that resolves to it\n\t * @throws Throw an error to reject the connection\n\t */\n\tonBeforeConnect?: (\n\t\tc: BeforeConnectContext<\n\t\t\tTState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\tparams: TConnParams,\n\t) => void | Promise<void>;\n\n\t/**\n\t * Called when a client successfully connects to the actor.\n\t *\n\t * Use this hook to perform actions when a connection is established,\n\t * such as sending initial data or updating the actor's state.\n\t *\n\t * @param conn The connection object\n\t * @returns Void or a Promise that resolves when connection handling is complete\n\t */\n\tonConnect?: (\n\t\tc: ConnectContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\tconn: Conn<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) => void | Promise<void>;\n\n\t/**\n\t * Called when a client disconnects from the actor.\n\t *\n\t * Use this hook to clean up resources associated with the connection\n\t * or update the actor's state.\n\t *\n\t * @param conn The connection that is being closed\n\t * @returns Void or a Promise that resolves when disconnect handling is complete\n\t */\n\tonDisconnect?: (\n\t\tc: DisconnectContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\tconn: Conn<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) => void | Promise<void>;\n\n\t/**\n\t * Called before sending an action response to the client.\n\t *\n\t * Use this hook to modify or transform the output of an action before it's sent\n\t * to the client. This is useful for formatting responses, adding metadata,\n\t * or applying transformations to the output.\n\t *\n\t * @param name The name of the action that was called\n\t * @param args The arguments that were passed to the action\n\t * @param output The output that will be sent to the client\n\t * @returns The modified output to send to the client\n\t */\n\tonBeforeActionResponse?: <Out>(\n\t\tc: BeforeActionResponseContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\tname: string,\n\t\targs: unknown[],\n\t\toutput: Out,\n\t) => Out | Promise<Out>;\n\n\t/**\n\t * Called when a raw HTTP request is made to the actor.\n\t *\n\t * This handler receives raw HTTP requests made to `/actors/{actorName}/http/*` endpoints.\n\t * Use this hook to handle custom HTTP patterns, REST APIs, or other HTTP-based protocols.\n\t *\n\t * @param c The request context with access to the connection\n\t * @param request The raw HTTP request object\n\t * @param opts Additional options\n\t * @returns A Response object to send back, or void to continue with default routing\n\t */\n\tonRequest?: (\n\t\tc: RequestContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\trequest: Request,\n\t) => Response | Promise<Response>;\n\n\t/**\n\t * Called when a raw WebSocket connection is established to the actor.\n\t *\n\t * This handler receives WebSocket connections made to `/actors/{actorName}/websocket/*` endpoints.\n\t * Use this hook to handle custom WebSocket protocols, binary streams, or other WebSocket-based communication.\n\t *\n\t * @param c The WebSocket context with access to the connection\n\t * @param websocket The raw WebSocket connection\n\t * @param opts Additional options including the original HTTP upgrade request\n\t */\n\tonWebSocket?: (\n\t\tc: WebSocketContext<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t\twebsocket: UniversalWebSocket,\n\t) => void | Promise<void>;\n\n\tactions?: TActions;\n\n\t/**\n\t * Schema map for events broadcasted by this actor.\n\t */\n\tevents?: TEvents;\n\n\t/**\n\t * Schema map for queue payloads sent by this actor.\n\t */\n\tqueues?: TQueues;\n}\n\ntype ActorDatabaseConfig<TDatabase extends AnyDatabaseProvider> =\n\t| {\n\t\t/**\n\t\t * @experimental\n\t\t */\n\t\tdb: TDatabase;\n\t}\n\t| Record<never, never>;\n\n// 1. Infer schema\n// 2. Omit keys that we'll manually define (because of generics)\n// 3. Define our own types that have generic constraints\nexport type ActorConfig<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig = Record<never, never>,\n\tTQueues extends QueueSchemaConfig = Record<never, never>,\n> = Omit<\n\tz.infer<typeof ActorConfigSchema>,\n\t| \"actions\"\n\t| \"events\"\n\t| \"queues\"\n\t| \"onCreate\"\n\t| \"onDestroy\"\n\t| \"onWake\"\n\t| \"onSleep\"\n\t| \"run\"\n\t| \"onStateChange\"\n\t| \"onBeforeConnect\"\n\t| \"onConnect\"\n\t| \"onDisconnect\"\n\t| \"onBeforeActionResponse\"\n\t| \"onRequest\"\n\t| \"onWebSocket\"\n\t| \"state\"\n\t| \"createState\"\n\t| \"connState\"\n\t| \"createConnState\"\n\t| \"vars\"\n\t| \"createVars\"\n\t| \"db\"\n> &\n\tBaseActorConfig<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues,\n\t\tActions<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>\n\t> &\n\tCreateState<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> &\n\tCreateConnState<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> &\n\tCreateVars<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> &\n\tActorDatabaseConfig<TDatabase>;\n\n// See description on `ActorConfig`\nexport type ActorConfigInput<\n\tTState = undefined,\n\tTConnParams = undefined,\n\tTConnState = undefined,\n\tTVars = undefined,\n\tTInput = undefined,\n\tTDatabase extends AnyDatabaseProvider = undefined,\n\tTEvents extends EventSchemaConfig = Record<never, never>,\n\tTQueues extends QueueSchemaConfig = Record<never, never>,\n\tTActions extends Actions<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> = Record<never, never>,\n> = {\n\ttypes?: ActorTypes<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase\n\t>;\n} & Omit<\n\tz.input<typeof ActorConfigSchema>,\n\t| \"actions\"\n\t| \"events\"\n\t| \"queues\"\n\t| \"onCreate\"\n\t| \"onDestroy\"\n\t| \"onWake\"\n\t| \"onSleep\"\n\t| \"run\"\n\t| \"onStateChange\"\n\t| \"onBeforeConnect\"\n\t| \"onConnect\"\n\t| \"onDisconnect\"\n\t| \"onBeforeActionResponse\"\n\t| \"onRequest\"\n\t| \"onWebSocket\"\n\t| \"state\"\n\t| \"createState\"\n\t| \"connState\"\n\t| \"createConnState\"\n\t| \"vars\"\n\t| \"createVars\"\n\t| \"db\"\n> &\n\tBaseActorConfig<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues,\n\t\tTActions\n\t> &\n\tCreateState<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> &\n\tCreateConnState<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> &\n\tCreateVars<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> &\n\tActorDatabaseConfig<TDatabase>;\n\n// For testing type definitions:\nexport function test<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig,\n\tTQueues extends QueueSchemaConfig,\n\tTActions extends Actions<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>,\n>(\n\tinput: ActorConfigInput<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues,\n\t\tTActions\n\t>,\n): ActorConfig<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase,\n\tTEvents,\n\tTQueues\n> {\n\tconst config = ActorConfigSchema.parse(input) as ActorConfig<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>;\n\treturn config;\n}\n\n// MARK: Documentation Schema\n// This schema is JSON-serializable for documentation generation.\n// It excludes function types and focuses on the configurable options.\n\nexport const DocActorOptionsSchema = z\n\t.object({\n\t\tname: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\"Display name for the actor in the Inspector UI.\"),\n\t\ticon: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Icon for the actor in the Inspector UI. Can be an emoji (e.g., '🚀') or FontAwesome icon name (e.g., 'rocket').\",\n\t\t\t),\n\t\tcreateVarsTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\"Timeout in ms for createVars handler. Default: 5000\"),\n\t\tcreateConnStateTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Timeout in ms for createConnState handler. Default: 5000\",\n\t\t\t),\n\t\tonConnectTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\"Timeout in ms for onConnect handler. Default: 5000\"),\n\t\tonSleepTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Timeout in ms for onSleep handler. Must be less than ACTOR_STOP_THRESHOLD_MS. Default: 5000\",\n\t\t\t),\n\t\tonDestroyTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\"Timeout in ms for onDestroy handler. Default: 5000\"),\n\t\tstateSaveInterval: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Interval in ms between automatic state saves. Default: 10000\",\n\t\t\t),\n\t\tactionTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\"Timeout in ms for action handlers. Default: 60000\"),\n\t\twaitUntilTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Max time in ms to wait for waitUntil background promises during shutdown. Default: 15000\",\n\t\t\t),\n\t\trunStopTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Max time in ms to wait for run handler to stop during shutdown. Default: 15000\",\n\t\t\t),\n\t\tconnectionLivenessTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Timeout in ms for connection liveness checks. Default: 2500\",\n\t\t\t),\n\t\tconnectionLivenessInterval: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Interval in ms between connection liveness checks. Default: 5000\",\n\t\t\t),\n\t\tnoSleep: z\n\t\t\t.boolean()\n\t\t\t.optional()\n\t\t\t.describe(\"If true, the actor will never sleep. Default: false\"),\n\t\tsleepTimeout: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Time in ms of inactivity before the actor sleeps. Default: 30000\",\n\t\t\t),\n\t\tmaxQueueSize: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Maximum number of queue messages before rejecting new messages. Default: 1000\",\n\t\t\t),\n\t\tmaxQueueMessageSize: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Maximum size of each queue message in bytes. Default: 65536\",\n\t\t\t),\n\t\tcanHibernateWebSocket: z\n\t\t\t.boolean()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Whether WebSockets using onWebSocket can be hibernated. WebSockets using actions/events are hibernatable by default. Default: false\",\n\t\t\t),\n\t})\n\t.describe(\"Actor options for timeouts and behavior configuration.\");\n\nexport const DocActorConfigSchema = z\n\t.object({\n\t\tstate: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Initial state value for the actor. Cannot be used with createState.\",\n\t\t\t),\n\t\tcreateState: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Function to create initial state. Receives context and input. Cannot be used with state.\",\n\t\t\t),\n\t\tconnState: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Initial connection state value. Cannot be used with createConnState.\",\n\t\t\t),\n\t\tcreateConnState: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Function to create connection state. Receives context and connection params. Cannot be used with connState.\",\n\t\t\t),\n\t\tvars: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Initial ephemeral variables value. Cannot be used with createVars.\",\n\t\t\t),\n\t\tcreateVars: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Function to create ephemeral variables. Receives context and driver context. Cannot be used with vars.\",\n\t\t\t),\n\t\tdb: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\"Database provider instance for the actor.\"),\n\t\tonCreate: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Called when the actor is first initialized. Use to initialize state.\",\n\t\t\t),\n\t\tonDestroy: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\"Called when the actor is destroyed.\"),\n\t\tonWake: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Called when the actor wakes up and is ready to receive connections and actions.\",\n\t\t\t),\n\t\tonSleep: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Called when the actor is stopping or sleeping. Use to clean up resources.\",\n\t\t\t),\n\t\trun: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Called after actor starts. Does not block startup. Use for background tasks like queue processing or tick loops. If it exits or throws, the actor crashes.\",\n\t\t\t),\n\t\t\tonStateChange: z\n\t\t\t\t.unknown()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Called when the actor's state changes. State changes within this hook won't trigger recursion.\",\n\t\t\t\t),\n\t\t\tonBeforeConnect: z\n\t\t\t\t.unknown()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Called before a client connects. Throw an error to reject the connection.\",\n\t\t\t\t),\n\t\t\tonConnect: z\n\t\t\t\t.unknown()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Called when a client successfully connects.\"),\n\t\tonDisconnect: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\"Called when a client disconnects.\"),\n\t\tonBeforeActionResponse: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Called before sending an action response. Use to transform output.\",\n\t\t\t),\n\t\tonRequest: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Called for raw HTTP requests to /actors/{name}/http/* endpoints.\",\n\t\t\t),\n\t\tonWebSocket: z\n\t\t\t.unknown()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Called for raw WebSocket connections to /actors/{name}/websocket/* endpoints.\",\n\t\t\t),\n\t\tactions: z\n\t\t\t.record(z.string(), z.unknown())\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Map of action name to handler function. Defaults to an empty object.\",\n\t\t\t),\n\t\tevents: z\n\t\t\t.record(z.string(), z.unknown())\n\t\t\t.optional()\n\t\t\t.describe(\"Map of event names to schemas.\"),\n\t\tqueues: z\n\t\t\t.record(z.string(), z.unknown())\n\t\t\t.optional()\n\t\t\t.describe(\"Map of queue names to schemas.\"),\n\t\toptions: DocActorOptionsSchema.optional(),\n\t})\n\t.describe(\"Actor configuration passed to the actor() function.\");\n","export const KEYS = {\n\tPERSIST_DATA: Uint8Array.from([1]),\n\tCONN_PREFIX: Uint8Array.from([2]), // Prefix for connection keys\n\tINSPECTOR_TOKEN: Uint8Array.from([3]), // Inspector token key\n\tKV: Uint8Array.from([4]), // Prefix for user-facing KV storage\n\tQUEUE_PREFIX: Uint8Array.from([5]), // Prefix for queue storage\n\tWORKFLOW_PREFIX: Uint8Array.from([6]), // Prefix for workflow storage\n\tTRACES_PREFIX: Uint8Array.from([7]), // Prefix for traces storage\n\tSQLITE_PREFIX: Uint8Array.from([8]), // Prefix for SQLite VFS data\n};\n\nexport const STORAGE_VERSION = {\n\tQUEUE: 1,\n\tWORKFLOW: 1,\n\tTRACES: 1,\n\tSQLITE: 1,\n} as const;\n\nconst STORAGE_VERSION_BYTES = {\n\tQUEUE: Uint8Array.from([STORAGE_VERSION.QUEUE]),\n\tWORKFLOW: Uint8Array.from([STORAGE_VERSION.WORKFLOW]),\n\tTRACES: Uint8Array.from([STORAGE_VERSION.TRACES]),\n\tSQLITE: Uint8Array.from([STORAGE_VERSION.SQLITE]),\n} as const;\n\nconst QUEUE_NAMESPACE = {\n\tMETADATA: Uint8Array.from([1]),\n\tMESSAGES: Uint8Array.from([2]),\n} as const;\n\nconst QUEUE_ID_BYTES = 8;\n\nfunction concatPrefix(prefix: Uint8Array, suffix: Uint8Array): Uint8Array {\n\tconst merged = new Uint8Array(prefix.length + suffix.length);\n\tmerged.set(prefix, 0);\n\tmerged.set(suffix, prefix.length);\n\treturn merged;\n}\n\nconst QUEUE_STORAGE_PREFIX = concatPrefix(\n\tKEYS.QUEUE_PREFIX,\n\tSTORAGE_VERSION_BYTES.QUEUE,\n);\nconst QUEUE_METADATA_KEY = concatPrefix(\n\tQUEUE_STORAGE_PREFIX,\n\tQUEUE_NAMESPACE.METADATA,\n);\nconst QUEUE_MESSAGES_PREFIX = concatPrefix(\n\tQUEUE_STORAGE_PREFIX,\n\tQUEUE_NAMESPACE.MESSAGES,\n);\nconst WORKFLOW_STORAGE_PREFIX = concatPrefix(\n\tKEYS.WORKFLOW_PREFIX,\n\tSTORAGE_VERSION_BYTES.WORKFLOW,\n);\nconst TRACES_STORAGE_PREFIX = concatPrefix(\n\tKEYS.TRACES_PREFIX,\n\tSTORAGE_VERSION_BYTES.TRACES,\n);\nconst SQLITE_STORAGE_PREFIX = concatPrefix(\n\tKEYS.SQLITE_PREFIX,\n\tSTORAGE_VERSION_BYTES.SQLITE,\n);\n\n// Helper to create a prefixed key for user-facing KV storage\nexport function makePrefixedKey(key: Uint8Array): Uint8Array {\n\tconst prefixed = new Uint8Array(KEYS.KV.length + key.length);\n\tprefixed.set(KEYS.KV, 0);\n\tprefixed.set(key, KEYS.KV.length);\n\treturn prefixed;\n}\n\n// Helper to remove the prefix from a key\nexport function removePrefixFromKey(prefixedKey: Uint8Array): Uint8Array {\n\treturn prefixedKey.slice(KEYS.KV.length);\n}\n\nexport function makeWorkflowKey(key: Uint8Array): Uint8Array {\n\treturn concatPrefix(WORKFLOW_STORAGE_PREFIX, key);\n}\n\nexport function makeTracesKey(key: Uint8Array): Uint8Array {\n\treturn concatPrefix(TRACES_STORAGE_PREFIX, key);\n}\n\nexport function workflowStoragePrefix(): Uint8Array {\n\treturn Uint8Array.from(WORKFLOW_STORAGE_PREFIX);\n}\n\nexport function tracesStoragePrefix(): Uint8Array {\n\treturn Uint8Array.from(TRACES_STORAGE_PREFIX);\n}\n\nexport function sqliteStoragePrefix(): Uint8Array {\n\treturn Uint8Array.from(SQLITE_STORAGE_PREFIX);\n}\n\nexport function queueStoragePrefix(): Uint8Array {\n\treturn Uint8Array.from(QUEUE_STORAGE_PREFIX);\n}\n\nexport function queueMetadataKey(): Uint8Array {\n\treturn Uint8Array.from(QUEUE_METADATA_KEY);\n}\n\nexport function queueMessagesPrefix(): Uint8Array {\n\treturn Uint8Array.from(QUEUE_MESSAGES_PREFIX);\n}\n\n// Helper to create a connection key\nexport function makeConnKey(connId: string): Uint8Array {\n\tconst encoder = new TextEncoder();\n\tconst connIdBytes = encoder.encode(connId);\n\tconst key = new Uint8Array(KEYS.CONN_PREFIX.length + connIdBytes.length);\n\tkey.set(KEYS.CONN_PREFIX, 0);\n\tkey.set(connIdBytes, KEYS.CONN_PREFIX.length);\n\treturn key;\n}\n\n// Helper to create a queue message key\nexport function makeQueueMessageKey(id: bigint): Uint8Array {\n\tconst key = new Uint8Array(QUEUE_MESSAGES_PREFIX.length + QUEUE_ID_BYTES);\n\tkey.set(QUEUE_MESSAGES_PREFIX, 0);\n\tconst view = new DataView(key.buffer, key.byteOffset, key.byteLength);\n\tview.setBigUint64(QUEUE_MESSAGES_PREFIX.length, id, false);\n\treturn key;\n}\n\n// Helper to decode a queue message key\nexport function decodeQueueMessageKey(key: Uint8Array): bigint {\n\tconst offset = QUEUE_MESSAGES_PREFIX.length;\n\tif (key.length < offset + QUEUE_ID_BYTES) {\n\t\tthrow new Error(\"Queue key is too short\");\n\t}\n\tfor (let i = 0; i < QUEUE_MESSAGES_PREFIX.length; i++) {\n\t\tif (key[i] !== QUEUE_MESSAGES_PREFIX[i]) {\n\t\t\tthrow new Error(\"Queue key has invalid prefix\");\n\t\t}\n\t}\n\tconst view = new DataView(\n\t\tkey.buffer,\n\t\tkey.byteOffset + offset,\n\t\tQUEUE_ID_BYTES,\n\t);\n\treturn view.getBigUint64(0, false);\n}\n","import type { ActorDriver } from \"../driver\";\nimport { makePrefixedKey, removePrefixFromKey } from \"./keys\";\n\n/**\n * User-facing KV storage interface exposed on ActorContext.\n */\ntype KvValueType = \"text\" | \"arrayBuffer\" | \"binary\";\ntype KvKeyType = \"text\" | \"binary\";\ntype KvKey = Uint8Array | string;\n\ntype KvValueTypeMap = {\n\ttext: string;\n\tarrayBuffer: ArrayBuffer;\n\tbinary: Uint8Array;\n};\n\ntype KvKeyTypeMap = {\n\ttext: string;\n\tbinary: Uint8Array;\n};\n\ntype KvValueOptions<T extends KvValueType = \"text\"> = {\n\ttype?: T;\n};\n\ntype KvListOptions<\n\tT extends KvValueType = \"text\",\n\tK extends KvKeyType = \"text\",\n> = KvValueOptions<T> & {\n\tkeyType?: K;\n};\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nfunction encodeKey<K extends KvKeyType = KvKeyType>(\n\tkey: KvKeyTypeMap[K],\n\tkeyType?: K,\n): Uint8Array {\n\tif (key instanceof Uint8Array) {\n\t\treturn key;\n\t}\n\tconst resolvedKeyType = keyType ?? \"text\";\n\tif (resolvedKeyType === \"binary\") {\n\t\tthrow new TypeError(\"Expected a Uint8Array when keyType is binary\");\n\t}\n\treturn textEncoder.encode(key);\n}\n\nfunction decodeKey<K extends KvKeyType = \"text\">(\n\tkey: Uint8Array,\n\tkeyType?: K,\n): KvKeyTypeMap[K] {\n\tconst resolvedKeyType = keyType ?? \"text\";\n\tswitch (resolvedKeyType) {\n\t\tcase \"text\":\n\t\t\treturn textDecoder.decode(key) as KvKeyTypeMap[K];\n\t\tcase \"binary\":\n\t\t\treturn key as KvKeyTypeMap[K];\n\t\tdefault:\n\t\t\tthrow new TypeError(\"Invalid kv key type\");\n\t}\n}\n\nfunction resolveValueType(\n\tvalue: string | Uint8Array | ArrayBuffer,\n): KvValueType {\n\tif (typeof value === \"string\") {\n\t\treturn \"text\";\n\t}\n\tif (value instanceof Uint8Array) {\n\t\treturn \"binary\";\n\t}\n\tif (value instanceof ArrayBuffer) {\n\t\treturn \"arrayBuffer\";\n\t}\n\tthrow new TypeError(\"Invalid kv value\");\n}\n\nfunction encodeValue<T extends KvValueType = KvValueType>(\n\tvalue: KvValueTypeMap[T],\n\toptions?: KvValueOptions<T>,\n): Uint8Array {\n\tconst type =\n\t\toptions?.type ??\n\t\tresolveValueType(value as string | Uint8Array | ArrayBuffer);\n\tswitch (type) {\n\t\tcase \"text\":\n\t\t\tif (typeof value !== \"string\") {\n\t\t\t\tthrow new TypeError(\"Expected a string when type is text\");\n\t\t\t}\n\t\t\treturn textEncoder.encode(value);\n\t\tcase \"arrayBuffer\":\n\t\t\tif (!(value instanceof ArrayBuffer)) {\n\t\t\t\tthrow new TypeError(\"Expected an ArrayBuffer when type is arrayBuffer\");\n\t\t\t}\n\t\t\treturn new Uint8Array(value);\n\t\tcase \"binary\":\n\t\t\tif (!(value instanceof Uint8Array)) {\n\t\t\t\tthrow new TypeError(\"Expected a Uint8Array when type is binary\");\n\t\t\t}\n\t\t\treturn value;\n\t\tdefault:\n\t\t\tthrow new TypeError(\"Invalid kv value type\");\n\t}\n}\n\nfunction decodeValue<T extends KvValueType = \"text\">(\n\tvalue: Uint8Array,\n\toptions?: KvValueOptions<T>,\n): KvValueTypeMap[T] {\n\tconst type = options?.type ?? \"text\";\n\tswitch (type) {\n\t\tcase \"text\":\n\t\t\treturn textDecoder.decode(value) as KvValueTypeMap[T];\n\t\tcase \"arrayBuffer\": {\n\t\t\tconst copy = new Uint8Array(value.byteLength);\n\t\t\tcopy.set(value);\n\t\t\treturn copy.buffer as KvValueTypeMap[T];\n\t\t}\n\t\tcase \"binary\":\n\t\t\treturn value as KvValueTypeMap[T];\n\t\tdefault:\n\t\t\tthrow new TypeError(\"Invalid kv value type\");\n\t}\n}\n\nexport class ActorKv {\n\t#driver: ActorDriver;\n\t#actorId: string;\n\n\tconstructor(driver: ActorDriver, actorId: string) {\n\t\tthis.#driver = driver;\n\t\tthis.#actorId = actorId;\n\t}\n\n\t/**\n\t * Get a single value by key.\n\t */\n\tasync get<T extends KvValueType = \"text\">(\n\t\tkey: KvKey,\n\t\toptions?: KvValueOptions<T>,\n\t): Promise<KvValueTypeMap[T] | null> {\n\t\tconst results = await this.#driver.kvBatchGet(this.#actorId, [\n\t\t\tmakePrefixedKey(encodeKey(key)),\n\t\t]);\n\t\tconst result = results[0];\n\t\tif (!result) {\n\t\t\treturn null;\n\t\t}\n\t\treturn decodeValue(result, options);\n\t}\n\n\t/**\n\t * Get multiple values by keys.\n\t */\n\tasync getBatch<T extends KvValueType = \"text\">(\n\t\tkeys: KvKey[],\n\t\toptions?: KvValueOptions<T>,\n\t): Promise<(KvValueTypeMap[T] | null)[]> {\n\t\tconst prefixedKeys = keys.map((key) =>\n\t\t\tmakePrefixedKey(encodeKey(key)),\n\t\t);\n\t\tconst results = await this.#driver.kvBatchGet(\n\t\t\tthis.#actorId,\n\t\t\tprefixedKeys,\n\t\t);\n\t\treturn results.map((result) =>\n\t\t\tresult ? decodeValue(result, options) : null,\n\t\t);\n\t}\n\n\t/**\n\t * Put a single key-value pair.\n\t */\n\tasync put<T extends KvValueType = KvValueType>(\n\t\tkey: KvKey,\n\t\tvalue: KvValueTypeMap[T],\n\t\toptions?: KvValueOptions<T>,\n\t): Promise<void> {\n\t\tawait this.#driver.kvBatchPut(this.#actorId, [\n\t\t\t[makePrefixedKey(encodeKey(key)), encodeValue(value, options)],\n\t\t]);\n\t}\n\n\t/**\n\t * Put multiple key-value pairs.\n\t */\n\tasync putBatch<T extends KvValueType = KvValueType>(\n\t\tentries: [KvKey, KvValueTypeMap[T]][],\n\t\toptions?: KvValueOptions<T>,\n\t): Promise<void> {\n\t\tconst prefixedEntries: [Uint8Array, Uint8Array][] = entries.map(\n\t\t\t([key, value]) => [\n\t\t\t\tmakePrefixedKey(encodeKey(key)),\n\t\t\t\tencodeValue(value, options),\n\t\t\t],\n\t\t);\n\t\tawait this.#driver.kvBatchPut(this.#actorId, prefixedEntries);\n\t}\n\n\t/**\n\t * Delete a single key.\n\t */\n\tasync delete(key: KvKey): Promise<void> {\n\t\tawait this.#driver.kvBatchDelete(this.#actorId, [\n\t\t\tmakePrefixedKey(encodeKey(key)),\n\t\t]);\n\t}\n\n\t/**\n\t * Delete multiple keys.\n\t */\n\tasync deleteBatch(keys: KvKey[]): Promise<void> {\n\t\tconst prefixedKeys = keys.map((key) =>\n\t\t\tmakePrefixedKey(encodeKey(key)),\n\t\t);\n\t\tawait this.#driver.kvBatchDelete(this.#actorId, prefixedKeys);\n\t}\n\n\t/**\n\t * List all keys with a given prefix.\n\t * Returns key-value pairs where keys have the user prefix removed.\n\t */\n\tasync list<T extends KvValueType = \"text\", K extends KvKeyType = \"text\">(\n\t\tprefix: KvKeyTypeMap[K],\n\t\toptions?: KvListOptions<T, K>,\n\t): Promise<[KvKeyTypeMap[K], KvValueTypeMap[T]][]> {\n\t\tconst prefixedPrefix = makePrefixedKey(\n\t\t\tencodeKey(prefix, options?.keyType),\n\t\t);\n\t\tconst results = await this.#driver.kvListPrefix(\n\t\t\tthis.#actorId,\n\t\t\tprefixedPrefix,\n\t\t);\n\t\treturn results.map(([key, value]) => [\n\t\t\tdecodeKey<K>(removePrefixFromKey(key), options?.keyType),\n\t\t\tdecodeValue<T>(value, options),\n\t\t]);\n\t}\n}\n","import { getLogger } from \"@/common/log\";\n\n/** Prever to use ActorInstance.rlog child logger. This does not provide context in the log, should only be used as a last resort if you cannot pass the actor's child logger. */\nexport function loggerWithoutContext() {\n\treturn getLogger(\"actor-runtime\");\n}\n","import * as errors from \"./errors\";\nimport { loggerWithoutContext } from \"./log\";\n\nexport function assertUnreachable(x: never): never {\n\tloggerWithoutContext().error({\n\t\tmsg: \"unreachable\",\n\t\tvalue: `${x}`,\n\t\tstack: new Error().stack,\n\t});\n\tthrow new errors.Unreachable(x);\n}\n\nexport const throttle = <\n\t// biome-ignore lint/suspicious/noExplicitAny: we want to allow any function\n\tFn extends (...args: any) => any,\n>(\n\tfn: Fn,\n\tdelay: number,\n) => {\n\tlet lastRan = false;\n\tlet lastArgs: Parameters<Fn> | null = null;\n\n\treturn (...args: Parameters<Fn>) => {\n\t\tif (!lastRan) {\n\t\t\tfn.apply(this, args);\n\t\t\tlastRan = true;\n\t\t\tconst timer = () =>\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tlastRan = false;\n\t\t\t\t\tif (lastArgs) {\n\t\t\t\t\t\tfn.apply(this, lastArgs);\n\t\t\t\t\t\tlastRan = true;\n\t\t\t\t\t\tlastArgs = null;\n\t\t\t\t\t\ttimer();\n\t\t\t\t\t}\n\t\t\t\t}, delay);\n\t\t\ttimer();\n\t\t} else lastArgs = args;\n\t};\n};\n\nexport class DeadlineError extends Error {\n\tconstructor() {\n\t\tsuper(\"Promise did not complete before deadline.\");\n\t}\n}\n\nexport function deadline<T>(promise: Promise<T>, timeout: number): Promise<T> {\n\tconst controller = new AbortController();\n\tconst signal = controller.signal;\n\n\t// Set a timeout to abort the operation\n\tconst timeoutId = setTimeout(() => controller.abort(), timeout);\n\n\treturn Promise.race<T>([\n\t\tpromise,\n\t\tnew Promise<T>((_, reject) => {\n\t\t\tsignal.addEventListener(\"abort\", () => reject(new DeadlineError()));\n\t\t}),\n\t]).finally(() => {\n\t\tclearTimeout(timeoutId);\n\t});\n}\n\nexport class Lock<T> {\n\tprivate _locked = false;\n\tprivate _waiting: Array<() => void> = [];\n\n\tconstructor(private _value: T) {}\n\n\tasync lock(fn: (value: T) => Promise<void>): Promise<void> {\n\t\tif (this._locked) {\n\t\t\tawait new Promise<void>((resolve) => this._waiting.push(resolve));\n\t\t}\n\t\tthis._locked = true;\n\n\t\ttry {\n\t\t\tawait fn(this._value);\n\t\t} finally {\n\t\t\tthis._locked = false;\n\t\t\tconst next = this._waiting.shift();\n\t\t\tif (next) next();\n\t\t}\n\t}\n}\n\nexport interface JoinedAbortSignal {\n\tsignal?: AbortSignal;\n\tcleanup: () => void;\n}\n\nexport function joinAbortSignals(\n\t...signals: Array<AbortSignal | undefined>\n): JoinedAbortSignal {\n\tconst activeSignals = signals.filter(\n\t\t(signal): signal is AbortSignal => signal !== undefined,\n\t);\n\tif (activeSignals.length === 0) {\n\t\treturn { signal: undefined, cleanup: () => {} };\n\t}\n\tif (activeSignals.length === 1) {\n\t\treturn { signal: activeSignals[0], cleanup: () => {} };\n\t}\n\n\tconst controller = new AbortController();\n\tif (activeSignals.some((signal) => signal.aborted)) {\n\t\tcontroller.abort();\n\t\treturn { signal: controller.signal, cleanup: () => {} };\n\t}\n\n\tconst cleanup = () => {\n\t\tfor (const signal of activeSignals) {\n\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t}\n\t};\n\tconst onAbort = () => {\n\t\tcontroller.abort();\n\t\tcleanup();\n\t};\n\tfor (const signal of activeSignals) {\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t}\n\n\treturn { signal: controller.signal, cleanup };\n}\n\nexport function generateSecureToken(length = 32) {\n\tconst array = new Uint8Array(length);\n\tcrypto.getRandomValues(array);\n\t// Replace base64 chars that are not URL safe with URL-safe chars and strip padding\n\treturn btoa(String.fromCharCode(...array))\n\t\t.replace(/\\+/g, \"-\")\n\t\t.replace(/\\//g, \"_\")\n\t\t.replace(/=/g, \"\");\n}\n\n/**\n * Checks if a path is an actor state path within the persisted actor data.\n */\nexport function isStatePath(path: string): boolean {\n\treturn path === \"state\" || path.startsWith(\"state.\");\n}\n\n/**\n * Checks if a path is a connection state path within the persisted actor data.\n */\nexport function isConnStatePath(path: string): boolean {\n\tif (!path.startsWith(\"connections.\")) {\n\t\treturn false;\n\t}\n\tconst stateIndex = path.indexOf(\".state\", 12); // Start after \"connections.\"\n\tif (stateIndex === -1) {\n\t\treturn false;\n\t}\n\tconst afterState = stateIndex + 6; // \".state\".length = 6\n\t// Check if \".state\" is followed by end of string or \".\"\n\treturn path.length === afterState || path[afterState] === \".\";\n}\n","import * as errors from \"../errors\";\nimport type { AnyDatabaseProvider } from \"../database\";\nimport type {\n\tEventSchemaConfig,\n\tInferQueueCompleteMap,\n\tInferSchemaMap,\n\tQueueSchemaConfig,\n} from \"../schema\";\nimport { joinAbortSignals } from \"../utils\";\nimport type { QueueManager, QueueMessage } from \"./queue-manager\";\n\nexport type QueueMessageOf<Name extends string, Body> = Omit<\n\tQueueMessage,\n\t\"name\" | \"body\"\n> & {\n\tname: Name;\n\tbody: Body;\n};\n\nexport type QueueName<TQueues extends QueueSchemaConfig> = keyof TQueues & string;\nexport type QueueFilterName<TQueues extends QueueSchemaConfig> =\n\tkeyof TQueues extends never ? string : QueueName<TQueues>;\n\ntype QueueMessageForName<\n\tTQueues extends QueueSchemaConfig,\n\tTName extends QueueFilterName<TQueues>,\n> = keyof TQueues extends never\n\t? QueueMessage\n\t: TName extends QueueName<TQueues>\n\t\t? QueueMessageOf<TName, InferSchemaMap<TQueues>[TName]>\n\t\t: never;\n\ntype QueueCompleteArgs<T> = undefined extends T\n\t? [response?: T]\n\t: [response: T];\n\ntype QueueCompleteArgsForName<\n\tTQueues extends QueueSchemaConfig,\n\tTName extends QueueFilterName<TQueues>,\n> = keyof TQueues extends never\n\t? [response?: unknown]\n\t: TName extends QueueName<TQueues>\n\t\t? [InferQueueCompleteMap<TQueues>[TName]] extends [never]\n\t\t\t? [response?: unknown]\n\t\t\t: QueueCompleteArgs<InferQueueCompleteMap<TQueues>[TName]>\n\t\t: [response?: unknown];\n\ntype QueueCompletableMessageForName<\n\tTQueues extends QueueSchemaConfig,\n\tTName extends QueueFilterName<TQueues>,\n> = QueueMessageForName<TQueues, TName> & {\n\tcomplete(\n\t\t...args: QueueCompleteArgsForName<TQueues, TName>\n\t): Promise<void>;\n};\n\nexport type QueueResultMessageForName<\n\tTQueues extends QueueSchemaConfig,\n\tTName extends QueueFilterName<TQueues>,\n\tTCompletable extends boolean,\n> = TCompletable extends true\n\t? QueueCompletableMessageForName<TQueues, TName>\n\t: QueueMessageForName<TQueues, TName>;\n\n/** Options for receiving queue messages. */\nexport interface QueueNextOptions<\n\tTName extends string = string,\n\tTCompletable extends boolean = boolean,\n> {\n\t/** Queue names to receive from. If omitted, reads from all queue names. */\n\tnames?: readonly TName[];\n\t/** Timeout in milliseconds. Omit to wait indefinitely. */\n\ttimeout?: number;\n\t/** Optional abort signal for this receive call. */\n\tsignal?: AbortSignal;\n\t/** Whether to return completable messages. */\n\tcompletable?: TCompletable;\n}\n\n/** Options for receiving queue message batches. */\nexport interface QueueNextBatchOptions<\n\tTName extends string = string,\n\tTCompletable extends boolean = boolean,\n> {\n\t/** Queue names to receive from. If omitted, reads from all queue names. */\n\tnames?: readonly TName[];\n\t/** Maximum number of messages to receive. Defaults to 1. */\n\tcount?: number;\n\t/** Timeout in milliseconds. Omit to wait indefinitely. */\n\ttimeout?: number;\n\t/** Optional abort signal for this receive call. */\n\tsignal?: AbortSignal;\n\t/** Whether to return completable messages. */\n\tcompletable?: TCompletable;\n}\n\n/** Options for non-blocking queue reads. */\nexport interface QueueTryNextOptions<\n\tTName extends string = string,\n\tTCompletable extends boolean = boolean,\n> {\n\t/** Queue names to receive from. If omitted, reads from all queue names. */\n\tnames?: readonly TName[];\n\t/** Whether to return completable messages. */\n\tcompletable?: TCompletable;\n}\n\n/** Options for non-blocking queue batch reads. */\nexport interface QueueTryNextBatchOptions<\n\tTName extends string = string,\n\tTCompletable extends boolean = boolean,\n> {\n\t/** Queue names to receive from. If omitted, reads from all queue names. */\n\tnames?: readonly TName[];\n\t/** Maximum number of messages to receive. Defaults to 1. */\n\tcount?: number;\n\t/** Whether to return completable messages. */\n\tcompletable?: TCompletable;\n}\n\n/** Options for queue async iteration. */\nexport interface QueueIterOptions<\n\tTName extends string = string,\n\tTCompletable extends boolean = boolean,\n> {\n\t/** Queue names to receive from. If omitted, reads from all queue names. */\n\tnames?: readonly TName[];\n\t/** Optional abort signal for this iterator. */\n\tsignal?: AbortSignal;\n\t/** Whether to return completable messages. */\n\tcompletable?: TCompletable;\n}\n\n/** User-facing queue interface exposed on ActorContext. */\nexport class ActorQueue<\n\tS,\n\tCP,\n\tCS,\n\tV,\n\tI,\n\tDB extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig = Record<never, never>,\n\tTQueues extends QueueSchemaConfig = Record<never, never>,\n> {\n\t#queueManager: QueueManager<S, CP, CS, V, I, DB, TEvents, TQueues>;\n\t#abortSignal: AbortSignal;\n\t#pendingCompletableMessageIds = new Set<string>();\n\n\tconstructor(\n\t\tqueueManager: QueueManager<S, CP, CS, V, I, DB, TEvents, TQueues>,\n\t\tabortSignal: AbortSignal,\n\t) {\n\t\tthis.#queueManager = queueManager;\n\t\tthis.#abortSignal = abortSignal;\n\t}\n\n\tasync next<\n\t\tconst TName extends QueueFilterName<TQueues>,\n\t\tconst TCompletable extends boolean = false,\n\t>(\n\t\topts?: QueueNextOptions<TName, TCompletable>,\n\t): Promise<QueueResultMessageForName<TQueues, TName, TCompletable> | undefined> {\n\t\tconst resolvedOpts = (opts ?? {}) as QueueNextOptions<\n\t\t\tTName,\n\t\t\tTCompletable\n\t\t>;\n\t\tconst messages = await this.nextBatch<TName, TCompletable>({\n\t\t\t...(resolvedOpts as QueueNextBatchOptions<TName, TCompletable>),\n\t\t\tcount: 1,\n\t\t});\n\t\treturn messages[0];\n\t}\n\n\tasync nextBatch<\n\t\tconst TName extends QueueFilterName<TQueues>,\n\t\tconst TCompletable extends boolean = false,\n\t>(\n\t\topts?: QueueNextBatchOptions<TName, TCompletable>,\n\t): Promise<Array<QueueResultMessageForName<TQueues, TName, TCompletable>>> {\n\t\tconst resolvedOpts = (opts ?? {}) as QueueNextBatchOptions<\n\t\t\tTName,\n\t\t\tTCompletable\n\t\t>;\n\t\tconst completable = resolvedOpts.completable === true;\n\n\t\tif (this.#pendingCompletableMessageIds.size > 0) {\n\t\t\tthrow new errors.QueuePreviousMessageNotCompleted();\n\t\t}\n\n\t\tconst names = this.#normalizeNames(resolvedOpts.names);\n\t\tconst count = Math.max(1, resolvedOpts.count ?? 1);\n\t\tconst { signal, cleanup } = joinAbortSignals(\n\t\t\tthis.#abortSignal,\n\t\t\tresolvedOpts.signal,\n\t\t);\n\t\tconst messages = await this.#queueManager\n\t\t\t.receive(\n\t\t\t\tnames,\n\t\t\t\tcount,\n\t\t\t\tresolvedOpts.timeout,\n\t\t\t\tsignal,\n\t\t\t\tcompletable,\n\t\t\t)\n\t\t\t.finally(cleanup);\n\t\tif (!completable) {\n\t\t\treturn messages as Array<\n\t\t\t\tQueueResultMessageForName<TQueues, TName, TCompletable>\n\t\t\t>;\n\t\t}\n\t\treturn messages.map((message) => this.#makeCompletableMessage(message)) as unknown as Array<\n\t\t\tQueueResultMessageForName<TQueues, TName, TCompletable>\n\t\t>;\n\t}\n\n\tasync tryNext<\n\t\tconst TName extends QueueFilterName<TQueues>,\n\t\tconst TCompletable extends boolean = false,\n\t>(\n\t\topts?: QueueTryNextOptions<TName, TCompletable>,\n\t): Promise<QueueResultMessageForName<TQueues, TName, TCompletable> | undefined> {\n\t\tconst resolvedOpts = (opts ?? {}) as QueueTryNextOptions<\n\t\t\tTName,\n\t\t\tTCompletable\n\t\t>;\n\t\tconst messages = await this.tryNextBatch<TName, TCompletable>({\n\t\t\t...(resolvedOpts as QueueTryNextBatchOptions<TName, TCompletable>),\n\t\t\tcount: 1,\n\t\t});\n\t\treturn messages[0];\n\t}\n\n\tasync tryNextBatch<\n\t\tconst TName extends QueueFilterName<TQueues>,\n\t\tconst TCompletable extends boolean = false,\n\t>(\n\t\topts?: QueueTryNextBatchOptions<TName, TCompletable>,\n\t): Promise<Array<QueueResultMessageForName<TQueues, TName, TCompletable>>> {\n\t\tconst resolvedOpts = (opts ?? {}) as QueueTryNextBatchOptions<\n\t\t\tTName,\n\t\t\tTCompletable\n\t\t>;\n\t\tif (resolvedOpts.completable === true) {\n\t\t\treturn (await this.nextBatch<TName, true>({\n\t\t\t\tnames: resolvedOpts.names,\n\t\t\t\tcount: resolvedOpts.count,\n\t\t\t\ttimeout: 0,\n\t\t\t\tcompletable: true,\n\t\t\t})) as Array<QueueResultMessageForName<TQueues, TName, TCompletable>>;\n\t\t}\n\t\treturn (await this.nextBatch<TName, false>({\n\t\t\tnames: resolvedOpts.names,\n\t\t\tcount: resolvedOpts.count,\n\t\t\ttimeout: 0,\n\t\t})) as Array<QueueResultMessageForName<TQueues, TName, TCompletable>>;\n\t}\n\n\tasync *iter<\n\t\tconst TName extends QueueFilterName<TQueues>,\n\t\tconst TCompletable extends boolean = false,\n\t>(\n\t\topts?: QueueIterOptions<TName, TCompletable>,\n\t): AsyncIterableIterator<\n\t\tQueueResultMessageForName<TQueues, TName, TCompletable>\n\t> {\n\t\tconst resolvedOpts = (opts ?? {}) as QueueIterOptions<\n\t\t\tTName,\n\t\t\tTCompletable\n\t\t>;\n\t\twhile (!this.#abortSignal.aborted) {\n\t\t\ttry {\n\t\t\t\tconst message = resolvedOpts.completable === true\n\t\t\t\t\t? await this.next<TName, true>({\n\t\t\t\t\t\t\tnames: resolvedOpts.names,\n\t\t\t\t\t\t\tsignal: resolvedOpts.signal,\n\t\t\t\t\t\t\tcompletable: true,\n\t\t\t\t\t\t})\n\t\t\t\t\t: await this.next<TName, false>({\n\t\t\t\t\t\t\tnames: resolvedOpts.names,\n\t\t\t\t\t\t\tsignal: resolvedOpts.signal,\n\t\t\t\t\t\t});\n\t\t\t\tif (!message) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tyield message as QueueResultMessageForName<\n\t\t\t\t\tTQueues,\n\t\t\t\t\tTName,\n\t\t\t\t\tTCompletable\n\t\t\t\t>;\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof errors.ActorAborted) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Sends a message to the specified queue. */\n\tsend<K extends keyof TQueues & string>(\n\t\tname: K,\n\t\tbody: InferSchemaMap<TQueues>[K],\n\t): Promise<QueueMessage>;\n\tsend(\n\t\tname: keyof TQueues extends never ? string : never,\n\t\tbody: unknown,\n\t): Promise<QueueMessage>;\n\tasync send(name: string, body: unknown): Promise<QueueMessage> {\n\t\treturn await this.#queueManager.enqueue(name, body);\n\t}\n\n\t#normalizeNames(names: readonly string[] | undefined): string[] | undefined {\n\t\tif (!names || names.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn [...new Set(names)];\n\t}\n\n\t#makeCompletableMessage(\n\t\tmessage: QueueMessage,\n\t): QueueMessage & {\n\t\tcomplete: (response?: unknown) => Promise<void>;\n\t} {\n\t\tconst messageId = message.id.toString();\n\t\tthis.#pendingCompletableMessageIds.add(messageId);\n\n\t\tlet completed = false;\n\t\tconst completableMessage = {\n\t\t\t...message,\n\t\t\tcomplete: async (response?: unknown) => {\n\t\t\t\tif (completed) {\n\t\t\t\t\tthrow new errors.QueueAlreadyCompleted();\n\t\t\t\t}\n\t\t\t\tcompleted = true;\n\t\t\t\ttry {\n\t\t\t\t\tawait this.#queueManager.completeMessage(message, response);\n\t\t\t\t\tthis.#pendingCompletableMessageIds.delete(messageId);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\treturn completableMessage;\n\t}\n}\n","import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { Unsupported } from \"./errors\";\n\nexport type SchemaHookResult = boolean | Promise<boolean>;\n\ntype SchemaHook<TContext = any> = (ctx: TContext) => SchemaHookResult;\n\nexport interface EventTypeToken<T, TContext = any> {\n\treadonly _eventType?: T;\n\treadonly canSubscribe?: SchemaHook<TContext>;\n\treadonly schema?: PrimitiveSchema;\n}\n\nexport interface QueueTypeToken<\n\tTMessage,\n\tTComplete = never,\n\tTContext = any,\n> {\n\treadonly _queueMessage?: TMessage;\n\treadonly _queueComplete?: TComplete;\n\treadonly canPublish?: SchemaHook<TContext>;\n\treadonly message?: PrimitiveSchema;\n\treadonly complete?: PrimitiveSchema;\n}\n\n/** @deprecated Use `event<T>()`. */\nexport type Type<T> = EventTypeToken<T, any>;\n\ninterface EventOptions<TContext = any> {\n\tcanSubscribe?: SchemaHook<TContext>;\n\tschema?: PrimitiveSchema;\n}\n\ninterface QueueOptions<TContext = any> {\n\tcanPublish?: SchemaHook<TContext>;\n\tmessage?: PrimitiveSchema;\n\tcomplete?: PrimitiveSchema;\n}\n\nexport function event<T, TContext = any>(\n\toptions?: EventOptions<TContext>,\n): EventTypeToken<T, TContext> {\n\treturn (options ?? {}) as EventTypeToken<T, TContext>;\n}\n\nexport function queue<TMessage, TComplete = never, TContext = any>(\n\toptions?: QueueOptions<TContext>,\n): QueueTypeToken<\n\tTMessage,\n\tTComplete,\n\tTContext\n> {\n\treturn (options ?? {}) as QueueTypeToken<TMessage, TComplete, TContext>;\n}\n\nexport type PrimitiveSchema = StandardSchemaV1 | EventTypeToken<unknown, any>;\n\nexport interface EventSchemaDefinition<TContext = any> {\n\tschema: PrimitiveSchema;\n\tcanSubscribe?: SchemaHook<TContext>;\n}\n\nexport interface QueueSchemaDefinition<TContext = any> {\n\tmessage: PrimitiveSchema;\n\tcomplete?: PrimitiveSchema;\n\tcanPublish?: SchemaHook<TContext>;\n}\n\nexport type EventSchema<TContext = any> =\n\t| PrimitiveSchema\n\t| EventSchemaDefinition<TContext>;\nexport type QueueSchema =\n\t| PrimitiveSchema\n\t| QueueSchemaDefinition<any>\n\t| QueueTypeToken<unknown, unknown, any>;\nexport type EventSchemaConfig<TContext = any> = Record<\n\tstring,\n\tEventSchema<TContext>\n>;\nexport type QueueSchemaConfig<TContext = any> = Record<string, QueueSchema>;\nexport type AnySchemaConfig = EventSchemaConfig | QueueSchemaConfig;\n\n/** @deprecated Use `EventSchema` or `QueueSchema`. */\nexport type Schema = QueueSchema;\n/** @deprecated Use `EventSchemaConfig` or `QueueSchemaConfig`. */\nexport type SchemaConfig = QueueSchemaConfig;\n\nexport type InferSchema<T> =\n\tT extends QueueSchemaDefinition<any>\n\t\t\t? InferSchema<T[\"message\"]>\n\t\t\t: T extends QueueTypeToken<infer M, unknown, any>\n\t\t\t? M\n\t\t\t: T extends EventSchemaDefinition<any>\n\t\t\t? InferSchema<T[\"schema\"]>\n\t\t\t: T extends StandardSchemaV1<any, infer O>\n\t\t\t? O\n\t\t\t: T extends EventTypeToken<infer R, any>\n\t\t\t\t? R\n\t\t\t\t: never;\n\nexport type InferSchemaMap<T extends Record<string, unknown>> = {\n\t[K in keyof T]: InferSchema<T[K]>;\n};\n\nexport type InferQueueComplete<T> =\n\tT extends QueueTypeToken<unknown, infer C, any>\n\t\t\t? [C] extends [never]\n\t\t\t\t? never\n\t\t\t\t: C\n\t\t\t: T extends QueueSchemaDefinition<any>\n\t\t\t? T[\"complete\"] extends PrimitiveSchema\n\t\t\t\t? InferSchema<T[\"complete\"]>\n\t\t\t\t: never\n\t\t\t: never;\n\nexport type InferQueueCompleteMap<T extends QueueSchemaConfig> = {\n\t[K in keyof T]: InferQueueComplete<T[K]>;\n};\n\nexport type InferEventArgs<T> = T extends readonly unknown[]\n\t? number extends T[\"length\"]\n\t\t? [T]\n\t\t: T\n\t: [T];\n\nexport type ValidationResult<T> =\n\t| { success: true; data: T }\n\t| { success: false; issues: unknown[] };\n\nexport function isStandardSchema(value: unknown): value is StandardSchemaV1 {\n\treturn typeof value === \"object\" && value !== null && \"~standard\" in value;\n}\n\nexport function isQueueSchemaDefinition(\n\tvalue: unknown,\n): value is QueueSchemaDefinition<any> {\n\tif (isEventSchemaDefinition(value)) {\n\t\treturn false;\n\t}\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"message\" in value &&\n\t\t(value as { message?: unknown }).message !== undefined\n\t);\n}\n\nexport function isEventSchemaDefinition(\n\tvalue: unknown,\n): value is EventSchemaDefinition<any> {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"schema\" in value &&\n\t\t(value as { schema?: unknown }).schema !== undefined\n\t);\n}\n\nexport function hasSchemaConfigKey<T extends AnySchemaConfig>(\n\tschemas: T | undefined,\n\tkey: string,\n): boolean {\n\tif (!schemas) {\n\t\treturn false;\n\t}\n\treturn Object.prototype.hasOwnProperty.call(schemas, key);\n}\n\nexport function getEventCanSubscribe<TContext = any>(\n\tschemas: EventSchemaConfig<TContext> | undefined,\n\tkey: string,\n): SchemaHook<TContext> | undefined {\n\tconst schema = schemas?.[key];\n\tif (!schema || isStandardSchema(schema)) {\n\t\treturn undefined;\n\t}\n\n\tconst maybeCanSubscribe = (schema as { canSubscribe?: unknown })\n\t\t.canSubscribe;\n\treturn typeof maybeCanSubscribe === \"function\"\n\t\t? (maybeCanSubscribe as SchemaHook<TContext>)\n\t\t: undefined;\n}\n\nexport function getQueueCanPublish<TContext = any>(\n\tschemas: QueueSchemaConfig | undefined,\n\tkey: string,\n): SchemaHook<TContext> | undefined {\n\tconst schema = schemas?.[key];\n\tif (!schema || isStandardSchema(schema)) {\n\t\treturn undefined;\n\t}\n\n\tconst maybeCanPublish = (schema as { canPublish?: unknown }).canPublish;\n\treturn typeof maybeCanPublish === \"function\"\n\t\t? (maybeCanPublish as SchemaHook<TContext>)\n\t\t: undefined;\n}\n\nfunction getValidationSchema(\n\tschema: QueueSchema | EventSchema | undefined,\n): QueueSchema | EventSchema | undefined {\n\tif (!schema) {\n\t\treturn undefined;\n\t}\n\tif (isEventSchemaDefinition(schema)) {\n\t\treturn schema.schema;\n\t}\n\tif (isQueueSchemaDefinition(schema)) {\n\t\treturn schema.message;\n\t}\n\tif (\n\t\ttypeof schema === \"object\" &&\n\t\tschema !== null &&\n\t\t\"schema\" in schema &&\n\t\t(schema as { schema?: unknown }).schema !== undefined\n\t) {\n\t\treturn (schema as { schema: QueueSchema | EventSchema }).schema;\n\t}\n\tif (\n\t\ttypeof schema === \"object\" &&\n\t\tschema !== null &&\n\t\t\"message\" in schema &&\n\t\t(schema as { message?: unknown }).message !== undefined\n\t) {\n\t\treturn (schema as { message: QueueSchema | EventSchema }).message;\n\t}\n\treturn schema;\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"then\" in value &&\n\t\ttypeof (value as { then?: unknown }).then === \"function\"\n\t);\n}\n\nexport async function validateSchema<T extends AnySchemaConfig>(\n\tschemas: T | undefined,\n\tkey: keyof T & string,\n\tdata: unknown,\n): Promise<ValidationResult<InferSchemaMap<T>[typeof key]>> {\n\tconst schema = getValidationSchema(schemas?.[key]);\n\n\tif (!schema) {\n\t\treturn { success: true, data: data as InferSchemaMap<T>[typeof key] };\n\t}\n\n\tif (isStandardSchema(schema)) {\n\t\tconst result = await schema[\"~standard\"].validate(data);\n\t\tif (result.issues) {\n\t\t\treturn { success: false, issues: [...result.issues] };\n\t\t}\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tdata: result.value as InferSchemaMap<T>[typeof key],\n\t\t};\n\t}\n\n\treturn { success: true, data: data as InferSchemaMap<T>[typeof key] };\n}\n\nexport function validateSchemaSync<T extends AnySchemaConfig>(\n\tschemas: T | undefined,\n\tkey: keyof T & string,\n\tdata: unknown,\n): ValidationResult<InferSchemaMap<T>[typeof key]> {\n\tconst schema = getValidationSchema(schemas?.[key]);\n\n\tif (!schema) {\n\t\treturn { success: true, data: data as InferSchemaMap<T>[typeof key] };\n\t}\n\n\tif (isStandardSchema(schema)) {\n\t\tconst result = schema[\"~standard\"].validate(data);\n\t\tif (isPromiseLike(result)) {\n\t\t\tthrow new Unsupported(\"async schema validation\");\n\t\t}\n\t\tif (result.issues) {\n\t\t\treturn { success: false, issues: [...result.issues] };\n\t\t}\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tdata: result.value as InferSchemaMap<T>[typeof key],\n\t\t};\n\t}\n\n\treturn { success: true, data: data as InferSchemaMap<T>[typeof key] };\n}\n","import type { ActorKey } from \"@/actor/mod\";\nimport type { Client } from \"@/client/client\";\nimport type { Logger } from \"@/common/log\";\nimport type { Registry } from \"@/registry\";\nimport type { Conn, ConnId } from \"../../conn/mod\";\nimport type { AnyDatabaseProvider, InferDatabaseClient } from \"../../database\";\nimport type { ActorDefinition, AnyActorDefinition } from \"../../definition\";\nimport * as errors from \"../../errors\";\nimport { ActorKv } from \"../../instance/kv\";\nimport type {\n\tActorInstance,\n\tAnyActorInstance,\n\tSaveStateOptions,\n} from \"../../instance/mod\";\nimport { ActorQueue } from \"../../instance/queue\";\nimport type { Schedule } from \"../../schedule\";\nimport {\n\ttype EventSchemaConfig,\n\ttype InferEventArgs,\n\ttype InferSchemaMap,\n\ttype QueueSchemaConfig,\n\thasSchemaConfigKey,\n\tvalidateSchemaSync,\n} from \"../../schema\";\n\nexport const ACTOR_CONTEXT_INTERNAL_SYMBOL = Symbol.for(\n\t\"rivetkit.actorContextInternal\",\n);\n\n/**\n * ActorContext class that provides access to actor methods and state\n */\nexport class ActorContext<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase extends AnyDatabaseProvider,\n\tTEvents extends EventSchemaConfig = Record<never, never>,\n\tTQueues extends QueueSchemaConfig = Record<never, never>,\n> {\n\t[ACTOR_CONTEXT_INTERNAL_SYMBOL]!: AnyActorInstance;\n\t#actor: ActorInstance<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t>;\n\t#kv: ActorKv | undefined;\n\t#queue:\n\t\t| ActorQueue<\n\t\t\t\tTState,\n\t\t\t\tTConnParams,\n\t\t\t\tTConnState,\n\t\t\t\tTVars,\n\t\t\t\tTInput,\n\t\t\t\tTDatabase,\n\t\t\t\tTEvents,\n\t\t\t\tTQueues\n\t\t >\n\t\t| undefined;\n\n\tconstructor(\n\t\tactor: ActorInstance<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>,\n\t) {\n\t\tthis.#actor = actor;\n\t\tthis[ACTOR_CONTEXT_INTERNAL_SYMBOL] = actor as AnyActorInstance;\n\t}\n\n\t/**\n\t * Gets the KV storage interface.\n\t */\n\tget kv(): ActorKv {\n\t\tif (!this.#kv) {\n\t\t\tthis.#kv = new ActorKv(this.#actor.driver, this.#actor.id);\n\t\t}\n\t\treturn this.#kv;\n\t}\n\n\t/**\n\t * Get the actor state\n\t *\n\t * @remarks\n\t * This property is not available in `createState` since the state hasn't been created yet.\n\t */\n\tget state(): TState extends never ? never : TState {\n\t\treturn this.#actor.state as TState extends never ? never : TState;\n\t}\n\n\t/**\n\t * Get the actor variables\n\t *\n\t * @remarks\n\t * This property is not available in `createVars` since the variables haven't been created yet.\n\t * Variables are only available if you define `vars` or `createVars` in your actor config.\n\t */\n\tget vars(): TVars extends never ? never : TVars {\n\t\treturn this.#actor.vars as TVars extends never ? never : TVars;\n\t}\n\n\t/**\n\t * Broadcasts an event to all connected clients.\n\t * @param name - The name of the event.\n\t * @param args - The arguments to send with the event.\n\t */\n\tbroadcast<K extends keyof TEvents & string>(\n\t\tname: K,\n\t\t...args: InferEventArgs<InferSchemaMap<TEvents>[K]>\n\t): void;\n\tbroadcast(\n\t\tname: keyof TEvents extends never ? string : never,\n\t\t...args: Array<unknown>\n\t): void;\n\tbroadcast(name: string, ...args: Array<unknown>): void {\n\t\tif (\n\t\t\tthis.#actor.config.events !== undefined &&\n\t\t\t!hasSchemaConfigKey(this.#actor.config.events, name)\n\t\t) {\n\t\t\tthis.#actor.rLog.warn({\n\t\t\t\tmsg: \"broadcasting event not defined in actor events config\",\n\t\t\t\teventName: name,\n\t\t\t});\n\t\t}\n\n\t\tconst payload = args.length === 1 ? args[0] : args;\n\t\tconst result = validateSchemaSync(\n\t\t\tthis.#actor.config.events,\n\t\t\tname as keyof TEvents & string,\n\t\t\tpayload,\n\t\t);\n\t\tif (!result.success) {\n\t\t\tthrow new errors.EventPayloadInvalid(name, result.issues);\n\t\t}\n\t\tif (args.length === 1) {\n\t\t\tthis.#actor.eventManager.broadcast(name, result.data);\n\t\t\treturn;\n\t\t}\n\t\tif (Array.isArray(result.data)) {\n\t\t\tthis.#actor.eventManager.broadcast(\n\t\t\t\tname,\n\t\t\t\t...(result.data as unknown[]),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tthis.#actor.eventManager.broadcast(name, ...args);\n\t}\n\n\t/**\n\t * Gets the logger instance.\n\t */\n\tget log(): Logger {\n\t\treturn this.#actor.log;\n\t}\n\n\t/**\n\t * Access to queue receive helpers.\n\t */\n\tget queue(): ActorQueue<\n\t\tTState,\n\t\tTConnParams,\n\t\tTConnState,\n\t\tTVars,\n\t\tTInput,\n\t\tTDatabase,\n\t\tTEvents,\n\t\tTQueues\n\t> {\n\t\tif (!this.#queue) {\n\t\t\tthis.#queue = new ActorQueue(\n\t\t\t\tthis.#actor.queueManager,\n\t\t\t\tthis.#actor.abortSignal,\n\t\t\t);\n\t\t}\n\t\treturn this.#queue;\n\t}\n\n\t/**\n\t * Gets actor ID.\n\t */\n\tget actorId(): string {\n\t\treturn this.#actor.id;\n\t}\n\n\t/**\n\t * Gets the actor name.\n\t */\n\tget name(): string {\n\t\treturn this.#actor.name;\n\t}\n\n\t/**\n\t * Gets the actor key.\n\t */\n\tget key(): ActorKey {\n\t\treturn this.#actor.key;\n\t}\n\n\t/**\n\t * Gets the region.\n\t */\n\tget region(): string {\n\t\treturn this.#actor.region;\n\t}\n\n\t/**\n\t * Gets the scheduler.\n\t */\n\tget schedule(): Schedule {\n\t\treturn this.#actor.schedule;\n\t}\n\n\t/**\n\t * Gets the map of connections.\n\t */\n\tget conns(): Map<\n\t\tConnId,\n\t\tConn<\n\t\t\tTState,\n\t\t\tTConnParams,\n\t\t\tTConnState,\n\t\t\tTVars,\n\t\t\tTInput,\n\t\t\tTDatabase,\n\t\t\tTEvents,\n\t\t\tTQueues\n\t\t>\n\t> {\n\t\treturn this.#actor.conns;\n\t}\n\n\t/**\n\t * Returns the client for the given registry.\n\t */\n\tclient<R extends Registry<any>>(): Client<R> {\n\t\treturn this.#actor.inlineClient as Client<R>;\n\t}\n\n\t/**\n\t * Gets the database.\n\t *\n\t * @experimental\n\t * @remarks\n\t * This property is only available if you define a `db` provider in your actor config.\n\t * @throws {DatabaseNotEnabled} If the database is not enabled.\n\t */\n\tget db(): TDatabase extends never ? never : InferDatabaseClient<TDatabase> {\n\t\treturn this.#actor.db as TDatabase extends never\n\t\t\t? never\n\t\t\t: InferDatabaseClient<TDatabase>;\n\t}\n\n\t/**\n\t * Forces the state to get saved.\n\t *\n\t * @param opts - Options for saving the state.\n\t */\n\tasync saveState(opts: SaveStateOptions): Promise<void> {\n\t\treturn this.#actor.stateManager.saveState(opts);\n\t}\n\n\t/**\n\t * Prevents the actor from sleeping until promise is complete.\n\t */\n\twaitUntil(promise: Promise<void>): void {\n\t\tthis.#actor.waitUntil(promise);\n\t}\n\n\t/**\n\t * Prevents the actor from sleeping while the given promise is running.\n\t *\n\t * Use this when performing async operations in the `run` handler or other\n\t * background contexts where you need to ensure the actor stays awake.\n\t *\n\t * Returns the resolved value and resets the sleep timer on completion.\n\t * Errors are propagated to the caller.\n\t */\n\tkeepAwake<T>(promise: Promise<T>): Promise<T> {\n\t\treturn this.#actor.keepAwake(promise);\n\t}\n\n\t/**\n\t * AbortSignal that fires when the actor is stopping.\n\t */\n\tget abortSignal(): AbortSignal {\n\t\treturn this.#actor.abortSignal;\n\t}\n\n\t/**\n\t * True when the actor is stopping.\n\t *\n\t * Alias for `c.abortSignal.aborted`.\n\t */\n\tget aborted(): boolean {\n\t\treturn this.#actor.abortSignal.aborted;\n\t}\n\n\t/**\n\t * Forces the actor to sleep.\n\t *\n\t * Not supported on all drivers.\n\t *\n\t * @experimental\n\t */\n\tsleep() {\n\t\tthis.#actor.startSleep();\n\t}\n\n\t/**\n\t * Forces the actor to destroy.\n\t *\n\t * This will return immediately, then call `onStop` and `onDestroy`.\n\t *\n\t * @experimental\n\t */\n\tdestroy() {\n\t\tthis.#actor.startDestroy();\n\t}\n}\n\nexport type ActorContextOf<AD extends AnyActorDefinition> =\n\tAD extends ActorDefinition<\n\t\tinfer S,\n\t\tinfer CP,\n\t\tinfer CS,\n\t\tinfer V,\n\t\tinfer I,\n\t\tinfer DB extends AnyDatabaseProvider,\n\t\tinfer E extends EventSchemaConfig,\n\t\tinfer Q extends QueueSchemaConfig,\n\t\tany\n\t>\n\t\t? ActorContext<S, CP, CS, V, I, DB, E, Q>\n\t\t: never;\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getLogger
3
- } from "./chunk-IZ4M5TJU.js";
3
+ } from "./chunk-WUXR722E.js";
4
4
 
5
5
  // src/client/log.ts
6
6
  function logger() {
@@ -46,4 +46,4 @@ export {
46
46
  logger,
47
47
  importWebSocket
48
48
  };
49
- //# sourceMappingURL=chunk-VBU4P2IX.js.map
49
+ //# sourceMappingURL=chunk-PW3YONDJ.js.map