rivetkit 2.3.0-rc.5 → 2.3.0-rc.6

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 (113) hide show
  1. package/dist/browser/client.d.ts +21 -18
  2. package/dist/browser/client.js +735 -170
  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/tsup/actor/errors.cjs +4 -2
  7. package/dist/tsup/actor/errors.cjs.map +1 -1
  8. package/dist/tsup/actor/errors.d.cts +1 -74
  9. package/dist/tsup/actor/errors.d.ts +1 -74
  10. package/dist/tsup/actor/errors.js +3 -1
  11. package/dist/tsup/agent-os/index.cjs +1 -1
  12. package/dist/tsup/agent-os/index.cjs.map +1 -1
  13. package/dist/tsup/agent-os/index.d.cts +18 -7
  14. package/dist/tsup/agent-os/index.d.ts +18 -7
  15. package/dist/tsup/agent-os/index.js +1 -1
  16. package/dist/tsup/agent-os/index.js.map +1 -1
  17. package/dist/tsup/{chunk-2GANBXVP.cjs → chunk-2G64KSZQ.cjs} +10 -10
  18. package/dist/tsup/{chunk-2GANBXVP.cjs.map → chunk-2G64KSZQ.cjs.map} +1 -1
  19. package/dist/tsup/{chunk-N2DQSJIW.js → chunk-6S25NVAP.js} +13 -46
  20. package/dist/tsup/chunk-6S25NVAP.js.map +1 -0
  21. package/dist/tsup/{chunk-NATOT3ET.js → chunk-CAF6JDJE.js} +4 -4
  22. package/dist/tsup/{chunk-PGYEMIOE.js → chunk-DEO7MMWQ.js} +2 -2
  23. package/dist/tsup/{chunk-SULB574D.js → chunk-EMO6E3PJ.js} +3 -3
  24. package/dist/tsup/{chunk-FTZIZ3JG.cjs → chunk-ENK7C66G.cjs} +838 -236
  25. package/dist/tsup/chunk-ENK7C66G.cjs.map +1 -0
  26. package/dist/tsup/{chunk-JY73X7VU.js → chunk-FLODVLYW.js} +690 -88
  27. package/dist/tsup/chunk-FLODVLYW.js.map +1 -0
  28. package/dist/tsup/{chunk-OVJX4IFY.cjs → chunk-HTR4YLNT.cjs} +4 -4
  29. package/dist/tsup/{chunk-OVJX4IFY.cjs.map → chunk-HTR4YLNT.cjs.map} +1 -1
  30. package/dist/tsup/{chunk-LELRJK66.cjs → chunk-JALSAX7Z.cjs} +3 -3
  31. package/dist/tsup/{chunk-LELRJK66.cjs.map → chunk-JALSAX7Z.cjs.map} +1 -1
  32. package/dist/tsup/{chunk-JRCZDHXT.cjs → chunk-K5BA2LEO.cjs} +19 -52
  33. package/dist/tsup/chunk-K5BA2LEO.cjs.map +1 -0
  34. package/dist/tsup/{chunk-K34B3OVG.js → chunk-KIWH5H3K.js} +30 -9
  35. package/dist/tsup/chunk-KIWH5H3K.js.map +1 -0
  36. package/dist/tsup/{chunk-NW2J4SOL.cjs → chunk-LIXXFXVR.cjs} +5 -5
  37. package/dist/tsup/{chunk-NW2J4SOL.cjs.map → chunk-LIXXFXVR.cjs.map} +1 -1
  38. package/dist/tsup/{chunk-HR547GVH.cjs → chunk-M5C7YNI5.cjs} +8 -8
  39. package/dist/tsup/{chunk-HR547GVH.cjs.map → chunk-M5C7YNI5.cjs.map} +1 -1
  40. package/dist/tsup/{chunk-V3QNBJ7N.cjs → chunk-QAZLM4WT.cjs} +31 -10
  41. package/dist/tsup/chunk-QAZLM4WT.cjs.map +1 -0
  42. package/dist/tsup/{chunk-LDTT6WKJ.js → chunk-RTC2AZGB.js} +2 -2
  43. package/dist/tsup/{chunk-UXTP4EBU.js → chunk-ZI5QJMKO.js} +2 -2
  44. package/dist/tsup/client/mod.cjs +7 -7
  45. package/dist/tsup/client/mod.d.cts +3 -4
  46. package/dist/tsup/client/mod.d.ts +3 -4
  47. package/dist/tsup/client/mod.js +6 -6
  48. package/dist/tsup/common/log.cjs +3 -3
  49. package/dist/tsup/common/log.js +2 -2
  50. package/dist/tsup/common/websocket.cjs +4 -4
  51. package/dist/tsup/common/websocket.js +3 -3
  52. package/dist/tsup/{config-CvQUtDp9.d.ts → config-0Ta55UV0.d.ts} +10 -9
  53. package/dist/tsup/{config-C-a9vrke.d.cts → config-Ca8dN4cS.d.cts} +10 -9
  54. package/dist/tsup/{context-A7R0bsZL.d.ts → context-B_IWbWne.d.ts} +1 -1
  55. package/dist/tsup/{context-CA3r-pf2.d.cts → context-CUrQ9MHc.d.cts} +1 -1
  56. package/dist/tsup/inspector/mod.cjs +6 -6
  57. package/dist/tsup/inspector/mod.js +5 -5
  58. package/dist/tsup/mod.cjs +252 -207
  59. package/dist/tsup/mod.cjs.map +1 -1
  60. package/dist/tsup/mod.d.cts +4 -5
  61. package/dist/tsup/mod.d.ts +4 -5
  62. package/dist/tsup/mod.js +183 -138
  63. package/dist/tsup/mod.js.map +1 -1
  64. package/dist/tsup/test/mod.cjs +10 -10
  65. package/dist/tsup/test/mod.d.cts +2 -3
  66. package/dist/tsup/test/mod.d.ts +2 -3
  67. package/dist/tsup/test/mod.js +6 -6
  68. package/dist/tsup/utils-DVekpm4I.d.cts +103 -0
  69. package/dist/tsup/utils-DVekpm4I.d.ts +103 -0
  70. package/dist/tsup/utils.cjs +3 -3
  71. package/dist/tsup/utils.d.cts +1 -1
  72. package/dist/tsup/utils.d.ts +1 -1
  73. package/dist/tsup/utils.js +2 -2
  74. package/dist/tsup/workflow/mod.cjs +9 -9
  75. package/dist/tsup/workflow/mod.d.cts +4 -5
  76. package/dist/tsup/workflow/mod.d.ts +4 -5
  77. package/dist/tsup/workflow/mod.js +5 -5
  78. package/package.json +8 -8
  79. package/src/actor/errors.ts +53 -7
  80. package/src/client/actor-conn.ts +52 -29
  81. package/src/client/actor-handle.ts +57 -23
  82. package/src/client/errors.ts +2 -1
  83. package/src/client/raw-utils.ts +2 -4
  84. package/src/client/utils.ts +32 -3
  85. package/src/common/actor-router-consts.ts +4 -0
  86. package/src/common/bare/generated/client-protocol/v4.ts +599 -0
  87. package/src/common/client-protocol-versioned.ts +125 -18
  88. package/src/common/client-protocol-zod.ts +7 -0
  89. package/src/common/client-protocol.ts +1 -1
  90. package/src/common/database/native-database.test.ts +35 -0
  91. package/src/common/database/native-database.ts +8 -4
  92. package/src/common/router.ts +38 -8
  93. package/src/common/utils.ts +9 -52
  94. package/src/drivers/engine/actor-driver.ts +18 -17
  95. package/src/registry/config/index.ts +3 -5
  96. package/src/registry/index.ts +156 -19
  97. package/src/registry/napi-runtime.ts +44 -6
  98. package/src/registry/native.ts +5 -152
  99. package/src/registry/runtime.ts +16 -5
  100. package/src/registry/wasm-runtime.ts +22 -2
  101. package/dist/tsup/chunk-FTZIZ3JG.cjs.map +0 -1
  102. package/dist/tsup/chunk-JRCZDHXT.cjs.map +0 -1
  103. package/dist/tsup/chunk-JY73X7VU.js.map +0 -1
  104. package/dist/tsup/chunk-K34B3OVG.js.map +0 -1
  105. package/dist/tsup/chunk-N2DQSJIW.js.map +0 -1
  106. package/dist/tsup/chunk-V3QNBJ7N.cjs.map +0 -1
  107. package/dist/tsup/utils-fwx3o3K9.d.cts +0 -18
  108. package/dist/tsup/utils-fwx3o3K9.d.ts +0 -18
  109. /package/dist/tsup/{chunk-NATOT3ET.js.map → chunk-CAF6JDJE.js.map} +0 -0
  110. /package/dist/tsup/{chunk-PGYEMIOE.js.map → chunk-DEO7MMWQ.js.map} +0 -0
  111. /package/dist/tsup/{chunk-SULB574D.js.map → chunk-EMO6E3PJ.js.map} +0 -0
  112. /package/dist/tsup/{chunk-LDTT6WKJ.js.map → chunk-RTC2AZGB.js.map} +0 -0
  113. /package/dist/tsup/{chunk-UXTP4EBU.js.map → chunk-ZI5QJMKO.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/actor/log.ts","../../src/actor/definition.ts","../../src/actor/schema.ts","../../src/common/inline-websocket-adapter.ts","../../src/common/engine.ts","../../src/registry/log.ts","../../src/serverless/configure.ts","../../src/registry/config/index.ts","../../src/registry/config/envoy.ts","../../src/registry/config/serverless.ts","../../src/registry/native.ts","../../src/common/database/native-database.ts","../../src/registry/runtime.ts","../../src/registry/napi-runtime.ts","../../src/registry/native-validation.ts","../../src/registry/wasm-runtime.ts","../../src/registry/index.ts"],"sourcesContent":["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 type { RegistryConfig } from \"@/registry/config\";\nimport { ActorConfigSchema, type Actions, type ActorConfig, type ActorConfigInput } from \"./config\";\nimport { loggerWithoutContext } from \"./log\";\nimport type { AnyDatabaseProvider } from \"@/common/database/config\";\nimport type { EventSchemaConfig, QueueSchemaConfig } from \"./schema\";\n\nconst warnedDeprecatedTimeoutKeys = new Set<string>();\n\nfunction warnDeprecatedShutdownTimeoutKeys(options: unknown) {\n\tif (!options || typeof options !== \"object\") return;\n\tconst opts = options as Record<string, unknown>;\n\tfor (const key of [\"onDestroyTimeout\", \"waitUntilTimeout\"]) {\n\t\tif (opts[key] !== undefined && !warnedDeprecatedTimeoutKeys.has(key)) {\n\t\t\twarnedDeprecatedTimeoutKeys.add(key);\n\t\t\tloggerWithoutContext().warn({\n\t\t\t\tmsg: `actor option \\`${key}\\` is deprecated and is now ignored. Configure \\`sleepGracePeriod\\` instead, which bounds the entire graceful shutdown window for both sleep and destroy. Will be removed in 2.2.0.`,\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport interface BaseActorDefinition<\n\tS,\n\tCP,\n\tCS,\n\tV,\n\tI,\n\tDB extends AnyDatabaseProvider,\n\tE extends EventSchemaConfig = Record<never, never>,\n\tQ extends QueueSchemaConfig = Record<never, never>,\n\tR extends Actions<S, CP, CS, V, I, DB, E, Q> = Actions<\n\t\tS,\n\t\tCP,\n\t\tCS,\n\t\tV,\n\t\tI,\n\t\tDB,\n\t\tE,\n\t\tQ\n\t>,\n> {\n\treadonly config: ActorConfig<S, CP, CS, V, I, DB, E, Q>;\n}\n\nexport type AnyActorDefinition = BaseActorDefinition<\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany\n>;\n\nexport type AnyStaticActorDefinition = ActorDefinition<\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany\n>;\n\nexport class ActorDefinition<\n\tS,\n\tCP,\n\tCS,\n\tV,\n\tI,\n\tDB extends AnyDatabaseProvider,\n\tE extends EventSchemaConfig = Record<never, never>,\n\tQ extends QueueSchemaConfig = Record<never, never>,\n\tR extends Actions<S, CP, CS, V, I, DB, E, Q> = Actions<\n\t\tS,\n\t\tCP,\n\t\tCS,\n\t\tV,\n\t\tI,\n\t\tDB,\n\t\tE,\n\t\tQ\n\t>,\n> implements BaseActorDefinition<S, CP, CS, V, I, DB, E, Q, R>\n{\n\t#config: ActorConfig<S, CP, CS, V, I, DB, E, Q>;\n\n\tconstructor(config: ActorConfig<S, CP, CS, V, I, DB, E, Q>) {\n\t\tthis.#config = config;\n\t}\n\n\tget config(): ActorConfig<S, CP, CS, V, I, DB, E, Q> {\n\t\treturn this.#config;\n\t}\n}\n\nexport interface BaseActorInstance<\n\tS = any,\n\tCP = any,\n\tCS = any,\n\tV = any,\n\tI = any,\n\tDB extends AnyDatabaseProvider = AnyDatabaseProvider,\n\tE extends EventSchemaConfig = Record<never, never>,\n\tQ extends QueueSchemaConfig = Record<never, never>,\n> {\n\tid: string;\n\tconfig: ActorConfig<S, CP, CS, V, I, DB, E, Q>;\n\trLog: Record<string, (...args: any[]) => any>;\n\t[key: string]: any;\n}\n\nexport type AnyActorInstance = BaseActorInstance<\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany\n>;\n\nexport type AnyStaticActorInstance = AnyActorInstance;\n\nexport function isStaticActorInstance(\n\t_actor: AnyActorInstance,\n): _actor is AnyStaticActorInstance {\n\treturn true;\n}\n\nexport function actor<\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\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> = 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): ActorDefinition<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase,\n\tTEvents,\n\tTQueues,\n\tTActions\n> {\n\twarnDeprecatedShutdownTimeoutKeys(\n\t\t(input as { options?: unknown } | undefined)?.options,\n\t);\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 new ActorDefinition(config);\n}\n\nexport function isStaticActorDefinition(\n\tdefinition: AnyActorDefinition,\n): definition is AnyStaticActorDefinition {\n\treturn definition instanceof ActorDefinition;\n}\n\nexport function lookupInRegistry(\n\tconfig: RegistryConfig,\n\tname: string,\n): AnyActorDefinition {\n\tconst definition = config.use[name];\n\tif (!definition) throw new Error(`no actor in registry for name ${name}`);\n\treturn definition;\n}\n","import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { unsupportedFeature } 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<TMessage, TComplete = never, TContext = any> {\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<TMessage, TComplete, TContext> {\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? InferSchema<T[\"message\"]>\n\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\t? InferSchema<T[\"schema\"]>\n\t\t\t\t: T extends StandardSchemaV1<any, infer O>\n\t\t\t\t\t? O\n\t\t\t\t\t: T extends EventTypeToken<infer R, any>\n\t\t\t\t\t\t? R\n\t\t\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? [C] extends [never]\n\t\t\t? never\n\t\t\t: C\n\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 unsupportedFeature(\"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 { WSContext } from \"hono/ws\";\nimport type { UpgradeWebSocketArgs } from \"@/common/actor-websocket\";\nimport type { UniversalWebSocket } from \"@/common/websocket-interface\";\nimport { VirtualWebSocket } from \"@rivetkit/virtual-websocket\";\nimport { getLogger } from \"./log\";\n\nfunction logger() {\n\treturn getLogger(\"inline-websocket-adapter\");\n}\n\n/**\n * InlineWebSocketAdapter creates two linked WebSocket objects:\n * - clientWs: for the client/proxy side (returned from openWebSocket)\n * - actorWs: for the actor side (passed via wsContext.raw)\n *\n * Each side's send() triggers the OTHER side's message event.\n */\nexport class InlineWebSocketAdapter {\n\t#handler: UpgradeWebSocketArgs;\n\t#wsContext: WSContext;\n\t#readyState: 0 | 1 | 2 | 3 = 0;\n\t#restoring: boolean;\n\t#pendingClientMessages: Array<{\n\t\tdata: string | ArrayBufferLike | Blob | ArrayBufferView;\n\t\trivetMessageIndex?: number;\n\t}> = [];\n\n\t#clientWs: VirtualWebSocket;\n\t#actorWs: VirtualWebSocket;\n\n\tconstructor(\n\t\thandler: UpgradeWebSocketArgs,\n\t\toptions: {\n\t\t\trestoring?: boolean;\n\t\t} = {},\n\t) {\n\t\tthis.#handler = handler;\n\t\tthis.#restoring = options.restoring ?? false;\n\n\t\t// Create linked WebSocket pair\n\t\t// Client's send() -> handler.onMessage (for RPC) + Actor's message event (for raw WS)\n\t\t// Actor's send() -> Client's message event\n\t\tthis.#clientWs = new VirtualWebSocket({\n\t\t\tgetReadyState: () => this.#readyState,\n\t\t\tonSend: (data) => this.dispatchClientMessageWithMetadata(data),\n\t\t\tonClose: (code, reason) => this.#close(code, reason),\n\t\t});\n\n\t\tthis.#actorWs = new VirtualWebSocket({\n\t\t\tgetReadyState: () => this.#readyState,\n\t\t\tonSend: (data) => this.#clientWs.triggerMessage(data),\n\t\t\tonClose: (code, reason) => this.#close(code, reason),\n\t\t});\n\n\t\t// Create WSContext with actorWs as raw\n\t\tthis.#wsContext = new WSContext({\n\t\t\traw: this.#actorWs,\n\t\t\tsend: (data: string | ArrayBuffer | Uint8Array) => {\n\t\t\t\tlogger().debug({ msg: \"WSContext.send called\" });\n\t\t\t\tthis.#clientWs.triggerMessage(data);\n\t\t\t},\n\t\t\tclose: (code?: number, reason?: string) => {\n\t\t\t\tlogger().debug({ msg: \"WSContext.close called\", code, reason });\n\t\t\t\tthis.#close(code || 1000, reason || \"\");\n\t\t\t},\n\t\t\treadyState: 1,\n\t\t});\n\n\t\t// Defer initialization to allow event listeners to be attached first\n\t\tsetTimeout(() => {\n\t\t\tthis.#initialize();\n\t\t}, 0);\n\t}\n\n\t/** Get the client-side WebSocket (for proxy/client code) */\n\tget clientWebSocket(): UniversalWebSocket {\n\t\treturn this.#clientWs;\n\t}\n\n\t/** Get the actor-side WebSocket (passed to actor via wsContext.raw) */\n\tget actorWebSocket(): UniversalWebSocket {\n\t\treturn this.#actorWs;\n\t}\n\n\t/**\n\t * Dispatch a client->actor message with optional transport metadata.\n\t *\n\t * This is used by dynamic actor host bridges to preserve\n\t * `rivetMessageIndex` on hibernatable engine websocket paths.\n\t */\n\tdispatchClientMessageWithMetadata(\n\t\tdata: string | ArrayBufferLike | Blob | ArrayBufferView,\n\t\trivetMessageIndex?: number,\n\t): void {\n\t\tif (this.#readyState === this.#clientWs.CONNECTING) {\n\t\t\tthis.#pendingClientMessages.push({ data, rivetMessageIndex });\n\t\t\treturn;\n\t\t}\n\t\tif (\n\t\t\tthis.#readyState === this.#clientWs.CLOSING ||\n\t\t\tthis.#readyState === this.#clientWs.CLOSED\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#dispatchClientMessage(data, rivetMessageIndex);\n\t}\n\n\t#dispatchClientMessage(\n\t\tdata: string | ArrayBufferLike | Blob | ArrayBufferView,\n\t\trivetMessageIndex?: number,\n\t): void {\n\t\ttry {\n\t\t\tthis.#handler.onMessage(\n\t\t\t\t{ data, rivetMessageIndex },\n\t\t\t\tthis.#wsContext,\n\t\t\t);\n\t\t\t(this.#actorWs as any).dispatchEvent({\n\t\t\t\ttype: \"message\",\n\t\t\t\tdata,\n\t\t\t\trivetMessageIndex,\n\t\t\t\ttarget: this.#actorWs,\n\t\t\t\tcurrentTarget: this.#actorWs,\n\t\t\t});\n\t\t} catch (err) {\n\t\t\tthis.#handleError(err);\n\t\t\tthis.#close(1011, \"Internal error processing message\");\n\t\t}\n\t}\n\n\tasync #initialize(): Promise<void> {\n\t\ttry {\n\t\t\tlogger().debug({ msg: \"websocket initializing\" });\n\n\t\t\tthis.#readyState = 1; // OPEN\n\n\t\t\tif (this.#restoring && this.#handler.onRestore) {\n\t\t\t\tlogger().debug({\n\t\t\t\t\tmsg: \"calling handler.onRestore with WSContext\",\n\t\t\t\t});\n\t\t\t\tthis.#handler.onRestore(this.#wsContext);\n\t\t\t} else {\n\t\t\t\tlogger().debug({\n\t\t\t\t\tmsg: \"calling handler.onOpen with WSContext\",\n\t\t\t\t});\n\t\t\t\tthis.#handler.onOpen(undefined, this.#wsContext);\n\t\t\t}\n\n\t\t\t// Fire open event to both sides\n\t\t\tthis.#clientWs.triggerOpen();\n\t\t\tthis.#actorWs.triggerOpen();\n\t\t\twhile (this.#pendingClientMessages.length > 0) {\n\t\t\t\tconst next = this.#pendingClientMessages.shift();\n\t\t\t\tif (!next) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthis.#dispatchClientMessage(next.data, next.rivetMessageIndex);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tthis.#handleError(err);\n\t\t\tthis.#close(1011, \"Internal error during initialization\");\n\t\t}\n\t}\n\n\t#handleError(err: unknown): void {\n\t\tconsole.error(\"INLINE_WEBSOCKET_ADAPTER_ERROR\", err);\n\t\tlogger().error({\n\t\t\tmsg: \"error in websocket\",\n\t\t\terror: err,\n\t\t\terrorMessage: err instanceof Error ? err.message : String(err),\n\t\t\tstack: err instanceof Error ? err.stack : undefined,\n\t\t});\n\n\t\t// Call handler.onError\n\t\ttry {\n\t\t\tthis.#handler.onError(err, this.#wsContext);\n\t\t} catch (handlerErr) {\n\t\t\tlogger().error({\n\t\t\t\tmsg: \"error in onError handler\",\n\t\t\t\terror: handlerErr,\n\t\t\t});\n\t\t}\n\n\t\t// Fire error event to both sides\n\t\tthis.#clientWs.triggerError(err);\n\t\tthis.#actorWs.triggerError(err);\n\t}\n\n\t#close(code: number, reason: string): void {\n\t\tif (this.#readyState === 3 || this.#readyState === 2) {\n\t\t\treturn;\n\t\t}\n\n\t\tlogger().debug({ msg: \"closing websocket\", code, reason });\n\n\t\tthis.#readyState = 2; // CLOSING\n\n\t\ttry {\n\t\t\tthis.#handler.onClose(\n\t\t\t\t{ code, reason, wasClean: true },\n\t\t\t\tthis.#wsContext,\n\t\t\t);\n\t\t} catch (err) {\n\t\t\tlogger().error({ msg: \"error closing websocket\", error: err });\n\t\t} finally {\n\t\t\tthis.#readyState = 3; // CLOSED\n\n\t\t\t// Fire close event to both sides\n\t\t\tthis.#clientWs.triggerClose(code, reason);\n\t\t\tthis.#actorWs.triggerClose(code, reason);\n\t\t}\n\t}\n}\n\n/**\n * Creates an InlineWebSocketAdapter and returns the client-side WebSocket.\n * This is the main entry point for creating inline WebSocket connections.\n */\nexport function createInlineWebSocket(\n\thandler: UpgradeWebSocketArgs,\n): UniversalWebSocket {\n\tconst adapter = new InlineWebSocketAdapter(handler);\n\treturn adapter.clientWebSocket;\n}\n","export const ENGINE_PORT = 6420;\nexport const ENGINE_ENDPOINT = `http://127.0.0.1:${ENGINE_PORT}`;\n","import { getLogger } from \"@/common/log\";\n\nexport function logger() {\n\treturn getLogger(\"registry\");\n}\n","import { convertRegistryConfigToClientConfig } from \"@/client/config\";\nimport {\n\tgetDatacenters,\n\tupdateRunnerConfig,\n} from \"@/engine-client/api-endpoints\";\nimport { stringifyError } from \"@/common/utils\";\nimport type { RegistryConfig } from \"@/registry/config\";\nimport { logger } from \"@/registry/log\";\n\nconst DEFAULT_CONFIGURE_TIMEOUT_MS = 60_000;\nconst CONFIGURE_RETRY_DELAY_MS = 1_000;\n\nfunction sleep(ms: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction configureTimeoutMs() {\n\tconst value = process.env.RIVET_SERVERLESS_CONFIGURE_TIMEOUT_MS;\n\tif (value === undefined || value === \"\") return DEFAULT_CONFIGURE_TIMEOUT_MS;\n\n\tconst parsed = Number(value);\n\tif (!Number.isFinite(parsed) || parsed < 0) {\n\t\tthrow new Error(\"RIVET_SERVERLESS_CONFIGURE_TIMEOUT_MS must be a finite non-negative number\");\n\t}\n\n\treturn parsed;\n}\n\nexport async function configureServerlessPool(\n\tconfig: RegistryConfig,\n): Promise<void> {\n\tlogger().debug({ msg: \"configuring serverless pool\" });\n\n\tconst startedAt = Date.now();\n\tconst timeoutMs = configureTimeoutMs();\n\tlet attempts = 0;\n\tlet lastError: unknown;\n\n\twhile (Date.now() - startedAt <= timeoutMs) {\n\t\tattempts += 1;\n\t\ttry {\n\t\t\tif (!config.namespace) {\n\t\t\t\tthrow new Error(\"namespace is required for serverless configuration\");\n\t\t\t}\n\t\t\tif (!config.endpoint) {\n\t\t\t\tthrow new Error(\"endpoint is required for serverless configuration\");\n\t\t\t}\n\t\t\tif (!config.configurePool) {\n\t\t\t\tthrow new Error(\"configurePool is required for serverless configuration\");\n\t\t\t}\n\n\t\t\tconst customConfig = config.configurePool;\n\t\t\tconst clientConfig = convertRegistryConfigToClientConfig(config);\n\t\t\tconst dcsRes = await getDatacenters(clientConfig);\n\t\t\tconst poolName = customConfig.name ?? \"default\";\n\t\t\tconst serverlessToken = config.token ?? config.publicToken;\n\t\t\tconst headers = {\n\t\t\t\t...(serverlessToken ? { \"x-rivet-token\": serverlessToken } : {}),\n\t\t\t\t...(customConfig.headers ?? {}),\n\t\t\t};\n\t\t\tconst serverlessConfig = {\n\t\t\t\tserverless: {\n\t\t\t\t\turl: customConfig.url,\n\t\t\t\t\theaders,\n\t\t\t\t\trequest_lifespan: customConfig.requestLifespan ?? 60 * 60,\n\t\t\t\t\tdrain_grace_period: customConfig.drainGracePeriod,\n\t\t\t\t\tmetadata_poll_interval:\n\t\t\t\t\t\tcustomConfig.metadataPollInterval ?? 1000,\n\t\t\t\t\tmax_runners: 100_000,\n\t\t\t\t\tmin_runners: 0,\n\t\t\t\t\trunners_margin: 0,\n\t\t\t\t\tslots_per_runner: 1,\n\t\t\t\t},\n\t\t\t\tmetadata: customConfig.metadata ?? {},\n\t\t\t\tdrain_on_version_upgrade:\n\t\t\t\t\tcustomConfig.drainOnVersionUpgrade ?? true,\n\t\t\t};\n\n\t\t\tawait updateRunnerConfig(clientConfig, poolName, {\n\t\t\t\tdatacenters: Object.fromEntries(\n\t\t\t\t\tdcsRes.datacenters.map((dc) => [dc.name, serverlessConfig]),\n\t\t\t\t),\n\t\t\t});\n\n\t\t\tlogger().info({\n\t\t\t\tmsg: \"serverless pool configured successfully\",\n\t\t\t\tpoolName,\n\t\t\t\tnamespace: config.namespace,\n\t\t\t\tattempts,\n\t\t\t});\n\t\t\treturn;\n\t\t} catch (error) {\n\t\t\tlastError = error;\n\t\t\tlogger().warn({\n\t\t\t\tmsg: \"serverless pool configuration attempt failed\",\n\t\t\t\tattempts,\n\t\t\t\terror: stringifyError(error),\n\t\t\t});\n\t\t\tawait sleep(CONFIGURE_RETRY_DELAY_MS);\n\t\t}\n\t}\n\n\tlogger().error({\n\t\tmsg: \"failed to configure serverless pool, validate endpoint is configured correctly then restart this process\",\n\t\tattempts,\n\t\terror: stringifyError(lastError),\n\t});\n\tthrow lastError;\n}\n","import { z } from \"zod\";\nimport { getRunMetadata } from \"@/actor/config\";\nimport type {\n\tAnyActorDefinition,\n\tBaseActorDefinition,\n} from \"@/actor/definition\";\nimport {\n\tKEYS,\n\tqueueMessagesPrefix,\n\tqueueMetadataKey,\n\tworkflowStoragePrefix,\n} from \"@/actor/keys\";\nimport { ENGINE_ENDPOINT } from \"@/common/engine\";\nimport { type Logger, LogLevelSchema } from \"@/common/log\";\nimport { VERSION } from \"@/utils\";\nimport { tryParseEndpoint } from \"@/utils/endpoint-parser\";\nimport {\n\tgetRivetEndpoint,\n\tgetRivetEngine,\n\tgetRivetkitRuntime,\n\tgetRivetNamespace,\n\tgetRivetRunEngine,\n\tgetRivetRunEngineVersion,\n\tgetRivetToken,\n\tisDev,\n} from \"@/utils/env-vars\";\nimport { EnvoyConfigSchema } from \"./envoy\";\nimport {\n\tConfigurePoolSchema,\n\tDEFAULT_SERVERLESS_MAX_START_PAYLOAD_BYTES,\n\tServerlessConfigSchema,\n} from \"./serverless\";\n\nexport const ActorsSchema = z.record(\n\tz.string(),\n\tz.custom<\n\t\tBaseActorDefinition<any, any, any, any, any, any, any, any, any>\n\t>(),\n);\nexport type RegistryActors = z.infer<typeof ActorsSchema>;\n\nexport const RuntimeKindSchema = z.enum([\"auto\", \"native\", \"wasm\"]);\nexport type RuntimeKind = z.infer<typeof RuntimeKindSchema>;\nexport type WasmRuntimeBindings = typeof import(\"@rivetkit/rivetkit-wasm\");\nexport type WasmRuntimeInitInput = Parameters<\n\tWasmRuntimeBindings[\"default\"]\n>[0];\nexport const SqliteBackendSchema = z.enum([\"local\", \"remote\"]);\nexport type SqliteBackend = z.infer<typeof SqliteBackendSchema>;\n\nexport const TestConfigSchema = z.object({\n\tenabled: z.boolean().optional().default(false),\n\tsqliteBackend: SqliteBackendSchema.optional(),\n});\nexport type TestConfig = z.infer<typeof TestConfigSchema>;\n\nexport const WasmRuntimeConfigSchema = z.object({\n\tbindings: z.custom<WasmRuntimeBindings>().optional(),\n\tinitInput: z.custom<WasmRuntimeInitInput>().optional(),\n});\nexport type WasmRuntimeConfig = z.infer<typeof WasmRuntimeConfigSchema>;\n\nexport const SqliteConfigSchema = z\n\t.union([\n\t\tSqliteBackendSchema,\n\t\tz.object({\n\t\t\tbackend: SqliteBackendSchema,\n\t\t}),\n\t])\n\t.optional()\n\t.transform((config) => {\n\t\tif (config === undefined) return undefined;\n\t\tif (typeof config === \"string\") return { backend: config };\n\t\treturn config;\n\t});\nexport type SqliteConfig = z.infer<typeof SqliteConfigSchema>;\n\n// TODO: Add sane defaults for NODE_ENV=development\nexport const RegistryConfigSchema = z\n\t.object({\n\t\t// MARK: Actors\n\t\tuse: z.record(z.string(), z.custom<AnyActorDefinition>()),\n\n\t\t// TODO: Find a better way of passing around the test config\n\t\t/**\n\t\t * Test configuration.\n\t\t *\n\t\t * DO NOT MANUALLY ENABLE. THIS IS USED INTERNALLY.\n\t\t * @internal\n\t\t **/\n\t\ttest: TestConfigSchema.optional().default({ enabled: false }),\n\n\t\t// MARK: Networking\n\t\t/** @experimental */\n\t\tmaxIncomingMessageSize: z.number().optional().default(65_536),\n\n\t\t/** @experimental */\n\t\tmaxOutgoingMessageSize: z.number().optional().default(1_048_576),\n\n\t\t// MARK: Runtime\n\t\t/**\n\t\t * @experimental\n\t\t *\n\t\t * Runtime binding to use for RivetKit core.\n\t\t * */\n\t\truntime: RuntimeKindSchema.optional().transform((val, ctx) => {\n\t\t\tconst rawRuntime = val ?? getRivetkitRuntime();\n\t\t\tif (rawRuntime === undefined) {\n\t\t\t\treturn \"auto\";\n\t\t\t}\n\n\t\t\tconst parsed = RuntimeKindSchema.safeParse(rawRuntime);\n\t\t\tif (!parsed.success) {\n\t\t\t\tctx.addIssue({\n\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"RIVETKIT_RUNTIME must be one of auto, native, or wasm\",\n\t\t\t\t});\n\t\t\t\treturn \"auto\";\n\t\t\t}\n\n\t\t\treturn parsed.data;\n\t\t}),\n\n\t\t/**\n\t\t * @experimental\n\t\t *\n\t\t * WebAssembly runtime configuration.\n\t\t * */\n\t\twasm: WasmRuntimeConfigSchema.optional().default(() => ({})),\n\n\t\t/**\n\t\t * @experimental\n\t\t *\n\t\t * SQLite backend selection.\n\t\t * */\n\t\tsqlite: SqliteConfigSchema,\n\n\t\t/**\n\t\t * @experimental\n\t\t *\n\t\t * Disable welcome message.\n\t\t * */\n\t\tnoWelcome: z.boolean().optional().default(false),\n\n\t\t/**\n\t\t * @experimental\n\t\t * */\n\t\tlogging: z\n\t\t\t.object({\n\t\t\t\tbaseLogger: z.custom<Logger>().optional(),\n\t\t\t\tlevel: LogLevelSchema.optional(),\n\t\t\t})\n\t\t\t.optional()\n\t\t\t.default(() => ({})),\n\n\t\t// MARK: Routing\n\t\t// // This is a function to allow for lazy configuration of upgradeWebSocket on the\n\t\t// // fly. This is required since the dependencies that upgradeWebSocket\n\t\t// // (specifically Node.js) can sometimes only be specified after the router is\n\t\t// // created or must be imported async using `await import(...)`\n\t\t// getUpgradeWebSocket: z.custom<GetUpgradeWebSocket>().optional(),\n\n\t\t// MARK: Runner Configuration\n\t\t/**\n\t\t * Endpoint to connect to for Rivet Engine.\n\t\t *\n\t\t * Supports URL auth syntax for namespace and token:\n\t\t * - `https://namespace:token@api.rivet.dev`\n\t\t * - `https://namespace@api.rivet.dev`\n\t\t *\n\t\t * Can also be set via RIVET_ENDPOINT environment variables.\n\t\t */\n\t\tendpoint: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.transform((val) => val ?? getRivetEngine() ?? getRivetEndpoint()),\n\t\ttoken: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.transform((val) => val ?? getRivetToken()),\n\t\tnamespace: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.transform((val) => val ?? getRivetNamespace()),\n\t\theaders: z.record(z.string(), z.string()).optional().default({}),\n\n\t\t// MARK: Client\n\t\t// TODO:\n\t\t// client: ClientConfigSchema.optional(),\n\n\t\t// MARK: Local HTTP\n\t\t/**\n\t\t * Directory to serve static files from.\n\t\t *\n\t\t * When set, the local RivetKit server will serve static files from this\n\t\t * directory. This is used by `registry.start()` to serve a frontend\n\t\t * alongside the actor API.\n\t\t */\n\t\tstaticDir: z.string().optional(),\n\t\t/**\n\t\t * @experimental\n\t\t *\n\t\t * Base path for the local RivetKit API. This is used to prefix all routes.\n\t\t * For example, if the base path is `/foo`, then the route `/actors`\n\t\t * will be available at `/foo/actors`.\n\t\t */\n\t\thttpBasePath: z.string().optional().default(\"/\"),\n\t\t/**\n\t\t * @experimental\n\t\t *\n\t\t * What port to run the local HTTP server on.\n\t\t */\n\t\thttpPort: z.number().optional().default(6421),\n\t\t/**\n\t\t * @experimental\n\t\t *\n\t\t * What host to bind the local HTTP server to.\n\t\t */\n\t\thttpHost: z.string().optional(),\n\n\t\t// MARK: Engine\n\t\t/**\n\t\t * @experimental\n\t\t *\n\t\t * Starts the full Rust engine process locally.\n\t\t */\n\t\tstartEngine: z.boolean().default(() => getRivetRunEngine()),\n\t\t/** @experimental */\n\t\tengineVersion: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.default(() => getRivetRunEngineVersion() ?? VERSION),\n\t\t/**\n\t\t * @experimental\n\t\t *\n\t\t * Automatically configure serverless envoys in the engine.\n\t\t */\n\t\tconfigurePool: ConfigurePoolSchema.optional(),\n\n\t\t// MARK: Runtime-specific\n\t\tserverless: ServerlessConfigSchema.optional().default(() =>\n\t\t\tServerlessConfigSchema.parse({}),\n\t\t),\n\t\tenvoy: EnvoyConfigSchema.optional().default(() =>\n\t\t\tEnvoyConfigSchema.parse({}),\n\t\t),\n\n\t\t// MARK: Shutdown\n\t\t/**\n\t\t * Graceful shutdown configuration for SIGINT/SIGTERM.\n\t\t *\n\t\t * When a persistent envoy is running (Mode A, started via `registry.start()`),\n\t\t * rivetkit installs Node SIGINT/SIGTERM handlers that call into core's\n\t\t * `shutdown()` and wait up to `gracePeriodMs` for the envoy to drain\n\t\t * before re-raising the signal to let Node exit via its default path.\n\t\t *\n\t\t * Handlers are NOT installed when `handler(request)` is used alone\n\t\t * (Mode B / serverless): platform runtimes (Cloudflare Workers, Vercel,\n\t\t * Deno Deploy) own their own signal policy there, and `process.on` may\n\t\t * not exist.\n\t\t */\n\t\tshutdown: z\n\t\t\t.object({\n\t\t\t\t/**\n\t\t\t\t * Wait this many milliseconds for the serve promise to resolve\n\t\t\t\t * after calling `CoreRegistry::shutdown()`. Defaults to 30s,\n\t\t\t\t * matching Kubernetes `terminationGracePeriodSeconds`.\n\t\t\t\t *\n\t\t\t\t * Must be >= rivetkit-core's drain timeout (20s) + margin.\n\t\t\t\t */\n\t\t\t\tgracePeriodMs: z\n\t\t\t\t\t.number()\n\t\t\t\t\t.int()\n\t\t\t\t\t.min(1_000)\n\t\t\t\t\t.optional()\n\t\t\t\t\t.default(30_000),\n\t\t\t\t/**\n\t\t\t\t * If true, rivetkit will not install SIGINT/SIGTERM handlers.\n\t\t\t\t * Use when the host application owns signal policy and will\n\t\t\t\t * call `nativeRegistry.shutdown()` itself.\n\t\t\t\t */\n\t\t\t\tdisableSignalHandlers: z.boolean().optional().default(false),\n\t\t\t})\n\t\t\t.optional()\n\t\t\t.default(() => ({\n\t\t\t\tgracePeriodMs: 30_000,\n\t\t\t\tdisableSignalHandlers: false,\n\t\t\t})),\n\t})\n\t.transform((config, ctx) => {\n\t\tconst isDevEnv = isDev();\n\t\tconst sqliteBackend =\n\t\t\tconfig.sqlite?.backend ?? config.test?.sqliteBackend;\n\n\t\tif (config.runtime === \"wasm\" && sqliteBackend === \"local\") {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tmessage:\n\t\t\t\t\t\"WebAssembly runtime cannot use local SQLite. Use remote SQLite instead.\",\n\t\t\t\tpath:\n\t\t\t\t\tconfig.sqlite?.backend === \"local\"\n\t\t\t\t\t\t? [\"sqlite\"]\n\t\t\t\t\t\t: [\"test\", \"sqliteBackend\"],\n\t\t\t});\n\t\t}\n\n\t\tconst sqlite =\n\t\t\tconfig.runtime === \"wasm\" && config.sqlite === undefined\n\t\t\t\t? { backend: \"remote\" as const }\n\t\t\t\t: config.sqlite;\n\n\t\t// Parse endpoint string (env var fallback is applied via transform above)\n\t\tconst parsedEndpoint = config.endpoint\n\t\t\t? tryParseEndpoint(ctx, {\n\t\t\t\t\tendpoint: config.endpoint,\n\t\t\t\t\tpath: [\"endpoint\"],\n\t\t\t\t\tnamespace: config.namespace,\n\t\t\t\t\ttoken: config.token,\n\t\t\t\t})\n\t\t\t: undefined;\n\n\t\t// Can't start a local engine and connect to a remote endpoint.\n\t\tif (config.startEngine && parsedEndpoint) {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tmessage: \"cannot specify both startEngine and endpoint\",\n\t\t\t});\n\t\t}\n\n\t\t// configurePool requires an engine (via endpoint or startEngine).\n\t\tif (config.configurePool && !parsedEndpoint && !config.startEngine) {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tmessage:\n\t\t\t\t\t\"configurePool requires either endpoint or startEngine\",\n\t\t\t});\n\t\t}\n\n\t\t// Flatten the endpoint and apply defaults for namespace/token\n\t\t// If startEngine is enabled, set endpoint to the engine endpoint.\n\t\tconst endpoint = config.startEngine\n\t\t\t? ENGINE_ENDPOINT\n\t\t\t: (parsedEndpoint?.endpoint ??\n\t\t\t\t(isDevEnv ? ENGINE_ENDPOINT : undefined));\n\t\tconst validateServerlessEndpoint = Boolean(\n\t\t\tconfig.startEngine || parsedEndpoint,\n\t\t);\n\t\t// Namespace priority: parsed from endpoint URL > config value (includes env var) > \"default\"\n\t\tconst namespace =\n\t\t\tparsedEndpoint?.namespace ?? config.namespace ?? \"default\";\n\t\t// Token priority: parsed from endpoint URL > config value (includes env var)\n\t\tconst token = parsedEndpoint?.token ?? config.token;\n\n\t\t// Parse publicEndpoint string (env var fallback is applied via transform in serverless schema)\n\t\tconst parsedPublicEndpoint = config.serverless.publicEndpoint\n\t\t\t? tryParseEndpoint(ctx, {\n\t\t\t\t\tendpoint: config.serverless.publicEndpoint,\n\t\t\t\t\tpath: [\"serverless\", \"publicEndpoint\"],\n\t\t\t\t})\n\t\t\t: undefined;\n\n\t\t// Validate that publicEndpoint namespace matches backend namespace if specified\n\t\tif (\n\t\t\tparsedPublicEndpoint?.namespace &&\n\t\t\tparsedPublicEndpoint.namespace !== namespace\n\t\t) {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tmessage: `publicEndpoint namespace \"${parsedPublicEndpoint.namespace}\" must match backend namespace \"${namespace}\"`,\n\t\t\t\tpath: [\"serverless\", \"publicEndpoint\"],\n\t\t\t});\n\t\t}\n\n\t\t// In dev mode, clients connect directly to the local Rivet Engine.\n\t\tconst publicEndpoint =\n\t\t\tparsedPublicEndpoint?.endpoint ??\n\t\t\t(isDevEnv && config.startEngine ? ENGINE_ENDPOINT : undefined);\n\t\t// We extract publicNamespace to validate that it matches the backend\n\t\t// namespace (see validation above), not for functional use.\n\t\tconst publicNamespace = parsedPublicEndpoint?.namespace;\n\t\tconst publicToken =\n\t\t\tparsedPublicEndpoint?.token ?? config.serverless.publicToken;\n\n\t\t// If endpoint is set or starting the engine, we'll use the engine driver.\n\t\treturn {\n\t\t\t...config,\n\t\t\tsqlite,\n\t\t\tendpoint,\n\t\t\tnamespace,\n\t\t\ttoken,\n\t\t\tpublicEndpoint,\n\t\t\tpublicNamespace,\n\t\t\tpublicToken,\n\t\t\tvalidateServerlessEndpoint,\n\t\t\tserverless: {\n\t\t\t\t...config.serverless,\n\t\t\t\tpublicEndpoint,\n\t\t\t},\n\t\t};\n\t});\n\nexport type RegistryConfig = z.infer<typeof RegistryConfigSchema>;\nexport type RegistryConfigInput<A extends RegistryActors> = Omit<\n\tz.input<typeof RegistryConfigSchema>,\n\t\"use\"\n> & { use: A };\n\nexport function buildActorNames(\n\tconfig: RegistryConfig,\n): Record<string, { metadata: Record<string, unknown> }> {\n\treturn Object.fromEntries(\n\t\tObject.keys(config.use).map((actorName) => {\n\t\t\tconst definition = config.use[actorName];\n\t\t\tconst options = definition.config.options ?? {};\n\t\t\tconst runMeta = getRunMetadata(definition.config.run);\n\t\t\tconst metadata: Record<string, unknown> = {};\n\t\t\t// Actor options take precedence over run metadata\n\t\t\tmetadata.icon = options.icon ?? runMeta.icon;\n\t\t\tmetadata.name = options.name ?? runMeta.name;\n\t\t\tmetadata.preload = {\n\t\t\t\tkeys: [\n\t\t\t\t\tArray.from(KEYS.PERSIST_DATA),\n\t\t\t\t\tArray.from(KEYS.INSPECTOR_TOKEN),\n\t\t\t\t\tArray.from(queueMetadataKey()),\n\t\t\t\t\tArray.from(KEYS.LAST_PUSHED_ALARM),\n\t\t\t\t],\n\t\t\t\tprefixes: [\n\t\t\t\t\t{\n\t\t\t\t\t\tprefix: Array.from(workflowStoragePrefix()),\n\t\t\t\t\t\tmaxBytes: options.preloadMaxWorkflowBytes ?? 131_072,\n\t\t\t\t\t\tpartial: false,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tprefix: Array.from(KEYS.CONN_PREFIX),\n\t\t\t\t\t\tmaxBytes: options.preloadMaxConnectionsBytes ?? 65_536,\n\t\t\t\t\t\tpartial: false,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tprefix: Array.from(queueMessagesPrefix()),\n\t\t\t\t\t\tmaxBytes: 65_536,\n\t\t\t\t\t\tpartial: false,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t\t// Remove undefined values\n\t\t\tif (!metadata.icon) delete metadata.icon;\n\t\t\tif (!metadata.name) delete metadata.name;\n\t\t\treturn [actorName, { metadata }];\n\t\t}),\n\t);\n}\n\n// MARK: Documentation Schemas\n// These schemas are JSON-serializable versions used for documentation generation.\n// They exclude runtime-only fields (transforms, custom types, Logger instances).\n\nexport const DocConfigurePoolSchema = z\n\t.object({\n\t\tname: z.string().optional().describe(\"Name of the runner pool.\"),\n\t\turl: z\n\t\t\t.string()\n\t\t\t.describe(\"URL of the serverless platform to configure runners.\"),\n\t\theaders: z\n\t\t\t.record(z.string(), z.string())\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Headers to include in requests to the serverless platform.\",\n\t\t\t),\n\t\trequestLifespan: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\"Maximum lifespan of a request in seconds.\"),\n\t\tdrainGracePeriod: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Grace period before the serverless request is forcibly closed, in seconds.\",\n\t\t\t),\n\t\tmetadata: 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\"Additional metadata to pass to the serverless platform.\",\n\t\t\t),\n\t\tmetadataPollInterval: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Interval in milliseconds between metadata polls from the engine. Defaults to 10000 milliseconds (10 seconds).\",\n\t\t\t),\n\t\tdrainOnVersionUpgrade: z\n\t\t\t.boolean()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Drain runners when a new version is deployed. Defaults to true.\",\n\t\t\t),\n\t})\n\t.optional();\n\nexport const DocServerlessConfigSchema = z\n\t.object({\n\t\tbasePath: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Base path for serverless API routes. Default: '/api/rivet'\",\n\t\t\t),\n\t\tmaxStartPayloadBytes: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t`Maximum POST /start body size in bytes. Default: ${DEFAULT_SERVERLESS_MAX_START_PAYLOAD_BYTES}`,\n\t\t\t),\n\t\tpublicEndpoint: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"The endpoint that clients should connect to. Supports URL auth syntax: https://namespace:token@api.rivet.dev\",\n\t\t\t),\n\t\tpublicToken: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Token that clients should use when connecting via the public endpoint.\",\n\t\t\t),\n\t})\n\t.describe(\"Configuration for serverless deployment mode.\");\n\nexport const DocEnvoyConfigSchema = z\n\t.object({\n\t\ttotalSlots: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\"Total number of actor slots available. Default: 100000\"),\n\t\tpoolName: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\"Name of this envoy pool. Default: 'default'\"),\n\t\tenvoyKey: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\"Deprecated. Authentication key for the envoy.\"),\n\t\tversion: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\"Version number of this envoy. Default: 1\"),\n\t})\n\t.describe(\"Configuration for envoy mode.\");\n\nexport const DocSqliteConfigSchema = z\n\t.object({\n\t\tbackend: SqliteBackendSchema.optional().describe(\n\t\t\t\"SQLite backend to use. Native defaults to local. Wasm defaults to remote and cannot use local.\",\n\t\t),\n\t})\n\t.optional()\n\t.describe(\"SQLite runtime configuration.\");\n\nexport const DocRegistryConfigSchema = z\n\t.object({\n\t\tuse: z\n\t\t\t.record(z.string(), z.unknown())\n\t\t\t.describe(\n\t\t\t\t\"Actor definitions. Keys are actor names, values are actor definitions.\",\n\t\t\t),\n\t\tmaxIncomingMessageSize: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Maximum size of incoming WebSocket messages in bytes. Default: 65536\",\n\t\t\t),\n\t\tmaxOutgoingMessageSize: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Maximum size of outgoing WebSocket messages in bytes. Default: 1048576\",\n\t\t\t),\n\t\tnoWelcome: z\n\t\t\t.boolean()\n\t\t\t.optional()\n\t\t\t.describe(\"Disable the welcome message on startup. Default: false\"),\n\t\tsqlite: DocSqliteConfigSchema,\n\t\tlogging: z\n\t\t\t.object({\n\t\t\t\tlevel: LogLevelSchema.optional().describe(\n\t\t\t\t\t\"Log level for RivetKit. Default: 'warn'\",\n\t\t\t\t),\n\t\t\t})\n\t\t\t.optional()\n\t\t\t.describe(\"Logging configuration.\"),\n\t\tendpoint: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Endpoint URL to connect to Rivet Engine. Supports URL auth syntax: https://namespace:token@api.rivet.dev. Can also be set via RIVET_ENDPOINT environment variable.\",\n\t\t\t),\n\t\ttoken: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Authentication token for Rivet Engine. Can also be set via RIVET_TOKEN environment variable.\",\n\t\t\t),\n\t\tnamespace: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Namespace to use. Default: 'default'. Can also be set via RIVET_NAMESPACE environment variable.\",\n\t\t\t),\n\t\theaders: z\n\t\t\t.record(z.string(), z.string())\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Additional headers to include in requests to Rivet Engine.\",\n\t\t\t),\n\t\tstaticDir: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Directory to serve static files from. When set, registry.start() serves static files alongside the actor API.\",\n\t\t\t),\n\t\thttpBasePath: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\"Base path for the local RivetKit API. Default: '/'\"),\n\t\thttpPort: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\"Port to run the local HTTP server on. Default: 6421\"),\n\t\thttpHost: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\"Host to bind the local HTTP server to.\"),\n\t\tstartEngine: z\n\t\t\t.boolean()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Starts the full Rust engine process locally. Default: false\",\n\t\t\t),\n\t\tengineVersion: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Version of the local engine package to use. Defaults to the current RivetKit version.\",\n\t\t\t),\n\t\tconfigurePool: DocConfigurePoolSchema.describe(\n\t\t\t\"Automatically configure serverless runners in the engine.\",\n\t\t),\n\t\tserverless: DocServerlessConfigSchema.optional(),\n\t\tenvoy: DocEnvoyConfigSchema.optional(),\n\t})\n\t.describe(\"RivetKit registry configuration.\");\n","import { z } from \"zod/v4\";\nimport { getLogger } from \"@/common/log\";\nimport {\n\tisDev,\n\tgetNodeEnv,\n\tgetRivetPool,\n\tgetRivetTotalSlots,\n\tgetRivetEnvoyVersion,\n} from \"@/utils/env-vars\";\n\nlet warnedMissingVersion = false;\n\nexport const EnvoyConfigSchema = z.object({\n\tpoolName: z.string().default(() => getRivetPool() ?? \"default\"),\n\tversion: z.number().default(() => {\n\t\tconst version = getRivetEnvoyVersion();\n\t\tif (version !== undefined) return version;\n\n\t\tif (getNodeEnv() === \"production\" && !warnedMissingVersion) {\n\t\t\twarnedMissingVersion = true;\n\t\t\tgetLogger(\"rivetkit\").error(\n\t\t\t\t\"RIVET_ENVOY_VERSION is not set. Actors will not be versioned, which means they won't be drained on deploy. This is only needed when self-hosting or using a custom envoy (not needed for Rivet Compute). Set this as a build arg in your Dockerfile. See https://rivet.dev/docs/actors/versions\",\n\t\t\t);\n\t\t}\n\n\t\treturn 1;\n\t}),\n\n\t// Deprecated.\n\ttotalSlots: z.number().default(() => getRivetTotalSlots() ?? 100000),\n\tenvoyKey: z.string().optional(),\n});\nexport type EnvoyConfigInput = z.input<typeof EnvoyConfigSchema>;\nexport type EnvoyConfig = z.infer<typeof EnvoyConfigSchema>;\n","import { z } from \"zod/v4\";\nimport { getRivetPublicEndpoint, getRivetPublicToken } from \"@/utils/env-vars\";\n\nexport const DEFAULT_SERVERLESS_MAX_START_PAYLOAD_BYTES = 16 * 1024 * 1024;\n\nexport const ConfigurePoolSchema = z\n\t.object({\n\t\tname: z.string().optional(),\n\t\turl: z.string(),\n\t\theaders: z.record(z.string(), z.string()).optional(),\n\t\trequestLifespan: z.number().optional(),\n\t\tdrainGracePeriod: z.number().optional(),\n\t\tmetadata: z.record(z.string(), z.unknown()).optional(),\n\t\tmetadataPollInterval: z.number().optional(),\n\t\tdrainOnVersionUpgrade: z.boolean().optional(),\n\t})\n\t.optional();\n\nexport const ServerlessConfigSchema = z.object({\n\t// MARK: Routing\n\tbasePath: z.string().optional().default(\"/api/rivet\"),\n\tmaxStartPayloadBytes: z\n\t\t.number()\n\t\t.optional()\n\t\t.default(DEFAULT_SERVERLESS_MAX_START_PAYLOAD_BYTES),\n\n\t// MARK: Public Endpoint Configuration\n\t/**\n\t * The endpoint that clients should connect to.\n\t *\n\t * This is useful if clients connect to serverless directly\n\t * (e.g. `http://localhost:3000/api/rivet`), they will fetch\n\t * `http://localhost:3000/api/rivet/metadata` and be redirected to\n\t * the public endpoint.\n\t *\n\t * Supports URL auth syntax for namespace and token:\n\t * - `https://namespace:token@api.rivet.dev`\n\t * - `https://namespace@api.rivet.dev`\n\t *\n\t * Auto-determined based on endpoint and NODE_ENV if not specified.\n\t *\n\t * Can also be set via RIVET_PUBLIC_ENDPOINT environment variable.\n\t */\n\tpublicEndpoint: z\n\t\t.string()\n\t\t.optional()\n\t\t.transform((val) => val ?? getRivetPublicEndpoint()),\n\n\t/**\n\t * Token that clients should use when connecting via the public endpoint.\n\t *\n\t * Can also be set via RIVET_PUBLIC_TOKEN environment variable.\n\t *\n\t * Can also be specified in the publicEndpoint URL as `https://namespace:token@host`.\n\t */\n\tpublicToken: z\n\t\t.string()\n\t\t.optional()\n\t\t.transform((val) => val ?? getRivetPublicToken()),\n\n\t// There is no publicNamespace config option because the frontend and backend\n\t// cannot use different namespaces. The namespace is extracted from the\n\t// publicEndpoint URL auth syntax if provided.\n});\nexport type ServerlessConfigInput = z.input<typeof ServerlessConfigSchema>;\nexport type ServerlessConfig = z.infer<typeof ServerlessConfigSchema>;\n","import { VirtualWebSocket } from \"@rivetkit/virtual-websocket\";\nimport {\n\tACTOR_CONTEXT_INTERNAL_SYMBOL,\n\tCONN_STATE_MANAGER_SYMBOL,\n\tgetRunFunction,\n\tgetRunInspectorConfig,\n\ttype WorkflowInspectorConfig,\n} from \"@/actor/config\";\nimport type { AnyActorDefinition } from \"@/actor/definition\";\nimport {\n\tdecodeBridgeRivetError,\n\tencodeBridgeRivetError,\n\tforbiddenError,\n\tINTERNAL_ERROR_CODE,\n\tisRivetErrorLike,\n\tRivetError,\n\ttype RivetErrorLike,\n\ttoRivetError,\n} from \"@/actor/errors\";\nimport { makePrefixedKey, removePrefixFromKey } from \"@/actor/keys\";\nimport {\n\tgetEventCanSubscribe,\n\tgetQueueCanPublish,\n\thasSchemaConfigKey,\n} from \"@/actor/schema\";\nimport {\n\ttype AnyClient,\n\ttype Client,\n\tcreateClientWithDriver,\n} from \"@/client/client\";\nimport { convertRegistryConfigToClientConfig } from \"@/client/config\";\nimport {\n\tHEADER_CONN_PARAMS,\n\tHEADER_ENCODING,\n} from \"@/common/actor-router-consts\";\nimport type * as protocol from \"@/common/client-protocol\";\nimport {\n\tCURRENT_VERSION as CLIENT_PROTOCOL_CURRENT_VERSION,\n\tHTTP_RESPONSE_ERROR_VERSIONED,\n} from \"@/common/client-protocol-versioned\";\nimport {\n\ttype HttpResponseError as HttpResponseErrorJson,\n\tHttpResponseErrorSchema,\n} from \"@/common/client-protocol-zod\";\nimport type { AnyDatabaseProvider } from \"@/common/database/config\";\nimport { wrapJsNativeDatabase } from \"@/common/database/native-database\";\nimport type { Encoding } from \"@/common/encoding\";\nimport { decodeWorkflowHistoryTransport } from \"@/common/inspector-transport\";\nimport { deconstructError, stringifyError } from \"@/common/utils\";\nimport type {\n\tRivetCloseEvent,\n\tRivetEvent,\n\tRivetMessageEvent,\n\tUniversalWebSocket,\n} from \"@/common/websocket-interface\";\nimport { RemoteEngineControlClient } from \"@/engine-client/mod\";\nimport type { Registry } from \"@/registry\";\nimport type {\n\tRegistryConfig,\n\tRuntimeKind,\n\tSqliteBackend,\n} from \"@/registry/config\";\nimport {\n\tcontentTypeForEncoding,\n\tdecodeCborCompat,\n\tdecodeCborJsonCompat,\n\tencodeCborCompat,\n\tserializeWithEncoding,\n} from \"@/serde\";\nimport { getEnvUniversal, VERSION } from \"@/utils\";\nimport { logger } from \"./log\";\nimport { loadNapiRuntime } from \"./napi-runtime\";\nimport {\n\ttype NativeValidationConfig,\n\tvalidateActionArgs,\n\tvalidateConnParams,\n\tvalidateEventArgs,\n\tvalidateQueueBody,\n\tvalidateQueueComplete,\n} from \"./native-validation\";\nimport type {\n\tActorContextHandle,\n\tActorFactoryHandle,\n\tCancellationTokenHandle,\n\tConnHandle,\n\tCoreRuntime,\n\tRegistryHandle,\n\tRuntimeActorConfig,\n\tRuntimeBytes,\n\tRuntimeHttpResponse,\n\tRuntimeQueueMessage,\n\tRuntimeServeConfig,\n\tRuntimeStateDeltaPayload,\n\tWebSocketHandle,\n} from \"./runtime\";\nimport { loadWasmRuntime } from \"./wasm-runtime\";\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\ntype ResolvedRuntimeKind = Exclude<RuntimeKind, \"auto\">;\ntype RuntimeHostKind = \"node-like\" | \"edge-like\";\nexport type RuntimeLoaders = {\n\tloadNative: () => ReturnType<typeof loadNapiRuntime>;\n\tloadWasm: (\n\t\tconfig?: RegistryConfig[\"wasm\"],\n\t) => ReturnType<typeof loadWasmRuntime>;\n\tdetectHost: () => RuntimeHostKind;\n};\ntype SerializeStateReason = \"save\" | \"inspector\";\ntype NativeOnStateChangeHandler = (\n\tctx: ActorContextHandleAdapter,\n\tstate: unknown,\n) => void | Promise<void>;\ntype NativePersistConnState = {\n\tstate: unknown;\n};\n\nconst defaultRuntimeLoaders: RuntimeLoaders = {\n\tloadNative: loadNapiRuntime,\n\tloadWasm: loadWasmRuntime,\n\tdetectHost: detectRuntimeHost,\n};\n\nfunction trySetProcessEnv(key: string, value: string) {\n\tif (typeof process === \"undefined\") return;\n\ttry {\n\t\tprocess.env[key] = value;\n\t} catch {\n\t\t// Some edge runtimes expose a read-only Node-compatible process.env.\n\t}\n}\n\nexport function detectRuntimeHost(): RuntimeHostKind {\n\tconst globalScope = globalThis as typeof globalThis & {\n\t\tBun?: unknown;\n\t\tDeno?: unknown;\n\t\tprocess?: { versions?: { node?: string } };\n\t\tself?: unknown;\n\t\twindow?: unknown;\n\t};\n\n\tif (\n\t\tglobalScope.Deno !== undefined ||\n\t\tglobalScope.Bun !== undefined ||\n\t\ttypeof globalScope.process?.versions?.node === \"string\"\n\t) {\n\t\treturn \"node-like\";\n\t}\n\n\treturn \"edge-like\";\n}\n\nexport function resolveRuntimeKind(\n\truntime: RuntimeKind | undefined,\n): RuntimeKind {\n\treturn runtime ?? \"auto\";\n}\n\nfunction loadedRuntimeKind(runtime: CoreRuntime): ResolvedRuntimeKind {\n\tswitch (runtime.kind) {\n\t\tcase \"napi\":\n\t\t\treturn \"native\";\n\t\tcase \"wasm\":\n\t\t\treturn \"wasm\";\n\t}\n\n\tthrow new RivetError(\n\t\t\"config\",\n\t\t\"unknown_runtime\",\n\t\t\"RivetKit runtime must be NAPI or wasm.\",\n\t\t{\n\t\t\tpublic: true,\n\t\t\tstatusCode: 500,\n\t\t},\n\t);\n}\n\nexport async function loadAutoRuntime(\n\tconfig: RegistryConfig,\n\tloaders: RuntimeLoaders = defaultRuntimeLoaders,\n): Promise<CoreRuntime> {\n\tif (loaders.detectHost() === \"edge-like\") {\n\t\treturn (await loaders.loadWasm(config.wasm)).runtime;\n\t}\n\n\ttry {\n\t\treturn (await loaders.loadNative()).runtime;\n\t} catch {\n\t\treturn (await loaders.loadWasm(config.wasm)).runtime;\n\t}\n}\n\nexport async function loadConfiguredRuntime(\n\tconfig: RegistryConfig,\n\tloaders: RuntimeLoaders = defaultRuntimeLoaders,\n): Promise<CoreRuntime> {\n\tconst requested = resolveRuntimeKind(config.runtime);\n\n\tif (requested === \"native\") {\n\t\treturn (await loaders.loadNative()).runtime;\n\t}\n\n\tif (requested === \"wasm\") {\n\t\treturn (await loaders.loadWasm(config.wasm)).runtime;\n\t}\n\n\treturn loadAutoRuntime(config, loaders);\n}\n\nfunction sqliteBackendForConfig(\n\tconfig: RegistryConfig,\n): SqliteBackend | undefined {\n\treturn config.sqlite?.backend ?? config.test?.sqliteBackend;\n}\n\nexport function normalizeRuntimeConfigForKind(\n\tconfig: RegistryConfig,\n\truntimeKind: ResolvedRuntimeKind,\n): RegistryConfig {\n\tif (runtimeKind === \"native\") {\n\t\treturn config;\n\t}\n\n\tif (sqliteBackendForConfig(config) === \"local\") {\n\t\tthrow new RivetError(\n\t\t\t\"config\",\n\t\t\t\"wasm_local_sqlite\",\n\t\t\t\"WebAssembly runtime cannot use local SQLite. Use remote SQLite instead.\",\n\t\t\t{\n\t\t\t\tpublic: true,\n\t\t\t\tstatusCode: 400,\n\t\t\t\tmetadata: { runtime: \"wasm\", sqliteBackend: \"local\" },\n\t\t\t},\n\t\t);\n\t}\n\n\treturn {\n\t\t...config,\n\t\tsqlite: {\n\t\t\t...config.sqlite,\n\t\t\tbackend: \"remote\",\n\t\t},\n\t\ttest: {\n\t\t\t...config.test,\n\t\t\tenabled: config.test?.enabled ?? false,\n\t\t\tsqliteBackend: \"remote\",\n\t\t},\n\t};\n}\n\nexport function normalizeRuntimeConfig(\n\tconfig: RegistryConfig,\n\truntime: CoreRuntime,\n): RegistryConfig {\n\treturn normalizeRuntimeConfigForKind(config, loadedRuntimeKind(runtime));\n}\ntype NativePersistActorState = {\n\tstate: unknown;\n\tisInOnStateChange: boolean;\n\tconnStates: Map<string, NativePersistConnState>;\n};\ntype NativeDestroyGate = {\n\tdestroyCompletion?: Promise<void>;\n\tresolveDestroy?: () => void;\n};\ntype NativeDatabaseClientState = {\n\tclient: unknown;\n};\ntype NativeActorRuntimeState = {\n\tsql?: ReturnType<typeof wrapJsNativeDatabase>;\n\tdatabaseClient?: NativeDatabaseClientState;\n\tkeepAwakeCount?: number;\n\tdeferSleepCleanupUntilKeepAwakeIdle?: boolean;\n\tdeferredSleepCleanupActorCtx?: ActorContextHandleAdapter;\n\tvarsInitialized?: boolean;\n\tvars?: unknown;\n\tdestroyGate?: NativeDestroyGate;\n\tpersistState?: NativePersistActorState;\n};\n\n// Keep JS-only actor caches on the NAPI ActorContext runtime-state bag instead\n// of actorId-keyed module globals so same-key recreates start from a fresh\n// generation.\nfunction getNativeRuntimeState(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n): NativeActorRuntimeState {\n\tconst runtimeState = callNativeSync(() =>\n\t\truntime.actorRuntimeState(ctx),\n\t) as NativeActorRuntimeState;\n\tif (!runtimeState.destroyGate) {\n\t\truntimeState.destroyGate = {};\n\t}\n\tif (!runtimeState.persistState) {\n\t\truntimeState.persistState = {\n\t\t\tstate: undefined,\n\t\t\tisInOnStateChange: false,\n\t\t\tconnStates: new Map(),\n\t\t};\n\t}\n\treturn runtimeState;\n}\n\nfunction getNativePersistState(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n): NativePersistActorState {\n\tconst persistState = getNativeRuntimeState(runtime, ctx).persistState;\n\tif (!persistState) {\n\t\tthrow new Error(\"native persist state was not initialized\");\n\t}\n\treturn persistState;\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<void> {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"then\" in value &&\n\t\ttypeof value.then === \"function\"\n\t);\n}\n\nfunction getNativeConnPersistState(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n\tconn: ConnHandle,\n): NativePersistConnState {\n\tconst persistState = getNativePersistState(runtime, ctx);\n\tconst connId = callNativeSync(() => runtime.connId(conn));\n\tlet connState = persistState.connStates.get(connId);\n\tif (!connState) {\n\t\tconnState = {\n\t\t\tstate: undefined,\n\t\t};\n\t\tpersistState.connStates.set(connId, connState);\n\t}\n\treturn connState;\n}\n\nfunction stateMutationReentrantError(): RivetError {\n\treturn new RivetError(\n\t\t\"actor\",\n\t\t\"state_mutation_reentrant\",\n\t\t\"State mutations are not allowed inside onStateChange.\",\n\t);\n}\n\nfunction databaseNotConfiguredError(): RivetError {\n\treturn new RivetError(\n\t\t\"actor\",\n\t\t\"database_not_configured\",\n\t\t\"database is not configured for this actor\",\n\t\t{ public: true },\n\t);\n}\n\nfunction stateNotEnabledError(): RivetError {\n\treturn new RivetError(\n\t\t\"actor\",\n\t\t\"state_not_enabled\",\n\t\t\"State not enabled. Must implement `createState` or `state` to use state. (https://www.rivet.dev/docs/actors/state/#initializing-state)\",\n\t\t{ public: true },\n\t);\n}\n\nfunction nativeClientNotConfiguredError(): RivetError {\n\treturn new RivetError(\n\t\t\"native\",\n\t\t\"client_not_configured\",\n\t\t\"native actor client is not configured\",\n\t\t{ public: true },\n\t);\n}\n\nfunction nativeEndpointNotConfiguredError(): RivetError {\n\treturn new RivetError(\n\t\t\"native\",\n\t\t\"endpoint_not_configured\",\n\t\t\"registry endpoint is required for native envoy startup\",\n\t\t{ public: true },\n\t);\n}\n\nfunction getNativeDestroyGate(runtime: CoreRuntime, ctx: ActorContextHandle) {\n\tconst destroyGate = getNativeRuntimeState(runtime, ctx).destroyGate;\n\tif (!destroyGate) {\n\t\tthrow new Error(\"native destroy gate was not initialized\");\n\t}\n\treturn destroyGate;\n}\n\nfunction markNativeDestroyRequested(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n) {\n\tconst gate = getNativeDestroyGate(runtime, ctx);\n\tif (!gate.destroyCompletion) {\n\t\tgate.destroyCompletion = new Promise<void>((resolve) => {\n\t\t\tgate.resolveDestroy = resolve;\n\t\t});\n\t}\n}\n\nfunction resolveNativeDestroy(runtime: CoreRuntime, ctx: ActorContextHandle) {\n\tconst gate = getNativeRuntimeState(runtime, ctx).destroyGate;\n\tif (!gate?.resolveDestroy) {\n\t\treturn;\n\t}\n\n\tgate.resolveDestroy();\n\tgate.resolveDestroy = undefined;\n\tgate.destroyCompletion = undefined;\n}\n\nfunction clearNativeRuntimeState(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n) {\n\tcallNativeSync(() => runtime.actorClearRuntimeState(ctx));\n}\n\nasync function cleanupNativeSleepRuntimeState(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n): Promise<void> {\n\tawait closeNativeDatabaseClient(runtime, ctx);\n\tawait closeNativeSqlDatabase(runtime, ctx);\n\tclearNativeRuntimeState(runtime, ctx);\n}\n\nasync function cleanupDeferredNativeSleepRuntimeState(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n\truntimeState: NativeActorRuntimeState,\n): Promise<void> {\n\truntimeState.deferSleepCleanupUntilKeepAwakeIdle = false;\n\tconst actorCtx = runtimeState.deferredSleepCleanupActorCtx;\n\truntimeState.deferredSleepCleanupActorCtx = undefined;\n\ttry {\n\t\tawait cleanupNativeSleepRuntimeState(runtime, ctx);\n\t} finally {\n\t\tawait actorCtx?.dispose();\n\t}\n}\n\nfunction closeNativeSqlDatabase(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n): Promise<void> | undefined {\n\tconst runtimeState = getNativeRuntimeState(runtime, ctx);\n\tconst database = runtimeState.sql;\n\tif (!database) {\n\t\treturn;\n\t}\n\n\truntimeState.sql = undefined;\n\treturn database.close();\n}\n\nasync function closeNativeDatabaseClient(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n): Promise<void> {\n\tconst runtimeState = getNativeRuntimeState(runtime, ctx);\n\tconst entry = runtimeState.databaseClient;\n\tif (!entry) {\n\t\treturn;\n\t}\n\n\truntimeState.databaseClient = undefined;\n\n\tif (\n\t\tentry.client &&\n\t\ttypeof entry.client === \"object\" &&\n\t\t\"close\" in entry.client &&\n\t\ttypeof entry.client.close === \"function\"\n\t) {\n\t\tawait entry.client.close();\n\t}\n}\n\nfunction getOrCreateNativeSqlDatabase(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n): ReturnType<typeof wrapJsNativeDatabase> {\n\tconst runtimeState = getNativeRuntimeState(runtime, ctx);\n\tconst cachedDatabase = runtimeState.sql;\n\tif (cachedDatabase) {\n\t\treturn cachedDatabase;\n\t}\n\n\tconst database = wrapJsNativeDatabase({\n\t\texec: (sql) => runtime.actorSqlExec(ctx, sql),\n\t\texecute: (sql, params) => runtime.actorSqlExecute(ctx, sql, params),\n\t\tquery: (sql, params) => runtime.actorSqlQuery(ctx, sql, params),\n\t\trun: (sql, params) => runtime.actorSqlRun(ctx, sql, params),\n\t\tmetrics: () => runtime.actorSqlMetrics(ctx),\n\t\ttakeLastKvError: () => runtime.actorSqlTakeLastKvError(ctx),\n\t\tclose: () => runtime.actorSqlClose(ctx),\n\t});\n\truntimeState.sql = database;\n\treturn database;\n}\n\nfunction toRuntimeBytes(\n\tvalue: string | Uint8Array | ArrayBuffer,\n): RuntimeBytes {\n\tif (typeof value === \"string\") {\n\t\treturn textEncoder.encode(value);\n\t}\n\tif (value instanceof Uint8Array) {\n\t\treturn value;\n\t}\n\treturn new Uint8Array(value);\n}\n\nfunction arrayBufferViewToRuntimeBytes(value: ArrayBufferView): RuntimeBytes {\n\treturn new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n}\n\nfunction runtimeBytesToArrayBuffer(value: RuntimeBytes): ArrayBuffer {\n\treturn value.buffer.slice(\n\t\tvalue.byteOffset,\n\t\tvalue.byteOffset + value.byteLength,\n\t) as ArrayBuffer;\n}\n\ntype NativeKvValueType = \"text\" | \"arrayBuffer\" | \"binary\";\ntype NativeKvKeyType = \"text\" | \"binary\";\n\ntype NativeKvValueTypeMap = {\n\ttext: string;\n\tarrayBuffer: ArrayBuffer;\n\tbinary: Uint8Array;\n};\n\ntype NativeKvKeyTypeMap = {\n\ttext: string;\n\tbinary: Uint8Array;\n};\n\ntype NativeKvValueOptions<T extends NativeKvValueType = \"text\"> = {\n\ttype?: T;\n};\n\ntype NativeKvListOptions<\n\tT extends NativeKvValueType = \"text\",\n\tK extends NativeKvKeyType = \"text\",\n> = NativeKvValueOptions<T> & {\n\tkeyType?: K;\n\treverse?: boolean;\n\tlimit?: number;\n};\n\nfunction decodeNativeKvKey<K extends NativeKvKeyType = \"text\">(\n\tkey: Uint8Array,\n\tkeyType?: K,\n): NativeKvKeyTypeMap[K] {\n\tconst resolvedKeyType = keyType ?? \"text\";\n\tswitch (resolvedKeyType) {\n\t\tcase \"text\":\n\t\t\treturn textDecoder.decode(key) as NativeKvKeyTypeMap[K];\n\t\tcase \"binary\":\n\t\t\treturn key as NativeKvKeyTypeMap[K];\n\t\tdefault:\n\t\t\tthrow new TypeError(\"Invalid kv key type\");\n\t}\n}\n\nfunction encodeNativeKvUserKey<K extends NativeKvKeyType = NativeKvKeyType>(\n\tkey: NativeKvKeyTypeMap[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 decodeNativeKvValue<T extends NativeKvValueType = \"text\">(\n\tvalue: Uint8Array,\n\toptions?: NativeKvValueOptions<T>,\n): NativeKvValueTypeMap[T] {\n\tconst type = options?.type ?? \"text\";\n\tswitch (type) {\n\t\tcase \"text\":\n\t\t\treturn textDecoder.decode(value) as NativeKvValueTypeMap[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 NativeKvValueTypeMap[T];\n\t\t}\n\t\tcase \"binary\":\n\t\t\treturn value as NativeKvValueTypeMap[T];\n\t\tdefault:\n\t\t\tthrow new TypeError(\"Invalid kv value type\");\n\t}\n}\n\nasync function loadEngineCli(): Promise<typeof import(\"@rivetkit/engine-cli\")> {\n\treturn import([\"@rivetkit\", \"engine-cli\"].join(\"/\"));\n}\n\nfunction decodeValue<T>(value?: RuntimeBytes | null): T {\n\tif (!value || value.length === 0) {\n\t\treturn undefined as T;\n\t}\n\n\treturn decodeCborJsonCompat(value);\n}\n\nfunction encodeValue(value: unknown): RuntimeBytes {\n\treturn encodeCborCompat(value);\n}\n\nfunction unwrapTsfnPayload<T>(error: unknown, payload: T): T {\n\tif (error !== null && error !== undefined) {\n\t\tthrow error;\n\t}\n\n\treturn payload;\n}\n\nfunction normalizeNativeBridgeError(error: unknown): unknown {\n\tif (typeof error === \"string\") {\n\t\treturn decodeBridgeRivetError(error) ?? error;\n\t}\n\n\tif (error instanceof Error) {\n\t\tconst bridged = decodeBridgeRivetError(error.message);\n\t\tif (bridged) {\n\t\t\treturn bridged;\n\t\t}\n\t}\n\n\tif (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"reason\" in error &&\n\t\ttypeof error.reason === \"string\"\n\t) {\n\t\tconst bridged = decodeBridgeRivetError(error.reason);\n\t\tif (bridged) {\n\t\t\treturn bridged;\n\t\t}\n\t}\n\n\treturn error;\n}\n\nfunction isStructuredBridgeError(\n\terror: unknown,\n): error is RivetError | RivetErrorLike {\n\tif (error instanceof RivetError) {\n\t\treturn true;\n\t}\n\n\treturn (\n\t\tisRivetErrorLike(error) &&\n\t\t\"__type\" in error &&\n\t\t(error.__type === \"RivetError\" || error.__type === \"ActorError\")\n\t);\n}\n\nfunction encodeNativeCallbackError(error: unknown): Error {\n\tconst structuredError = isStructuredBridgeError(error)\n\t\t? error\n\t\t: deconstructError(error, logger(), {\n\t\t\t\tbridge: \"native_callback\",\n\t\t\t});\n\tlet stack: string | undefined;\n\tif (error instanceof Error) {\n\t\ttry {\n\t\t\tstack = error.stack;\n\t\t} catch {\n\t\t\tstack = undefined;\n\t\t}\n\t}\n\n\tlogger().warn({\n\t\tmsg: \"native callback error encoded for bridge\",\n\t\tgroup: structuredError.group,\n\t\tcode: structuredError.code,\n\t\tmessage: structuredError.message,\n\t\tmetadata: structuredError.metadata,\n\t\toriginalError: stringifyError(error),\n\t\tstack,\n\t\tbridge: \"native_callback\",\n\t});\n\n\tconst bridgeError = new Error(encodeBridgeRivetError(structuredError), {\n\t\tcause: error instanceof Error ? error : undefined,\n\t});\n\treturn Object.assign(bridgeError, {\n\t\tgroup: structuredError.group,\n\t\tcode: structuredError.code,\n\t\tmetadata: structuredError.metadata,\n\t});\n}\n\nasync function callNative<T>(invoke: () => Promise<T>): Promise<T> {\n\ttry {\n\t\treturn await invoke();\n\t} catch (error) {\n\t\tthrow normalizeNativeBridgeError(error);\n\t}\n}\n\nfunction callNativeSync<T>(invoke: () => T): T {\n\ttry {\n\t\treturn invoke();\n\t} catch (error) {\n\t\tthrow normalizeNativeBridgeError(error);\n\t}\n}\n\nfunction actorAbortedError(): Error & { group: string; code: string } {\n\treturn Object.assign(new Error(\"Actor aborted\"), {\n\t\tgroup: \"actor\",\n\t\tcode: \"aborted\",\n\t});\n}\n\ntype NativeWorkflowInspectorConfig = WorkflowInspectorConfig<ArrayBuffer> & {\n\tgetState?: () => Promise<unknown> | unknown;\n};\n\nfunction isClosedTaskRegistrationError(error: unknown): boolean {\n\tconst metadata = error instanceof RivetError ? error.metadata : undefined;\n\tconst metadataError =\n\t\tmetadata && typeof metadata === \"object\" && \"error\" in metadata\n\t\t\t? metadata.error\n\t\t\t: undefined;\n\treturn (\n\t\terror instanceof RivetError &&\n\t\terror.group === \"core\" &&\n\t\terror.code === INTERNAL_ERROR_CODE &&\n\t\ttypeof metadataError === \"string\" &&\n\t\t/actor task registration is (closed|not configured)/.test(metadataError)\n\t);\n}\n\nasync function createCancellationTokenHandle(\n\truntime: CoreRuntime,\n\tsignal?: AbortSignal,\n): Promise<{\n\ttoken?: CancellationTokenHandle;\n\tcleanup?: () => void;\n}> {\n\tif (!signal) {\n\t\treturn {};\n\t}\n\n\tconst token = runtime.createCancellationToken();\n\n\tif (signal.aborted) {\n\t\truntime.cancelCancellationToken(token);\n\t\treturn { token };\n\t}\n\n\tconst abort = () => runtime.cancelCancellationToken(token);\n\tsignal.addEventListener(\"abort\", abort, { once: true });\n\treturn {\n\t\ttoken,\n\t\tcleanup: () => signal.removeEventListener(\"abort\", abort),\n\t};\n}\n\nfunction decodeWorkflowCbor(data: ArrayBuffer | null): unknown | null {\n\tif (data === null) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\treturn decodeCborCompat(new Uint8Array(data));\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction serializeWorkflowLocation(\n\tlocation: ReturnType<\n\t\ttypeof decodeWorkflowHistoryTransport\n\t>[\"entries\"][number][\"location\"],\n): Array<\n\t| { tag: \"WorkflowNameIndex\"; val: number }\n\t| {\n\t\t\ttag: \"WorkflowLoopIterationMarker\";\n\t\t\tval: { loop: number; iteration: number };\n\t }\n> {\n\treturn location.map((segment) => {\n\t\tif (segment.tag === \"WorkflowNameIndex\") {\n\t\t\treturn {\n\t\t\t\ttag: segment.tag,\n\t\t\t\tval: segment.val,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\ttag: segment.tag,\n\t\t\tval: {\n\t\t\t\tloop: segment.val.loop,\n\t\t\t\titeration: segment.val.iteration,\n\t\t\t},\n\t\t};\n\t});\n}\n\nfunction serializeWorkflowBranches(\n\tbranches: ReadonlyMap<\n\t\tstring,\n\t\tReturnType<\n\t\t\ttypeof decodeWorkflowHistoryTransport\n\t\t>[\"entries\"][number][\"kind\"] extends infer T\n\t\t\t? T extends { tag: \"WorkflowJoinEntry\"; val: { branches: infer B } }\n\t\t\t\t? B extends ReadonlyMap<string, infer V>\n\t\t\t\t\t? V\n\t\t\t\t\t: never\n\t\t\t\t: T extends {\n\t\t\t\t\t\t\ttag: \"WorkflowRaceEntry\";\n\t\t\t\t\t\t\tval: { branches: infer B };\n\t\t\t\t\t\t}\n\t\t\t\t\t? B extends ReadonlyMap<string, infer V>\n\t\t\t\t\t\t? V\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t: never\n\t>,\n): Record<\n\tstring,\n\t{ status: string; output: unknown | null; error: string | null }\n> {\n\treturn Object.fromEntries(\n\t\tArray.from(branches.entries()).map(([name, branch]) => [\n\t\t\tname,\n\t\t\t{\n\t\t\t\tstatus: branch.status,\n\t\t\t\toutput: decodeWorkflowCbor(branch.output),\n\t\t\t\terror: branch.error,\n\t\t\t},\n\t\t]),\n\t);\n}\n\nfunction serializeWorkflowEntryKind(\n\tkind: ReturnType<\n\t\ttypeof decodeWorkflowHistoryTransport\n\t>[\"entries\"][number][\"kind\"],\n):\n\t| {\n\t\t\ttag: \"WorkflowStepEntry\";\n\t\t\tval: { output: unknown | null; error: string | null };\n\t }\n\t| {\n\t\t\ttag: \"WorkflowLoopEntry\";\n\t\t\tval: {\n\t\t\t\tstate: unknown | null;\n\t\t\t\titeration: number;\n\t\t\t\toutput: unknown | null;\n\t\t\t};\n\t }\n\t| { tag: \"WorkflowSleepEntry\"; val: { deadline: number; state: string } }\n\t| {\n\t\t\ttag: \"WorkflowMessageEntry\";\n\t\t\tval: { name: string; messageData: unknown | null };\n\t }\n\t| { tag: \"WorkflowRollbackCheckpointEntry\"; val: { name: string } }\n\t| {\n\t\t\ttag: \"WorkflowJoinEntry\";\n\t\t\tval: {\n\t\t\t\tbranches: Record<\n\t\t\t\t\tstring,\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: string;\n\t\t\t\t\t\toutput: unknown | null;\n\t\t\t\t\t\terror: string | null;\n\t\t\t\t\t}\n\t\t\t\t>;\n\t\t\t};\n\t }\n\t| {\n\t\t\ttag: \"WorkflowRaceEntry\";\n\t\t\tval: {\n\t\t\t\twinner: string | null;\n\t\t\t\tbranches: Record<\n\t\t\t\t\tstring,\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: string;\n\t\t\t\t\t\toutput: unknown | null;\n\t\t\t\t\t\terror: string | null;\n\t\t\t\t\t}\n\t\t\t\t>;\n\t\t\t};\n\t }\n\t| {\n\t\t\ttag: \"WorkflowRemovedEntry\";\n\t\t\tval: { originalType: string; originalName: string | null };\n\t } {\n\tswitch (kind.tag) {\n\t\tcase \"WorkflowStepEntry\":\n\t\t\treturn {\n\t\t\t\ttag: kind.tag,\n\t\t\t\tval: {\n\t\t\t\t\toutput: decodeWorkflowCbor(kind.val.output),\n\t\t\t\t\terror: kind.val.error,\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"WorkflowLoopEntry\":\n\t\t\treturn {\n\t\t\t\ttag: kind.tag,\n\t\t\t\tval: {\n\t\t\t\t\tstate: decodeWorkflowCbor(kind.val.state),\n\t\t\t\t\titeration: kind.val.iteration,\n\t\t\t\t\toutput: decodeWorkflowCbor(kind.val.output),\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"WorkflowSleepEntry\":\n\t\t\treturn {\n\t\t\t\ttag: kind.tag,\n\t\t\t\tval: {\n\t\t\t\t\tdeadline: Number(kind.val.deadline),\n\t\t\t\t\tstate: kind.val.state,\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"WorkflowMessageEntry\":\n\t\t\treturn {\n\t\t\t\ttag: kind.tag,\n\t\t\t\tval: {\n\t\t\t\t\tname: kind.val.name,\n\t\t\t\t\tmessageData: decodeWorkflowCbor(kind.val.messageData),\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"WorkflowRollbackCheckpointEntry\":\n\t\t\treturn {\n\t\t\t\ttag: kind.tag,\n\t\t\t\tval: {\n\t\t\t\t\tname: kind.val.name,\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"WorkflowJoinEntry\":\n\t\t\treturn {\n\t\t\t\ttag: kind.tag,\n\t\t\t\tval: {\n\t\t\t\t\tbranches: serializeWorkflowBranches(kind.val.branches),\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"WorkflowRaceEntry\":\n\t\t\treturn {\n\t\t\t\ttag: kind.tag,\n\t\t\t\tval: {\n\t\t\t\t\twinner: kind.val.winner,\n\t\t\t\t\tbranches: serializeWorkflowBranches(kind.val.branches),\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"WorkflowRemovedEntry\":\n\t\t\treturn {\n\t\t\t\ttag: kind.tag,\n\t\t\t\tval: {\n\t\t\t\t\toriginalType: kind.val.originalType,\n\t\t\t\t\toriginalName: kind.val.originalName,\n\t\t\t\t},\n\t\t\t};\n\t}\n}\n\nfunction serializeWorkflowHistoryForJson(data: ArrayBuffer | null): {\n\tnameRegistry: string[];\n\tentries: Array<{\n\t\tid: string;\n\t\tlocation: Array<\n\t\t\t| { tag: \"WorkflowNameIndex\"; val: number }\n\t\t\t| {\n\t\t\t\t\ttag: \"WorkflowLoopIterationMarker\";\n\t\t\t\t\tval: { loop: number; iteration: number };\n\t\t\t }\n\t\t>;\n\t\tkind: ReturnType<typeof serializeWorkflowEntryKind>;\n\t}>;\n\tentryMetadata: Record<\n\t\tstring,\n\t\t{\n\t\t\tstatus: string;\n\t\t\terror: string | null;\n\t\t\tattempts: number;\n\t\t\tlastAttemptAt: number;\n\t\t\tcreatedAt: number;\n\t\t\tcompletedAt: number | null;\n\t\t\trollbackCompletedAt: number | null;\n\t\t\trollbackError: string | null;\n\t\t}\n\t>;\n} | null {\n\tif (data === null) {\n\t\treturn null;\n\t}\n\n\tconst history = decodeWorkflowHistoryTransport(data);\n\n\treturn {\n\t\tnameRegistry: [...history.nameRegistry],\n\t\tentries: history.entries.map((entry) => ({\n\t\t\tid: entry.id,\n\t\t\tlocation: serializeWorkflowLocation(entry.location),\n\t\t\tkind: serializeWorkflowEntryKind(entry.kind),\n\t\t})),\n\t\tentryMetadata: Object.fromEntries(\n\t\t\tArray.from(history.entryMetadata.entries()).map(\n\t\t\t\t([entryId, meta]) => [\n\t\t\t\t\tentryId,\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: meta.status,\n\t\t\t\t\t\terror: meta.error,\n\t\t\t\t\t\tattempts: meta.attempts,\n\t\t\t\t\t\tlastAttemptAt: Number(meta.lastAttemptAt),\n\t\t\t\t\t\tcreatedAt: Number(meta.createdAt),\n\t\t\t\t\t\tcompletedAt:\n\t\t\t\t\t\t\tmeta.completedAt === null\n\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t: Number(meta.completedAt),\n\t\t\t\t\t\trollbackCompletedAt:\n\t\t\t\t\t\t\tmeta.rollbackCompletedAt === null\n\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t: Number(meta.rollbackCompletedAt),\n\t\t\t\t\t\trollbackError: meta.rollbackError,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t),\n\t\t),\n\t};\n}\n\nfunction toHttpJsonCompatible<T>(value: T): T {\n\treturn JSON.parse(\n\t\tJSON.stringify(value, (_key, nestedValue) =>\n\t\t\ttypeof nestedValue === \"bigint\"\n\t\t\t\t? Number(nestedValue)\n\t\t\t\t: nestedValue instanceof Uint8Array\n\t\t\t\t\t? Array.from(nestedValue)\n\t\t\t\t\t: nestedValue,\n\t\t),\n\t) as T;\n}\n\nfunction jsonSafe<T>(value: T): T {\n\treturn toHttpJsonCompatible(value);\n}\n\nfunction normalizeSqlitePropertyBindings(\n\tproperties: Record<string, unknown>,\n): Record<string, unknown> {\n\tconst normalized: Record<string, unknown> = {};\n\tfor (const [key, value] of Object.entries(properties)) {\n\t\tif (/^[:@$]/.test(key)) {\n\t\t\tnormalized[key] = value;\n\t\t\tcontinue;\n\t\t}\n\n\t\tnormalized[`:${key}`] = value;\n\t\tnormalized[`@${key}`] = value;\n\t\tnormalized[`$${key}`] = value;\n\t}\n\treturn normalized;\n}\n\nfunction queryRows(result: unknown): Array<Record<string, unknown>> {\n\tif (Array.isArray(result)) {\n\t\treturn result as Array<Record<string, unknown>>;\n\t}\n\tif (\n\t\tresult &&\n\t\ttypeof result === \"object\" &&\n\t\t\"columns\" in result &&\n\t\t\"rows\" in result &&\n\t\tArray.isArray((result as { columns: unknown }).columns) &&\n\t\tArray.isArray((result as { rows: unknown }).rows)\n\t) {\n\t\tconst columns = (result as { columns: string[] }).columns;\n\t\treturn ((result as { rows: unknown[][] }).rows ?? []).map((row) =>\n\t\t\tObject.fromEntries(\n\t\t\t\tcolumns.map((column, index) => [column, row[index]]),\n\t\t\t),\n\t\t);\n\t}\n\treturn [];\n}\n\nfunction wrapNativeCallback<Args extends Array<unknown>, Result>(\n\tcallback: (...args: Args) => Result | Promise<Result>,\n): (...args: Args) => Promise<Result> {\n\treturn async (...args: Args) => {\n\t\ttry {\n\t\t\treturn await callback(...args);\n\t\t} catch (error) {\n\t\t\tthrow encodeNativeCallbackError(error);\n\t\t}\n\t};\n}\n\nfunction decodeArgs(value?: RuntimeBytes | null): unknown[] {\n\tconst decoded = decodeValue<unknown>(value);\n\treturn Array.isArray(decoded)\n\t\t? decoded\n\t\t: decoded === undefined\n\t\t\t? []\n\t\t\t: [decoded];\n}\n\nfunction createWriteThroughProxy<T>(\n\tvalue: T,\n\tcommit: (next: T) => void,\n\tbeforeChange?: () => void,\n): T {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn value;\n\t}\n\n\tconst proxies = new WeakMap<object, object>();\n\tconst wrap = (target: object): object => {\n\t\tconst cached = proxies.get(target);\n\t\tif (cached) {\n\t\t\treturn cached;\n\t\t}\n\n\t\tconst proxy = new Proxy(target, {\n\t\t\tget(innerTarget, property, receiver) {\n\t\t\t\tconst result = Reflect.get(innerTarget, property, receiver);\n\t\t\t\treturn result && typeof result === \"object\"\n\t\t\t\t\t? wrap(result as object)\n\t\t\t\t\t: result;\n\t\t\t},\n\t\t\tset(innerTarget, property, nextValue, receiver) {\n\t\t\t\tbeforeChange?.();\n\t\t\t\tconst updated = Reflect.set(\n\t\t\t\t\tinnerTarget,\n\t\t\t\t\tproperty,\n\t\t\t\t\tnextValue,\n\t\t\t\t\treceiver,\n\t\t\t\t);\n\t\t\t\tcommit(value);\n\t\t\t\treturn updated;\n\t\t\t},\n\t\t\tdeleteProperty(innerTarget, property) {\n\t\t\t\tbeforeChange?.();\n\t\t\t\tconst updated = Reflect.deleteProperty(innerTarget, property);\n\t\t\t\tcommit(value);\n\t\t\t\treturn updated;\n\t\t\t},\n\t\t});\n\n\t\tproxies.set(target, proxy);\n\t\treturn proxy;\n\t};\n\n\treturn wrap(value as object) as T;\n}\n\nfunction buildRequest(init: {\n\tmethod: string;\n\turi: string;\n\theaders?: Record<string, string>;\n\tbody?: RuntimeBytes;\n}): Request {\n\tconst url = init.uri.startsWith(\"http\")\n\t\t? init.uri\n\t\t: new URL(init.uri, \"http://127.0.0.1\").toString();\n\tconst body =\n\t\tinit.body && init.body.length > 0\n\t\t\t? runtimeBytesToArrayBuffer(init.body)\n\t\t\t: undefined;\n\treturn new Request(url, {\n\t\tmethod: init.method,\n\t\theaders: init.headers,\n\t\tbody,\n\t});\n}\n\nasync function toRuntimeHttpResponse(\n\tresponse: Response,\n): Promise<RuntimeHttpResponse> {\n\tconst headers = Object.fromEntries(response.headers.entries());\n\tconst body = new Uint8Array(await response.arrayBuffer());\n\treturn {\n\t\tstatus: response.status,\n\t\theaders,\n\t\tbody,\n\t};\n}\n\nfunction toActorKey(\n\tsegments: Array<{\n\t\tkind: string;\n\t\tstringValue?: string;\n\t\tnumberValue?: number;\n\t}>,\n): string[] {\n\treturn segments.map((segment) =>\n\t\tsegment.kind === \"number\"\n\t\t\t? String(segment.numberValue ?? 0)\n\t\t\t: (segment.stringValue ?? \"\"),\n\t);\n}\n\nclass NativeConnAdapter {\n\t#runtime: CoreRuntime;\n\t#conn: ConnHandle;\n\t#schemas: NativeValidationConfig;\n\t#ctx?: ActorContextHandle;\n\t#queueHibernationRemoval?: (connId: string) => void;\n\n\tconstructor(\n\t\truntime: CoreRuntime,\n\t\tconn: ConnHandle,\n\t\tschemas: NativeValidationConfig = {},\n\t\tctx?: ActorContextHandle,\n\t\tqueueHibernationRemoval?: (connId: string) => void,\n\t) {\n\t\tthis.#runtime = runtime;\n\t\tthis.#conn = conn;\n\t\tthis.#schemas = schemas;\n\t\tthis.#ctx = ctx;\n\t\tthis.#queueHibernationRemoval = queueHibernationRemoval;\n\t\t(\n\t\t\tthis as NativeConnAdapter & {\n\t\t\t\t[CONN_STATE_MANAGER_SYMBOL]?: unknown;\n\t\t\t}\n\t\t)[CONN_STATE_MANAGER_SYMBOL] = {\n\t\t\tstateEnabled: true,\n\t\t\tget state() {\n\t\t\t\treturn thisConn.state;\n\t\t\t},\n\t\t};\n\t\tconst thisConn = this;\n\t}\n\n\tget id(): string {\n\t\treturn this.#runtime.connId(this.#conn);\n\t}\n\n\tget params(): unknown {\n\t\treturn validateConnParams(\n\t\t\tthis.#schemas.connParamsSchema,\n\t\t\tdecodeValue(this.#runtime.connParams(this.#conn)),\n\t\t);\n\t}\n\n\tget state(): unknown {\n\t\tconst nextState = this.#readState();\n\t\treturn createWriteThroughProxy(nextState, (nextValue) => {\n\t\t\tthis.#writeState(nextValue, { writeNative: true });\n\t\t});\n\t}\n\n\tset state(value: unknown) {\n\t\tthis.#writeState(value, { writeNative: true });\n\t}\n\n\tinitializeState(value: unknown): void {\n\t\tthis.#writeState(value, { writeNative: false });\n\t}\n\n\tget isHibernatable(): boolean {\n\t\treturn callNativeSync(() =>\n\t\t\tthis.#runtime.connIsHibernatable(this.#conn),\n\t\t);\n\t}\n\n\tsend(name: string, ...args: unknown[]): void {\n\t\tconst validatedArgs = validateEventArgs(\n\t\t\tthis.#schemas.events,\n\t\t\tname,\n\t\t\targs,\n\t\t);\n\t\tcallNativeSync(() =>\n\t\t\tthis.#runtime.connSend(\n\t\t\t\tthis.#conn,\n\t\t\t\tname,\n\t\t\t\tencodeValue(validatedArgs),\n\t\t\t),\n\t\t);\n\t}\n\n\tasync disconnect(reason?: string): Promise<void> {\n\t\tconst connId = this.id;\n\t\tawait callNative(() =>\n\t\t\tthis.#runtime.connDisconnect(this.#conn, reason),\n\t\t);\n\t\tif (this.isHibernatable) {\n\t\t\tthis.#queueHibernationRemoval?.(connId);\n\t\t}\n\t}\n\n\t#readState(): unknown {\n\t\tif (!this.#ctx) {\n\t\t\treturn decodeValue(this.#runtime.connState(this.#conn));\n\t\t}\n\n\t\tconst connState = getNativeConnPersistState(\n\t\t\tthis.#runtime,\n\t\t\tthis.#ctx,\n\t\t\tthis.#conn,\n\t\t);\n\t\tif (connState.state === undefined) {\n\t\t\tconnState.state = decodeValue(this.#runtime.connState(this.#conn));\n\t\t}\n\t\treturn connState.state;\n\t}\n\n\t#writeState(\n\t\tvalue: unknown,\n\t\toptions: {\n\t\t\twriteNative: boolean;\n\t\t},\n\t): void {\n\t\tconst encoded = encodeValue(value);\n\t\tif (!this.#ctx) {\n\t\t\tthis.#runtime.connSetState(this.#conn, encoded);\n\t\t\treturn;\n\t\t}\n\n\t\tconst connState = getNativeConnPersistState(\n\t\t\tthis.#runtime,\n\t\t\tthis.#ctx,\n\t\t\tthis.#conn,\n\t\t);\n\t\tconnState.state = value;\n\t\tif (options.writeNative) {\n\t\t\tthis.#runtime.connSetState(this.#conn, encoded);\n\t\t}\n\t}\n}\n\nclass NativeScheduleAdapter {\n\t#runtime: CoreRuntime;\n\t#ctx: ActorContextHandle;\n\n\tconstructor(runtime: CoreRuntime, ctx: ActorContextHandle) {\n\t\tthis.#runtime = runtime;\n\t\tthis.#ctx = ctx;\n\t}\n\n\tasync after(\n\t\tduration: number,\n\t\taction: string,\n\t\t...args: unknown[]\n\t): Promise<void> {\n\t\tcallNativeSync(() =>\n\t\t\tthis.#runtime.actorScheduleAfter(\n\t\t\t\tthis.#ctx,\n\t\t\t\tduration,\n\t\t\t\taction,\n\t\t\t\tencodeValue(args),\n\t\t\t),\n\t\t);\n\t}\n\n\tasync at(\n\t\ttimestamp: number,\n\t\taction: string,\n\t\t...args: unknown[]\n\t): Promise<void> {\n\t\tcallNativeSync(() =>\n\t\t\tthis.#runtime.actorScheduleAt(\n\t\t\t\tthis.#ctx,\n\t\t\t\ttimestamp,\n\t\t\t\taction,\n\t\t\t\tencodeValue(args),\n\t\t\t),\n\t\t);\n\t}\n}\n\nclass NativeKvAdapter {\n\t#runtime: CoreRuntime;\n\t#ctx: ActorContextHandle;\n\n\tconstructor(runtime: CoreRuntime, ctx: ActorContextHandle) {\n\t\tthis.#runtime = runtime;\n\t\tthis.#ctx = ctx;\n\t}\n\n\tasync get<T extends NativeKvValueType = \"text\">(\n\t\tkey: string | Uint8Array,\n\t\toptions?: NativeKvValueOptions<T>,\n\t): Promise<NativeKvValueTypeMap[T] | null> {\n\t\tconst value = await callNative(() =>\n\t\t\tthis.#runtime.actorKvGet(\n\t\t\t\tthis.#ctx,\n\t\t\t\tmakePrefixedKey(encodeNativeKvUserKey(key)),\n\t\t\t),\n\t\t);\n\t\treturn value\n\t\t\t? decodeNativeKvValue(new Uint8Array(value), options)\n\t\t\t: null;\n\t}\n\n\tasync put(\n\t\tkey: string | Uint8Array,\n\t\tvalue: string | Uint8Array | ArrayBuffer,\n\t\t_options?: NativeKvValueOptions,\n\t): Promise<void> {\n\t\tawait callNative(() =>\n\t\t\tthis.#runtime.actorKvPut(\n\t\t\t\tthis.#ctx,\n\t\t\t\tmakePrefixedKey(encodeNativeKvUserKey(key)),\n\t\t\t\ttoRuntimeBytes(value),\n\t\t\t),\n\t\t);\n\t}\n\n\tasync delete(key: string | Uint8Array): Promise<void> {\n\t\tawait callNative(() =>\n\t\t\tthis.#runtime.actorKvDelete(\n\t\t\t\tthis.#ctx,\n\t\t\t\tmakePrefixedKey(encodeNativeKvUserKey(key)),\n\t\t\t),\n\t\t);\n\t}\n\n\tasync deleteRange(\n\t\tstart: string | Uint8Array,\n\t\tend: string | Uint8Array,\n\t): Promise<void> {\n\t\tawait callNative(() =>\n\t\t\tthis.#runtime.actorKvDeleteRange(\n\t\t\t\tthis.#ctx,\n\t\t\t\tmakePrefixedKey(encodeNativeKvUserKey(start)),\n\t\t\t\tmakePrefixedKey(encodeNativeKvUserKey(end)),\n\t\t\t),\n\t\t);\n\t}\n\n\tasync rawDeleteRange(start: Uint8Array, end: Uint8Array): Promise<void> {\n\t\tawait callNative(() =>\n\t\t\tthis.#runtime.actorKvDeleteRange(this.#ctx, start, end),\n\t\t);\n\t}\n\n\tasync listPrefix<\n\t\tT extends NativeKvValueType = \"text\",\n\t\tK extends NativeKvKeyType = \"text\",\n\t>(\n\t\tprefix: string | Uint8Array,\n\t\toptions?: NativeKvListOptions<T, K>,\n\t): Promise<Array<[NativeKvKeyTypeMap[K], NativeKvValueTypeMap[T]]>> {\n\t\tconst entries = await callNative(() =>\n\t\t\tthis.#runtime.actorKvListPrefix(\n\t\t\t\tthis.#ctx,\n\t\t\t\tmakePrefixedKey(\n\t\t\t\t\tencodeNativeKvUserKey(\n\t\t\t\t\t\tprefix as NativeKvKeyTypeMap[K],\n\t\t\t\t\t\toptions?.keyType,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\treverse: options?.reverse,\n\t\t\t\t\tlimit: options?.limit,\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\t\treturn entries.map((entry) => [\n\t\t\tdecodeNativeKvKey(\n\t\t\t\tremovePrefixFromKey(new Uint8Array(entry.key)),\n\t\t\t\toptions?.keyType,\n\t\t\t),\n\t\t\tdecodeNativeKvValue(new Uint8Array(entry.value), options),\n\t\t]);\n\t}\n\n\tasync rawListPrefix(\n\t\tprefix: Uint8Array,\n\t): Promise<Array<[Uint8Array, Uint8Array]>> {\n\t\tconst entries = await callNative(() =>\n\t\t\tthis.#runtime.actorKvListPrefix(this.#ctx, prefix, {}),\n\t\t);\n\t\treturn entries.map((entry) => [\n\t\t\tnew Uint8Array(entry.key),\n\t\t\tnew Uint8Array(entry.value),\n\t\t]);\n\t}\n\n\tasync listRange<\n\t\tT extends NativeKvValueType = \"text\",\n\t\tK extends NativeKvKeyType = \"text\",\n\t>(\n\t\tstart: string | Uint8Array,\n\t\tend: string | Uint8Array,\n\t\toptions?: NativeKvListOptions<T, K>,\n\t): Promise<Array<[NativeKvKeyTypeMap[K], NativeKvValueTypeMap[T]]>> {\n\t\tconst entries = await callNative(() =>\n\t\t\tthis.#runtime.actorKvListRange(\n\t\t\t\tthis.#ctx,\n\t\t\t\tmakePrefixedKey(\n\t\t\t\t\tencodeNativeKvUserKey(\n\t\t\t\t\t\tstart as NativeKvKeyTypeMap[K],\n\t\t\t\t\t\toptions?.keyType,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\tmakePrefixedKey(\n\t\t\t\t\tencodeNativeKvUserKey(\n\t\t\t\t\t\tend as NativeKvKeyTypeMap[K],\n\t\t\t\t\t\toptions?.keyType,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\treverse: options?.reverse,\n\t\t\t\t\tlimit: options?.limit,\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\t\treturn entries.map((entry) => [\n\t\t\tdecodeNativeKvKey(\n\t\t\t\tremovePrefixFromKey(new Uint8Array(entry.key)),\n\t\t\t\toptions?.keyType,\n\t\t\t),\n\t\t\tdecodeNativeKvValue(new Uint8Array(entry.value), options),\n\t\t]);\n\t}\n\n\tasync list<\n\t\tT extends NativeKvValueType = \"text\",\n\t\tK extends NativeKvKeyType = \"text\",\n\t>(\n\t\tprefix: string | Uint8Array,\n\t\toptions?: NativeKvListOptions<T, K>,\n\t): Promise<Array<[NativeKvKeyTypeMap[K], NativeKvValueTypeMap[T]]>> {\n\t\treturn this.listPrefix(prefix, options);\n\t}\n\n\tasync batchGet(keys: Uint8Array[]): Promise<Array<Uint8Array | null>> {\n\t\tconst values = await callNative(() =>\n\t\t\tthis.#runtime.actorKvBatchGet(this.#ctx, keys),\n\t\t);\n\t\treturn values.map((value) => (value ? new Uint8Array(value) : null));\n\t}\n\n\tasync batchPut(entries: [Uint8Array, Uint8Array][]): Promise<void> {\n\t\tawait callNative(() =>\n\t\t\tthis.#runtime.actorKvBatchPut(\n\t\t\t\tthis.#ctx,\n\t\t\t\tentries.map(([key, value]) => ({\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue,\n\t\t\t\t})),\n\t\t\t),\n\t\t);\n\t}\n\n\tasync batchDelete(keys: Uint8Array[]): Promise<void> {\n\t\tawait callNative(() =>\n\t\t\tthis.#runtime.actorKvBatchDelete(this.#ctx, keys),\n\t\t);\n\t}\n}\n\nfunction wrapQueueMessage(\n\tmessage: RuntimeQueueMessage,\n\tschemas: NativeValidationConfig[\"queues\"],\n) {\n\tconst name = callNativeSync(() => message.name());\n\treturn {\n\t\tid: Number(callNativeSync(() => message.id())),\n\t\tname,\n\t\tbody: validateQueueBody(\n\t\t\tschemas,\n\t\t\tname,\n\t\t\tdecodeValue(callNativeSync(() => message.body())),\n\t\t),\n\t\tcreatedAt: callNativeSync(() => message.createdAt()),\n\t\tcomplete: callNativeSync(() => message.isCompletable())\n\t\t\t? async (response?: unknown) =>\n\t\t\t\t\tawait callNative(() =>\n\t\t\t\t\t\tmessage.complete(\n\t\t\t\t\t\t\tresponse === undefined\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: encodeValue(\n\t\t\t\t\t\t\t\t\t\tvalidateQueueComplete(\n\t\t\t\t\t\t\t\t\t\t\tschemas,\n\t\t\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\t\t\tresponse,\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t: undefined,\n\t};\n}\n\nclass NativeQueueAdapter {\n\t#runtime: CoreRuntime;\n\t#ctx: ActorContextHandle;\n\t#schemas: NativeValidationConfig[\"queues\"];\n\t#pendingCompletableMessageIds = new Set<string>();\n\n\tconstructor(\n\t\truntime: CoreRuntime,\n\t\tctx: ActorContextHandle,\n\t\tschemas: NativeValidationConfig[\"queues\"] = undefined,\n\t) {\n\t\tthis.#runtime = runtime;\n\t\tthis.#ctx = ctx;\n\t\tthis.#schemas = schemas;\n\t}\n\n\tasync send(name: string, body: unknown) {\n\t\tconst validatedBody = validateQueueBody(this.#schemas, name, body);\n\t\treturn wrapQueueMessage(\n\t\t\tawait callNative(() =>\n\t\t\t\tthis.#runtime.actorQueueSend(\n\t\t\t\t\tthis.#ctx,\n\t\t\t\t\tname,\n\t\t\t\t\tencodeValue(validatedBody),\n\t\t\t\t),\n\t\t\t),\n\t\t\tthis.#schemas,\n\t\t);\n\t}\n\n\tasync next(options?: {\n\t\tnames?: readonly string[];\n\t\ttimeout?: number;\n\t\tsignal?: AbortSignal;\n\t\tcompletable?: boolean;\n\t}) {\n\t\tconst messages = await this.nextBatch({\n\t\t\tnames: options?.names,\n\t\t\tcount: 1,\n\t\t\ttimeout: options?.timeout,\n\t\t\tsignal: options?.signal,\n\t\t\tcompletable: options?.completable,\n\t\t});\n\t\treturn messages[0];\n\t}\n\n\tasync nextBatch(options?: {\n\t\tnames?: readonly string[];\n\t\tcount?: number;\n\t\ttimeout?: number;\n\t\tsignal?: AbortSignal;\n\t\tcompletable?: boolean;\n\t}) {\n\t\tconst completable = options?.completable === true;\n\t\tif (this.#pendingCompletableMessageIds.size > 0) {\n\t\t\tthrow new RivetError(\n\t\t\t\t\"queue\",\n\t\t\t\t\"previous_message_not_completed\",\n\t\t\t\t\"Previous completable queue message is not completed. Call `message.complete(...)` before receiving the next message.\",\n\t\t\t\t{\n\t\t\t\t\tpublic: true,\n\t\t\t\t\tstatusCode: 400,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\tconst { token, cleanup } = await createCancellationTokenHandle(\n\t\t\tthis.#runtime,\n\t\t\toptions?.signal,\n\t\t);\n\n\t\ttry {\n\t\t\tconst messages = await callNative(() =>\n\t\t\t\tthis.#runtime.actorQueueNextBatch(\n\t\t\t\t\tthis.#ctx,\n\t\t\t\t\t{\n\t\t\t\t\t\tnames: this.#normalizeNames(options?.names),\n\t\t\t\t\t\tcount: options?.count,\n\t\t\t\t\t\ttimeoutMs: options?.timeout,\n\t\t\t\t\t\tcompletable,\n\t\t\t\t\t},\n\t\t\t\t\ttoken,\n\t\t\t\t),\n\t\t\t);\n\t\t\tconst wrapped = messages.map((message) =>\n\t\t\t\twrapQueueMessage(message, this.#schemas),\n\t\t\t);\n\t\t\treturn completable\n\t\t\t\t? wrapped.map((message) =>\n\t\t\t\t\t\tthis.#makeCompletableMessage(message),\n\t\t\t\t\t)\n\t\t\t\t: wrapped;\n\t\t} finally {\n\t\t\tcleanup?.();\n\t\t}\n\t}\n\n\tasync waitForNames(\n\t\tnames: readonly string[],\n\t\toptions?: {\n\t\t\ttimeout?: number;\n\t\t\tsignal?: AbortSignal;\n\t\t\tcompletable?: boolean;\n\t\t},\n\t) {\n\t\tconst { token, cleanup } = await createCancellationTokenHandle(\n\t\t\tthis.#runtime,\n\t\t\toptions?.signal,\n\t\t);\n\n\t\ttry {\n\t\t\treturn wrapQueueMessage(\n\t\t\t\tawait callNative(() =>\n\t\t\t\t\tthis.#runtime.actorQueueWaitForNames(\n\t\t\t\t\t\tthis.#ctx,\n\t\t\t\t\t\t[...names],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttimeoutMs: options?.timeout,\n\t\t\t\t\t\t\tcompletable: options?.completable,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttoken,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\tthis.#schemas,\n\t\t\t);\n\t\t} finally {\n\t\t\tcleanup?.();\n\t\t}\n\t}\n\n\tasync waitForNamesAvailable(\n\t\tnames: readonly string[],\n\t\toptions?: {\n\t\t\ttimeout?: number;\n\t\t\tsignal?: AbortSignal;\n\t\t},\n\t) {\n\t\tif (!options?.signal) {\n\t\t\tawait callNative(() =>\n\t\t\t\tthis.#runtime.actorQueueWaitForNamesAvailable(\n\t\t\t\t\tthis.#ctx,\n\t\t\t\t\t[...names],\n\t\t\t\t\t{\n\t\t\t\t\t\ttimeoutMs: options?.timeout,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst deadline =\n\t\t\toptions.timeout === undefined\n\t\t\t\t? undefined\n\t\t\t\t: Date.now() + options.timeout;\n\n\t\tfor (;;) {\n\t\t\tif (options.signal.aborted) {\n\t\t\t\tthrow actorAbortedError();\n\t\t\t}\n\n\t\t\tconst remainingTimeout =\n\t\t\t\tdeadline === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: Math.max(0, deadline - Date.now());\n\t\t\tconst sliceTimeout =\n\t\t\t\tremainingTimeout === undefined\n\t\t\t\t\t? 100\n\t\t\t\t\t: Math.min(remainingTimeout, 100);\n\n\t\t\ttry {\n\t\t\t\tawait callNative(() =>\n\t\t\t\t\tthis.#runtime.actorQueueWaitForNamesAvailable(\n\t\t\t\t\t\tthis.#ctx,\n\t\t\t\t\t\t[...names],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttimeoutMs: sliceTimeout,\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t} catch (error) {\n\t\t\t\tif (\n\t\t\t\t\t(error as { group?: string; code?: string }).group ===\n\t\t\t\t\t\t\"queue\" &&\n\t\t\t\t\t(error as { group?: string; code?: string }).code ===\n\t\t\t\t\t\t\"timed_out\"\n\t\t\t\t) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tremainingTimeout === undefined ||\n\t\t\t\t\t\tremainingTimeout > 100\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\tasync enqueueAndWait(\n\t\tname: string,\n\t\tbody: unknown,\n\t\toptions?: {\n\t\t\ttimeout?: number;\n\t\t\tsignal?: AbortSignal;\n\t\t},\n\t) {\n\t\tconst validatedBody = validateQueueBody(this.#schemas, name, body);\n\t\tconst { token, cleanup } = await createCancellationTokenHandle(\n\t\t\tthis.#runtime,\n\t\t\toptions?.signal,\n\t\t);\n\n\t\ttry {\n\t\t\tconst response = await callNative(() =>\n\t\t\t\tthis.#runtime.actorQueueEnqueueAndWait(\n\t\t\t\t\tthis.#ctx,\n\t\t\t\t\tname,\n\t\t\t\t\tencodeValue(validatedBody),\n\t\t\t\t\t{\n\t\t\t\t\t\ttimeoutMs: options?.timeout,\n\t\t\t\t\t},\n\t\t\t\t\ttoken,\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn response === undefined || response === null\n\t\t\t\t? undefined\n\t\t\t\t: validateQueueComplete(\n\t\t\t\t\t\tthis.#schemas,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tdecodeValue(response),\n\t\t\t\t\t);\n\t\t} finally {\n\t\t\tcleanup?.();\n\t\t}\n\t}\n\n\tasync tryNext(options?: {\n\t\tnames?: readonly string[];\n\t\tcompletable?: boolean;\n\t}) {\n\t\tconst messages = await this.tryNextBatch({\n\t\t\tnames: options?.names,\n\t\t\tcount: 1,\n\t\t\tcompletable: options?.completable,\n\t\t});\n\t\treturn messages[0];\n\t}\n\n\tasync tryNextBatch(options?: {\n\t\tnames?: readonly string[];\n\t\tcount?: number;\n\t\tcompletable?: boolean;\n\t}) {\n\t\tif (options?.completable) {\n\t\t\treturn await this.nextBatch({\n\t\t\t\tnames: options.names,\n\t\t\t\tcount: options.count,\n\t\t\t\ttimeout: 0,\n\t\t\t\tcompletable: true,\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\treturn await this.nextBatch({\n\t\t\t\tnames: options?.names,\n\t\t\t\tcount: options?.count,\n\t\t\t\ttimeout: 0,\n\t\t\t\tcompletable: false,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\t(error as { group?: string; code?: string }).group ===\n\t\t\t\t\t\"queue\" &&\n\t\t\t\t(error as { group?: string; code?: string }).code ===\n\t\t\t\t\t\"timed_out\"\n\t\t\t) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync *iter(options?: {\n\t\tnames?: readonly string[];\n\t\tsignal?: AbortSignal;\n\t\tcompletable?: boolean;\n\t}): AsyncIterableIterator<\n\t\tNonNullable<Awaited<ReturnType<NativeQueueAdapter[\"next\"]>>>\n\t> {\n\t\tfor (;;) {\n\t\t\ttry {\n\t\t\t\tconst message = await this.next(options);\n\t\t\t\tif (!message) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tyield message;\n\t\t\t} catch (error) {\n\t\t\t\tif (\n\t\t\t\t\tisRivetErrorLike(error) &&\n\t\t\t\t\terror.group === \"actor\" &&\n\t\t\t\t\terror.code === \"aborted\"\n\t\t\t\t) {\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#normalizeNames(\n\t\tnames: readonly string[] | undefined,\n\t): 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: Awaited<ReturnType<typeof wrapQueueMessage>>,\n\t) {\n\t\tconst messageId = message.id.toString();\n\t\tthis.#pendingCompletableMessageIds.add(messageId);\n\t\tlet completed = false;\n\n\t\treturn {\n\t\t\t...message,\n\t\t\tcomplete: async (response?: unknown) => {\n\t\t\t\tif (typeof message.complete !== \"function\") {\n\t\t\t\t\tthrow new RivetError(\n\t\t\t\t\t\t\"queue\",\n\t\t\t\t\t\t\"complete_not_configured\",\n\t\t\t\t\t\t`Queue '${message.name}' does not support completion responses.`,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpublic: true,\n\t\t\t\t\t\t\tstatusCode: 400,\n\t\t\t\t\t\t\tmetadata: { name: message.name },\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (completed) {\n\t\t\t\t\tthrow new RivetError(\n\t\t\t\t\t\t\"queue\",\n\t\t\t\t\t\t\"already_completed\",\n\t\t\t\t\t\t\"Queue message was already completed.\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpublic: true,\n\t\t\t\t\t\t\tstatusCode: 400,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tawait message.complete(response);\n\t\t\t\tcompleted = true;\n\t\t\t\tthis.#pendingCompletableMessageIds.delete(messageId);\n\t\t\t},\n\t\t};\n\t}\n}\n\nclass NativeWebSocketAdapter {\n\t#runtime: CoreRuntime;\n\t#ws: WebSocketHandle;\n\t#virtual: VirtualWebSocket;\n\t#readyState: 0 | 1 | 2 | 3 = VirtualWebSocket.OPEN;\n\n\tconstructor(runtime: CoreRuntime, ws: WebSocketHandle) {\n\t\tthis.#runtime = runtime;\n\t\tthis.#ws = ws;\n\t\tthis.#virtual = new VirtualWebSocket({\n\t\t\tgetReadyState: () => this.#readyState,\n\t\t\tonSend: (data) => {\n\t\t\t\tif (typeof data === \"string\") {\n\t\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\t\tthis.#runtime.webSocketSend(\n\t\t\t\t\t\t\tthis.#ws,\n\t\t\t\t\t\t\ttextEncoder.encode(data),\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst bytes = ArrayBuffer.isView(data)\n\t\t\t\t\t? arrayBufferViewToRuntimeBytes(data)\n\t\t\t\t\t: new Uint8Array(data as ArrayBufferLike);\n\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\tthis.#runtime.webSocketSend(this.#ws, bytes, true),\n\t\t\t\t);\n\t\t\t},\n\t\t\tonClose: (code, reason) => {\n\t\t\t\tthis.#readyState = VirtualWebSocket.CLOSING;\n\t\t\t\tvoid callNative(() =>\n\t\t\t\t\tthis.#runtime.webSocketClose(this.#ws, code, reason),\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\t\tthis.#runtime.webSocketSetEventCallback(this.#ws, (event) => {\n\t\t\tif (event.kind === \"message\") {\n\t\t\t\tthis.#virtual.triggerMessage(\n\t\t\t\t\tevent.binary\n\t\t\t\t\t\t? runtimeBytesToArrayBuffer(event.data as RuntimeBytes)\n\t\t\t\t\t\t: event.data,\n\t\t\t\t\tevent.messageIndex,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.#readyState = VirtualWebSocket.CLOSED;\n\t\t\tthis.#virtual.triggerClose(\n\t\t\t\tevent.code,\n\t\t\t\tevent.reason,\n\t\t\t\tevent.wasClean,\n\t\t\t);\n\t\t});\n\t}\n\n\tget readyState() {\n\t\treturn this.#virtual.readyState;\n\t}\n\n\tget CONNECTING() {\n\t\treturn this.#virtual.CONNECTING;\n\t}\n\n\tget OPEN() {\n\t\treturn this.#virtual.OPEN;\n\t}\n\n\tget CLOSING() {\n\t\treturn this.#virtual.CLOSING;\n\t}\n\n\tget CLOSED() {\n\t\treturn this.#virtual.CLOSED;\n\t}\n\n\tget binaryType() {\n\t\treturn this.#virtual.binaryType;\n\t}\n\n\tset binaryType(value: \"arraybuffer\" | \"blob\") {\n\t\tthis.#virtual.binaryType = value;\n\t}\n\n\tget bufferedAmount() {\n\t\treturn this.#virtual.bufferedAmount;\n\t}\n\n\tget extensions() {\n\t\treturn this.#virtual.extensions;\n\t}\n\n\tget protocol() {\n\t\treturn this.#virtual.protocol;\n\t}\n\n\tget url() {\n\t\treturn this.#virtual.url;\n\t}\n\n\tget onopen() {\n\t\treturn this.#virtual.onopen;\n\t}\n\n\tset onopen(value) {\n\t\tthis.#virtual.onopen = value;\n\t}\n\n\tget onclose() {\n\t\treturn this.#virtual.onclose;\n\t}\n\n\tset onclose(value) {\n\t\tthis.#virtual.onclose = value;\n\t}\n\n\tget onerror() {\n\t\treturn this.#virtual.onerror;\n\t}\n\n\tset onerror(value) {\n\t\tthis.#virtual.onerror = value;\n\t}\n\n\tget onmessage() {\n\t\treturn this.#virtual.onmessage;\n\t}\n\n\tset onmessage(value) {\n\t\tthis.#virtual.onmessage = value;\n\t}\n\n\tsend(data: string | ArrayBuffer | ArrayBufferView): void {\n\t\tthis.#virtual.send(data);\n\t}\n\n\tclose(code?: number, reason?: string): void {\n\t\tthis.#virtual.close(code, reason);\n\t}\n\n\taddEventListener(\n\t\ttype: string,\n\t\tlistener: (event: any) => void | Promise<void>,\n\t): void {\n\t\tthis.#virtual.addEventListener(type, listener);\n\t}\n\n\tremoveEventListener(\n\t\ttype: string,\n\t\tlistener: (event: any) => void | Promise<void>,\n\t): void {\n\t\tthis.#virtual.removeEventListener(type, listener);\n\t}\n\n\tdispatchEvent(event: {\n\t\ttype: string;\n\t\ttarget?: unknown;\n\t\tcurrentTarget?: unknown;\n\t}): boolean {\n\t\treturn this.#virtual.dispatchEvent(event);\n\t}\n}\n\ntype TrackedWebSocketListener = (event: any) => void | Promise<void>;\n\nclass TrackedWebSocketHandleAdapter implements UniversalWebSocket {\n\t#ctx: ActorContextHandleAdapter;\n\t#inner: UniversalWebSocket;\n\t#listeners = new Map<string, TrackedWebSocketListener[]>();\n\t#onopen: ((event: RivetEvent) => void | Promise<void>) | null = null;\n\t#onclose: ((event: RivetCloseEvent) => void | Promise<void>) | null = null;\n\t#onerror: ((event: RivetEvent) => void | Promise<void>) | null = null;\n\t#onmessage: ((event: RivetMessageEvent) => void | Promise<void>) | null =\n\t\tnull;\n\n\tconstructor(ctx: ActorContextHandleAdapter, inner: UniversalWebSocket) {\n\t\tthis.#ctx = ctx;\n\t\tthis.#inner = inner;\n\n\t\tinner.addEventListener(\"open\", (event) => {\n\t\t\tthis.#dispatch(\"open\", this.#createEvent(\"open\", event));\n\t\t});\n\t\tinner.addEventListener(\"message\", (event) => {\n\t\t\tthis.#dispatch(\"message\", this.#createEvent(\"message\", event));\n\t\t});\n\t\tinner.addEventListener(\"close\", (event) => {\n\t\t\tthis.#dispatch(\"close\", this.#createEvent(\"close\", event));\n\t\t});\n\t\tinner.addEventListener(\"error\", (event) => {\n\t\t\tthis.#dispatch(\"error\", this.#createEvent(\"error\", event));\n\t\t});\n\t}\n\n\tget CONNECTING(): 0 {\n\t\treturn this.#inner.CONNECTING;\n\t}\n\n\tget OPEN(): 1 {\n\t\treturn this.#inner.OPEN;\n\t}\n\n\tget CLOSING(): 2 {\n\t\treturn this.#inner.CLOSING;\n\t}\n\n\tget CLOSED(): 3 {\n\t\treturn this.#inner.CLOSED;\n\t}\n\n\tget readyState(): 0 | 1 | 2 | 3 {\n\t\treturn this.#inner.readyState;\n\t}\n\n\tget binaryType(): \"arraybuffer\" | \"blob\" {\n\t\treturn this.#inner.binaryType;\n\t}\n\n\tset binaryType(value: \"arraybuffer\" | \"blob\") {\n\t\tthis.#inner.binaryType = value;\n\t}\n\n\tget bufferedAmount(): number {\n\t\treturn this.#inner.bufferedAmount;\n\t}\n\n\tget extensions(): string {\n\t\treturn this.#inner.extensions;\n\t}\n\n\tget protocol(): string {\n\t\treturn this.#inner.protocol;\n\t}\n\n\tget url(): string {\n\t\treturn this.#inner.url;\n\t}\n\n\tsend(data: string | ArrayBufferLike | Blob | ArrayBufferView): void {\n\t\tthis.#inner.send(data);\n\t}\n\n\tclose(code?: number, reason?: string): void {\n\t\tthis.#inner.close(code, reason);\n\t}\n\n\taddEventListener(type: string, listener: TrackedWebSocketListener): void {\n\t\tlet listeners = this.#listeners.get(type);\n\t\tif (!listeners) {\n\t\t\tlisteners = [];\n\t\t\tthis.#listeners.set(type, listeners);\n\t\t}\n\t\tlisteners.push(listener);\n\t}\n\n\tremoveEventListener(\n\t\ttype: string,\n\t\tlistener: TrackedWebSocketListener,\n\t): void {\n\t\tconst listeners = this.#listeners.get(type);\n\t\tif (!listeners) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst index = listeners.indexOf(listener);\n\t\tif (index !== -1) {\n\t\t\tlisteners.splice(index, 1);\n\t\t}\n\t}\n\n\tdispatchEvent(event: RivetEvent): boolean {\n\t\tthis.#dispatch(event.type, this.#createEvent(event.type, event));\n\t\treturn true;\n\t}\n\n\tget onopen(): ((event: RivetEvent) => void | Promise<void>) | null {\n\t\treturn this.#onopen;\n\t}\n\n\tset onopen(fn: ((event: RivetEvent) => void | Promise<void>) | null) {\n\t\tthis.#onopen = fn;\n\t}\n\n\tget onclose(): ((event: RivetCloseEvent) => void | Promise<void>) | null {\n\t\treturn this.#onclose;\n\t}\n\n\tset onclose(fn: ((event: RivetCloseEvent) => void | Promise<void>) | null) {\n\t\tthis.#onclose = fn;\n\t}\n\n\tget onerror(): ((event: RivetEvent) => void | Promise<void>) | null {\n\t\treturn this.#onerror;\n\t}\n\n\tset onerror(fn: ((event: RivetEvent) => void | Promise<void>) | null) {\n\t\tthis.#onerror = fn;\n\t}\n\n\tget onmessage():\n\t\t| ((event: RivetMessageEvent) => void | Promise<void>)\n\t\t| null {\n\t\treturn this.#onmessage;\n\t}\n\n\tset onmessage(fn:\n\t\t| ((event: RivetMessageEvent) => void | Promise<void>)\n\t\t| null,) {\n\t\tthis.#onmessage = fn;\n\t}\n\n\t#createEvent(type: string, event: any): any {\n\t\tswitch (type) {\n\t\t\tcase \"message\":\n\t\t\t\treturn {\n\t\t\t\t\ttype,\n\t\t\t\t\tdata: event.data,\n\t\t\t\t\trivetMessageIndex: event.rivetMessageIndex,\n\t\t\t\t\ttarget: this,\n\t\t\t\t\tcurrentTarget: this,\n\t\t\t\t} satisfies RivetMessageEvent;\n\t\t\tcase \"close\":\n\t\t\t\treturn {\n\t\t\t\t\ttype,\n\t\t\t\t\tcode: event.code,\n\t\t\t\t\treason: event.reason,\n\t\t\t\t\twasClean: event.wasClean,\n\t\t\t\t\ttarget: this,\n\t\t\t\t\tcurrentTarget: this,\n\t\t\t\t} satisfies RivetCloseEvent;\n\t\t\tdefault:\n\t\t\t\treturn {\n\t\t\t\t\ttype,\n\t\t\t\t\ttarget: this,\n\t\t\t\t\tcurrentTarget: this,\n\t\t\t\t\t...(event.message !== undefined\n\t\t\t\t\t\t? { message: event.message }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...(event.error !== undefined\n\t\t\t\t\t\t? { error: event.error }\n\t\t\t\t\t\t: {}),\n\t\t\t\t} satisfies RivetEvent;\n\t\t}\n\t}\n\n\t#dispatch(type: string, event: any): void {\n\t\tconst listeners = this.#listeners.get(type);\n\t\tif (listeners && listeners.length > 0) {\n\t\t\tfor (const listener of [...listeners]) {\n\t\t\t\tthis.#callHandler(type, listener, event);\n\t\t\t}\n\t\t}\n\n\t\tswitch (type) {\n\t\t\tcase \"open\":\n\t\t\t\tif (this.#onopen) this.#callHandler(type, this.#onopen, event);\n\t\t\t\tbreak;\n\t\t\tcase \"close\":\n\t\t\t\tif (this.#onclose)\n\t\t\t\t\tthis.#callHandler(type, this.#onclose, event);\n\t\t\t\tbreak;\n\t\t\tcase \"error\":\n\t\t\t\tif (this.#onerror)\n\t\t\t\t\tthis.#callHandler(type, this.#onerror, event);\n\t\t\t\tbreak;\n\t\t\tcase \"message\":\n\t\t\t\tif (this.#onmessage)\n\t\t\t\t\tthis.#callHandler(type, this.#onmessage, event);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t#callHandler(\n\t\ttype: string,\n\t\thandler: TrackedWebSocketListener,\n\t\tevent: any,\n\t): void {\n\t\ttry {\n\t\t\tconst result = handler(event);\n\t\t\tif (!this.#isPromiseLike(result)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst callbackRegionId = this.#ctx.beginWebSocketCallback();\n\t\t\tthis.#ctx.waitUntil(\n\t\t\t\tPromise.resolve(result)\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\tlogger().error({\n\t\t\t\t\t\t\tmsg: \"async websocket handler failed\",\n\t\t\t\t\t\t\teventType: type,\n\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tthis.#ctx.endWebSocketCallback(callbackRegionId);\n\t\t\t\t\t})\n\t\t\t\t\t.then(() => null),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tlogger().error({\n\t\t\t\tmsg: \"websocket handler failed\",\n\t\t\t\teventType: type,\n\t\t\t\terror,\n\t\t\t});\n\t\t}\n\t}\n\n\t#isPromiseLike(value: unknown): value is PromiseLike<void> {\n\t\treturn (\n\t\t\ttypeof value === \"object\" &&\n\t\t\tvalue !== null &&\n\t\t\t\"then\" in value &&\n\t\t\ttypeof value.then === \"function\"\n\t\t);\n\t}\n}\n\nexport class ActorContextHandleAdapter {\n\t#runtime: CoreRuntime;\n\t#ctx: ActorContextHandle;\n\t#schemas: NativeValidationConfig;\n\t#abortSignal?: AbortSignal;\n\t#abortSignalCleanup?: () => void;\n\t#client?: AnyClient;\n\t#clientFactory?: () => AnyClient;\n\t#databaseProvider?: Exclude<AnyDatabaseProvider, undefined>;\n\t#db?: unknown;\n\t#dbProxy?: unknown;\n\t#dispatchCancelToken?: CancellationTokenHandle;\n\t#kv?: NativeKvAdapter;\n\t#queue?: NativeQueueAdapter;\n\t#request?: Request;\n\t#schedule?: NativeScheduleAdapter;\n\t#sql?: ReturnType<typeof wrapJsNativeDatabase>;\n\t#runHandlerActiveProvider?: () => boolean;\n\t#onStateChange?: NativeOnStateChangeHandler;\n\t#stateEnabled: boolean;\n\n\tconstructor(\n\t\truntime: CoreRuntime,\n\t\tctx: ActorContextHandle,\n\t\tclientFactory?: () => AnyClient,\n\t\tschemas: NativeValidationConfig = {},\n\t\tdatabaseProvider?: AnyDatabaseProvider,\n\t\trequest?: Request,\n\t\tstateEnabled = true,\n\t\trunHandlerActiveProvider?: () => boolean,\n\t\tonStateChange?: NativeOnStateChangeHandler,\n\t\tdispatchCancelToken?: CancellationTokenHandle,\n\t) {\n\t\tthis.#runtime = runtime;\n\t\tthis.#ctx = ctx;\n\t\tthis.#clientFactory = clientFactory;\n\t\tthis.#schemas = schemas;\n\t\tthis.#dispatchCancelToken = dispatchCancelToken;\n\t\tthis.#runHandlerActiveProvider = runHandlerActiveProvider;\n\t\tthis.#onStateChange = onStateChange;\n\t\tthis.#stateEnabled = stateEnabled;\n\t\tif (databaseProvider) {\n\t\t\tthis.#databaseProvider = databaseProvider;\n\t\t}\n\t\tthis.#request = request;\n\t\t(\n\t\t\tthis as ActorContextHandleAdapter & {\n\t\t\t\t[ACTOR_CONTEXT_INTERNAL_SYMBOL]?: unknown;\n\t\t\t}\n\t\t)[ACTOR_CONTEXT_INTERNAL_SYMBOL] = new NativeWorkflowRuntimeAdapter(\n\t\t\tthis,\n\t\t);\n\t}\n\n\tget kv() {\n\t\tif (!this.#kv) {\n\t\t\tthis.#kv = new NativeKvAdapter(this.#runtime, this.#ctx);\n\t\t}\n\t\treturn this.#kv;\n\t}\n\n\tget sql() {\n\t\tif (!this.#sql) {\n\t\t\tthis.#sql = getOrCreateNativeSqlDatabase(this.#runtime, this.#ctx);\n\t\t}\n\t\treturn this.#sql;\n\t}\n\n\tget db() {\n\t\tif (!this.#databaseProvider) {\n\t\t\tthrow databaseNotConfiguredError();\n\t\t}\n\n\t\tif (!this.#dbProxy) {\n\t\t\tthis.#dbProxy = new Proxy(\n\t\t\t\t{},\n\t\t\t\t{\n\t\t\t\t\tget: (_target, property) => {\n\t\t\t\t\t\tif (property === \"then\") {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn async (...args: Array<unknown>) => {\n\t\t\t\t\t\t\tconst client = await this.ensureDatabaseClient();\n\t\t\t\t\t\t\tconst value = Reflect.get(\n\t\t\t\t\t\t\t\tclient as object,\n\t\t\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (typeof value !== \"function\") {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn await value.apply(client, args);\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\treturn this.#dbProxy;\n\t}\n\n\tget state(): unknown {\n\t\tif (!this.#stateEnabled) {\n\t\t\tthrow stateNotEnabledError();\n\t\t}\n\t\tconst nextState = this.#readState();\n\t\treturn createWriteThroughProxy(\n\t\t\tnextState,\n\t\t\t(nextValue) => {\n\t\t\t\tthis.#writeState(nextValue, { scheduleSave: true });\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tthis.#assertCanMutateState();\n\t\t\t},\n\t\t);\n\t}\n\n\tset state(value: unknown) {\n\t\tif (!this.#stateEnabled) {\n\t\t\tthrow stateNotEnabledError();\n\t\t}\n\t\tthis.#assertCanMutateState();\n\t\tthis.#writeState(value, { scheduleSave: true });\n\t}\n\n\tinitializeState(value: unknown): void {\n\t\tif (!this.#stateEnabled) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#writeState(value, { scheduleSave: false });\n\t}\n\n\tget vars(): unknown {\n\t\tconst runtimeState = getNativeRuntimeState(this.#runtime, this.#ctx);\n\t\tif (runtimeState.varsInitialized) {\n\t\t\treturn runtimeState.vars;\n\t\t}\n\n\t\truntimeState.varsInitialized = true;\n\t\truntimeState.vars = undefined;\n\t\treturn undefined;\n\t}\n\n\tset vars(value: unknown) {\n\t\tconst runtimeState = getNativeRuntimeState(this.#runtime, this.#ctx);\n\t\truntimeState.varsInitialized = true;\n\t\truntimeState.vars = value;\n\t}\n\n\tget queue(): NativeQueueAdapter {\n\t\tif (!this.#queue) {\n\t\t\tthis.#queue = new NativeQueueAdapter(\n\t\t\t\tthis.#runtime,\n\t\t\t\tthis.#ctx,\n\t\t\t\tthis.#schemas.queues,\n\t\t\t);\n\t\t}\n\t\treturn this.#queue;\n\t}\n\n\tget schedule(): NativeScheduleAdapter {\n\t\tif (!this.#schedule) {\n\t\t\tthis.#schedule = new NativeScheduleAdapter(\n\t\t\t\tthis.#runtime,\n\t\t\t\tthis.#ctx,\n\t\t\t);\n\t\t}\n\t\treturn this.#schedule;\n\t}\n\n\tget actorId(): string {\n\t\treturn callNativeSync(() => this.#runtime.actorId(this.#ctx));\n\t}\n\n\tget name(): string {\n\t\treturn callNativeSync(() => this.#runtime.actorName(this.#ctx));\n\t}\n\n\tget key(): string[] {\n\t\treturn toActorKey(\n\t\t\tcallNativeSync(() => this.#runtime.actorKey(this.#ctx)),\n\t\t);\n\t}\n\n\tget region(): string {\n\t\treturn callNativeSync(() => this.#runtime.actorRegion(this.#ctx));\n\t}\n\n\tget conns(): Map<string, NativeConnAdapter> {\n\t\treturn new Map(\n\t\t\tcallNativeSync(() => this.#runtime.actorConns(this.#ctx)).map(\n\t\t\t\t(conn) => [\n\t\t\t\t\tthis.#runtime.connId(conn),\n\t\t\t\t\tnew NativeConnAdapter(\n\t\t\t\t\t\tthis.#runtime,\n\t\t\t\t\t\tconn,\n\t\t\t\t\t\tthis.#schemas,\n\t\t\t\t\t\tthis.#ctx,\n\t\t\t\t\t\t(connId) =>\n\t\t\t\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\t\t\t\tthis.#runtime.actorQueueHibernationRemoval(\n\t\t\t\t\t\t\t\t\tthis.#ctx,\n\t\t\t\t\t\t\t\t\tconnId,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t],\n\t\t\t),\n\t\t);\n\t}\n\n\tget log() {\n\t\treturn logger();\n\t}\n\n\tget abortSignal(): AbortSignal {\n\t\tif (!this.#abortSignal) {\n\t\t\tconst actorSignal = this.#createActorAbortSignal();\n\t\t\tif (this.#dispatchCancelToken === undefined) {\n\t\t\t\tthis.#abortSignal = actorSignal;\n\t\t\t} else {\n\t\t\t\tconst controller = new AbortController();\n\t\t\t\tlet cleanedUp = false;\n\t\t\t\tconst onActorAbort = () => {\n\t\t\t\t\tcleanup();\n\t\t\t\t\tcontroller.abort();\n\t\t\t\t};\n\t\t\t\tconst cleanup = () => {\n\t\t\t\t\tif (cleanedUp) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcleanedUp = true;\n\t\t\t\t\tactorSignal.removeEventListener(\"abort\", onActorAbort);\n\t\t\t\t\tthis.#abortSignalCleanup = undefined;\n\t\t\t\t};\n\n\t\t\t\tif (\n\t\t\t\t\tactorSignal.aborted ||\n\t\t\t\t\tthis.#runtime.cancellationTokenAborted(\n\t\t\t\t\t\tthis.#dispatchCancelToken,\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tcontroller.abort();\n\t\t\t\t} else {\n\t\t\t\t\tconst dispatchCancelToken = this.#dispatchCancelToken;\n\t\t\t\t\tthis.#abortSignalCleanup = cleanup;\n\t\t\t\t\tactorSignal.addEventListener(\"abort\", onActorAbort, {\n\t\t\t\t\t\tonce: true,\n\t\t\t\t\t});\n\t\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\t\tthis.#runtime.onCancellationTokenCancelled(\n\t\t\t\t\t\t\tdispatchCancelToken,\n\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\tcleanup();\n\t\t\t\t\t\t\t\tcontroller.abort();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tthis.#abortSignal = controller.signal;\n\t\t\t}\n\t\t}\n\t\treturn this.#abortSignal;\n\t}\n\n\tget aborted(): boolean {\n\t\treturn this.abortSignal.aborted;\n\t}\n\n\tget request(): Request | undefined {\n\t\treturn this.#request;\n\t}\n\n\tprivate async ensureDatabaseClient(): Promise<unknown> {\n\t\tif (!this.#databaseProvider) {\n\t\t\tthrow databaseNotConfiguredError();\n\t\t}\n\n\t\tif (this.#db) {\n\t\t\treturn this.#db;\n\t\t}\n\n\t\tconst runtimeState = getNativeRuntimeState(this.#runtime, this.#ctx);\n\t\tconst cachedClient = runtimeState.databaseClient;\n\t\tif (cachedClient) {\n\t\t\tthis.#db = cachedClient.client;\n\t\t\treturn this.#db;\n\t\t}\n\n\t\tconst actorId = this.actorId;\n\t\tconst client = await this.#databaseProvider.createClient({\n\t\t\tactorId,\n\t\t\tkv: {\n\t\t\t\tbatchPut: async (entries) => {\n\t\t\t\t\tawait this.kv.batchPut(\n\t\t\t\t\t\tentries.map(([key, value]) => [key, value]),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tbatchGet: async (keys) => {\n\t\t\t\t\treturn await this.kv.batchGet([...keys]);\n\t\t\t\t},\n\t\t\t\tbatchDelete: async (keys) => {\n\t\t\t\t\tawait this.kv.batchDelete([...keys]);\n\t\t\t\t},\n\t\t\t\tdeleteRange: async (start, end) => {\n\t\t\t\t\tawait this.kv.deleteRange(start, end);\n\t\t\t\t},\n\t\t\t},\n\t\t\tlog: {\n\t\t\t\tdebug: (obj) => logger().debug(obj),\n\t\t\t},\n\t\t\tnativeDatabaseProvider: {\n\t\t\t\topen: async (requestedActorId) => {\n\t\t\t\t\tvoid requestedActorId;\n\t\t\t\t\treturn getOrCreateNativeSqlDatabase(\n\t\t\t\t\t\tthis.#runtime,\n\t\t\t\t\t\tthis.#ctx,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t\truntimeState.databaseClient = {\n\t\t\tclient,\n\t\t};\n\t\tthis.#db = client;\n\t\treturn client;\n\t}\n\n\tasync prepare(): Promise<void> {\n\t\tif (!this.#databaseProvider) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.ensureDatabaseClient();\n\t}\n\n\tasync runDatabaseMigrations(): Promise<void> {\n\t\tif (!this.#databaseProvider) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.#databaseProvider.onMigrate(\n\t\t\t(await this.ensureDatabaseClient()) as never,\n\t\t);\n\t}\n\n\tasync closeDatabase(): Promise<void> {\n\t\tthis.#db = undefined;\n\t\tthis.#sql = undefined;\n\t\tawait closeNativeDatabaseClient(this.#runtime, this.#ctx);\n\t\tawait closeNativeSqlDatabase(this.#runtime, this.#ctx);\n\t}\n\n\tbroadcast(name: string, ...args: unknown[]): void {\n\t\tconst validatedArgs = validateEventArgs(\n\t\t\tthis.#schemas.events,\n\t\t\tname,\n\t\t\targs,\n\t\t);\n\t\tcallNativeSync(() =>\n\t\t\tthis.#runtime.actorBroadcast(\n\t\t\t\tthis.#ctx,\n\t\t\t\tname,\n\t\t\t\tencodeValue(validatedArgs),\n\t\t\t),\n\t\t);\n\t}\n\n\tasync saveState(opts?: {\n\t\timmediate?: boolean;\n\t\tmaxWait?: number;\n\t}): Promise<void> {\n\t\tif (opts?.immediate) {\n\t\t\tawait callNative(() =>\n\t\t\t\tthis.#runtime.actorRequestSaveAndWait(this.#ctx, {\n\t\t\t\t\timmediate: true,\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (opts?.maxWait != null) {\n\t\t\tcallNativeSync(() =>\n\t\t\t\tthis.#runtime.actorRequestSave(this.#ctx, {\n\t\t\t\t\tmaxWaitMs: opts.maxWait,\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tcallNativeSync(() =>\n\t\t\tthis.#runtime.actorRequestSave(this.#ctx, { immediate: false }),\n\t\t);\n\t}\n\n\tserializeForTick(reason: SerializeStateReason): RuntimeStateDeltaPayload {\n\t\tvoid reason;\n\t\tconst actorState = getNativePersistState(this.#runtime, this.#ctx);\n\t\tconst connHibernationRemoved = callNativeSync(() =>\n\t\t\tthis.#runtime.actorTakePendingHibernationChanges(this.#ctx),\n\t\t);\n\t\tfor (const connId of connHibernationRemoved) {\n\t\t\tactorState.connStates.delete(connId);\n\t\t}\n\t\tconst state =\n\t\t\tthis.#stateEnabled && this.#readState() !== undefined\n\t\t\t\t? encodeValue(this.#readState())\n\t\t\t\t: undefined;\n\t\tconst connHibernation = callNativeSync(() =>\n\t\t\tthis.#runtime.actorDirtyHibernatableConns(this.#ctx),\n\t\t).map((conn) => {\n\t\t\tconst connId = callNativeSync(() => this.#runtime.connId(conn));\n\t\t\treturn {\n\t\t\t\tconnId,\n\t\t\t\tbytes: callNativeSync(() => this.#runtime.connState(conn)),\n\t\t\t};\n\t\t});\n\n\t\treturn {\n\t\t\tstate,\n\t\t\tconnHibernation,\n\t\t\tconnHibernationRemoved,\n\t\t};\n\t}\n\n\tasync restartRunHandler(): Promise<void> {\n\t\tawait callNative(async () => {\n\t\t\tthis.#runtime.actorRestartRunHandler(this.#ctx);\n\t\t});\n\t}\n\n\tasync setAlarm(timestampMs?: number): Promise<void> {\n\t\tawait callNative(async () => {\n\t\t\tthis.#runtime.actorSetAlarm(this.#ctx, timestampMs);\n\t\t});\n\t}\n\n\tkeepAwake<T>(promise: Promise<T>): Promise<T> {\n\t\tconst runtimeState = getNativeRuntimeState(this.#runtime, this.#ctx);\n\t\t// Increment before native registration so sleep cleanup observes JS work\n\t\t// even if the promise settles immediately.\n\t\truntimeState.keepAwakeCount = (runtimeState.keepAwakeCount ?? 0) + 1;\n\t\tlet registered = false;\n\t\tconst trackedPromise = Promise.resolve(promise)\n\t\t\t.catch((error) => {\n\t\t\t\tlogger().warn({\n\t\t\t\t\tmsg: \"keepAwake promise rejected\",\n\t\t\t\t\terror: stringifyError(error),\n\t\t\t\t});\n\t\t\t})\n\t\t\t.finally(async () => {\n\t\t\t\tif (!registered) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\truntimeState.keepAwakeCount = Math.max(\n\t\t\t\t\t(runtimeState.keepAwakeCount ?? 1) - 1,\n\t\t\t\t\t0,\n\t\t\t\t);\n\t\t\t\tif (\n\t\t\t\t\truntimeState.keepAwakeCount === 0 &&\n\t\t\t\t\truntimeState.deferSleepCleanupUntilKeepAwakeIdle\n\t\t\t\t) {\n\t\t\t\t\tawait cleanupDeferredNativeSleepRuntimeState(\n\t\t\t\t\t\tthis.#runtime,\n\t\t\t\t\t\tthis.#ctx,\n\t\t\t\t\t\truntimeState,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.then(() => null);\n\t\ttry {\n\t\t\tcallNativeSync(() =>\n\t\t\t\tthis.#runtime.actorKeepAwake(this.#ctx, trackedPromise),\n\t\t\t);\n\t\t\tregistered = true;\n\t\t} catch (error) {\n\t\t\truntimeState.keepAwakeCount = Math.max(\n\t\t\t\t(runtimeState.keepAwakeCount ?? 1) - 1,\n\t\t\t\t0,\n\t\t\t);\n\t\t\tif (!isClosedTaskRegistrationError(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\treturn promise;\n\t}\n\n\trunHandlerActive(): boolean {\n\t\treturn this.#runHandlerActiveProvider?.() ?? false;\n\t}\n\n\tinternalKeepAwake<T>(run: Promise<T> | (() => Promise<T>)): Promise<T> {\n\t\tconst promise = typeof run === \"function\" ? run() : run;\n\t\tconst trackedPromise = promise.then(() => null);\n\t\ttry {\n\t\t\tcallNativeSync(() =>\n\t\t\t\tthis.#runtime.actorRegisterTask(this.#ctx, trackedPromise),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tif (!isClosedTaskRegistrationError(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\treturn promise;\n\t}\n\n\twaitUntil(promise: Promise<unknown>): void {\n\t\tconst trackedPromise = Promise.resolve(promise).then(() => null);\n\t\ttry {\n\t\t\tcallNativeSync(() =>\n\t\t\t\tthis.#runtime.actorWaitUntil(this.#ctx, trackedPromise),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tif (!isClosedTaskRegistrationError(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\tbeginWebSocketCallback(): number {\n\t\treturn callNativeSync(() =>\n\t\t\tthis.#runtime.actorBeginWebsocketCallback(this.#ctx),\n\t\t);\n\t}\n\n\tendWebSocketCallback(callbackRegionId: number): void {\n\t\tcallNativeSync(() =>\n\t\t\tthis.#runtime.actorEndWebsocketCallback(\n\t\t\t\tthis.#ctx,\n\t\t\t\tcallbackRegionId,\n\t\t\t),\n\t\t);\n\t}\n\n\t// Intentionally a no-op. `setPreventSleep` / `preventSleep` are kept on the\n\t// surface for legacy callers but must not gate sleep here. Callers that\n\t// need to keep an actor awake should use `keepAwake(promise)` or\n\t// `waitUntil(promise)` so the native counter machinery in rivetkit-core\n\t// owns the lifecycle.\n\t/** @deprecated Use `keepAwake(promise)` or `waitUntil(promise)` instead. */\n\tsetPreventSleep(_preventSleep: boolean): void {\n\t\tlogger().warn({\n\t\t\tmsg: \"setPreventSleep is deprecated and is a no-op; use keepAwake(promise) or waitUntil(promise) instead\",\n\t\t});\n\t}\n\n\t/** @deprecated Use `keepAwake(promise)` or `waitUntil(promise)` instead. */\n\tget preventSleep(): boolean {\n\t\tlogger().warn({\n\t\t\tmsg: \"preventSleep is deprecated and always returns false; use keepAwake(promise) or waitUntil(promise) instead\",\n\t\t});\n\t\treturn false;\n\t}\n\n\tsleep(): void {\n\t\tcallNativeSync(() => this.#runtime.actorSleep(this.#ctx));\n\t}\n\n\tdestroy(): void {\n\t\t// Call the native destroy first so it can throw `actor/starting` or\n\t\t// `actor/stopping` without leaving an unresolved destroyCompletion\n\t\t// promise behind in the native runtime state.\n\t\tcallNativeSync(() => this.#runtime.actorDestroy(this.#ctx));\n\t\tmarkNativeDestroyRequested(this.#runtime, this.#ctx);\n\t}\n\n\tclient<T = AnyClient>(): T extends Registry<any> ? Client<T> : T {\n\t\tif (!this.#client) {\n\t\t\tif (!this.#clientFactory) {\n\t\t\t\tthrow nativeClientNotConfiguredError();\n\t\t\t}\n\t\t\tthis.#client = this.#clientFactory();\n\t\t}\n\n\t\treturn this.#client as T extends Registry<any> ? Client<T> : T;\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tthis.#abortSignalCleanup?.();\n\t\tthis.#sql = undefined;\n\t}\n\n\t#createActorAbortSignal(): AbortSignal {\n\t\tconst nativeSignal = callNativeSync(() =>\n\t\t\tthis.#runtime.actorAbortSignal(this.#ctx),\n\t\t);\n\t\tconst controller = new AbortController();\n\t\tif (nativeSignal.aborted) {\n\t\t\tcontroller.abort();\n\t\t} else {\n\t\t\tnativeSignal.addEventListener(\"abort\", () => controller.abort(), {\n\t\t\t\tonce: true,\n\t\t\t});\n\t\t}\n\t\treturn controller.signal;\n\t}\n\n\t#readState(): unknown {\n\t\tconst actorState = getNativePersistState(this.#runtime, this.#ctx);\n\t\tif (actorState.state === undefined) {\n\t\t\tactorState.state = decodeValue(\n\t\t\t\tcallNativeSync(() => this.#runtime.actorState(this.#ctx)),\n\t\t\t);\n\t\t}\n\t\treturn actorState.state;\n\t}\n\n\t#writeState(\n\t\tvalue: unknown,\n\t\toptions: {\n\t\t\tscheduleSave: boolean;\n\t\t},\n\t): void {\n\t\tencodeValue(value);\n\t\tconst actorState = getNativePersistState(this.#runtime, this.#ctx);\n\t\tactorState.state = value;\n\t\tif (!options.scheduleSave) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#handleStateChange();\n\t}\n\n\t#assertCanMutateState(): void {\n\t\tconst actorState = getNativePersistState(this.#runtime, this.#ctx);\n\t\tif (actorState.isInOnStateChange) {\n\t\t\tthrow stateMutationReentrantError();\n\t\t}\n\t}\n\n\t#handleStateChange(): void {\n\t\tconst actorState = getNativePersistState(this.#runtime, this.#ctx);\n\t\tencodeValue(actorState.state);\n\t\tcallNativeSync(() =>\n\t\t\tthis.#runtime.actorRequestSave(this.#ctx, { immediate: false }),\n\t\t);\n\n\t\tif (!this.#onStateChange) {\n\t\t\treturn;\n\t\t}\n\n\t\tactorState.isInOnStateChange = true;\n\t\tcallNativeSync(() => this.#runtime.actorBeginOnStateChange(this.#ctx));\n\t\tlet shouldFinish = true;\n\t\ttry {\n\t\t\tconst result = this.#onStateChange(\n\t\t\t\tthis,\n\t\t\t\tactorState.state,\n\t\t\t) as unknown;\n\t\t\tif (isPromiseLike(result)) {\n\t\t\t\tshouldFinish = false;\n\t\t\t\tvoid Promise.resolve(result)\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\tlogger().error({\n\t\t\t\t\t\t\tmsg: \"error in `onStateChange`\",\n\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tactorState.isInOnStateChange = false;\n\t\t\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\t\t\tthis.#runtime.actorEndOnStateChange(this.#ctx),\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t}\n\t\t} finally {\n\t\t\tif (shouldFinish) {\n\t\t\t\tactorState.isInOnStateChange = false;\n\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\tthis.#runtime.actorEndOnStateChange(this.#ctx),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n\ntype NativeWorkflowQueueMessage = Awaited<\n\tReturnType<NativeQueueAdapter[\"next\"]>\n>;\n\nclass NativeWorkflowRuntimeAdapter {\n\t#ctx: ActorContextHandleAdapter;\n\t#completions = new Map<string, (response?: unknown) => Promise<void>>();\n\n\treadonly id: string;\n\treadonly driver: {\n\t\tkvBatchGet: (\n\t\t\tactorId: string,\n\t\t\tkeys: Uint8Array[],\n\t\t) => Promise<Array<Uint8Array | null>>;\n\t\tkvBatchPut: (\n\t\t\tactorId: string,\n\t\t\tentries: Array<[Uint8Array, Uint8Array]>,\n\t\t) => Promise<void>;\n\t\tkvBatchDelete: (actorId: string, keys: Uint8Array[]) => Promise<void>;\n\t\tkvDeleteRange: (\n\t\t\tactorId: string,\n\t\t\tstart: Uint8Array,\n\t\t\tend: Uint8Array,\n\t\t) => Promise<void>;\n\t\tkvListPrefix: (\n\t\t\tactorId: string,\n\t\t\tprefix: Uint8Array,\n\t\t) => Promise<Array<[Uint8Array, Uint8Array]>>;\n\t\tsetAlarm: (_actor: unknown, wakeAt: number) => Promise<void>;\n\t};\n\treadonly queueManager: {\n\t\tenqueue: (name: string, body: unknown) => Promise<unknown>;\n\t\treceive: (\n\t\t\tnames: string[] | undefined,\n\t\t\tcount: number,\n\t\t\ttimeout?: number,\n\t\t\t_abortSignal?: AbortSignal,\n\t\t\tcompletable?: boolean,\n\t\t) => Promise<\n\t\t\tArray<{\n\t\t\t\tid: bigint;\n\t\t\t\tname: string;\n\t\t\t\tbody: unknown;\n\t\t\t\tcreatedAt: number;\n\t\t\t\tcomplete?: (response?: unknown) => Promise<void>;\n\t\t\t}>\n\t\t>;\n\t\tcompleteMessage: (\n\t\t\tmessage: {\n\t\t\t\tid: bigint;\n\t\t\t\tcomplete?: (response?: unknown) => Promise<void>;\n\t\t\t},\n\t\t\tresponse?: unknown,\n\t\t) => Promise<void>;\n\t\tcompleteMessageById: (\n\t\t\tmessageId: bigint,\n\t\t\tresponse?: unknown,\n\t\t) => Promise<void>;\n\t\twaitForNames: (\n\t\t\tnames: readonly string[] | undefined,\n\t\t\tabortSignal?: AbortSignal,\n\t\t) => Promise<void>;\n\t};\n\treadonly stateManager: {\n\t\tsaveState: (opts?: {\n\t\t\timmediate?: boolean;\n\t\t\tmaxWait?: number;\n\t\t}) => Promise<void>;\n\t};\n\n\tconstructor(ctx: ActorContextHandleAdapter) {\n\t\tthis.#ctx = ctx;\n\t\tthis.id = ctx.actorId;\n\t\tthis.driver = {\n\t\t\tkvBatchGet: async (actorId, keys) => {\n\t\t\t\tthis.#assertActorId(actorId);\n\t\t\t\treturn await this.#ctx.kv.batchGet(keys);\n\t\t\t},\n\t\t\tkvBatchPut: async (actorId, entries) => {\n\t\t\t\tthis.#assertActorId(actorId);\n\t\t\t\tawait this.#ctx.kv.batchPut(entries);\n\t\t\t},\n\t\t\tkvBatchDelete: async (actorId, keys) => {\n\t\t\t\tthis.#assertActorId(actorId);\n\t\t\t\tawait this.#ctx.kv.batchDelete(keys);\n\t\t\t},\n\t\t\tkvDeleteRange: async (actorId, start, end) => {\n\t\t\t\tthis.#assertActorId(actorId);\n\t\t\t\tawait this.#ctx.kv.rawDeleteRange(start, end);\n\t\t\t},\n\t\t\tkvListPrefix: async (actorId, prefix) => {\n\t\t\t\tthis.#assertActorId(actorId);\n\t\t\t\treturn await this.#ctx.kv.rawListPrefix(prefix);\n\t\t\t},\n\t\t\tsetAlarm: async (_actor, wakeAt) => {\n\t\t\t\tawait this.#ctx.setAlarm(wakeAt);\n\t\t\t},\n\t\t};\n\t\tthis.queueManager = {\n\t\t\tenqueue: async (name, body) => {\n\t\t\t\treturn this.#wrapQueueMessage(\n\t\t\t\t\tawait this.#ctx.queue.send(name, body),\n\t\t\t\t);\n\t\t\t},\n\t\t\treceive: async (\n\t\t\t\tnames,\n\t\t\t\tcount,\n\t\t\t\ttimeout,\n\t\t\t\t_abortSignal,\n\t\t\t\tcompletable,\n\t\t\t) => {\n\t\t\t\tconst messages = await this.#ctx.queue.nextBatch({\n\t\t\t\t\tnames,\n\t\t\t\t\tcount,\n\t\t\t\t\ttimeout: timeout ?? 0,\n\t\t\t\t\tcompletable,\n\t\t\t\t});\n\t\t\t\treturn messages.map((message) =>\n\t\t\t\t\tthis.#wrapQueueMessage(message),\n\t\t\t\t);\n\t\t\t},\n\t\t\tcompleteMessage: async (message, response) => {\n\t\t\t\tawait message.complete?.(response);\n\t\t\t\tthis.#completions.delete(message.id.toString());\n\t\t\t},\n\t\t\tcompleteMessageById: async (messageId, response) => {\n\t\t\t\tconst complete = this.#completions.get(messageId.toString());\n\t\t\t\tif (!complete) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait complete(response);\n\t\t\t\tthis.#completions.delete(messageId.toString());\n\t\t\t},\n\t\t\twaitForNames: async (names, abortSignal) => {\n\t\t\t\tawait this.#ctx.queue.waitForNamesAvailable(names ?? [], {\n\t\t\t\t\tsignal: abortSignal,\n\t\t\t\t});\n\t\t\t},\n\t\t};\n\t\tthis.stateManager = {\n\t\t\tsaveState: async (opts) => {\n\t\t\t\tawait this.#ctx.saveState(opts);\n\t\t\t},\n\t\t};\n\t}\n\n\tisRunHandlerActive(): boolean {\n\t\treturn this.#ctx.runHandlerActive();\n\t}\n\n\tasync restartRunHandler(): Promise<void> {\n\t\tawait this.#ctx.restartRunHandler();\n\t}\n\n\t#assertActorId(actorId: string): void {\n\t\tif (actorId !== this.id) {\n\t\t\tthrow new Error(\n\t\t\t\t`workflow runtime actor id mismatch: expected ${this.id}, got ${actorId}`,\n\t\t\t);\n\t\t}\n\t}\n\n\t#wrapQueueMessage(message: NativeWorkflowQueueMessage) {\n\t\tif (!message) {\n\t\t\tthrow new Error(\"native workflow queue message missing\");\n\t\t}\n\n\t\tconst id = BigInt(message.id);\n\t\tlet complete: ((response?: unknown) => Promise<void>) | undefined;\n\t\tif (message.complete) {\n\t\t\tcomplete = async (response?: unknown) => {\n\t\t\t\tawait message.complete?.(response);\n\t\t\t};\n\t\t\tthis.#completions.set(id.toString(), complete);\n\t\t}\n\n\t\treturn {\n\t\t\tid,\n\t\t\tname: message.name,\n\t\t\tbody: message.body,\n\t\t\tcreatedAt: message.createdAt,\n\t\t\tcomplete,\n\t\t};\n\t}\n}\n\nfunction withConnContext(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n\tconn: ConnHandle,\n\tclientFactory?: () => AnyClient,\n\tschemas: NativeValidationConfig = {},\n\tdatabaseProvider?: AnyDatabaseProvider,\n\trequest?: Request,\n\tstateEnabled = true,\n\tonStateChange?: NativeOnStateChangeHandler,\n\tdispatchCancelToken?: CancellationTokenHandle,\n) {\n\treturn Object.assign(\n\t\tnew ActorContextHandleAdapter(\n\t\t\truntime,\n\t\t\tctx,\n\t\t\tclientFactory,\n\t\t\tschemas,\n\t\t\tdatabaseProvider,\n\t\t\trequest,\n\t\t\tstateEnabled,\n\t\t\tundefined,\n\t\t\tonStateChange,\n\t\t\tdispatchCancelToken,\n\t\t),\n\t\t{\n\t\t\tconn: new NativeConnAdapter(runtime, conn, schemas, ctx, (connId) =>\n\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\truntime.actorQueueHibernationRemoval(ctx, connId),\n\t\t\t\t),\n\t\t\t),\n\t\t},\n\t);\n}\n\nfunction buildNativeRequestErrorResponse(\n\tencoding: Encoding,\n\tpath: string,\n\terror: unknown,\n): Response {\n\tconst { statusCode, group, code, message, metadata } = deconstructError(\n\t\terror,\n\t\tlogger(),\n\t\t{\n\t\t\tpath,\n\t\t\truntime: \"native\",\n\t\t},\n\t\tfalse,\n\t);\n\tconst body = serializeWithEncoding<\n\t\tprotocol.HttpResponseError,\n\t\tHttpResponseErrorJson,\n\t\t{ group: string; code: string; message: string; metadata?: unknown }\n\t>(\n\t\tencoding,\n\t\t{ group, code, message, metadata },\n\t\tHTTP_RESPONSE_ERROR_VERSIONED,\n\t\tCLIENT_PROTOCOL_CURRENT_VERSION,\n\t\tHttpResponseErrorSchema,\n\t\t(value) => value,\n\t\t(value) => ({\n\t\t\tgroup: value.group,\n\t\t\tcode: value.code,\n\t\t\tmessage: value.message,\n\t\t\tmetadata:\n\t\t\t\tvalue.metadata === undefined\n\t\t\t\t\t? null\n\t\t\t\t\t: runtimeBytesToArrayBuffer(\n\t\t\t\t\t\t\tencodeCborCompat(value.metadata),\n\t\t\t\t\t\t),\n\t\t}),\n\t);\n\n\treturn new Response(body, {\n\t\tstatus: statusCode,\n\t\theaders: {\n\t\t\t\"Content-Type\": contentTypeForEncoding(encoding),\n\t\t},\n\t});\n}\n\nfunction buildActorConfig(\n\tdefinition: AnyActorDefinition,\n\tregistryConfig: RegistryConfig,\n): RuntimeActorConfig {\n\tconst config = definition.config as unknown as Record<string, unknown>;\n\tconst options = (config.options ?? {}) as Record<string, unknown>;\n\tconst canHibernate = options.canHibernateWebSocket;\n\n\treturn {\n\t\tname: options.name as string | undefined,\n\t\ticon: options.icon as string | undefined,\n\t\thasDatabase: config.db !== undefined,\n\t\tremoteSqlite:\n\t\t\tconfig.db !== undefined &&\n\t\t\tsqliteBackendForConfig(registryConfig) === \"remote\",\n\t\thasState:\n\t\t\tconfig.state !== undefined ||\n\t\t\ttypeof config.createState === \"function\",\n\t\tcanHibernateWebsocket:\n\t\t\ttypeof canHibernate === \"boolean\" ? canHibernate : undefined,\n\t\tstateSaveIntervalMs: options.stateSaveInterval as number | undefined,\n\t\tcreateVarsTimeoutMs: options.createVarsTimeout as number | undefined,\n\t\tcreateConnStateTimeoutMs: options.createConnStateTimeout as\n\t\t\t| number\n\t\t\t| undefined,\n\t\tonBeforeConnectTimeoutMs: options.onBeforeConnectTimeout as\n\t\t\t| number\n\t\t\t| undefined,\n\t\tonConnectTimeoutMs: options.onConnectTimeout as number | undefined,\n\t\tonMigrateTimeoutMs: options.onMigrateTimeout as number | undefined,\n\t\tactionTimeoutMs: options.actionTimeout as number | undefined,\n\t\tsleepTimeoutMs: options.sleepTimeout as number | undefined,\n\t\tnoSleep: options.noSleep as boolean | undefined,\n\t\tsleepGracePeriodMs: options.sleepGracePeriod as number | undefined,\n\t\tconnectionLivenessTimeoutMs: options.connectionLivenessTimeout as\n\t\t\t| number\n\t\t\t| undefined,\n\t\tconnectionLivenessIntervalMs: options.connectionLivenessInterval as\n\t\t\t| number\n\t\t\t| undefined,\n\t\tmaxQueueSize: options.maxQueueSize as number | undefined,\n\t\tmaxQueueMessageSize: options.maxQueueMessageSize as number | undefined,\n\t\tmaxIncomingMessageSize: registryConfig.maxIncomingMessageSize as\n\t\t\t| number\n\t\t\t| undefined,\n\t\tmaxOutgoingMessageSize: registryConfig.maxOutgoingMessageSize as\n\t\t\t| number\n\t\t\t| undefined,\n\t\tpreloadMaxWorkflowBytes: options.preloadMaxWorkflowBytes as\n\t\t\t| number\n\t\t\t| undefined,\n\t\tpreloadMaxConnectionsBytes: options.preloadMaxConnectionsBytes as\n\t\t\t| number\n\t\t\t| undefined,\n\t\tactions: Object.keys((config.actions ?? {}) as Record<string, unknown>)\n\t\t\t.sort()\n\t\t\t.map((name) => ({ name })),\n\t};\n}\n\nexport function buildNativeFactory(\n\truntime: CoreRuntime,\n\tregistryConfig: RegistryConfig,\n\tdefinition: AnyActorDefinition,\n): ActorFactoryHandle {\n\tconst config = definition.config as Record<string, any>;\n\tconst databaseProvider = config.db as AnyDatabaseProvider;\n\tconst schemaConfig: NativeValidationConfig = {\n\t\tactionInputSchemas: config.actionInputSchemas,\n\t\tconnParamsSchema: config.connParamsSchema,\n\t\tevents: config.events,\n\t\tqueues: config.queues,\n\t};\n\tconst actionHandlers = Object.fromEntries(\n\t\t(\n\t\t\tObject.entries(config.actions ?? {}) as Array<\n\t\t\t\t[string, (...args: Array<any>) => any]\n\t\t\t>\n\t\t).map(([name, handler]) => [name, handler]),\n\t);\n\tconst createClient = () =>\n\t\tcreateClientWithDriver(\n\t\t\tnew RemoteEngineControlClient(\n\t\t\t\tconvertRegistryConfigToClientConfig(registryConfig),\n\t\t\t),\n\t\t\t{ encoding: \"bare\" },\n\t\t);\n\tconst nativeRunHandlerActiveByActorId = new Map<string, boolean>();\n\tconst isNativeRunHandlerActive = (ctx: ActorContextHandle) =>\n\t\tnativeRunHandlerActiveByActorId.get(\n\t\t\tcallNativeSync(() => runtime.actorId(ctx)),\n\t\t) ?? false;\n\tconst getNativeWorkflowInspector = (ctx: ActorContextHandle) =>\n\t\tgetRunInspectorConfig(\n\t\t\tconfig.run,\n\t\t\tcallNativeSync(() => runtime.actorId(ctx)),\n\t\t)?.workflow as NativeWorkflowInspectorConfig | undefined;\n\tconst onStateChange =\n\t\ttypeof config.onStateChange === \"function\"\n\t\t\t? (actorCtx: ActorContextHandleAdapter, nextState: unknown) => {\n\t\t\t\t\tconfig.onStateChange(actorCtx, nextState);\n\t\t\t\t}\n\t\t\t: undefined;\n\tconst hasStaticState = \"state\" in config;\n\tconst hasStaticVars = \"vars\" in config;\n\tconst hasStaticConnState = Object.hasOwn(config, \"connState\");\n\tconst hasDynamicConnState = typeof config.createConnState === \"function\";\n\tconst onSleep =\n\t\ttypeof config.onSleep === \"function\" ? config.onSleep : undefined;\n\tconst needsDisconnectCallback =\n\t\ttypeof config.onDisconnect === \"function\" ||\n\t\thasStaticConnState ||\n\t\thasDynamicConnState ||\n\t\tconfig.options?.canHibernateWebSocket === true;\n\tconst stateEnabled =\n\t\tconfig.state !== undefined || typeof config.createState === \"function\";\n\tconst makeActorCtx = (\n\t\tctx: ActorContextHandle,\n\t\trequest?: Request,\n\t\tcancelToken?: CancellationTokenHandle,\n\t) =>\n\t\tnew ActorContextHandleAdapter(\n\t\t\truntime,\n\t\t\tctx,\n\t\t\tcreateClient,\n\t\t\tschemaConfig,\n\t\t\tdatabaseProvider,\n\t\t\trequest,\n\t\t\tstateEnabled,\n\t\t\t() => isNativeRunHandlerActive(ctx),\n\t\t\tonStateChange,\n\t\t\tcancelToken,\n\t\t);\n\tconst makeConnCtx = (\n\t\tctx: ActorContextHandle,\n\t\tconn: ConnHandle,\n\t\trequest?: Request,\n\t\tcancelToken?: CancellationTokenHandle,\n\t) =>\n\t\twithConnContext(\n\t\t\truntime,\n\t\t\tctx,\n\t\t\tconn,\n\t\t\tcreateClient,\n\t\t\tschemaConfig,\n\t\t\tdatabaseProvider,\n\t\t\trequest,\n\t\t\tstateEnabled,\n\t\t\tonStateChange,\n\t\t\tcancelToken,\n\t\t);\n\tconst maybeHandleNativeInspectorRequest = async (\n\t\tctx: ActorContextHandle,\n\t\t_rawRequest: {\n\t\t\tmethod: string;\n\t\t\turi: string;\n\t\t\theaders?: Record<string, string>;\n\t\t\tbody?: RuntimeBytes;\n\t\t},\n\t\tjsRequest: Request,\n\t): Promise<Response | undefined> => {\n\t\tconst url = new URL(jsRequest.url);\n\t\tif (!url.pathname.startsWith(\"/inspector/\")) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst jsonResponse = (body: unknown, init?: ResponseInit) =>\n\t\t\tnew Response(JSON.stringify(body), {\n\t\t\t\tstatus: init?.status ?? 200,\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t...(init?.headers ?? {}),\n\t\t\t\t},\n\t\t\t});\n\t\tconst errorResponse = (error: unknown, status?: number) => {\n\t\t\tconst rivetError = toRivetError(error);\n\t\t\treturn jsonResponse(\n\t\t\t\t{\n\t\t\t\t\tgroup: rivetError.group,\n\t\t\t\t\tcode: rivetError.code,\n\t\t\t\t\tmessage: rivetError.message,\n\t\t\t\t\tmetadata: rivetError.metadata ?? null,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tstatus:\n\t\t\t\t\t\tstatus ??\n\t\t\t\t\t\trivetError.statusCode ??\n\t\t\t\t\t\t(rivetError.public ? 400 : 500),\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\t\ttry {\n\t\t\tawait runtime.actorVerifyInspectorAuth(\n\t\t\t\tctx,\n\t\t\t\tjsRequest.headers\n\t\t\t\t\t.get(\"authorization\")\n\t\t\t\t\t?.replace(/^Bearer\\s+/i, \"\") ?? null,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\treturn errorResponse(error, 401);\n\t\t}\n\n\t\tconst workflowHistory = () =>\n\t\t\tserializeWorkflowHistoryForJson(\n\t\t\t\tgetNativeWorkflowInspector(ctx)?.getHistory() ?? null,\n\t\t\t);\n\t\tconst workflowState = async () =>\n\t\t\t(await getNativeWorkflowInspector(ctx)?.getState?.()) ?? null;\n\t\tconst actorCtx = makeActorCtx(ctx, jsRequest);\n\t\ttry {\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/state\" &&\n\t\t\t\tjsRequest.method === \"GET\"\n\t\t\t) {\n\t\t\t\treturn jsonResponse({\n\t\t\t\t\tstate: stateEnabled ? actorCtx.state : undefined,\n\t\t\t\t\tisStateEnabled: stateEnabled,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/state\" &&\n\t\t\t\tjsRequest.method === \"PATCH\"\n\t\t\t) {\n\t\t\t\tconst body = (await jsRequest.json()) as { state?: unknown };\n\t\t\t\tactorCtx.state = body.state;\n\t\t\t\tawait actorCtx.saveState({ immediate: true });\n\t\t\t\treturn jsonResponse({ ok: true });\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/connections\" &&\n\t\t\t\tjsRequest.method === \"GET\"\n\t\t\t) {\n\t\t\t\treturn jsonResponse({\n\t\t\t\t\tconnections: Array.from(actorCtx.conns.values()).map(\n\t\t\t\t\t\t(conn) => ({\n\t\t\t\t\t\t\ttype: null,\n\t\t\t\t\t\t\tid: conn.id,\n\t\t\t\t\t\t\tdetails: {\n\t\t\t\t\t\t\t\ttype: null,\n\t\t\t\t\t\t\t\tparams: conn.params,\n\t\t\t\t\t\t\t\tstateEnabled: true,\n\t\t\t\t\t\t\t\tstate: conn.state,\n\t\t\t\t\t\t\t\tsubscriptions: 0,\n\t\t\t\t\t\t\t\tisHibernatable: conn.isHibernatable,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/rpcs\" &&\n\t\t\t\tjsRequest.method === \"GET\"\n\t\t\t) {\n\t\t\t\treturn jsonResponse({\n\t\t\t\t\trpcs: Object.keys(actionHandlers).sort(),\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/queue\" &&\n\t\t\t\tjsRequest.method === \"GET\"\n\t\t\t) {\n\t\t\t\tconst limitParam = url.searchParams.get(\"limit\");\n\t\t\t\tconst parsedLimit = limitParam ? Number(limitParam) : 100;\n\t\t\t\tconst limit =\n\t\t\t\t\tNumber.isFinite(parsedLimit) && parsedLimit > 0\n\t\t\t\t\t\t? Math.floor(parsedLimit)\n\t\t\t\t\t\t: 100;\n\t\t\t\tconst allMessages =\n\t\t\t\t\tawait runtime.actorQueueInspectMessages(ctx);\n\t\t\t\tconst truncated = allMessages.length > limit;\n\t\t\t\tconst messages = allMessages.slice(0, limit).map((m) => ({\n\t\t\t\t\tid: m.id,\n\t\t\t\t\tname: m.name,\n\t\t\t\t\tcreatedAtMs: m.createdAtMs,\n\t\t\t\t}));\n\t\t\t\treturn jsonResponse({\n\t\t\t\t\tsize: allMessages.length,\n\t\t\t\t\tmaxSize: runtime.actorQueueMaxSize(ctx),\n\t\t\t\t\ttruncated,\n\t\t\t\t\tmessages,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/traces\" &&\n\t\t\t\tjsRequest.method === \"GET\"\n\t\t\t) {\n\t\t\t\treturn jsonResponse({ otlp: [], clamped: false });\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/workflow-history\" &&\n\t\t\t\tjsRequest.method === \"GET\"\n\t\t\t) {\n\t\t\t\treturn jsonResponse({\n\t\t\t\t\thistory: workflowHistory(),\n\t\t\t\t\tworkflowState: await workflowState(),\n\t\t\t\t\tisWorkflowEnabled:\n\t\t\t\t\t\tgetNativeWorkflowInspector(ctx) !== undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/workflow/replay\" &&\n\t\t\t\tjsRequest.method === \"POST\"\n\t\t\t) {\n\t\t\t\ttry {\n\t\t\t\t\tconst body = (await jsRequest.json()) as {\n\t\t\t\t\t\tentryId?: string;\n\t\t\t\t\t};\n\t\t\t\t\tconst history = await getNativeWorkflowInspector(\n\t\t\t\t\t\tctx,\n\t\t\t\t\t)?.replayFromStep?.(body.entryId);\n\t\t\t\t\treturn jsonResponse({\n\t\t\t\t\t\thistory: serializeWorkflowHistoryForJson(\n\t\t\t\t\t\t\thistory ?? null,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tworkflowState: await workflowState(),\n\t\t\t\t\t\tisWorkflowEnabled:\n\t\t\t\t\t\t\tgetNativeWorkflowInspector(ctx) !== undefined,\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn errorResponse(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/database/schema\" &&\n\t\t\t\tjsRequest.method === \"GET\"\n\t\t\t) {\n\t\t\t\tconst db = actorCtx.sql;\n\t\t\t\tconst tables = queryRows(\n\t\t\t\t\tawait db.query(\n\t\t\t\t\t\t\"SELECT name, type FROM sqlite_master WHERE type IN ('table', 'view') AND name NOT LIKE 'sqlite_%' AND name NOT LIKE '__drizzle_%' ORDER BY name\",\n\t\t\t\t\t),\n\t\t\t\t) as Array<{ name: string; type: string }>;\n\t\t\t\tconst tableInfos = [];\n\t\t\t\tfor (const table of tables) {\n\t\t\t\t\tconst quoted = `\"${table.name.replace(/\"/g, '\"\"')}\"`;\n\t\t\t\t\tconst columns = queryRows(\n\t\t\t\t\t\tawait db.query(`PRAGMA table_info(${quoted})`),\n\t\t\t\t\t);\n\t\t\t\t\tconst foreignKeys = queryRows(\n\t\t\t\t\t\tawait db.query(`PRAGMA foreign_key_list(${quoted})`),\n\t\t\t\t\t);\n\t\t\t\t\tconst countResult = queryRows(\n\t\t\t\t\t\tawait db.query(\n\t\t\t\t\t\t\t`SELECT COUNT(*) as count FROM ${quoted}`,\n\t\t\t\t\t\t),\n\t\t\t\t\t) as Array<{ count?: number }>;\n\t\t\t\t\ttableInfos.push({\n\t\t\t\t\t\ttable: {\n\t\t\t\t\t\t\tschema: \"main\",\n\t\t\t\t\t\t\tname: table.name,\n\t\t\t\t\t\t\ttype: table.type,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcolumns: jsonSafe(columns),\n\t\t\t\t\t\tforeignKeys: jsonSafe(foreignKeys),\n\t\t\t\t\t\trecords: countResult[0]?.count ?? 0,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn jsonResponse({ schema: { tables: tableInfos } });\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/database/rows\" &&\n\t\t\t\tjsRequest.method === \"GET\"\n\t\t\t) {\n\t\t\t\tconst table = url.searchParams.get(\"table\");\n\t\t\t\tif (!table) {\n\t\t\t\t\treturn jsonResponse(\n\t\t\t\t\t\t{ error: \"Missing required table query parameter\" },\n\t\t\t\t\t\t{ status: 400 },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst limit = Number.parseInt(\n\t\t\t\t\turl.searchParams.get(\"limit\") ?? \"100\",\n\t\t\t\t\t10,\n\t\t\t\t);\n\t\t\t\tconst offset = Number.parseInt(\n\t\t\t\t\turl.searchParams.get(\"offset\") ?? \"0\",\n\t\t\t\t\t10,\n\t\t\t\t);\n\t\t\t\tconst quoted = `\"${table.replace(/\"/g, '\"\"')}\"`;\n\t\t\t\tconst rows = queryRows(\n\t\t\t\t\tawait actorCtx.sql.query(\n\t\t\t\t\t\t`SELECT * FROM ${quoted} LIMIT ? OFFSET ?`,\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tMath.max(0, Math.min(limit, 500)),\n\t\t\t\t\t\t\tMath.max(0, offset),\n\t\t\t\t\t\t],\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\treturn jsonResponse({ rows: jsonSafe(rows) });\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/database/execute\" &&\n\t\t\t\tjsRequest.method === \"POST\"\n\t\t\t) {\n\t\t\t\tconst body = (await jsRequest.json()) as {\n\t\t\t\t\tsql?: unknown;\n\t\t\t\t\targs?: unknown;\n\t\t\t\t\tproperties?: unknown;\n\t\t\t\t};\n\t\t\t\tif (typeof body.sql !== \"string\" || body.sql.trim() === \"\") {\n\t\t\t\t\treturn jsonResponse(\n\t\t\t\t\t\t{ error: \"sql is required\" },\n\t\t\t\t\t\t{ status: 400 },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tArray.isArray(body.args) &&\n\t\t\t\t\tbody.properties &&\n\t\t\t\t\ttypeof body.properties === \"object\"\n\t\t\t\t) {\n\t\t\t\t\treturn jsonResponse(\n\t\t\t\t\t\t{ error: \"use either args or properties, not both\" },\n\t\t\t\t\t\t{ status: 400 },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tbody.properties &&\n\t\t\t\t\ttypeof body.properties === \"object\" &&\n\t\t\t\t\t!Array.isArray(body.properties)\n\t\t\t\t) {\n\t\t\t\t\tconst bindings = normalizeSqlitePropertyBindings(\n\t\t\t\t\t\tbody.properties as Record<string, unknown>,\n\t\t\t\t\t);\n\t\t\t\t\tconst rows = queryRows(\n\t\t\t\t\t\tawait actorCtx.sql.query(body.sql, bindings),\n\t\t\t\t\t);\n\t\t\t\t\treturn jsonResponse({ rows: jsonSafe(rows) });\n\t\t\t\t}\n\t\t\t\tconst args = Array.isArray(body.args) ? body.args : [];\n\t\t\t\tconst rows = queryRows(\n\t\t\t\t\tawait actorCtx.sql.query(body.sql, args),\n\t\t\t\t);\n\t\t\t\treturn jsonResponse({ rows: jsonSafe(rows) });\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/summary\" &&\n\t\t\t\tjsRequest.method === \"GET\"\n\t\t\t) {\n\t\t\t\tconst inspectorSnapshot = callNativeSync(() =>\n\t\t\t\t\truntime.actorInspectorSnapshot(ctx),\n\t\t\t\t);\n\t\t\t\treturn jsonResponse({\n\t\t\t\t\tstate: stateEnabled ? actorCtx.state : undefined,\n\t\t\t\t\tconnections: Array.from(actorCtx.conns.values()).map(\n\t\t\t\t\t\t(conn) => ({\n\t\t\t\t\t\t\ttype: null,\n\t\t\t\t\t\t\tid: conn.id,\n\t\t\t\t\t\t\tdetails: {\n\t\t\t\t\t\t\t\ttype: null,\n\t\t\t\t\t\t\t\tparams: conn.params,\n\t\t\t\t\t\t\t\tstateEnabled: true,\n\t\t\t\t\t\t\t\tstate: conn.state,\n\t\t\t\t\t\t\t\tsubscriptions: 0,\n\t\t\t\t\t\t\t\tisHibernatable: conn.isHibernatable,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t\trpcs: Object.keys(actionHandlers).sort(),\n\t\t\t\t\tqueueSize: inspectorSnapshot.queueSize,\n\t\t\t\t\tisStateEnabled: stateEnabled,\n\t\t\t\t\tisDatabaseEnabled: databaseProvider !== undefined,\n\t\t\t\t\tisWorkflowEnabled:\n\t\t\t\t\t\tgetNativeWorkflowInspector(ctx) !== undefined,\n\t\t\t\t\tworkflowState: await workflowState(),\n\t\t\t\t\tworkflowHistory: workflowHistory(),\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (\n\t\t\t\tjsRequest.method === \"POST\" &&\n\t\t\t\turl.pathname.startsWith(\"/inspector/action/\")\n\t\t\t) {\n\t\t\t\tconst actionName = url.pathname.replace(\n\t\t\t\t\t\"/inspector/action/\",\n\t\t\t\t\t\"\",\n\t\t\t\t);\n\t\t\t\tconst action = actionHandlers[actionName];\n\t\t\t\tif (!action) {\n\t\t\t\t\treturn errorResponse(\n\t\t\t\t\t\tnew RivetError(\n\t\t\t\t\t\t\t\"action\",\n\t\t\t\t\t\t\t\"action_not_found\",\n\t\t\t\t\t\t\t`Action ${actionName} not found`,\n\t\t\t\t\t\t),\n\t\t\t\t\t\t404,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst body = (await jsRequest.json()) as { args?: unknown[] };\n\t\t\t\ttry {\n\t\t\t\t\tconst output = await action(\n\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t...validateActionArgs(\n\t\t\t\t\t\t\tschemaConfig.actionInputSchemas,\n\t\t\t\t\t\t\tactionName,\n\t\t\t\t\t\t\tbody.args ?? [],\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\treturn jsonResponse({ output });\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn errorResponse(error);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jsonResponse(\n\t\t\t\t{\n\t\t\t\t\tgroup: \"actor\",\n\t\t\t\t\tcode: \"not_found\",\n\t\t\t\t\tmessage: \"Inspector route was not found\",\n\t\t\t\t\tmetadata: null,\n\t\t\t\t},\n\t\t\t\t{ status: 404 },\n\t\t\t);\n\t\t} catch (error) {\n\t\t\treturn errorResponse(error);\n\t\t} finally {\n\t\t\tawait actorCtx.dispose();\n\t\t}\n\t};\n\tconst callbacks = {\n\t\tcreateState:\n\t\t\thasStaticState || typeof config.createState === \"function\"\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tinput?: RuntimeBytes;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t): Promise<RuntimeBytes> => {\n\t\t\t\t\t\t\tconst { ctx, input } = unwrapTsfnPayload(\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst decodedInput = decodeValue(input);\n\t\t\t\t\t\t\t\tconst startedAt = performance.now();\n\t\t\t\t\t\t\t\tconst state = hasStaticState\n\t\t\t\t\t\t\t\t\t? structuredClone(config.state)\n\t\t\t\t\t\t\t\t\t: await config.createState(\n\t\t\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\t\t\tdecodedInput,\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tlogger().debug({\n\t\t\t\t\t\t\t\t\tmsg: \"perf user: createStateMs\",\n\t\t\t\t\t\t\t\t\tdurationMs: performance.now() - startedAt,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tactorCtx.initializeState(state);\n\t\t\t\t\t\t\t\treturn encodeValue(state);\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tonCreate:\n\t\t\ttypeof config.onCreate === \"function\"\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tinput?: RuntimeBytes;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t): Promise<void> => {\n\t\t\t\t\t\t\tconst { ctx, input } = unwrapTsfnPayload(\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait config.onCreate(\n\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\tdecodeValue(input),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tcreateVars:\n\t\t\thasStaticVars || typeof config.createVars === \"function\"\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: { ctx: ActorContextHandle },\n\t\t\t\t\t\t): Promise<void> => {\n\t\t\t\t\t\t\tconst { ctx } = unwrapTsfnPayload(error, payload);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst startedAt = performance.now();\n\t\t\t\t\t\t\t\tconst vars = hasStaticVars\n\t\t\t\t\t\t\t\t\t? structuredClone(config.vars)\n\t\t\t\t\t\t\t\t\t: await config.createVars(\n\t\t\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tlogger().debug({\n\t\t\t\t\t\t\t\t\tmsg: \"perf user: createVarsMs\",\n\t\t\t\t\t\t\t\t\tdurationMs: performance.now() - startedAt,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tactorCtx.vars = vars;\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tonMigrate:\n\t\t\ttypeof config.onMigrate === \"function\" ||\n\t\t\tdatabaseProvider !== undefined\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tisNew: boolean;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx, isNew } = unwrapTsfnPayload(\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tif (!isNew) {\n\t\t\t\t\t\t\t\t\tawait actorCtx.closeDatabase();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tawait actorCtx.runDatabaseMigrations();\n\t\t\t\t\t\t\t\tif (typeof config.onMigrate === \"function\") {\n\t\t\t\t\t\t\t\t\tawait config.onMigrate(actorCtx, isNew);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tawait actorCtx.closeDatabase();\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tonWake:\n\t\t\ttypeof config.onWake === \"function\"\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: { ctx: ActorContextHandle },\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx } = unwrapTsfnPayload(error, payload);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst startedAt = performance.now();\n\t\t\t\t\t\t\t\tawait config.onWake(actorCtx);\n\t\t\t\t\t\t\t\tlogger().debug({\n\t\t\t\t\t\t\t\t\tmsg: \"perf user: onWakeMs\",\n\t\t\t\t\t\t\t\t\tdurationMs: performance.now() - startedAt,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tonBeforeActorStart:\n\t\t\ttypeof config.onBeforeActorStart === \"function\"\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: { ctx: ActorContextHandle },\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx } = unwrapTsfnPayload(error, payload);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait config.onBeforeActorStart(actorCtx);\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tonSleep: wrapNativeCallback(\n\t\t\tasync (error: unknown, payload: { ctx: ActorContextHandle }) => {\n\t\t\t\tconst { ctx } = unwrapTsfnPayload(error, payload);\n\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\ttry {\n\t\t\t\t\tif (onSleep) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait onSleep(actorCtx);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (runtime.kind === \"wasm\") {\n\t\t\t\t\t\t\t\t// Wasm cannot use the native context save helper here because\n\t\t\t\t\t\t\t\t// the runtime owns the serialized state handoff.\n\t\t\t\t\t\t\t\tawait runtime.actorSaveState(\n\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\tactorCtx.serializeForTick(\"save\"),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tawait actorCtx.saveState({ immediate: true });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tconst runtimeState = getNativeRuntimeState(runtime, ctx);\n\t\t\t\t\tif ((runtimeState.keepAwakeCount ?? 0) > 0) {\n\t\t\t\t\t\truntimeState.deferSleepCleanupUntilKeepAwakeIdle = true;\n\t\t\t\t\t\truntimeState.deferredSleepCleanupActorCtx = actorCtx;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait cleanupNativeSleepRuntimeState(runtime, ctx);\n\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tonDestroy: wrapNativeCallback(\n\t\t\tasync (error: unknown, payload: { ctx: ActorContextHandle }) => {\n\t\t\t\tconst { ctx } = unwrapTsfnPayload(error, payload);\n\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\ttry {\n\t\t\t\t\tif (typeof config.onDestroy === \"function\") {\n\t\t\t\t\t\tawait config.onDestroy(actorCtx);\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tresolveNativeDestroy(runtime, ctx);\n\t\t\t\t\tawait actorCtx.closeDatabase();\n\t\t\t\t\tclearNativeRuntimeState(runtime, ctx);\n\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tonBeforeConnect:\n\t\t\ttypeof config.onBeforeConnect === \"function\"\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tparams: RuntimeBytes;\n\t\t\t\t\t\t\t\trequest?: {\n\t\t\t\t\t\t\t\t\tmethod: string;\n\t\t\t\t\t\t\t\t\turi: string;\n\t\t\t\t\t\t\t\t\theaders?: Record<string, string>;\n\t\t\t\t\t\t\t\t\tbody?: RuntimeBytes;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx, params, request } = unwrapTsfnPayload(\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(\n\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\trequest ? buildRequest(request) : undefined,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait config.onBeforeConnect(\n\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\tvalidateConnParams(\n\t\t\t\t\t\t\t\t\t\tschemaConfig.connParamsSchema,\n\t\t\t\t\t\t\t\t\t\tdecodeValue(params),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tcreateConnState:\n\t\t\thasStaticConnState || hasDynamicConnState\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tconn: ConnHandle;\n\t\t\t\t\t\t\t\tparams: RuntimeBytes;\n\t\t\t\t\t\t\t\trequest?: {\n\t\t\t\t\t\t\t\t\tmethod: string;\n\t\t\t\t\t\t\t\t\turi: string;\n\t\t\t\t\t\t\t\t\theaders?: Record<string, string>;\n\t\t\t\t\t\t\t\t\tbody?: RuntimeBytes;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t): Promise<RuntimeBytes> => {\n\t\t\t\t\t\t\tconst { ctx, conn, params, request } =\n\t\t\t\t\t\t\t\tunwrapTsfnPayload(error, payload);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(\n\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\trequest ? buildRequest(request) : undefined,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst connAdapter = new NativeConnAdapter(\n\t\t\t\t\t\t\t\truntime,\n\t\t\t\t\t\t\t\tconn,\n\t\t\t\t\t\t\t\tschemaConfig,\n\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t(connId) =>\n\t\t\t\t\t\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\t\t\t\t\t\truntime.actorQueueHibernationRemoval(\n\t\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\t\tconnId,\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst nextConnState = hasStaticConnState\n\t\t\t\t\t\t\t\t\t? structuredClone(config.connState)\n\t\t\t\t\t\t\t\t\t: await config.createConnState(\n\t\t\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\t\t\tvalidateConnParams(\n\t\t\t\t\t\t\t\t\t\t\t\tschemaConfig.connParamsSchema,\n\t\t\t\t\t\t\t\t\t\t\t\tdecodeValue(params),\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconnAdapter.initializeState(nextConnState);\n\t\t\t\t\t\t\t\treturn encodeValue(nextConnState);\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tonConnect:\n\t\t\ttypeof config.onConnect === \"function\"\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tconn: ConnHandle;\n\t\t\t\t\t\t\t\trequest?: {\n\t\t\t\t\t\t\t\t\tmethod: string;\n\t\t\t\t\t\t\t\t\turi: string;\n\t\t\t\t\t\t\t\t\theaders?: Record<string, string>;\n\t\t\t\t\t\t\t\t\tbody?: RuntimeBytes;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx, conn, request } = unwrapTsfnPayload(\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(\n\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\trequest ? buildRequest(request) : undefined,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst connAdapter = new NativeConnAdapter(\n\t\t\t\t\t\t\t\truntime,\n\t\t\t\t\t\t\t\tconn,\n\t\t\t\t\t\t\t\tschemaConfig,\n\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t(connId) =>\n\t\t\t\t\t\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\t\t\t\t\t\truntime.actorQueueHibernationRemoval(\n\t\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\t\tconnId,\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait config.onConnect(\n\t\t\t\t\t\t\t\t\tObject.assign(actorCtx, {\n\t\t\t\t\t\t\t\t\t\tconn: connAdapter,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\tconnAdapter,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tonDisconnectFinal: needsDisconnectCallback\n\t\t\t? wrapNativeCallback(\n\t\t\t\t\tasync (\n\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\tconn: ConnHandle;\n\t\t\t\t\t\t},\n\t\t\t\t\t) => {\n\t\t\t\t\t\tconst { ctx, conn } = unwrapTsfnPayload(error, payload);\n\t\t\t\t\t\tconst actorCtx = makeConnCtx(ctx, conn);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// Core already removed the connection; this hook is\n\t\t\t\t\t\t\t// pure user dispatch.\n\t\t\t\t\t\t\tif (typeof config.onDisconnect === \"function\") {\n\t\t\t\t\t\t\t\tawait config.onDisconnect(\n\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\tnew NativeConnAdapter(\n\t\t\t\t\t\t\t\t\t\truntime,\n\t\t\t\t\t\t\t\t\t\tconn,\n\t\t\t\t\t\t\t\t\t\tschemaConfig,\n\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\t(connId) =>\n\t\t\t\t\t\t\t\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\t\t\t\t\t\t\t\truntime.actorQueueHibernationRemoval(\n\t\t\t\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\t\t\t\tconnId,\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t: undefined,\n\t\tonBeforeSubscribe:\n\t\t\tschemaConfig.events &&\n\t\t\tObject.values(schemaConfig.events).some(\n\t\t\t\t(schema) =>\n\t\t\t\t\ttypeof (schema as { canSubscribe?: unknown })\n\t\t\t\t\t\t.canSubscribe === \"function\",\n\t\t\t)\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tconn: ConnHandle;\n\t\t\t\t\t\t\t\teventName: string;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx, conn, eventName } = unwrapTsfnPayload(\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst actorCtx = makeConnCtx(ctx, conn);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst canSubscribe = getEventCanSubscribe(\n\t\t\t\t\t\t\t\t\tschemaConfig.events,\n\t\t\t\t\t\t\t\t\teventName,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tif (!canSubscribe) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst result = await canSubscribe(actorCtx);\n\t\t\t\t\t\t\t\tif (typeof result !== \"boolean\") {\n\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t\"canSubscribe must return a boolean\",\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (!result) {\n\t\t\t\t\t\t\t\t\tthrow forbiddenError();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tonBeforeActionResponse:\n\t\t\ttypeof config.onBeforeActionResponse === \"function\"\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tname: string;\n\t\t\t\t\t\t\t\targs: RuntimeBytes;\n\t\t\t\t\t\t\t\toutput: RuntimeBytes;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx, name, args, output } =\n\t\t\t\t\t\t\t\tunwrapTsfnPayload(error, payload);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\treturn encodeValue(\n\t\t\t\t\t\t\t\t\tawait config.onBeforeActionResponse(\n\t\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\t\tdecodeArgs(args),\n\t\t\t\t\t\t\t\t\t\tdecodeValue(output),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tonRequest: wrapNativeCallback(\n\t\t\tasync (\n\t\t\t\terror: unknown,\n\t\t\t\tpayload: {\n\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tmethod: string;\n\t\t\t\t\t\turi: string;\n\t\t\t\t\t\theaders?: Record<string, string>;\n\t\t\t\t\t\tbody?: RuntimeBytes;\n\t\t\t\t\t};\n\t\t\t\t\tcancelToken?: CancellationTokenHandle;\n\t\t\t\t},\n\t\t\t) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst { ctx, request, cancelToken } = unwrapTsfnPayload(\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t);\n\t\t\t\t\tconst jsRequest = buildRequest(request);\n\t\t\t\t\tconst inspectorResponse =\n\t\t\t\t\t\tawait maybeHandleNativeInspectorRequest(\n\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\trequest,\n\t\t\t\t\t\t\tjsRequest,\n\t\t\t\t\t\t);\n\t\t\t\t\tif (inspectorResponse) {\n\t\t\t\t\t\treturn await toRuntimeHttpResponse(inspectorResponse);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof config.onRequest !== \"function\") {\n\t\t\t\t\t\treturn await toRuntimeHttpResponse(\n\t\t\t\t\t\t\tnew Response(null, { status: 404 }),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst rawConnParams =\n\t\t\t\t\t\tjsRequest.headers.get(HEADER_CONN_PARAMS);\n\t\t\t\t\tlet requestCtx:\n\t\t\t\t\t\t| ReturnType<typeof withConnContext>\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tlet conn: ConnHandle | undefined;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst connParams = validateConnParams(\n\t\t\t\t\t\t\tschemaConfig.connParamsSchema,\n\t\t\t\t\t\t\trawConnParams\n\t\t\t\t\t\t\t\t? JSON.parse(rawConnParams)\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconn = await callNative(() =>\n\t\t\t\t\t\t\truntime.actorConnectConn(\n\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\tencodeValue(connParams),\n\t\t\t\t\t\t\t\trequest,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\trequestCtx = makeConnCtx(\n\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\tconn,\n\t\t\t\t\t\t\tjsRequest,\n\t\t\t\t\t\t\tcancelToken,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst response = await config.onRequest(\n\t\t\t\t\t\t\trequestCtx,\n\t\t\t\t\t\t\tjsRequest,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (!(response instanceof Response)) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\"onRequest handler must return a Response\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn await toRuntimeHttpResponse(response);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst encodingHeader =\n\t\t\t\t\t\t\tjsRequest.headers.get(HEADER_ENCODING);\n\t\t\t\t\t\tconst encoding: Encoding =\n\t\t\t\t\t\t\tencodingHeader === \"cbor\" ||\n\t\t\t\t\t\t\tencodingHeader === \"bare\"\n\t\t\t\t\t\t\t\t? encodingHeader\n\t\t\t\t\t\t\t\t: \"json\";\n\t\t\t\t\t\tconst path = new URL(jsRequest.url).pathname;\n\t\t\t\t\t\treturn await toRuntimeHttpResponse(\n\t\t\t\t\t\t\tbuildNativeRequestErrorResponse(\n\t\t\t\t\t\t\t\tencoding,\n\t\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tawait requestCtx?.dispose();\n\t\t\t\t\t\tif (conn) {\n\t\t\t\t\t\t\tawait runtime.connDisconnect(conn);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger().error({\n\t\t\t\t\t\tmsg: \"native onRequest failed\",\n\t\t\t\t\t\terror,\n\t\t\t\t\t});\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tonWebSocket:\n\t\t\ttypeof config.onWebSocket === \"function\"\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tconn: ConnHandle;\n\t\t\t\t\t\t\t\tws: WebSocketHandle;\n\t\t\t\t\t\t\t\trequest?: {\n\t\t\t\t\t\t\t\t\tmethod: string;\n\t\t\t\t\t\t\t\t\turi: string;\n\t\t\t\t\t\t\t\t\theaders?: Record<string, string>;\n\t\t\t\t\t\t\t\t\tbody?: RuntimeBytes;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx, conn, ws, request } =\n\t\t\t\t\t\t\t\tunwrapTsfnPayload(error, payload);\n\t\t\t\t\t\t\tconst jsRequest = request\n\t\t\t\t\t\t\t\t? buildRequest(request)\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\tconst actorCtx = makeConnCtx(ctx, conn, jsRequest);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait config.onWebSocket(\n\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\tnew TrackedWebSocketHandleAdapter(\n\t\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\t\tnew NativeWebSocketAdapter(runtime, ws),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\trun: (() => {\n\t\t\tconst run = getRunFunction(config.run);\n\t\t\tif (!run) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn wrapNativeCallback(\n\t\t\t\tasync (\n\t\t\t\t\terror: unknown,\n\t\t\t\t\tpayload: { ctx: ActorContextHandle },\n\t\t\t\t) => {\n\t\t\t\t\tconst { ctx } = unwrapTsfnPayload(error, payload);\n\t\t\t\t\tconst actorId = callNativeSync(() => runtime.actorId(ctx));\n\t\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\t\tnativeRunHandlerActiveByActorId.set(actorId, true);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait run(actorCtx);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tnativeRunHandlerActiveByActorId.set(actorId, false);\n\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t);\n\t\t})(),\n\t\tgetWorkflowHistory:\n\t\t\tgetRunInspectorConfig(config.run) !== undefined\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: { ctx: ActorContextHandle },\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx } = unwrapTsfnPayload(error, payload);\n\t\t\t\t\t\t\tconst history =\n\t\t\t\t\t\t\t\tgetNativeWorkflowInspector(ctx)?.getHistory();\n\t\t\t\t\t\t\treturn history == null\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: encodeValue(history);\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\treplayWorkflow:\n\t\t\tgetRunInspectorConfig(config.run) !== undefined\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tentryId?: string;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx, entryId } = unwrapTsfnPayload(\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst workflowInspector =\n\t\t\t\t\t\t\t\tgetNativeWorkflowInspector(ctx);\n\t\t\t\t\t\t\tif (!workflowInspector?.replayFromStep) {\n\t\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst history =\n\t\t\t\t\t\t\t\t(await workflowInspector.replayFromStep(\n\t\t\t\t\t\t\t\t\tentryId,\n\t\t\t\t\t\t\t\t)) ?? null;\n\t\t\t\t\t\t\treturn history == null\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: encodeValue(history);\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tactions: Object.fromEntries(\n\t\t\tObject.entries(actionHandlers).map(([name, handler]) => [\n\t\t\t\tname,\n\t\t\t\twrapNativeCallback(\n\t\t\t\t\tasync (\n\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\tconn: ConnHandle | null;\n\t\t\t\t\t\t\tname: string;\n\t\t\t\t\t\t\targs: RuntimeBytes;\n\t\t\t\t\t\t\tcancelToken?: CancellationTokenHandle;\n\t\t\t\t\t\t},\n\t\t\t\t\t) => {\n\t\t\t\t\t\tconst { ctx, conn, args, cancelToken } =\n\t\t\t\t\t\t\tunwrapTsfnPayload(error, payload);\n\t\t\t\t\t\tconst actorCtx =\n\t\t\t\t\t\t\tconn != null\n\t\t\t\t\t\t\t\t? makeConnCtx(ctx, conn, undefined, cancelToken)\n\t\t\t\t\t\t\t\t: makeActorCtx(ctx, undefined, cancelToken);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\treturn encodeValue(\n\t\t\t\t\t\t\t\tawait handler(\n\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\t...validateActionArgs(\n\t\t\t\t\t\t\t\t\t\tschemaConfig.actionInputSchemas,\n\t\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\t\tdecodeArgs(args),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t]),\n\t\t),\n\t\tonQueueSend: wrapNativeCallback(\n\t\t\tasync (\n\t\t\t\terror: unknown,\n\t\t\t\tpayload: {\n\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\tconn: ConnHandle;\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tmethod: string;\n\t\t\t\t\t\turi: string;\n\t\t\t\t\t\theaders?: Record<string, string>;\n\t\t\t\t\t\tbody?: RuntimeBytes;\n\t\t\t\t\t};\n\t\t\t\t\tname: string;\n\t\t\t\t\tbody: RuntimeBytes;\n\t\t\t\t\twait: boolean;\n\t\t\t\t\ttimeoutMs?: bigint | number;\n\t\t\t\t\tcancelToken?: CancellationTokenHandle;\n\t\t\t\t},\n\t\t\t) => {\n\t\t\t\tconst {\n\t\t\t\t\tctx,\n\t\t\t\t\tconn,\n\t\t\t\t\trequest,\n\t\t\t\t\tname,\n\t\t\t\t\tbody,\n\t\t\t\t\twait,\n\t\t\t\t\ttimeoutMs,\n\t\t\t\t\tcancelToken,\n\t\t\t\t} = unwrapTsfnPayload(error, payload);\n\t\t\t\tconst jsRequest = buildRequest(request);\n\t\t\t\tconst actorCtx = withConnContext(\n\t\t\t\t\truntime,\n\t\t\t\t\tctx,\n\t\t\t\t\tconn,\n\t\t\t\t\tcreateClient,\n\t\t\t\t\tschemaConfig,\n\t\t\t\t\tdatabaseProvider,\n\t\t\t\t\tjsRequest,\n\t\t\t\t\tstateEnabled,\n\t\t\t\t\tonStateChange,\n\t\t\t\t\tcancelToken,\n\t\t\t\t);\n\t\t\t\ttry {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!schemaConfig.queues ||\n\t\t\t\t\t\t!hasSchemaConfigKey(schemaConfig.queues, name)\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn { status: \"completed\" };\n\t\t\t\t\t}\n\n\t\t\t\t\tconst canPublish = getQueueCanPublish(\n\t\t\t\t\t\tschemaConfig.queues,\n\t\t\t\t\t\tname,\n\t\t\t\t\t);\n\t\t\t\t\tif (canPublish && !(await canPublish(actorCtx))) {\n\t\t\t\t\t\tthrow forbiddenError();\n\t\t\t\t\t}\n\n\t\t\t\t\tconst decodedBody = decodeValue(body);\n\t\t\t\t\tif (wait) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst response =\n\t\t\t\t\t\t\t\tawait actorCtx.queue.enqueueAndWait(\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tdecodedBody,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttimeout:\n\t\t\t\t\t\t\t\t\t\t\ttimeoutMs === undefined ||\n\t\t\t\t\t\t\t\t\t\t\ttimeoutMs === null\n\t\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t\t: Number(timeoutMs),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\t\t\t\tresponse:\n\t\t\t\t\t\t\t\t\tresponse === undefined\n\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t: encodeValue(response),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t(error as { group?: string; code?: string })\n\t\t\t\t\t\t\t\t\t.group === \"queue\" &&\n\t\t\t\t\t\t\t\t(error as { group?: string; code?: string })\n\t\t\t\t\t\t\t\t\t.code === \"timed_out\"\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn { status: \"timedOut\" };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tawait actorCtx.queue.send(name, decodedBody);\n\t\t\t\t\treturn { status: \"completed\" };\n\t\t\t\t} finally {\n\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tserializeState: wrapNativeCallback(\n\t\t\tasync (\n\t\t\t\terror: unknown,\n\t\t\t\tpayload: {\n\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\treason: SerializeStateReason;\n\t\t\t\t},\n\t\t\t) => {\n\t\t\t\tconst { ctx, reason } = unwrapTsfnPayload(error, payload);\n\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\ttry {\n\t\t\t\t\treturn actorCtx.serializeForTick(reason);\n\t\t\t\t} finally {\n\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t};\n\n\treturn runtime.createActorFactory(\n\t\tcallbacks,\n\t\tbuildActorConfig(definition, registryConfig),\n\t);\n}\n\nexport async function buildServeConfig(\n\tconfig: RegistryConfig,\n): Promise<RuntimeServeConfig> {\n\tif (!config.endpoint) {\n\t\tthrow nativeEndpointNotConfiguredError();\n\t}\n\n\tconst serveConfig: RuntimeServeConfig = {\n\t\tversion: config.envoy.version,\n\t\tendpoint: config.endpoint,\n\t\ttoken: config.token,\n\t\tnamespace: config.namespace,\n\t\tpoolName: config.envoy.poolName,\n\t\thandleInspectorHttpInRuntime: true,\n\t\tserverlessBasePath: config.serverless.basePath,\n\t\tserverlessPackageVersion: VERSION,\n\t\tserverlessClientEndpoint: config.publicEndpoint,\n\t\tserverlessClientNamespace: config.publicNamespace,\n\t\tserverlessClientToken: config.publicToken,\n\t\tserverlessValidateEndpoint: config.validateServerlessEndpoint,\n\t\tserverlessMaxStartPayloadBytes: config.serverless.maxStartPayloadBytes,\n\t};\n\n\tif (config.startEngine) {\n\t\tconst { getEnginePath } = await loadEngineCli();\n\t\tserveConfig.engineBinaryPath = getEnginePath();\n\t}\n\tif (config.test?.enabled) {\n\t\tserveConfig.inspectorTestToken =\n\t\t\tgetEnvUniversal(\"_RIVET_TEST_INSPECTOR_TOKEN\") ?? \"token\";\n\t}\n\n\treturn serveConfig;\n}\n\nexport async function buildRegistryWithRuntime(\n\tconfig: RegistryConfig,\n\truntime: CoreRuntime,\n): Promise<{\n\truntime: CoreRuntime;\n\tregistry: RegistryHandle;\n\tserveConfig: RuntimeServeConfig;\n}> {\n\tif (\n\t\tconfig.test?.enabled &&\n\t\tgetEnvUniversal(\"_RIVET_TEST_INSPECTOR_TOKEN\") === undefined\n\t) {\n\t\ttrySetProcessEnv(\"_RIVET_TEST_INSPECTOR_TOKEN\", \"token\");\n\t}\n\n\tconst registry = runtime.createRegistry();\n\n\tfor (const [name, definition] of Object.entries(config.use)) {\n\t\truntime.registerActor(\n\t\t\tregistry,\n\t\t\tname,\n\t\t\tbuildNativeFactory(runtime, config, definition),\n\t\t);\n\t}\n\n\treturn {\n\t\truntime,\n\t\tregistry,\n\t\tserveConfig: await buildServeConfig(config),\n\t};\n}\n\nexport async function buildNativeRegistry(config: RegistryConfig): Promise<{\n\truntime: CoreRuntime;\n\tregistry: RegistryHandle;\n\tserveConfig: RuntimeServeConfig;\n}> {\n\tconst { runtime } = await loadNapiRuntime();\n\treturn buildRegistryWithRuntime(\n\t\tnormalizeRuntimeConfigForKind(config, \"native\"),\n\t\truntime,\n\t);\n}\n\nexport async function buildConfiguredRegistry(config: RegistryConfig): Promise<{\n\truntime: CoreRuntime;\n\tregistry: RegistryHandle;\n\tserveConfig: RuntimeServeConfig;\n}> {\n\tconst runtime = await loadConfiguredRuntime(config);\n\treturn buildRegistryWithRuntime(\n\t\tnormalizeRuntimeConfig(config, runtime),\n\t\truntime,\n\t);\n}\n","import { decodeBridgeRivetError } from \"@/actor/errors\";\nimport type {\n\tSqliteBindings,\n\tSqliteDatabase,\n\tSqliteExecuteResult,\n\tSqliteNativeMetrics,\n} from \"./config\";\n\ntype NativeBindNoValues = {\n\tintValue?: never;\n\tfloatValue?: never;\n\ttextValue?: never;\n\tblobValue?: never;\n};\n\ntype NativeBindParam =\n\t| ({ kind: \"null\" } & NativeBindNoValues)\n\t| {\n\t\t\tkind: \"int\";\n\t\t\tintValue: number;\n\t\t\tfloatValue?: never;\n\t\t\ttextValue?: never;\n\t\t\tblobValue?: never;\n\t }\n\t| {\n\t\t\tkind: \"float\";\n\t\t\tintValue?: never;\n\t\t\tfloatValue: number;\n\t\t\ttextValue?: never;\n\t\t\tblobValue?: never;\n\t }\n\t| {\n\t\t\tkind: \"text\";\n\t\t\tintValue?: never;\n\t\t\tfloatValue?: never;\n\t\t\ttextValue: string;\n\t\t\tblobValue?: never;\n\t }\n\t| {\n\t\t\tkind: \"blob\";\n\t\t\tintValue?: never;\n\t\t\tfloatValue?: never;\n\t\t\ttextValue?: never;\n\t\t\tblobValue: Buffer;\n\t };\n\ninterface NativeExecResult {\n\tcolumns: string[];\n\trows: unknown[][];\n}\n\ninterface NativeQueryResult {\n\tcolumns: string[];\n\trows: unknown[][];\n}\n\ninterface NativeRunResult {\n\tchanges: number;\n}\n\ninterface NativeExecuteResult {\n\tcolumns: string[];\n\trows: unknown[][];\n\tchanges: number;\n\tlastInsertRowId?: number | null;\n}\n\nexport interface JsNativeDatabaseLike {\n\texec(sql: string): Promise<NativeExecResult>;\n\texecute(\n\t\tsql: string,\n\t\tparams?: NativeBindParam[] | null,\n\t): Promise<NativeExecuteResult>;\n\tquery(\n\t\tsql: string,\n\t\tparams?: NativeBindParam[] | null,\n\t): Promise<NativeQueryResult>;\n\trun(\n\t\tsql: string,\n\t\tparams?: NativeBindParam[] | null,\n\t): Promise<NativeRunResult>;\n\tmetrics?(): SqliteNativeMetrics | null;\n\ttakeLastKvError?(): string | null;\n\tclose(): Promise<void>;\n}\n\nfunction shouldAttachNativeKvError(message: string): boolean {\n\treturn /i\\/o error|unable to open database file/i.test(message);\n}\n\nfunction enrichNativeDatabaseError(\n\tdatabase: JsNativeDatabaseLike,\n\terror: unknown,\n): never {\n\tconst bridged =\n\t\ttypeof error === \"string\"\n\t\t\t? decodeBridgeRivetError(error)\n\t\t\t: error instanceof Error\n\t\t\t\t? decodeBridgeRivetError(error.message)\n\t\t\t\t: undefined;\n\tif (bridged) {\n\t\tthrow bridged;\n\t}\n\n\tconst kvError = database.takeLastKvError?.();\n\tif (\n\t\terror instanceof Error &&\n\t\tkvError &&\n\t\tshouldAttachNativeKvError(error.message) &&\n\t\t!error.message.includes(kvError)\n\t) {\n\t\terror.message = `${error.message} (native sqlite kv error: ${kvError})`;\n\t}\n\tthrow error;\n}\n\nfunction toNativeBinding(arg: unknown): NativeBindParam {\n\tif (arg === null || arg === undefined) {\n\t\treturn { kind: \"null\" };\n\t}\n\tif (typeof arg === \"bigint\") {\n\t\treturn { kind: \"int\", intValue: Number(arg) };\n\t}\n\tif (typeof arg === \"number\") {\n\t\tif (Number.isInteger(arg)) {\n\t\t\treturn { kind: \"int\", intValue: arg };\n\t\t}\n\t\treturn { kind: \"float\", floatValue: arg };\n\t}\n\tif (typeof arg === \"string\") {\n\t\treturn { kind: \"text\", textValue: arg };\n\t}\n\tif (typeof arg === \"boolean\") {\n\t\treturn { kind: \"int\", intValue: arg ? 1 : 0 };\n\t}\n\tif (arg instanceof Uint8Array) {\n\t\treturn { kind: \"blob\", blobValue: Buffer.from(arg) };\n\t}\n\tthrow new Error(`unsupported bind parameter type: ${typeof arg}`);\n}\n\nfunction extractNamedSqliteParameters(sql: string): string[] {\n\tconst orderedNames: string[] = [];\n\tconst seen = new Set<string>();\n\tconst pattern = /([:@$][A-Za-z_][A-Za-z0-9_]*)/g;\n\tfor (const match of sql.matchAll(pattern)) {\n\t\tconst name = match[1];\n\t\tif (seen.has(name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(name);\n\t\torderedNames.push(name);\n\t}\n\treturn orderedNames;\n}\n\nfunction getNamedSqliteBinding(\n\tbindings: Record<string, unknown>,\n\tname: string,\n): unknown {\n\tif (name in bindings) {\n\t\treturn bindings[name];\n\t}\n\n\tconst bareName = name.slice(1);\n\tif (bareName in bindings) {\n\t\treturn bindings[bareName];\n\t}\n\n\tfor (const prefix of [\":\", \"@\", \"$\"] as const) {\n\t\tconst candidate = `${prefix}${bareName}`;\n\t\tif (candidate in bindings) {\n\t\t\treturn bindings[candidate];\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\nfunction toNativeBindings(\n\tsql: string,\n\tparams?: SqliteBindings,\n): NativeBindParam[] | null {\n\tif (params === undefined) {\n\t\treturn null;\n\t}\n\n\tif (Array.isArray(params)) {\n\t\treturn params.map((arg) => toNativeBinding(arg));\n\t}\n\n\tconst orderedNames = extractNamedSqliteParameters(sql);\n\tif (orderedNames.length === 0) {\n\t\treturn Object.values(params).map((arg) => toNativeBinding(arg));\n\t}\n\n\treturn orderedNames.map((name) => {\n\t\tconst value = getNamedSqliteBinding(params, name);\n\t\tif (value === undefined) {\n\t\t\tthrow new Error(`missing bind parameter: ${name}`);\n\t\t}\n\t\treturn toNativeBinding(value);\n\t});\n}\n\nfunction normalizeNativeMetrics(\n\tmetrics: SqliteNativeMetrics | null | undefined,\n): SqliteNativeMetrics | null {\n\tif (!metrics) return null;\n\tconst raw = metrics as unknown as Record<string, unknown>;\n\tconst numberField = (camel: string, snake: string) =>\n\t\tNumber(raw[camel] ?? raw[snake] ?? 0);\n\n\treturn {\n\t\trequestBuildNs: numberField(\"requestBuildNs\", \"request_build_ns\"),\n\t\tserializeNs: numberField(\"serializeNs\", \"serialize_ns\"),\n\t\ttransportNs: numberField(\"transportNs\", \"transport_ns\"),\n\t\tstateUpdateNs: numberField(\"stateUpdateNs\", \"state_update_ns\"),\n\t\ttotalNs: numberField(\"totalNs\", \"total_ns\"),\n\t\tcommitCount: numberField(\"commitCount\", \"commit_count\"),\n\t\tpageCacheEntries: numberField(\"pageCacheEntries\", \"page_cache_entries\"),\n\t\tpageCacheWeightedSize: numberField(\n\t\t\t\"pageCacheWeightedSize\",\n\t\t\t\"page_cache_weighted_size\",\n\t\t),\n\t\tpageCacheCapacityPages: numberField(\n\t\t\t\"pageCacheCapacityPages\",\n\t\t\t\"page_cache_capacity_pages\",\n\t\t),\n\t\twriteBufferDirtyPages: numberField(\n\t\t\t\"writeBufferDirtyPages\",\n\t\t\t\"write_buffer_dirty_pages\",\n\t\t),\n\t\tdbSizePages: numberField(\"dbSizePages\", \"db_size_pages\"),\n\t};\n}\n\nclass NativeCloseGate {\n\t#active = 0;\n\t#closed = false;\n\t#waiters: (() => void)[] = [];\n\n\tenter(): () => void {\n\t\tif (this.#closed) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Database is closed. This usually means a background timer (setInterval, setTimeout) or a stray promise is still running after the actor stopped. Use c.abortSignal to clean up timers before the actor shuts down.\",\n\t\t\t);\n\t\t}\n\n\t\tthis.#active++;\n\t\tlet released = false;\n\t\treturn () => {\n\t\t\tif (released) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treleased = true;\n\t\t\tthis.#active--;\n\t\t\tif (this.#active === 0) {\n\t\t\t\tconst waiters = this.#waiters.splice(0);\n\t\t\t\tfor (const waiter of waiters) {\n\t\t\t\t\twaiter();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tasync close(callback: () => Promise<void>): Promise<void> {\n\t\tif (this.#closed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#closed = true;\n\t\tif (this.#active > 0) {\n\t\t\tawait new Promise<void>((resolve) => this.#waiters.push(resolve));\n\t\t}\n\t\tawait callback();\n\t}\n}\n\nexport function wrapJsNativeDatabase(\n\tdatabase: JsNativeDatabaseLike,\n): SqliteDatabase {\n\tconst gate = new NativeCloseGate();\n\tlet closePromise: Promise<void> | undefined;\n\tlet lastInsertRowId: number | null = null;\n\n\tconst executeNative = async (\n\t\tsql: string,\n\t\tparams?: SqliteBindings,\n\t): Promise<SqliteExecuteResult> => {\n\t\tconst lastInsertRowIdColumn = lastInsertRowIdColumnName(sql);\n\t\tif (lastInsertRowIdColumn) {\n\t\t\treturn {\n\t\t\t\tcolumns: [lastInsertRowIdColumn],\n\t\t\t\trows: [[lastInsertRowId ?? 0]],\n\t\t\t\tchanges: 0,\n\t\t\t\tlastInsertRowId,\n\t\t\t};\n\t\t}\n\n\t\tconst release = gate.enter();\n\t\ttry {\n\t\t\tconst nativeParams = toNativeBindings(sql, params);\n\t\t\tconst result = await database.execute(sql, nativeParams);\n\t\t\tif (result.lastInsertRowId !== undefined) {\n\t\t\t\tlastInsertRowId = result.lastInsertRowId;\n\t\t\t}\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tenrichNativeDatabaseError(database, error);\n\t\t} finally {\n\t\t\trelease();\n\t\t}\n\t};\n\n\treturn {\n\t\tasync exec(\n\t\t\tsql: string,\n\t\t\tcallback?: (row: unknown[], columns: string[]) => void,\n\t\t): Promise<void> {\n\t\t\tconst release = gate.enter();\n\t\t\tlet result: NativeExecResult;\n\t\t\ttry {\n\t\t\t\tresult = await database.exec(sql);\n\t\t\t} catch (error) {\n\t\t\t\tenrichNativeDatabaseError(database, error);\n\t\t\t} finally {\n\t\t\t\trelease();\n\t\t\t}\n\t\t\tif (!callback) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfor (const row of result.rows) {\n\t\t\t\tcallback(row, result.columns);\n\t\t\t}\n\t\t},\n\t\tasync execute(\n\t\t\tsql: string,\n\t\t\tparams?: SqliteBindings,\n\t\t): Promise<SqliteExecuteResult> {\n\t\t\treturn await executeNative(sql, params);\n\t\t},\n\t\tasync run(sql: string, params?: SqliteBindings): Promise<void> {\n\t\t\tawait executeNative(sql, params);\n\t\t},\n\t\tasync query(sql: string, params?: SqliteBindings) {\n\t\t\tconst { columns, rows } = await executeNative(sql, params);\n\t\t\treturn { columns, rows };\n\t\t},\n\t\tnativeMetrics(): SqliteNativeMetrics | null {\n\t\t\treturn normalizeNativeMetrics(database.metrics?.());\n\t\t},\n\t\tasync close(): Promise<void> {\n\t\t\tclosePromise ??= gate.close(() => database.close());\n\t\t\tawait closePromise;\n\t\t},\n\t};\n}\n\nfunction lastInsertRowIdColumnName(sql: string): string | undefined {\n\tconst match = sql.match(\n\t\t/^\\s*SELECT\\s+last_insert_rowid\\s*\\(\\s*\\)\\s*(?:AS\\s+(\"[^\"]+\"|`[^`]+`|\\[[^\\]]+\\]|\\w+))?\\s*;?\\s*$/i,\n\t);\n\tif (!match) {\n\t\treturn undefined;\n\t}\n\n\tconst alias = match[1];\n\tif (!alias) {\n\t\treturn \"last_insert_rowid()\";\n\t}\n\tif (\n\t\t(alias.startsWith('\"') && alias.endsWith('\"')) ||\n\t\t(alias.startsWith(\"`\") && alias.endsWith(\"`\")) ||\n\t\t(alias.startsWith(\"[\") && alias.endsWith(\"]\"))\n\t) {\n\t\treturn alias.slice(1, -1);\n\t}\n\treturn alias;\n}\n","import type { SqliteNativeMetrics } from \"@/common/database/config\";\nimport type { RegistryConfig } from \"./config\";\n\ndeclare const handleBrand: unique symbol;\n\ntype OpaqueHandle<Name extends string> = {\n\treadonly [handleBrand]: Name;\n};\n\nexport type RegistryHandle = OpaqueHandle<\"registry\">;\nexport type ActorFactoryHandle = OpaqueHandle<\"actorFactory\">;\nexport type ActorContextHandle = OpaqueHandle<\"actorContext\">;\nexport type ConnHandle = OpaqueHandle<\"conn\">;\nexport type WebSocketHandle = OpaqueHandle<\"webSocket\">;\nexport type CancellationTokenHandle = OpaqueHandle<\"cancellationToken\">;\n\nexport type RuntimeBytes = Uint8Array;\n\nexport interface RuntimeActorKeySegment {\n\tkind: string;\n\tstringValue?: string;\n\tnumberValue?: number;\n}\n\nexport interface RuntimeHttpRequest {\n\tmethod: string;\n\turi: string;\n\theaders?: Record<string, string>;\n\tbody?: RuntimeBytes;\n}\n\nexport interface RuntimeHttpResponse {\n\tstatus?: number;\n\theaders?: Record<string, string>;\n\tbody?: RuntimeBytes;\n}\n\nexport interface RuntimeStateDeltaPayload {\n\tstate?: RuntimeBytes;\n\tconnHibernation: Array<{\n\t\tconnId: string;\n\t\tbytes: RuntimeBytes;\n\t}>;\n\tconnHibernationRemoved: string[];\n}\n\nexport interface RuntimeRequestSaveOpts {\n\timmediate?: boolean;\n\tmaxWaitMs?: number;\n}\n\nexport interface RuntimeInspectorSnapshot {\n\tstateRevision: number;\n\tconnectionsRevision: number;\n\tqueueRevision: number;\n\tactiveConnections: number;\n\tqueueSize: number;\n\tconnectedClients: number;\n}\n\nexport interface RuntimeQueueMessage {\n\tid(): bigint;\n\tname(): string;\n\tbody(): RuntimeBytes;\n\tcreatedAt(): number;\n\tisCompletable(): boolean;\n\tcomplete(response?: RuntimeBytes | undefined | null): Promise<void>;\n}\n\nexport interface RuntimeQueueInspectMessage {\n\tid: number;\n\tname: string;\n\tcreatedAtMs: number;\n}\n\nexport interface RuntimeQueueSendResult {\n\tstatus: string;\n\tresponse?: RuntimeBytes;\n}\n\nexport interface RuntimeQueueNextBatchOptions {\n\tnames?: string[];\n\tcount?: number;\n\ttimeoutMs?: number;\n\tcompletable?: boolean;\n}\n\nexport interface RuntimeQueueWaitOptions {\n\ttimeoutMs?: number;\n\tcompletable?: boolean;\n}\n\nexport interface RuntimeQueueEnqueueAndWaitOptions {\n\ttimeoutMs?: number;\n}\n\nexport interface RuntimeQueueTryNextBatchOptions {\n\tnames?: string[];\n\tcount?: number;\n\tcompletable?: boolean;\n}\n\nexport interface RuntimeKvListOptions {\n\treverse?: boolean;\n\tlimit?: number;\n}\n\nexport interface RuntimeKvEntry {\n\tkey: RuntimeBytes;\n\tvalue: RuntimeBytes;\n}\n\ntype RuntimeSqlBindNoValues = {\n\tintValue?: never;\n\tfloatValue?: never;\n\ttextValue?: never;\n\tblobValue?: never;\n};\n\nexport type RuntimeSqlBindParam =\n\t| ({ kind: \"null\" } & RuntimeSqlBindNoValues)\n\t| {\n\t\t\tkind: \"int\";\n\t\t\tintValue: number;\n\t\t\tfloatValue?: never;\n\t\t\ttextValue?: never;\n\t\t\tblobValue?: never;\n\t }\n\t| {\n\t\t\tkind: \"float\";\n\t\t\tintValue?: never;\n\t\t\tfloatValue: number;\n\t\t\ttextValue?: never;\n\t\t\tblobValue?: never;\n\t }\n\t| {\n\t\t\tkind: \"text\";\n\t\t\tintValue?: never;\n\t\t\tfloatValue?: never;\n\t\t\ttextValue: string;\n\t\t\tblobValue?: never;\n\t }\n\t| {\n\t\t\tkind: \"blob\";\n\t\t\tintValue?: never;\n\t\t\tfloatValue?: never;\n\t\t\ttextValue?: never;\n\t\t\tblobValue: RuntimeBytes;\n\t };\n\nexport type RuntimeSqlBindParams = RuntimeSqlBindParam[] | null;\n\nexport interface RuntimeSqlQueryResult {\n\tcolumns: string[];\n\trows: unknown[][];\n}\n\nexport type RuntimeSqlExecResult = RuntimeSqlQueryResult;\n\nexport interface RuntimeSqlExecuteResult extends RuntimeSqlQueryResult {\n\tchanges: number;\n\tlastInsertRowId?: number | null;\n}\n\nexport function normalizeRuntimeSqlExecuteResult(\n\tresult: RuntimeSqlQueryResult & {\n\t\tchanges: number;\n\t\tlastInsertRowId?: number | null;\n\t},\n): RuntimeSqlExecuteResult {\n\treturn result;\n}\n\nexport interface RuntimeSqlRunResult {\n\tchanges: number;\n}\n\nexport interface RuntimeSqlDatabase {\n\texec(sql: string): Promise<RuntimeSqlExecResult>;\n\texecute(\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlExecuteResult>;\n\tquery(\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlQueryResult>;\n\trun(\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlRunResult>;\n\tmetrics?(): SqliteNativeMetrics | null;\n\ttakeLastKvError?(): string | null;\n\tclose(): Promise<void>;\n}\n\nexport interface RuntimeActorConfig {\n\tname?: string;\n\ticon?: string;\n\thasDatabase?: boolean;\n\tremoteSqlite?: boolean;\n\thasState?: boolean;\n\tcanHibernateWebsocket?: boolean;\n\tstateSaveIntervalMs?: number;\n\tcreateStateTimeoutMs?: number;\n\tonCreateTimeoutMs?: number;\n\tcreateVarsTimeoutMs?: number;\n\tcreateConnStateTimeoutMs?: number;\n\tonBeforeConnectTimeoutMs?: number;\n\tonConnectTimeoutMs?: number;\n\tonMigrateTimeoutMs?: number;\n\tonWakeTimeoutMs?: number;\n\tonBeforeActorStartTimeoutMs?: number;\n\tactionTimeoutMs?: number;\n\tonRequestTimeoutMs?: number;\n\tsleepTimeoutMs?: number;\n\tnoSleep?: boolean;\n\tsleepGracePeriodMs?: number;\n\tconnectionLivenessTimeoutMs?: number;\n\tconnectionLivenessIntervalMs?: number;\n\tmaxQueueSize?: number;\n\tmaxQueueMessageSize?: number;\n\tmaxIncomingMessageSize?: number;\n\tmaxOutgoingMessageSize?: number;\n\tpreloadMaxWorkflowBytes?: number;\n\tpreloadMaxConnectionsBytes?: number;\n\tactions?: Array<{ name: string }>;\n}\n\nexport interface RuntimeServeConfig {\n\tversion: number;\n\tendpoint: string;\n\ttoken?: string;\n\tnamespace: string;\n\tpoolName: string;\n\tengineBinaryPath?: string;\n\thandleInspectorHttpInRuntime?: boolean;\n\tinspectorTestToken?: string;\n\tserverlessBasePath?: string;\n\tserverlessPackageVersion: string;\n\tserverlessClientEndpoint?: string;\n\tserverlessClientNamespace?: string;\n\tserverlessClientToken?: string;\n\tserverlessValidateEndpoint: boolean;\n\tserverlessMaxStartPayloadBytes: number;\n}\n\nexport interface RuntimeServerlessRequest {\n\tmethod: string;\n\turl: string;\n\theaders: Record<string, string>;\n\tbody: RuntimeBytes;\n}\n\nexport interface RuntimeServerlessResponseHead {\n\tstatus: number;\n\theaders: Record<string, string>;\n}\n\nexport interface RuntimeRegistryDiagnostics {\n\tmode: string;\n\tenvoyActiveActorCount?: number | null;\n}\n\nexport type RuntimeServerlessStreamEvent =\n\t| {\n\t\t\tkind: \"chunk\";\n\t\t\tchunk?: RuntimeBytes;\n\t }\n\t| {\n\t\t\tkind: \"end\";\n\t\t\terror?: {\n\t\t\t\tgroup: string;\n\t\t\t\tcode: string;\n\t\t\t\tmessage: string;\n\t\t\t};\n\t };\n\nexport type RuntimeServerlessStreamCallback = (\n\terror: unknown,\n\tevent?: RuntimeServerlessStreamEvent,\n) => unknown;\n\nexport type RuntimeWebSocketEvent =\n\t| {\n\t\t\tkind: \"message\";\n\t\t\tdata: string | RuntimeBytes;\n\t\t\tbinary: boolean;\n\t\t\tmessageIndex?: number;\n\t }\n\t| {\n\t\t\tkind: \"close\";\n\t\t\tcode: number;\n\t\t\treason: string;\n\t\t\twasClean: boolean;\n\t };\n\nexport interface CoreRuntime {\n\treadonly kind: \"napi\" | \"wasm\";\n\n\tcreateRegistry(): RegistryHandle;\n\tregisterActor(\n\t\tregistry: RegistryHandle,\n\t\tname: string,\n\t\tfactory: ActorFactoryHandle,\n\t): void;\n\tserveRegistry(\n\t\tregistry: RegistryHandle,\n\t\tconfig: RuntimeServeConfig,\n\t): Promise<void>;\n\tshutdownRegistry(registry: RegistryHandle): Promise<void>;\n\thandleServerlessRequest(\n\t\tregistry: RegistryHandle,\n\t\treq: RuntimeServerlessRequest,\n\t\tonStreamEvent: RuntimeServerlessStreamCallback,\n\t\tcancelToken: CancellationTokenHandle,\n\t\tconfig: RuntimeServeConfig,\n\t): Promise<RuntimeServerlessResponseHead>;\n\tregistryDiagnostics?(\n\t\tregistry: RegistryHandle,\n\t): Promise<RuntimeRegistryDiagnostics>;\n\tcreateActorFactory(\n\t\tcallbacks: object,\n\t\tconfig?: RuntimeActorConfig | undefined | null,\n\t): ActorFactoryHandle;\n\n\tcreateCancellationToken(): CancellationTokenHandle;\n\tcancellationTokenAborted(token: CancellationTokenHandle): boolean;\n\tcancelCancellationToken(token: CancellationTokenHandle): void;\n\tonCancellationTokenCancelled(\n\t\ttoken: CancellationTokenHandle,\n\t\tcallback: (...args: unknown[]) => unknown,\n\t): void;\n\n\tactorState(ctx: ActorContextHandle): RuntimeBytes;\n\tactorBeginOnStateChange(ctx: ActorContextHandle): void;\n\tactorEndOnStateChange(ctx: ActorContextHandle): void;\n\tactorSetAlarm(\n\t\tctx: ActorContextHandle,\n\t\ttimestampMs?: number | undefined | null,\n\t): void;\n\tactorRequestSave(\n\t\tctx: ActorContextHandle,\n\t\topts?: RuntimeRequestSaveOpts | undefined | null,\n\t): void;\n\tactorRequestSaveAndWait(\n\t\tctx: ActorContextHandle,\n\t\topts?: RuntimeRequestSaveOpts | undefined | null,\n\t): Promise<void>;\n\tactorInspectorSnapshot(ctx: ActorContextHandle): RuntimeInspectorSnapshot;\n\tactorDecodeInspectorRequest(\n\t\tctx: ActorContextHandle,\n\t\tbytes: RuntimeBytes,\n\t\tadvertisedVersion: number,\n\t): RuntimeBytes;\n\tactorEncodeInspectorResponse(\n\t\tctx: ActorContextHandle,\n\t\tbytes: RuntimeBytes,\n\t\ttargetVersion: number,\n\t): RuntimeBytes;\n\tactorVerifyInspectorAuth(\n\t\tctx: ActorContextHandle,\n\t\tbearerToken?: string | undefined | null,\n\t): Promise<void>;\n\tactorQueueHibernationRemoval(ctx: ActorContextHandle, connId: string): void;\n\tactorTakePendingHibernationChanges(ctx: ActorContextHandle): string[];\n\tactorDirtyHibernatableConns(ctx: ActorContextHandle): ConnHandle[];\n\tactorSaveState(\n\t\tctx: ActorContextHandle,\n\t\tpayload: RuntimeStateDeltaPayload,\n\t): Promise<void>;\n\tactorId(ctx: ActorContextHandle): string;\n\tactorName(ctx: ActorContextHandle): string;\n\tactorKey(ctx: ActorContextHandle): RuntimeActorKeySegment[];\n\tactorRegion(ctx: ActorContextHandle): string;\n\tactorSleep(ctx: ActorContextHandle): void;\n\tactorDestroy(ctx: ActorContextHandle): void;\n\tactorAbortSignal(ctx: ActorContextHandle): AbortSignal;\n\tactorConns(ctx: ActorContextHandle): ConnHandle[];\n\tactorConnectConn(\n\t\tctx: ActorContextHandle,\n\t\tparams: RuntimeBytes,\n\t\trequest?: RuntimeHttpRequest | undefined | null,\n\t): Promise<ConnHandle>;\n\tactorBroadcast(\n\t\tctx: ActorContextHandle,\n\t\tname: string,\n\t\targs: RuntimeBytes,\n\t): void;\n\tactorWaitUntil(ctx: ActorContextHandle, promise: Promise<unknown>): void;\n\tactorKeepAwake(ctx: ActorContextHandle, promise: Promise<unknown>): void;\n\tactorBeginKeepAwake(ctx: ActorContextHandle): number;\n\tactorEndKeepAwake(ctx: ActorContextHandle, regionId: number): void;\n\tactorRegisterTask(ctx: ActorContextHandle, promise: Promise<unknown>): void;\n\tactorRuntimeState(ctx: ActorContextHandle): object;\n\tactorClearRuntimeState(ctx: ActorContextHandle): void;\n\tactorRestartRunHandler(ctx: ActorContextHandle): void;\n\tactorBeginWebsocketCallback(ctx: ActorContextHandle): number;\n\tactorEndWebsocketCallback(ctx: ActorContextHandle, regionId: number): void;\n\n\tactorKvGet(\n\t\tctx: ActorContextHandle,\n\t\tkey: RuntimeBytes,\n\t): Promise<RuntimeBytes | null>;\n\tactorKvPut(\n\t\tctx: ActorContextHandle,\n\t\tkey: RuntimeBytes,\n\t\tvalue: RuntimeBytes,\n\t): Promise<void>;\n\tactorKvDelete(ctx: ActorContextHandle, key: RuntimeBytes): Promise<void>;\n\tactorKvDeleteRange(\n\t\tctx: ActorContextHandle,\n\t\tstart: RuntimeBytes,\n\t\tend: RuntimeBytes,\n\t): Promise<void>;\n\tactorKvListPrefix(\n\t\tctx: ActorContextHandle,\n\t\tprefix: RuntimeBytes,\n\t\toptions?: RuntimeKvListOptions | undefined | null,\n\t): Promise<RuntimeKvEntry[]>;\n\tactorKvListRange(\n\t\tctx: ActorContextHandle,\n\t\tstart: RuntimeBytes,\n\t\tend: RuntimeBytes,\n\t\toptions?: RuntimeKvListOptions | undefined | null,\n\t): Promise<RuntimeKvEntry[]>;\n\tactorKvBatchGet(\n\t\tctx: ActorContextHandle,\n\t\tkeys: RuntimeBytes[],\n\t): Promise<Array<RuntimeBytes | undefined | null>>;\n\tactorKvBatchPut(\n\t\tctx: ActorContextHandle,\n\t\tentries: RuntimeKvEntry[],\n\t): Promise<void>;\n\tactorKvBatchDelete(\n\t\tctx: ActorContextHandle,\n\t\tkeys: RuntimeBytes[],\n\t): Promise<void>;\n\n\tactorSqlExec(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t): Promise<RuntimeSqlExecResult>;\n\tactorSqlExecute(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlExecuteResult>;\n\tactorSqlQuery(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlQueryResult>;\n\tactorSqlRun(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlRunResult>;\n\tactorSqlMetrics(ctx: ActorContextHandle): SqliteNativeMetrics | null;\n\tactorSqlTakeLastKvError(ctx: ActorContextHandle): string | null;\n\tactorSqlClose(ctx: ActorContextHandle): Promise<void>;\n\n\tactorQueueSend(\n\t\tctx: ActorContextHandle,\n\t\tname: string,\n\t\tbody: RuntimeBytes,\n\t): Promise<RuntimeQueueMessage>;\n\tactorQueueNextBatch(\n\t\tctx: ActorContextHandle,\n\t\toptions?: RuntimeQueueNextBatchOptions | undefined | null,\n\t\tsignal?: CancellationTokenHandle | undefined | null,\n\t): Promise<RuntimeQueueMessage[]>;\n\tactorQueueWaitForNames(\n\t\tctx: ActorContextHandle,\n\t\tnames: string[],\n\t\toptions?: RuntimeQueueWaitOptions | undefined | null,\n\t\tsignal?: CancellationTokenHandle | undefined | null,\n\t): Promise<RuntimeQueueMessage>;\n\tactorQueueWaitForNamesAvailable(\n\t\tctx: ActorContextHandle,\n\t\tnames: string[],\n\t\toptions?: RuntimeQueueWaitOptions | undefined | null,\n\t): Promise<void>;\n\tactorQueueEnqueueAndWait(\n\t\tctx: ActorContextHandle,\n\t\tname: string,\n\t\tbody: RuntimeBytes,\n\t\toptions?: RuntimeQueueEnqueueAndWaitOptions | undefined | null,\n\t\tsignal?: CancellationTokenHandle | undefined | null,\n\t): Promise<RuntimeBytes | null>;\n\tactorQueueTryNextBatch(\n\t\tctx: ActorContextHandle,\n\t\toptions?: RuntimeQueueTryNextBatchOptions | undefined | null,\n\t): RuntimeQueueMessage[];\n\tactorQueueMaxSize(ctx: ActorContextHandle): number;\n\tactorQueueInspectMessages(\n\t\tctx: ActorContextHandle,\n\t): Promise<RuntimeQueueInspectMessage[]>;\n\n\tactorScheduleAfter(\n\t\tctx: ActorContextHandle,\n\t\tdurationMs: number,\n\t\tactionName: string,\n\t\targs: RuntimeBytes,\n\t): void;\n\tactorScheduleAt(\n\t\tctx: ActorContextHandle,\n\t\ttimestampMs: number,\n\t\tactionName: string,\n\t\targs: RuntimeBytes,\n\t): void;\n\n\tconnId(conn: ConnHandle): string;\n\tconnParams(conn: ConnHandle): RuntimeBytes;\n\tconnState(conn: ConnHandle): RuntimeBytes;\n\tconnSetState(conn: ConnHandle, state: RuntimeBytes): void;\n\tconnIsHibernatable(conn: ConnHandle): boolean;\n\tconnSend(conn: ConnHandle, name: string, args: RuntimeBytes): void;\n\tconnDisconnect(\n\t\tconn: ConnHandle,\n\t\treason?: string | undefined | null,\n\t): Promise<void>;\n\n\twebSocketSend(\n\t\tws: WebSocketHandle,\n\t\tdata: RuntimeBytes,\n\t\tbinary: boolean,\n\t): void;\n\twebSocketClose(\n\t\tws: WebSocketHandle,\n\t\tcode?: number | undefined | null,\n\t\treason?: string | undefined | null,\n\t): Promise<void>;\n\twebSocketSetEventCallback(\n\t\tws: WebSocketHandle,\n\t\tcallback: (event: RuntimeWebSocketEvent) => void,\n\t): void;\n}\n\nexport interface RuntimeBundle {\n\truntime: CoreRuntime;\n}\n\nexport async function buildServeConfig(\n\tconfig: RegistryConfig,\n\tloadEnginePath: () => Promise<string>,\n\tversion: string,\n): Promise<RuntimeServeConfig> {\n\tif (!config.endpoint) {\n\t\tthrow new Error(\"registry endpoint is required\");\n\t}\n\n\tconst serveConfig: RuntimeServeConfig = {\n\t\tversion: config.envoy.version,\n\t\tendpoint: config.endpoint,\n\t\ttoken: config.token,\n\t\tnamespace: config.namespace,\n\t\tpoolName: config.envoy.poolName,\n\t\thandleInspectorHttpInRuntime: true,\n\t\tserverlessBasePath: config.serverless.basePath,\n\t\tserverlessPackageVersion: version,\n\t\tserverlessClientEndpoint: config.publicEndpoint,\n\t\tserverlessClientNamespace: config.publicNamespace,\n\t\tserverlessClientToken: config.publicToken,\n\t\tserverlessValidateEndpoint: config.validateServerlessEndpoint,\n\t\tserverlessMaxStartPayloadBytes: config.serverless.maxStartPayloadBytes,\n\t};\n\n\tif (config.startEngine) {\n\t\tserveConfig.engineBinaryPath = await loadEnginePath();\n\t}\n\tif (config.test?.enabled) {\n\t\tserveConfig.inspectorTestToken =\n\t\t\tprocess.env._RIVET_TEST_INSPECTOR_TOKEN ?? \"token\";\n\t}\n\n\treturn serveConfig;\n}\n","import type {\n\tActorContext as NativeActorContext,\n\tNapiActorFactory as NativeActorFactory,\n\tCancellationToken as NativeCancellationToken,\n\tConnHandle as NativeConnHandle,\n\tCoreRegistry as NativeCoreRegistry,\n\tWebSocket as NativeWebSocket,\n} from \"@rivetkit/rivetkit-napi\";\nimport type {\n\tActorContextHandle,\n\tActorFactoryHandle,\n\tCancellationTokenHandle,\n\tConnHandle,\n\tCoreRuntime,\n\tRegistryHandle,\n\tRuntimeActorConfig,\n\tRuntimeBytes,\n\tRuntimeHttpRequest,\n\tRuntimeKvEntry,\n\tRuntimeKvListOptions,\n\tRuntimeQueueEnqueueAndWaitOptions,\n\tRuntimeQueueMessage,\n\tRuntimeQueueNextBatchOptions,\n\tRuntimeQueueTryNextBatchOptions,\n\tRuntimeQueueWaitOptions,\n\tRuntimeRequestSaveOpts,\n\tRuntimeRegistryDiagnostics,\n\tRuntimeServeConfig,\n\tRuntimeServerlessRequest,\n\tRuntimeServerlessResponseHead,\n\tRuntimeServerlessStreamCallback,\n\tRuntimeSqlBindParam,\n\tRuntimeSqlBindParams,\n\tRuntimeSqlExecResult,\n\tRuntimeSqlExecuteResult,\n\tRuntimeSqlQueryResult,\n\tRuntimeSqlRunResult,\n\tRuntimeStateDeltaPayload,\n\tRuntimeWebSocketEvent,\n\tWebSocketHandle,\n} from \"./runtime\";\nimport { normalizeRuntimeSqlExecuteResult } from \"./runtime\";\n\ntype NativeBindings = typeof import(\"@rivetkit/rivetkit-napi\");\ntype NapiSqlDatabase = ReturnType<NativeActorContext[\"sql\"]>;\ntype NapiSqlBindParams = Parameters<NapiSqlDatabase[\"execute\"]>[1];\n\nfunction asNativeRegistry(handle: RegistryHandle): NativeCoreRegistry {\n\treturn handle as unknown as NativeCoreRegistry;\n}\n\nfunction asNativeFactory(handle: ActorFactoryHandle): NativeActorFactory {\n\treturn handle as unknown as NativeActorFactory;\n}\n\nfunction asNativeActorContext(handle: ActorContextHandle): NativeActorContext {\n\treturn handle as unknown as NativeActorContext;\n}\n\nfunction asNativeConn(handle: ConnHandle): NativeConnHandle {\n\treturn handle as unknown as NativeConnHandle;\n}\n\nfunction asNativeWebSocket(handle: WebSocketHandle): NativeWebSocket {\n\treturn handle as unknown as NativeWebSocket;\n}\n\nfunction asNativeCancellationToken(\n\thandle: CancellationTokenHandle,\n): NativeCancellationToken {\n\treturn handle as unknown as NativeCancellationToken;\n}\n\nfunction asRegistryHandle(handle: NativeCoreRegistry): RegistryHandle {\n\treturn handle as unknown as RegistryHandle;\n}\n\nfunction asActorFactoryHandle(handle: NativeActorFactory): ActorFactoryHandle {\n\treturn handle as unknown as ActorFactoryHandle;\n}\n\nfunction toNapiSqlBindParam(\n\tparam: RuntimeSqlBindParam,\n): NonNullable<NapiSqlBindParams>[number] {\n\tswitch (param.kind) {\n\t\tcase \"null\":\n\t\t\treturn { kind: \"null\" };\n\t\tcase \"int\":\n\t\t\treturn { kind: \"int\", intValue: param.intValue };\n\t\tcase \"float\":\n\t\t\treturn { kind: \"float\", floatValue: param.floatValue };\n\t\tcase \"text\":\n\t\t\treturn { kind: \"text\", textValue: param.textValue };\n\t\tcase \"blob\":\n\t\t\treturn { kind: \"blob\", blobValue: Buffer.from(param.blobValue) };\n\t}\n}\n\nfunction toNapiSqlBindParams(params?: RuntimeSqlBindParams): NapiSqlBindParams {\n\tif (params == null) {\n\t\treturn params;\n\t}\n\treturn params.map((param) => toNapiSqlBindParam(param));\n}\n\nfunction toNapiBuffer(value: RuntimeBytes): Buffer {\n\treturn Buffer.from(value);\n}\n\nfunction toNapiHttpRequest(\n\trequest?: RuntimeHttpRequest | undefined | null,\n): Parameters<NativeActorContext[\"connectConn\"]>[1] {\n\tif (!request) {\n\t\treturn request;\n\t}\n\treturn {\n\t\t...request,\n\t\tbody: request.body ? toNapiBuffer(request.body) : undefined,\n\t};\n}\n\nfunction toNapiStateDeltaPayload(\n\tpayload: RuntimeStateDeltaPayload,\n): Parameters<NativeActorContext[\"saveState\"]>[0] {\n\treturn {\n\t\t...payload,\n\t\tstate: payload.state ? toNapiBuffer(payload.state) : undefined,\n\t\tconnHibernation: payload.connHibernation.map((conn) => ({\n\t\t\t...conn,\n\t\t\tbytes: toNapiBuffer(conn.bytes),\n\t\t})),\n\t};\n}\n\nfunction toNapiKvEntry(entry: RuntimeKvEntry): {\n\tkey: Buffer;\n\tvalue: Buffer;\n} {\n\treturn {\n\t\tkey: toNapiBuffer(entry.key),\n\t\tvalue: toNapiBuffer(entry.value),\n\t};\n}\n\nfunction toNapiQueueMessage(message: RuntimeQueueMessage): RuntimeQueueMessage {\n\treturn {\n\t\tid: () => message.id(),\n\t\tname: () => message.name(),\n\t\tbody: () => message.body(),\n\t\tcreatedAt: () => message.createdAt(),\n\t\tisCompletable: () => message.isCompletable(),\n\t\tcomplete: async (response?: RuntimeBytes | undefined | null) => {\n\t\t\tawait message.complete(\n\t\t\t\tresponse === null || response === undefined\n\t\t\t\t\t? response\n\t\t\t\t\t: toNapiBuffer(response),\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport class NapiCoreRuntime implements CoreRuntime {\n\treadonly kind = \"napi\";\n\n\t#bindings: NativeBindings;\n\t#sql = new WeakMap<NativeActorContext, NapiSqlDatabase>();\n\n\tconstructor(bindings: NativeBindings) {\n\t\tthis.#bindings = bindings;\n\t}\n\n\t#actorSql(ctx: ActorContextHandle): NapiSqlDatabase {\n\t\tconst nativeCtx = asNativeActorContext(ctx);\n\t\tlet database = this.#sql.get(nativeCtx);\n\t\tif (!database) {\n\t\t\tdatabase = nativeCtx.sql();\n\t\t\tthis.#sql.set(nativeCtx, database);\n\t\t}\n\t\treturn database;\n\t}\n\n\tcreateRegistry(): RegistryHandle {\n\t\treturn asRegistryHandle(new this.#bindings.CoreRegistry());\n\t}\n\n\tregisterActor(\n\t\tregistry: RegistryHandle,\n\t\tname: string,\n\t\tfactory: ActorFactoryHandle,\n\t): void {\n\t\tasNativeRegistry(registry).register(name, asNativeFactory(factory));\n\t}\n\n\tasync serveRegistry(\n\t\tregistry: RegistryHandle,\n\t\tconfig: RuntimeServeConfig,\n\t): Promise<void> {\n\t\tawait asNativeRegistry(registry).serve(config);\n\t}\n\n\tasync shutdownRegistry(registry: RegistryHandle): Promise<void> {\n\t\tawait asNativeRegistry(registry).shutdown();\n\t}\n\n\tasync registryDiagnostics(\n\t\tregistry: RegistryHandle,\n\t): Promise<RuntimeRegistryDiagnostics> {\n\t\tconst diagnostics = await asNativeRegistry(registry).diagnostics();\n\t\treturn {\n\t\t\tmode: diagnostics.mode,\n\t\t\tenvoyActiveActorCount: diagnostics.envoyActiveActorCount,\n\t\t};\n\t}\n\n\tasync handleServerlessRequest(\n\t\tregistry: RegistryHandle,\n\t\treq: RuntimeServerlessRequest,\n\t\tonStreamEvent: RuntimeServerlessStreamCallback,\n\t\tcancelToken: CancellationTokenHandle,\n\t\tconfig: RuntimeServeConfig,\n\t): Promise<RuntimeServerlessResponseHead> {\n\t\treturn await asNativeRegistry(registry).handleServerlessRequest(\n\t\t\t{ ...req, body: toNapiBuffer(req.body) },\n\t\t\tonStreamEvent,\n\t\t\tasNativeCancellationToken(cancelToken),\n\t\t\tconfig,\n\t\t);\n\t}\n\n\tcreateActorFactory(\n\t\tcallbacks: object,\n\t\tconfig?: RuntimeActorConfig | undefined | null,\n\t): ActorFactoryHandle {\n\t\treturn asActorFactoryHandle(\n\t\t\tnew this.#bindings.NapiActorFactory(callbacks, config),\n\t\t);\n\t}\n\n\tcreateCancellationToken(): CancellationTokenHandle {\n\t\treturn new this.#bindings.CancellationToken() as unknown as CancellationTokenHandle;\n\t}\n\n\tcreateTestActorContext(\n\t\tactorId: string,\n\t\tname: string,\n\t\tregion: string,\n\t): ActorContextHandle {\n\t\treturn new this.#bindings.ActorContext(\n\t\t\tactorId,\n\t\t\tname,\n\t\t\tregion,\n\t\t) as unknown as ActorContextHandle;\n\t}\n\n\tcancellationTokenAborted(token: CancellationTokenHandle): boolean {\n\t\treturn asNativeCancellationToken(token).aborted();\n\t}\n\n\tcancelCancellationToken(token: CancellationTokenHandle): void {\n\t\tasNativeCancellationToken(token).cancel();\n\t}\n\n\tonCancellationTokenCancelled(\n\t\ttoken: CancellationTokenHandle,\n\t\tcallback: (...args: unknown[]) => unknown,\n\t): void {\n\t\tasNativeCancellationToken(token).onCancelled(callback);\n\t}\n\n\tactorState(ctx: ActorContextHandle): Buffer {\n\t\treturn asNativeActorContext(ctx).state();\n\t}\n\n\tactorBeginOnStateChange(ctx: ActorContextHandle): void {\n\t\tasNativeActorContext(ctx).beginOnStateChange();\n\t}\n\n\tactorEndOnStateChange(ctx: ActorContextHandle): void {\n\t\tasNativeActorContext(ctx).endOnStateChange();\n\t}\n\n\tactorSetAlarm(\n\t\tctx: ActorContextHandle,\n\t\ttimestampMs?: number | undefined | null,\n\t): void {\n\t\tasNativeActorContext(ctx).setAlarm(timestampMs);\n\t}\n\n\tactorRequestSave(\n\t\tctx: ActorContextHandle,\n\t\topts?: RuntimeRequestSaveOpts | undefined | null,\n\t): void {\n\t\tasNativeActorContext(ctx).requestSave(opts);\n\t}\n\n\tasync actorRequestSaveAndWait(\n\t\tctx: ActorContextHandle,\n\t\topts?: RuntimeRequestSaveOpts | undefined | null,\n\t): Promise<void> {\n\t\tawait asNativeActorContext(ctx).requestSaveAndWait(opts);\n\t}\n\n\tactorInspectorSnapshot(ctx: ActorContextHandle) {\n\t\treturn asNativeActorContext(ctx).inspectorSnapshot();\n\t}\n\n\tactorDecodeInspectorRequest(\n\t\tctx: ActorContextHandle,\n\t\tbytes: RuntimeBytes,\n\t\tadvertisedVersion: number,\n\t): RuntimeBytes {\n\t\treturn asNativeActorContext(ctx).decodeInspectorRequest(\n\t\t\ttoNapiBuffer(bytes),\n\t\t\tadvertisedVersion,\n\t\t);\n\t}\n\n\tactorEncodeInspectorResponse(\n\t\tctx: ActorContextHandle,\n\t\tbytes: RuntimeBytes,\n\t\ttargetVersion: number,\n\t): RuntimeBytes {\n\t\treturn asNativeActorContext(ctx).encodeInspectorResponse(\n\t\t\ttoNapiBuffer(bytes),\n\t\t\ttargetVersion,\n\t\t);\n\t}\n\n\tasync actorVerifyInspectorAuth(\n\t\tctx: ActorContextHandle,\n\t\tbearerToken?: string | undefined | null,\n\t): Promise<void> {\n\t\tawait asNativeActorContext(ctx).verifyInspectorAuth(bearerToken);\n\t}\n\n\tactorQueueHibernationRemoval(\n\t\tctx: ActorContextHandle,\n\t\tconnId: string,\n\t): void {\n\t\tasNativeActorContext(ctx).queueHibernationRemoval(connId);\n\t}\n\n\tactorTakePendingHibernationChanges(ctx: ActorContextHandle): string[] {\n\t\treturn asNativeActorContext(ctx).takePendingHibernationChanges();\n\t}\n\n\tactorDirtyHibernatableConns(ctx: ActorContextHandle): ConnHandle[] {\n\t\treturn asNativeActorContext(\n\t\t\tctx,\n\t\t).dirtyHibernatableConns() as unknown as ConnHandle[];\n\t}\n\n\tasync actorSaveState(\n\t\tctx: ActorContextHandle,\n\t\tpayload: RuntimeStateDeltaPayload,\n\t): Promise<void> {\n\t\tawait asNativeActorContext(ctx).saveState(\n\t\t\ttoNapiStateDeltaPayload(payload),\n\t\t);\n\t}\n\n\tactorId(ctx: ActorContextHandle): string {\n\t\treturn asNativeActorContext(ctx).actorId();\n\t}\n\n\tactorName(ctx: ActorContextHandle): string {\n\t\treturn asNativeActorContext(ctx).name();\n\t}\n\n\tactorKey(ctx: ActorContextHandle) {\n\t\treturn asNativeActorContext(ctx).key();\n\t}\n\n\tactorRegion(ctx: ActorContextHandle): string {\n\t\treturn asNativeActorContext(ctx).region();\n\t}\n\n\tactorSleep(ctx: ActorContextHandle): void {\n\t\tasNativeActorContext(ctx).sleep();\n\t}\n\n\tactorDestroy(ctx: ActorContextHandle): void {\n\t\tasNativeActorContext(ctx).destroy();\n\t}\n\n\tactorAbortSignal(ctx: ActorContextHandle): AbortSignal {\n\t\treturn asNativeActorContext(ctx).abortSignal();\n\t}\n\n\tactorConns(ctx: ActorContextHandle): ConnHandle[] {\n\t\treturn asNativeActorContext(ctx).conns() as unknown as ConnHandle[];\n\t}\n\n\tasync actorConnectConn(\n\t\tctx: ActorContextHandle,\n\t\tparams: RuntimeBytes,\n\t\trequest?: RuntimeHttpRequest | undefined | null,\n\t): Promise<ConnHandle> {\n\t\treturn (await asNativeActorContext(ctx).connectConn(\n\t\t\ttoNapiBuffer(params),\n\t\t\ttoNapiHttpRequest(request),\n\t\t)) as unknown as ConnHandle;\n\t}\n\n\tactorBroadcast(\n\t\tctx: ActorContextHandle,\n\t\tname: string,\n\t\targs: RuntimeBytes,\n\t): void {\n\t\tasNativeActorContext(ctx).broadcast(name, toNapiBuffer(args));\n\t}\n\n\tactorWaitUntil(ctx: ActorContextHandle, promise: Promise<unknown>): void {\n\t\tasNativeActorContext(ctx).waitUntil(promise);\n\t}\n\n\tactorKeepAwake(ctx: ActorContextHandle, promise: Promise<unknown>): void {\n\t\tasNativeActorContext(ctx).keepAwake(promise);\n\t}\n\n\tactorBeginKeepAwake(ctx: ActorContextHandle): number {\n\t\treturn asNativeActorContext(ctx).beginKeepAwake();\n\t}\n\n\tactorEndKeepAwake(ctx: ActorContextHandle, regionId: number): void {\n\t\tasNativeActorContext(ctx).endKeepAwake(regionId);\n\t}\n\n\tactorRegisterTask(\n\t\tctx: ActorContextHandle,\n\t\tpromise: Promise<unknown>,\n\t): void {\n\t\tasNativeActorContext(ctx).registerTask(promise);\n\t}\n\n\tactorRuntimeState(ctx: ActorContextHandle): object {\n\t\treturn asNativeActorContext(ctx).runtimeState();\n\t}\n\n\tactorClearRuntimeState(ctx: ActorContextHandle): void {\n\t\tasNativeActorContext(ctx).clearRuntimeState();\n\t}\n\n\tactorRestartRunHandler(ctx: ActorContextHandle): void {\n\t\tasNativeActorContext(ctx).restartRunHandler();\n\t}\n\n\tactorBeginWebsocketCallback(ctx: ActorContextHandle): number {\n\t\treturn asNativeActorContext(ctx).beginWebsocketCallback();\n\t}\n\n\tactorEndWebsocketCallback(ctx: ActorContextHandle, regionId: number): void {\n\t\tasNativeActorContext(ctx).endWebsocketCallback(regionId);\n\t}\n\n\tasync actorKvGet(\n\t\tctx: ActorContextHandle,\n\t\tkey: RuntimeBytes,\n\t): Promise<RuntimeBytes | null> {\n\t\treturn await asNativeActorContext(ctx).kv().get(toNapiBuffer(key));\n\t}\n\n\tasync actorKvPut(\n\t\tctx: ActorContextHandle,\n\t\tkey: RuntimeBytes,\n\t\tvalue: RuntimeBytes,\n\t): Promise<void> {\n\t\tawait asNativeActorContext(ctx)\n\t\t\t.kv()\n\t\t\t.put(toNapiBuffer(key), toNapiBuffer(value));\n\t}\n\n\tasync actorKvDelete(\n\t\tctx: ActorContextHandle,\n\t\tkey: RuntimeBytes,\n\t): Promise<void> {\n\t\tawait asNativeActorContext(ctx).kv().delete(toNapiBuffer(key));\n\t}\n\n\tasync actorKvDeleteRange(\n\t\tctx: ActorContextHandle,\n\t\tstart: RuntimeBytes,\n\t\tend: RuntimeBytes,\n\t): Promise<void> {\n\t\tawait asNativeActorContext(ctx)\n\t\t\t.kv()\n\t\t\t.deleteRange(toNapiBuffer(start), toNapiBuffer(end));\n\t}\n\n\tasync actorKvListPrefix(\n\t\tctx: ActorContextHandle,\n\t\tprefix: RuntimeBytes,\n\t\toptions?: RuntimeKvListOptions | undefined | null,\n\t): Promise<RuntimeKvEntry[]> {\n\t\treturn await asNativeActorContext(ctx)\n\t\t\t.kv()\n\t\t\t.listPrefix(toNapiBuffer(prefix), options);\n\t}\n\n\tasync actorKvListRange(\n\t\tctx: ActorContextHandle,\n\t\tstart: RuntimeBytes,\n\t\tend: RuntimeBytes,\n\t\toptions?: RuntimeKvListOptions | undefined | null,\n\t): Promise<RuntimeKvEntry[]> {\n\t\treturn await asNativeActorContext(ctx)\n\t\t\t.kv()\n\t\t\t.listRange(toNapiBuffer(start), toNapiBuffer(end), options);\n\t}\n\n\tasync actorKvBatchGet(\n\t\tctx: ActorContextHandle,\n\t\tkeys: RuntimeBytes[],\n\t): Promise<Array<RuntimeBytes | undefined | null>> {\n\t\treturn await asNativeActorContext(ctx)\n\t\t\t.kv()\n\t\t\t.batchGet(keys.map(toNapiBuffer));\n\t}\n\n\tasync actorKvBatchPut(\n\t\tctx: ActorContextHandle,\n\t\tentries: RuntimeKvEntry[],\n\t): Promise<void> {\n\t\tawait asNativeActorContext(ctx)\n\t\t\t.kv()\n\t\t\t.batchPut(entries.map(toNapiKvEntry));\n\t}\n\n\tasync actorKvBatchDelete(\n\t\tctx: ActorContextHandle,\n\t\tkeys: RuntimeBytes[],\n\t): Promise<void> {\n\t\tawait asNativeActorContext(ctx)\n\t\t\t.kv()\n\t\t\t.batchDelete(keys.map(toNapiBuffer));\n\t}\n\n\tasync actorSqlExec(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t): Promise<RuntimeSqlExecResult> {\n\t\treturn await this.#actorSql(ctx).exec(sql);\n\t}\n\n\tasync actorSqlExecute(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlExecuteResult> {\n\t\tconst result = await this.#actorSql(ctx).execute(\n\t\t\tsql,\n\t\t\ttoNapiSqlBindParams(params),\n\t\t);\n\t\treturn normalizeRuntimeSqlExecuteResult(result);\n\t}\n\n\tasync actorSqlQuery(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlQueryResult> {\n\t\treturn await this.#actorSql(ctx).query(\n\t\t\tsql,\n\t\t\ttoNapiSqlBindParams(params),\n\t\t);\n\t}\n\n\tasync actorSqlRun(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlRunResult> {\n\t\treturn await this.#actorSql(ctx).run(sql, toNapiSqlBindParams(params));\n\t}\n\n\tactorSqlMetrics(ctx: ActorContextHandle) {\n\t\treturn this.#actorSql(ctx).metrics?.() ?? null;\n\t}\n\n\tactorSqlTakeLastKvError(ctx: ActorContextHandle): string | null {\n\t\treturn this.#actorSql(ctx).takeLastKvError?.() ?? null;\n\t}\n\n\tasync actorSqlClose(ctx: ActorContextHandle): Promise<void> {\n\t\tconst nativeCtx = asNativeActorContext(ctx);\n\t\tconst database = this.#sql.get(nativeCtx);\n\t\tif (!database) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#sql.delete(nativeCtx);\n\t\tawait database.close();\n\t}\n\n\tasync actorQueueSend(\n\t\tctx: ActorContextHandle,\n\t\tname: string,\n\t\tbody: RuntimeBytes,\n\t): Promise<RuntimeQueueMessage> {\n\t\treturn toNapiQueueMessage(\n\t\t\tawait asNativeActorContext(ctx)\n\t\t\t\t.queue()\n\t\t\t\t.send(name, toNapiBuffer(body)),\n\t\t);\n\t}\n\n\tasync actorQueueNextBatch(\n\t\tctx: ActorContextHandle,\n\t\toptions?: RuntimeQueueNextBatchOptions | undefined | null,\n\t\tsignal?: CancellationTokenHandle | undefined | null,\n\t): Promise<RuntimeQueueMessage[]> {\n\t\tconst messages = await asNativeActorContext(ctx)\n\t\t\t.queue()\n\t\t\t.nextBatch(\n\t\t\t\toptions,\n\t\t\t\tsignal ? asNativeCancellationToken(signal) : signal,\n\t\t\t);\n\t\treturn messages.map(toNapiQueueMessage);\n\t}\n\n\tasync actorQueueWaitForNames(\n\t\tctx: ActorContextHandle,\n\t\tnames: string[],\n\t\toptions?: RuntimeQueueWaitOptions | undefined | null,\n\t\tsignal?: CancellationTokenHandle | undefined | null,\n\t): Promise<RuntimeQueueMessage> {\n\t\treturn toNapiQueueMessage(\n\t\t\tawait asNativeActorContext(ctx)\n\t\t\t\t.queue()\n\t\t\t\t.waitForNames(\n\t\t\t\t\tnames,\n\t\t\t\t\toptions,\n\t\t\t\t\tsignal ? asNativeCancellationToken(signal) : signal,\n\t\t\t\t),\n\t\t);\n\t}\n\n\tasync actorQueueWaitForNamesAvailable(\n\t\tctx: ActorContextHandle,\n\t\tnames: string[],\n\t\toptions?: RuntimeQueueWaitOptions | undefined | null,\n\t): Promise<void> {\n\t\tawait asNativeActorContext(ctx)\n\t\t\t.queue()\n\t\t\t.waitForNamesAvailable(names, options);\n\t}\n\n\tasync actorQueueEnqueueAndWait(\n\t\tctx: ActorContextHandle,\n\t\tname: string,\n\t\tbody: RuntimeBytes,\n\t\toptions?: RuntimeQueueEnqueueAndWaitOptions | undefined | null,\n\t\tsignal?: CancellationTokenHandle | undefined | null,\n\t): Promise<RuntimeBytes | null> {\n\t\treturn await asNativeActorContext(ctx)\n\t\t\t.queue()\n\t\t\t.enqueueAndWait(\n\t\t\t\tname,\n\t\t\t\ttoNapiBuffer(body),\n\t\t\t\toptions,\n\t\t\t\tsignal ? asNativeCancellationToken(signal) : signal,\n\t\t\t);\n\t}\n\n\tactorQueueTryNextBatch(\n\t\tctx: ActorContextHandle,\n\t\toptions?: RuntimeQueueTryNextBatchOptions | undefined | null,\n\t): RuntimeQueueMessage[] {\n\t\treturn asNativeActorContext(ctx)\n\t\t\t.queue()\n\t\t\t.tryNextBatch(options)\n\t\t\t.map(toNapiQueueMessage);\n\t}\n\n\tactorQueueMaxSize(ctx: ActorContextHandle): number {\n\t\treturn asNativeActorContext(ctx).queue().maxSize();\n\t}\n\n\tasync actorQueueInspectMessages(ctx: ActorContextHandle) {\n\t\treturn await asNativeActorContext(ctx).queue().inspectMessages();\n\t}\n\n\tactorScheduleAfter(\n\t\tctx: ActorContextHandle,\n\t\tdurationMs: number,\n\t\tactionName: string,\n\t\targs: RuntimeBytes,\n\t): void {\n\t\tasNativeActorContext(ctx)\n\t\t\t.schedule()\n\t\t\t.after(durationMs, actionName, toNapiBuffer(args));\n\t}\n\n\tactorScheduleAt(\n\t\tctx: ActorContextHandle,\n\t\ttimestampMs: number,\n\t\tactionName: string,\n\t\targs: RuntimeBytes,\n\t): void {\n\t\tasNativeActorContext(ctx)\n\t\t\t.schedule()\n\t\t\t.at(timestampMs, actionName, toNapiBuffer(args));\n\t}\n\n\tconnId(conn: ConnHandle): string {\n\t\treturn asNativeConn(conn).id();\n\t}\n\n\tconnParams(conn: ConnHandle): RuntimeBytes {\n\t\treturn asNativeConn(conn).params();\n\t}\n\n\tconnState(conn: ConnHandle): RuntimeBytes {\n\t\treturn asNativeConn(conn).state();\n\t}\n\n\tconnSetState(conn: ConnHandle, state: RuntimeBytes): void {\n\t\tasNativeConn(conn).setState(toNapiBuffer(state));\n\t}\n\n\tconnIsHibernatable(conn: ConnHandle): boolean {\n\t\treturn asNativeConn(conn).isHibernatable();\n\t}\n\n\tconnSend(conn: ConnHandle, name: string, args: RuntimeBytes): void {\n\t\tasNativeConn(conn).send(name, toNapiBuffer(args));\n\t}\n\n\tasync connDisconnect(\n\t\tconn: ConnHandle,\n\t\treason?: string | undefined | null,\n\t): Promise<void> {\n\t\tawait asNativeConn(conn).disconnect(reason);\n\t}\n\n\twebSocketSend(\n\t\tws: WebSocketHandle,\n\t\tdata: RuntimeBytes,\n\t\tbinary: boolean,\n\t): void {\n\t\tasNativeWebSocket(ws).send(toNapiBuffer(data), binary);\n\t}\n\n\tasync webSocketClose(\n\t\tws: WebSocketHandle,\n\t\tcode?: number | undefined | null,\n\t\treason?: string | undefined | null,\n\t): Promise<void> {\n\t\tawait asNativeWebSocket(ws).close(code, reason);\n\t}\n\n\twebSocketSetEventCallback(\n\t\tws: WebSocketHandle,\n\t\tcallback: (event: RuntimeWebSocketEvent) => void,\n\t): void {\n\t\tasNativeWebSocket(ws).setEventCallback(callback);\n\t}\n}\n\nexport type NapiBindings = NativeBindings;\n\nexport async function loadNapiRuntime(): Promise<{\n\tbindings: NapiBindings;\n\truntime: NapiCoreRuntime;\n}> {\n\tconst bindings = await import([\"@rivetkit\", \"rivetkit-napi\"].join(\"/\"));\n\treturn {\n\t\tbindings,\n\t\truntime: new NapiCoreRuntime(bindings),\n\t};\n}\n","import { RivetError } from \"@/actor/errors\";\nimport {\n\tisEventSchemaDefinition,\n\tisQueueSchemaDefinition,\n\tisStandardSchema,\n\tvalidateSchemaSync,\n\ttype EventSchemaConfig,\n\ttype PrimitiveSchema,\n\ttype QueueSchemaConfig,\n} from \"@/actor/schema\";\n\nconst CONN_PARAMS_KEY = \"__conn_params__\";\n\nexport interface NativeValidationConfig {\n\tactionInputSchemas?: Record<string, PrimitiveSchema>;\n\tconnParamsSchema?: PrimitiveSchema;\n\tevents?: EventSchemaConfig;\n\tqueues?: QueueSchemaConfig;\n}\n\nexport function validateActionArgs(\n\tschemas: NativeValidationConfig[\"actionInputSchemas\"],\n\tname: string,\n\targs: unknown[],\n): unknown[] {\n\tif (!schemas?.[name]) {\n\t\treturn args;\n\t}\n\n\tconst result = validateSchemaSync(schemas as EventSchemaConfig, name, args);\n\tif (!result.success) {\n\t\tthrow validationError(`action \\`${name}\\` arguments`, result.issues);\n\t}\n\treturn Array.isArray(result.data) ? result.data : [result.data];\n}\n\nexport function validateConnParams(\n\tschema: NativeValidationConfig[\"connParamsSchema\"],\n\tparams: unknown,\n): unknown {\n\tif (!schema) {\n\t\treturn params;\n\t}\n\n\tconst result = validateSchemaSync(\n\t\t{ [CONN_PARAMS_KEY]: schema } as EventSchemaConfig,\n\t\tCONN_PARAMS_KEY,\n\t\tparams,\n\t);\n\tif (!result.success) {\n\t\tthrow validationError(\"connection params\", result.issues);\n\t}\n\treturn result.data;\n}\n\nexport function validateEventArgs(\n\tschemas: NativeValidationConfig[\"events\"],\n\tname: string,\n\targs: unknown[],\n): unknown[] {\n\tif (!schemas?.[name]) {\n\t\treturn args;\n\t}\n\n\tconst payload = args.length <= 1 ? args[0] : args;\n\tconst result = validateSchemaSync(schemas, name, payload);\n\tif (!result.success) {\n\t\tthrow validationError(`event \\`${name}\\` payload`, result.issues);\n\t}\n\treturn args.length <= 1\n\t\t? [result.data]\n\t\t: Array.isArray(result.data)\n\t\t\t? result.data\n\t\t\t: [result.data];\n}\n\nexport function validateQueueBody(\n\tschemas: NativeValidationConfig[\"queues\"],\n\tname: string,\n\tbody: unknown,\n): unknown {\n\tif (!schemas?.[name]) {\n\t\treturn body;\n\t}\n\n\tconst result = validateSchemaSync(schemas, name, body);\n\tif (!result.success) {\n\t\tthrow validationError(`queue \\`${name}\\` message`, result.issues);\n\t}\n\treturn result.data;\n}\n\nexport function validateQueueComplete(\n\tschemas: NativeValidationConfig[\"queues\"],\n\tname: string,\n\tresponse: unknown,\n): unknown {\n\tconst schema = schemas?.[name];\n\tif (!schema) {\n\t\treturn response;\n\t}\n\n\tlet completeSchema: PrimitiveSchema | undefined;\n\tif (isQueueSchemaDefinition(schema)) {\n\t\tcompleteSchema = schema.complete;\n\t} else if (\n\t\t!isStandardSchema(schema) &&\n\t\t!isEventSchemaDefinition(schema) &&\n\t\ttypeof schema === \"object\" &&\n\t\tschema !== null &&\n\t\t\"complete\" in schema\n\t) {\n\t\tconst candidate = (schema as { complete?: unknown }).complete;\n\t\tif (candidate !== undefined) {\n\t\t\tcompleteSchema = candidate as PrimitiveSchema;\n\t\t}\n\t}\n\n\tif (!completeSchema) {\n\t\treturn response;\n\t}\n\n\tconst result = validateSchemaSync(\n\t\t{ [name]: completeSchema } as EventSchemaConfig,\n\t\tname,\n\t\tresponse,\n\t);\n\tif (!result.success) {\n\t\tthrow validationError(`queue \\`${name}\\` completion response`, result.issues);\n\t}\n\treturn result.data;\n}\n\nfunction validationError(target: string, issues: unknown[]): RivetError {\n\treturn new RivetError(\n\t\t\"actor\",\n\t\t\"validation_error\",\n\t\t`Invalid ${target}`,\n\t\t{\n\t\t\tpublic: true,\n\t\t\tmetadata: { issues },\n\t\t},\n\t);\n}\n","import type {\n\tActorContext as WasmActorContext,\n\tActorFactory as WasmActorFactory,\n\tCancellationToken as WasmCancellationToken,\n\tConnHandle as WasmConnHandle,\n\tCoreRegistry as WasmCoreRegistry,\n\tWebSocketHandle as WasmWebSocketHandle,\n} from \"@rivetkit/rivetkit-wasm\";\nimport { decodeBridgeRivetError, RivetError } from \"@/actor/errors\";\nimport type {\n\tWasmRuntimeBindings,\n\tWasmRuntimeConfig,\n\tWasmRuntimeInitInput,\n} from \"./config\";\nimport type {\n\tActorContextHandle,\n\tActorFactoryHandle,\n\tCancellationTokenHandle,\n\tConnHandle,\n\tCoreRuntime,\n\tRegistryHandle,\n\tRuntimeActorConfig,\n\tRuntimeActorKeySegment,\n\tRuntimeBytes,\n\tRuntimeHttpRequest,\n\tRuntimeInspectorSnapshot,\n\tRuntimeKvEntry,\n\tRuntimeKvListOptions,\n\tRuntimeQueueEnqueueAndWaitOptions,\n\tRuntimeQueueInspectMessage,\n\tRuntimeQueueMessage,\n\tRuntimeQueueNextBatchOptions,\n\tRuntimeQueueTryNextBatchOptions,\n\tRuntimeQueueWaitOptions,\n\tRuntimeRequestSaveOpts,\n\tRuntimeServeConfig,\n\tRuntimeServerlessRequest,\n\tRuntimeServerlessResponseHead,\n\tRuntimeServerlessStreamCallback,\n\tRuntimeSqlBindParams,\n\tRuntimeSqlDatabase,\n\tRuntimeSqlExecResult,\n\tRuntimeSqlExecuteResult,\n\tRuntimeSqlQueryResult,\n\tRuntimeSqlRunResult,\n\tRuntimeStateDeltaPayload,\n\tRuntimeWebSocketEvent,\n\tWebSocketHandle,\n} from \"./runtime\";\nimport { normalizeRuntimeSqlExecuteResult } from \"./runtime\";\n\ntype WasmBindings = WasmRuntimeBindings;\nexport type WasmInitInput = WasmRuntimeInitInput;\ntype AnyFunction = (...args: unknown[]) => unknown;\ntype WasmRuntimeLoadConfig = Pick<WasmRuntimeConfig, \"bindings\" | \"initInput\">;\n\nfunction asWasmRegistry(handle: RegistryHandle): WasmCoreRegistry {\n\treturn handle as unknown as WasmCoreRegistry;\n}\n\nfunction asWasmFactory(handle: ActorFactoryHandle): WasmActorFactory {\n\treturn handle as unknown as WasmActorFactory;\n}\n\nfunction asWasmActorContext(handle: ActorContextHandle): WasmActorContext {\n\treturn handle as unknown as WasmActorContext;\n}\n\nfunction asWasmConn(handle: ConnHandle): WasmConnHandle {\n\treturn handle as unknown as WasmConnHandle;\n}\n\nfunction asWasmWebSocket(handle: WebSocketHandle): WasmWebSocketHandle {\n\treturn handle as unknown as WasmWebSocketHandle;\n}\n\nfunction asWasmCancellationToken(\n\thandle: CancellationTokenHandle,\n): WasmCancellationToken {\n\treturn handle as unknown as WasmCancellationToken;\n}\n\nfunction asRegistryHandle(handle: WasmCoreRegistry): RegistryHandle {\n\treturn handle as unknown as RegistryHandle;\n}\n\nfunction asActorFactoryHandle(handle: WasmActorFactory): ActorFactoryHandle {\n\treturn handle as unknown as ActorFactoryHandle;\n}\n\nfunction toBytes(value: RuntimeBytes | null | undefined): RuntimeBytes {\n\treturn value ?? new Uint8Array(0);\n}\n\nfunction optionalBytes(\n\tvalue: RuntimeBytes | null | undefined,\n): RuntimeBytes | null {\n\tif (value === null || value === undefined) {\n\t\treturn null;\n\t}\n\treturn toBytes(value);\n}\n\nfunction optionalWasmNumber(\n\tvalue: number | bigint | null | undefined,\n): number | null | undefined {\n\tif (value === null || value === undefined) {\n\t\treturn value;\n\t}\n\treturn typeof value === \"bigint\" ? Number(value) : value;\n}\n\nfunction wasmNumber(value: number | bigint): number {\n\treturn typeof value === \"bigint\" ? Number(value) : value;\n}\n\nfunction normalizeKvEntry(entry: RuntimeKvEntry): RuntimeKvEntry {\n\treturn {\n\t\tkey: toBytes(entry.key),\n\t\tvalue: toBytes(entry.value),\n\t};\n}\n\nfunction normalizeQueueMessage(\n\tmessage: RuntimeQueueMessage,\n): RuntimeQueueMessage {\n\treturn {\n\t\tid: () => message.id(),\n\t\tname: () => message.name(),\n\t\tbody: () => toBytes(message.body()),\n\t\tcreatedAt: () => message.createdAt(),\n\t\tisCompletable: () => message.isCompletable(),\n\t\tcomplete: async (response?: RuntimeBytes | undefined | null) => {\n\t\t\tawait callWasm(() => message.complete(response));\n\t\t},\n\t};\n}\n\nfunction normalizeWasmBridgeError(error: unknown): unknown {\n\tif (typeof error === \"string\") {\n\t\treturn decodeBridgeRivetError(error) ?? error;\n\t}\n\n\tif (error instanceof Error) {\n\t\tconst bridged = decodeBridgeRivetError(error.message);\n\t\tif (bridged) {\n\t\t\treturn bridged;\n\t\t}\n\t}\n\n\tif (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"reason\" in error &&\n\t\ttypeof error.reason === \"string\"\n\t) {\n\t\tconst bridged = decodeBridgeRivetError(error.reason);\n\t\tif (bridged) {\n\t\t\treturn bridged;\n\t\t}\n\t}\n\n\treturn error;\n}\n\nasync function callWasm<T>(invoke: () => Promise<T>): Promise<T> {\n\ttry {\n\t\treturn await invoke();\n\t} catch (error) {\n\t\tthrow normalizeWasmBridgeError(error);\n\t}\n}\n\nfunction callWasmSync<T>(invoke: () => T): T {\n\ttry {\n\t\treturn invoke();\n\t} catch (error) {\n\t\tthrow normalizeWasmBridgeError(error);\n\t}\n}\n\nfunction unsupportedWasmMethod(method: string): never {\n\tthrow new RivetError(\n\t\t\"runtime\",\n\t\t\"unsupported\",\n\t\t`Unsupported wasm runtime method: ${method}`,\n\t\t{\n\t\t\tmetadata: {\n\t\t\t\truntime: \"wasm\",\n\t\t\t\tmethod,\n\t\t\t},\n\t\t},\n\t);\n}\n\nfunction method<T extends AnyFunction>(target: unknown, name: string): T {\n\tif (\n\t\ttypeof target === \"object\" &&\n\t\ttarget !== null &&\n\t\tname in target &&\n\t\ttypeof target[name as keyof typeof target] === \"function\"\n\t) {\n\t\treturn target[name as keyof typeof target] as T;\n\t}\n\treturn unsupportedWasmMethod(name);\n}\n\nfunction callHandle<T>(handle: unknown, name: string, ...args: unknown[]): T {\n\treturn callWasmSync(() => method(handle, name).apply(handle, args) as T);\n}\n\nasync function callHandleAsync<T>(\n\thandle: unknown,\n\tname: string,\n\t...args: unknown[]\n): Promise<T> {\n\treturn await callWasm(\n\t\tasync () => (await method(handle, name).apply(handle, args)) as T,\n\t);\n}\n\nfunction childHandle<T>(handle: unknown, name: string): T {\n\treturn callHandle<T>(handle, name);\n}\n\nexport class WasmCoreRuntime implements CoreRuntime {\n\treadonly kind = \"wasm\";\n\n\t#bindings: WasmBindings;\n\t#sql = new WeakMap<WasmActorContext, RuntimeSqlDatabase>();\n\n\tconstructor(bindings: WasmBindings) {\n\t\tthis.#bindings = bindings;\n\t}\n\n\t#actorSql(ctx: ActorContextHandle): RuntimeSqlDatabase {\n\t\tconst wasmCtx = asWasmActorContext(ctx);\n\t\tlet database = this.#sql.get(wasmCtx);\n\t\tif (!database) {\n\t\t\tdatabase = callHandle<RuntimeSqlDatabase>(wasmCtx, \"sql\");\n\t\t\tthis.#sql.set(wasmCtx, database);\n\t\t}\n\t\treturn database;\n\t}\n\n\tcreateRegistry(): RegistryHandle {\n\t\treturn callWasmSync(() =>\n\t\t\tasRegistryHandle(new this.#bindings.CoreRegistry()),\n\t\t);\n\t}\n\n\tregisterActor(\n\t\tregistry: RegistryHandle,\n\t\tname: string,\n\t\tfactory: ActorFactoryHandle,\n\t): void {\n\t\tcallWasmSync(() =>\n\t\t\tasWasmRegistry(registry).register(name, asWasmFactory(factory)),\n\t\t);\n\t}\n\n\tasync serveRegistry(\n\t\tregistry: RegistryHandle,\n\t\tconfig: RuntimeServeConfig,\n\t): Promise<void> {\n\t\tawait callWasm(() => asWasmRegistry(registry).serve(config));\n\t}\n\n\tasync shutdownRegistry(registry: RegistryHandle): Promise<void> {\n\t\tawait callWasm(() => asWasmRegistry(registry).shutdown());\n\t}\n\n\tasync registryDiagnostics(): Promise<{ mode: string; envoyActiveActorCount: null }> {\n\t\treturn { mode: \"wasm\", envoyActiveActorCount: null };\n\t}\n\n\tasync handleServerlessRequest(\n\t\tregistry: RegistryHandle,\n\t\treq: RuntimeServerlessRequest,\n\t\tonStreamEvent: RuntimeServerlessStreamCallback,\n\t\tcancelToken: CancellationTokenHandle,\n\t\tconfig: RuntimeServeConfig,\n\t): Promise<RuntimeServerlessResponseHead> {\n\t\treturn await callHandleAsync<RuntimeServerlessResponseHead>(\n\t\t\tasWasmRegistry(registry),\n\t\t\t\"handleServerlessRequest\",\n\t\t\treq,\n\t\t\tonStreamEvent,\n\t\t\tasWasmCancellationToken(cancelToken),\n\t\t\tconfig,\n\t\t);\n\t}\n\n\tcreateActorFactory(\n\t\tcallbacks: object,\n\t\tconfig?: RuntimeActorConfig | undefined | null,\n\t): ActorFactoryHandle {\n\t\treturn callWasmSync(() =>\n\t\t\tasActorFactoryHandle(\n\t\t\t\tnew this.#bindings.ActorFactory(callbacks, config),\n\t\t\t),\n\t\t);\n\t}\n\n\tcreateCancellationToken(): CancellationTokenHandle {\n\t\treturn callWasmSync(\n\t\t\t() =>\n\t\t\t\tnew this.#bindings.CancellationToken() as unknown as CancellationTokenHandle,\n\t\t);\n\t}\n\n\tcancellationTokenAborted(token: CancellationTokenHandle): boolean {\n\t\treturn callWasmSync(() => asWasmCancellationToken(token).aborted());\n\t}\n\n\tcancelCancellationToken(token: CancellationTokenHandle): void {\n\t\tcallWasmSync(() => asWasmCancellationToken(token).cancel());\n\t}\n\n\tonCancellationTokenCancelled(\n\t\ttoken: CancellationTokenHandle,\n\t\tcallback: (...args: unknown[]) => unknown,\n\t): void {\n\t\tcallWasmSync(() =>\n\t\t\tasWasmCancellationToken(token).onCancelled(callback),\n\t\t);\n\t}\n\n\tactorState(ctx: ActorContextHandle): RuntimeBytes {\n\t\treturn toBytes(\n\t\t\tcallHandle<RuntimeBytes | Uint8Array>(\n\t\t\t\tasWasmActorContext(ctx),\n\t\t\t\t\"state\",\n\t\t\t),\n\t\t);\n\t}\n\n\tactorBeginOnStateChange(ctx: ActorContextHandle): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"beginOnStateChange\");\n\t}\n\n\tactorEndOnStateChange(ctx: ActorContextHandle): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"endOnStateChange\");\n\t}\n\n\tactorSetAlarm(\n\t\tctx: ActorContextHandle,\n\t\ttimestampMs?: number | bigint | undefined | null,\n\t): void {\n\t\tcallHandle(\n\t\t\tasWasmActorContext(ctx),\n\t\t\t\"setAlarm\",\n\t\t\toptionalWasmNumber(timestampMs),\n\t\t);\n\t}\n\n\tactorRequestSave(\n\t\tctx: ActorContextHandle,\n\t\topts?: RuntimeRequestSaveOpts | undefined | null,\n\t): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"requestSave\", opts);\n\t}\n\n\tasync actorRequestSaveAndWait(\n\t\tctx: ActorContextHandle,\n\t\topts?: RuntimeRequestSaveOpts | undefined | null,\n\t): Promise<void> {\n\t\tawait callHandleAsync(\n\t\t\tasWasmActorContext(ctx),\n\t\t\t\"requestSaveAndWait\",\n\t\t\topts,\n\t\t);\n\t}\n\n\tactorInspectorSnapshot(ctx: ActorContextHandle): RuntimeInspectorSnapshot {\n\t\treturn callHandle(asWasmActorContext(ctx), \"inspectorSnapshot\");\n\t}\n\n\tactorDecodeInspectorRequest(\n\t\tctx: ActorContextHandle,\n\t\tbytes: RuntimeBytes,\n\t\tadvertisedVersion: number,\n\t): RuntimeBytes {\n\t\treturn toBytes(\n\t\t\tcallHandle<RuntimeBytes | Uint8Array>(\n\t\t\t\tasWasmActorContext(ctx),\n\t\t\t\t\"decodeInspectorRequest\",\n\t\t\t\tbytes,\n\t\t\t\tadvertisedVersion,\n\t\t\t),\n\t\t);\n\t}\n\n\tactorEncodeInspectorResponse(\n\t\tctx: ActorContextHandle,\n\t\tbytes: RuntimeBytes,\n\t\ttargetVersion: number,\n\t): RuntimeBytes {\n\t\treturn toBytes(\n\t\t\tcallHandle<RuntimeBytes | Uint8Array>(\n\t\t\t\tasWasmActorContext(ctx),\n\t\t\t\t\"encodeInspectorResponse\",\n\t\t\t\tbytes,\n\t\t\t\ttargetVersion,\n\t\t\t),\n\t\t);\n\t}\n\n\tasync actorVerifyInspectorAuth(\n\t\tctx: ActorContextHandle,\n\t\tbearerToken?: string | undefined | null,\n\t): Promise<void> {\n\t\tawait callHandleAsync(\n\t\t\tasWasmActorContext(ctx),\n\t\t\t\"verifyInspectorAuth\",\n\t\t\tbearerToken,\n\t\t);\n\t}\n\n\tactorQueueHibernationRemoval(\n\t\tctx: ActorContextHandle,\n\t\tconnId: string,\n\t): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"queueHibernationRemoval\", connId);\n\t}\n\n\tactorTakePendingHibernationChanges(ctx: ActorContextHandle): string[] {\n\t\treturn callHandle(\n\t\t\tasWasmActorContext(ctx),\n\t\t\t\"takePendingHibernationChanges\",\n\t\t);\n\t}\n\n\tactorDirtyHibernatableConns(ctx: ActorContextHandle): ConnHandle[] {\n\t\treturn callHandle(asWasmActorContext(ctx), \"dirtyHibernatableConns\");\n\t}\n\n\tasync actorSaveState(\n\t\tctx: ActorContextHandle,\n\t\tpayload: RuntimeStateDeltaPayload,\n\t): Promise<void> {\n\t\tawait callHandleAsync(asWasmActorContext(ctx), \"saveState\", payload);\n\t}\n\n\tactorId(ctx: ActorContextHandle): string {\n\t\treturn callHandle(asWasmActorContext(ctx), \"actorId\");\n\t}\n\n\tactorName(ctx: ActorContextHandle): string {\n\t\treturn callHandle(asWasmActorContext(ctx), \"name\");\n\t}\n\n\tactorKey(ctx: ActorContextHandle): RuntimeActorKeySegment[] {\n\t\treturn callHandle(asWasmActorContext(ctx), \"key\");\n\t}\n\n\tactorRegion(ctx: ActorContextHandle): string {\n\t\treturn callHandle(asWasmActorContext(ctx), \"region\");\n\t}\n\n\tactorSleep(ctx: ActorContextHandle): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"sleep\");\n\t}\n\n\tactorDestroy(ctx: ActorContextHandle): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"destroy\");\n\t}\n\n\tactorAbortSignal(ctx: ActorContextHandle): AbortSignal {\n\t\treturn callHandle(asWasmActorContext(ctx), \"abortSignal\");\n\t}\n\n\tactorConns(ctx: ActorContextHandle): ConnHandle[] {\n\t\treturn callHandle(asWasmActorContext(ctx), \"conns\");\n\t}\n\n\tasync actorConnectConn(\n\t\tctx: ActorContextHandle,\n\t\tparams: RuntimeBytes,\n\t\trequest?: RuntimeHttpRequest | undefined | null,\n\t): Promise<ConnHandle> {\n\t\treturn await callHandleAsync(\n\t\t\tasWasmActorContext(ctx),\n\t\t\t\"connectConn\",\n\t\t\tparams,\n\t\t\trequest,\n\t\t);\n\t}\n\n\tactorBroadcast(\n\t\tctx: ActorContextHandle,\n\t\tname: string,\n\t\targs: RuntimeBytes,\n\t): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"broadcast\", name, args);\n\t}\n\n\tactorWaitUntil(ctx: ActorContextHandle, promise: Promise<unknown>): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"waitUntil\", promise);\n\t}\n\n\tactorKeepAwake(ctx: ActorContextHandle, promise: Promise<unknown>): void {\n\t\tconst wasmCtx = asWasmActorContext(ctx);\n\t\tconst regionId = callHandle<number>(wasmCtx, \"beginKeepAwake\");\n\t\tconst trackedPromise = Promise.resolve(promise)\n\t\t\t.finally(() => {\n\t\t\t\tcallHandle(wasmCtx, \"endKeepAwake\", regionId);\n\t\t\t})\n\t\t\t.then(() => null);\n\t\tcallHandle(wasmCtx, \"registerTask\", trackedPromise);\n\t}\n\n\tactorBeginKeepAwake(ctx: ActorContextHandle): number {\n\t\treturn callHandle<number>(asWasmActorContext(ctx), \"beginKeepAwake\");\n\t}\n\n\tactorEndKeepAwake(ctx: ActorContextHandle, regionId: number): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"endKeepAwake\", regionId);\n\t}\n\n\tactorRegisterTask(\n\t\tctx: ActorContextHandle,\n\t\tpromise: Promise<unknown>,\n\t): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"registerTask\", promise);\n\t}\n\n\tactorRuntimeState(ctx: ActorContextHandle): object {\n\t\treturn callHandle(asWasmActorContext(ctx), \"runtimeState\");\n\t}\n\n\tactorClearRuntimeState(ctx: ActorContextHandle): void {\n\t\tconst runtimeState = this.actorRuntimeState(ctx);\n\t\tfor (const key of Object.keys(runtimeState)) {\n\t\t\tdelete (runtimeState as Record<string, unknown>)[key];\n\t\t}\n\t}\n\n\tactorRestartRunHandler(ctx: ActorContextHandle): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"restartRunHandler\");\n\t}\n\n\tactorBeginWebsocketCallback(ctx: ActorContextHandle): number {\n\t\treturn callHandle(asWasmActorContext(ctx), \"beginWebsocketCallback\");\n\t}\n\n\tactorEndWebsocketCallback(ctx: ActorContextHandle, regionId: number): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"endWebsocketCallback\", regionId);\n\t}\n\n\tasync actorKvGet(\n\t\tctx: ActorContextHandle,\n\t\tkey: RuntimeBytes,\n\t): Promise<RuntimeBytes | null> {\n\t\tconst kv = childHandle(asWasmActorContext(ctx), \"kv\");\n\t\treturn optionalBytes(await callHandleAsync(kv, \"get\", key));\n\t}\n\n\tasync actorKvPut(\n\t\tctx: ActorContextHandle,\n\t\tkey: RuntimeBytes,\n\t\tvalue: RuntimeBytes,\n\t): Promise<void> {\n\t\tconst kv = childHandle(asWasmActorContext(ctx), \"kv\");\n\t\tawait callHandleAsync(kv, \"put\", key, value);\n\t}\n\n\tasync actorKvDelete(\n\t\tctx: ActorContextHandle,\n\t\tkey: RuntimeBytes,\n\t): Promise<void> {\n\t\tconst kv = childHandle(asWasmActorContext(ctx), \"kv\");\n\t\tawait callHandleAsync(kv, \"delete\", key);\n\t}\n\n\tasync actorKvDeleteRange(\n\t\tctx: ActorContextHandle,\n\t\tstart: RuntimeBytes,\n\t\tend: RuntimeBytes,\n\t): Promise<void> {\n\t\tconst kv = childHandle(asWasmActorContext(ctx), \"kv\");\n\t\tawait callHandleAsync(kv, \"deleteRange\", start, end);\n\t}\n\n\tasync actorKvListPrefix(\n\t\tctx: ActorContextHandle,\n\t\tprefix: RuntimeBytes,\n\t\toptions?: RuntimeKvListOptions | undefined | null,\n\t): Promise<RuntimeKvEntry[]> {\n\t\tconst kv = childHandle(asWasmActorContext(ctx), \"kv\");\n\t\tconst entries = await callHandleAsync<RuntimeKvEntry[]>(\n\t\t\tkv,\n\t\t\t\"listPrefix\",\n\t\t\tprefix,\n\t\t\toptions,\n\t\t);\n\t\treturn entries.map(normalizeKvEntry);\n\t}\n\n\tasync actorKvListRange(\n\t\tctx: ActorContextHandle,\n\t\tstart: RuntimeBytes,\n\t\tend: RuntimeBytes,\n\t\toptions?: RuntimeKvListOptions | undefined | null,\n\t): Promise<RuntimeKvEntry[]> {\n\t\tconst kv = childHandle(asWasmActorContext(ctx), \"kv\");\n\t\tconst entries = await callHandleAsync<RuntimeKvEntry[]>(\n\t\t\tkv,\n\t\t\t\"listRange\",\n\t\t\tstart,\n\t\t\tend,\n\t\t\toptions,\n\t\t);\n\t\treturn entries.map(normalizeKvEntry);\n\t}\n\n\tasync actorKvBatchGet(\n\t\tctx: ActorContextHandle,\n\t\tkeys: RuntimeBytes[],\n\t): Promise<Array<RuntimeBytes | undefined | null>> {\n\t\tconst kv = childHandle(asWasmActorContext(ctx), \"kv\");\n\t\tconst values = await callHandleAsync<\n\t\t\tArray<RuntimeBytes | Uint8Array | null | undefined>\n\t\t>(kv, \"batchGet\", keys);\n\t\treturn values.map((value) =>\n\t\t\tvalue === undefined ? undefined : optionalBytes(value),\n\t\t);\n\t}\n\n\tasync actorKvBatchPut(\n\t\tctx: ActorContextHandle,\n\t\tentries: RuntimeKvEntry[],\n\t): Promise<void> {\n\t\tconst kv = childHandle(asWasmActorContext(ctx), \"kv\");\n\t\tawait callHandleAsync(kv, \"batchPut\", entries);\n\t}\n\n\tasync actorKvBatchDelete(\n\t\tctx: ActorContextHandle,\n\t\tkeys: RuntimeBytes[],\n\t): Promise<void> {\n\t\tconst kv = childHandle(asWasmActorContext(ctx), \"kv\");\n\t\tawait callHandleAsync(kv, \"batchDelete\", keys);\n\t}\n\n\tasync actorSqlExec(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t): Promise<RuntimeSqlExecResult> {\n\t\treturn await callWasm(() => this.#actorSql(ctx).exec(sql));\n\t}\n\n\tasync actorSqlExecute(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlExecuteResult> {\n\t\tconst result = await callWasm(() =>\n\t\t\tthis.#actorSql(ctx).execute(sql, params),\n\t\t);\n\t\treturn normalizeRuntimeSqlExecuteResult(result);\n\t}\n\n\tasync actorSqlQuery(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlQueryResult> {\n\t\treturn await callWasm(() => this.#actorSql(ctx).query(sql, params));\n\t}\n\n\tasync actorSqlRun(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlRunResult> {\n\t\treturn await callWasm(() => this.#actorSql(ctx).run(sql, params));\n\t}\n\n\tactorSqlMetrics(ctx: ActorContextHandle) {\n\t\treturn this.#actorSql(ctx).metrics?.() ?? null;\n\t}\n\n\tactorSqlTakeLastKvError(ctx: ActorContextHandle): string | null {\n\t\treturn this.#actorSql(ctx).takeLastKvError?.() ?? null;\n\t}\n\n\tasync actorSqlClose(ctx: ActorContextHandle): Promise<void> {\n\t\tconst wasmCtx = asWasmActorContext(ctx);\n\t\tconst database = this.#sql.get(wasmCtx);\n\t\tif (!database) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#sql.delete(wasmCtx);\n\t\tawait callWasm(() => database.close());\n\t}\n\n\tasync actorQueueSend(\n\t\tctx: ActorContextHandle,\n\t\tname: string,\n\t\tbody: RuntimeBytes,\n\t): Promise<RuntimeQueueMessage> {\n\t\tconst queue = childHandle(asWasmActorContext(ctx), \"queue\");\n\t\treturn normalizeQueueMessage(\n\t\t\tawait callHandleAsync(queue, \"send\", name, body),\n\t\t);\n\t}\n\n\tasync actorQueueNextBatch(\n\t\tctx: ActorContextHandle,\n\t\toptions?: RuntimeQueueNextBatchOptions | undefined | null,\n\t\tsignal?: CancellationTokenHandle | undefined | null,\n\t): Promise<RuntimeQueueMessage[]> {\n\t\tconst queue = childHandle(asWasmActorContext(ctx), \"queue\");\n\t\tconst messages = await callHandleAsync<RuntimeQueueMessage[]>(\n\t\t\tqueue,\n\t\t\t\"nextBatch\",\n\t\t\toptions,\n\t\t\tsignal ? asWasmCancellationToken(signal) : signal,\n\t\t);\n\t\treturn messages.map(normalizeQueueMessage);\n\t}\n\n\tasync actorQueueWaitForNames(\n\t\tctx: ActorContextHandle,\n\t\tnames: string[],\n\t\toptions?: RuntimeQueueWaitOptions | undefined | null,\n\t\tsignal?: CancellationTokenHandle | undefined | null,\n\t): Promise<RuntimeQueueMessage> {\n\t\tconst queue = childHandle(asWasmActorContext(ctx), \"queue\");\n\t\treturn normalizeQueueMessage(\n\t\t\tawait callHandleAsync(\n\t\t\t\tqueue,\n\t\t\t\t\"waitForNames\",\n\t\t\t\tnames,\n\t\t\t\toptions,\n\t\t\t\tsignal ? asWasmCancellationToken(signal) : signal,\n\t\t\t),\n\t\t);\n\t}\n\n\tasync actorQueueWaitForNamesAvailable(\n\t\tctx: ActorContextHandle,\n\t\tnames: string[],\n\t\toptions?: RuntimeQueueWaitOptions | undefined | null,\n\t): Promise<void> {\n\t\tconst queue = childHandle(asWasmActorContext(ctx), \"queue\");\n\t\tawait callHandleAsync(queue, \"waitForNamesAvailable\", names, options);\n\t}\n\n\tasync actorQueueEnqueueAndWait(\n\t\tctx: ActorContextHandle,\n\t\tname: string,\n\t\tbody: RuntimeBytes,\n\t\toptions?: RuntimeQueueEnqueueAndWaitOptions | undefined | null,\n\t\tsignal?: CancellationTokenHandle | undefined | null,\n\t): Promise<RuntimeBytes | null> {\n\t\tconst queue = childHandle(asWasmActorContext(ctx), \"queue\");\n\t\treturn optionalBytes(\n\t\t\tawait callHandleAsync(\n\t\t\t\tqueue,\n\t\t\t\t\"enqueueAndWait\",\n\t\t\t\tname,\n\t\t\t\tbody,\n\t\t\t\toptions,\n\t\t\t\tsignal ? asWasmCancellationToken(signal) : signal,\n\t\t\t),\n\t\t);\n\t}\n\n\tactorQueueTryNextBatch(\n\t\tctx: ActorContextHandle,\n\t\toptions?: RuntimeQueueTryNextBatchOptions | undefined | null,\n\t): RuntimeQueueMessage[] {\n\t\tconst queue = childHandle(asWasmActorContext(ctx), \"queue\");\n\t\treturn callHandle<RuntimeQueueMessage[]>(\n\t\t\tqueue,\n\t\t\t\"tryNextBatch\",\n\t\t\toptions,\n\t\t).map(normalizeQueueMessage);\n\t}\n\n\tactorQueueMaxSize(ctx: ActorContextHandle): number {\n\t\tconst queue = childHandle(asWasmActorContext(ctx), \"queue\");\n\t\treturn callHandle(queue, \"maxSize\");\n\t}\n\n\tasync actorQueueInspectMessages(\n\t\tctx: ActorContextHandle,\n\t): Promise<RuntimeQueueInspectMessage[]> {\n\t\tconst queue = childHandle(asWasmActorContext(ctx), \"queue\");\n\t\treturn await callHandleAsync(queue, \"inspectMessages\");\n\t}\n\n\tactorScheduleAfter(\n\t\tctx: ActorContextHandle,\n\t\tdurationMs: number | bigint,\n\t\tactionName: string,\n\t\targs: RuntimeBytes,\n\t): void {\n\t\tconst schedule = childHandle(asWasmActorContext(ctx), \"schedule\");\n\t\tcallHandle(schedule, \"after\", wasmNumber(durationMs), actionName, args);\n\t}\n\n\tactorScheduleAt(\n\t\tctx: ActorContextHandle,\n\t\ttimestampMs: number | bigint,\n\t\tactionName: string,\n\t\targs: RuntimeBytes,\n\t): void {\n\t\tconst schedule = childHandle(asWasmActorContext(ctx), \"schedule\");\n\t\tcallHandle(schedule, \"at\", wasmNumber(timestampMs), actionName, args);\n\t}\n\n\tconnId(conn: ConnHandle): string {\n\t\treturn callHandle(asWasmConn(conn), \"id\");\n\t}\n\n\tconnParams(conn: ConnHandle): RuntimeBytes {\n\t\treturn toBytes(callHandle(asWasmConn(conn), \"params\"));\n\t}\n\n\tconnState(conn: ConnHandle): RuntimeBytes {\n\t\treturn toBytes(callHandle(asWasmConn(conn), \"state\"));\n\t}\n\n\tconnSetState(conn: ConnHandle, state: RuntimeBytes): void {\n\t\tcallHandle(asWasmConn(conn), \"setState\", state);\n\t}\n\n\tconnIsHibernatable(conn: ConnHandle): boolean {\n\t\treturn callHandle(asWasmConn(conn), \"isHibernatable\");\n\t}\n\n\tconnSend(conn: ConnHandle, name: string, args: RuntimeBytes): void {\n\t\tcallHandle(asWasmConn(conn), \"send\", name, args);\n\t}\n\n\tasync connDisconnect(\n\t\tconn: ConnHandle,\n\t\treason?: string | undefined | null,\n\t): Promise<void> {\n\t\tawait callHandleAsync(asWasmConn(conn), \"disconnect\", reason);\n\t}\n\n\twebSocketSend(\n\t\tws: WebSocketHandle,\n\t\tdata: RuntimeBytes,\n\t\tbinary: boolean,\n\t): void {\n\t\tcallHandle(asWasmWebSocket(ws), \"send\", data, binary);\n\t}\n\n\tasync webSocketClose(\n\t\tws: WebSocketHandle,\n\t\tcode?: number | undefined | null,\n\t\treason?: string | undefined | null,\n\t): Promise<void> {\n\t\tawait callHandleAsync(asWasmWebSocket(ws), \"close\", code, reason);\n\t}\n\n\twebSocketSetEventCallback(\n\t\tws: WebSocketHandle,\n\t\tcallback: (event: RuntimeWebSocketEvent) => void,\n\t): void {\n\t\tcallHandle(\n\t\t\tasWasmWebSocket(ws),\n\t\t\t\"setEventCallback\",\n\t\t\t(event: RuntimeWebSocketEvent) => {\n\t\t\t\tif (event.kind === \"message\" && event.binary) {\n\t\t\t\t\tcallback({\n\t\t\t\t\t\t...event,\n\t\t\t\t\t\tdata: toBytes(event.data as RuntimeBytes | Uint8Array),\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcallback(event);\n\t\t\t},\n\t\t);\n\t}\n}\n\nexport type { WasmBindings };\n\nexport async function loadWasmRuntime(config?: WasmRuntimeLoadConfig): Promise<{\n\tbindings: WasmBindings;\n\truntime: WasmCoreRuntime;\n}> {\n\tconst bindings =\n\t\tconfig?.bindings ??\n\t\t(await import([\"@rivetkit\", \"rivetkit-wasm\"].join(\"/\")));\n\tawait bindings.default(config?.initInput);\n\treturn {\n\t\tbindings,\n\t\truntime: new WasmCoreRuntime(bindings),\n\t};\n}\n","import { ENGINE_ENDPOINT } from \"@/common/engine\";\nimport { configureServerlessPool } from \"@/serverless/configure\";\nimport { VERSION } from \"@/utils\";\nimport {\n\ttype RegistryActors,\n\ttype RegistryConfig,\n\ttype RegistryConfigInput,\n\tRegistryConfigSchema,\n} from \"./config\";\nimport { logger } from \"./log\";\nimport { buildConfiguredRegistry } from \"./native\";\nimport type { RuntimeServerlessResponseHead } from \"./runtime\";\n\ntype ShutdownSignal = \"SIGINT\" | \"SIGTERM\";\n\nexport type FetchHandler = (\n\trequest: Request,\n\t...args: any\n) => Response | Promise<Response>;\n\nexport interface ServerlessHandler {\n\tfetch: FetchHandler;\n}\n\nexport interface RegistryDiagnostics {\n\tmode: string;\n\tenvoyActiveActorCount?: number | null;\n}\n\nexport class Registry<A extends RegistryActors> {\n\t#config: RegistryConfigInput<A>;\n\n\tget config(): RegistryConfigInput<A> {\n\t\treturn this.#config;\n\t}\n\n\tparseConfig(): RegistryConfig {\n\t\treturn RegistryConfigSchema.parse(this.#config);\n\t}\n\n\t#runtimeServePromise?: Promise<void>;\n\t#runtimeServeConfiguredPromise?: ReturnType<typeof buildConfiguredRegistry>;\n\t#runtimeServerlessPromise?: ReturnType<typeof buildConfiguredRegistry>;\n\t#configureServerlessPoolPromise?: Promise<void>;\n\t#welcomePrinted = false;\n\t#shutdownInstalled = false;\n\t#shutdownInFlight: Promise<void> | null = null;\n\t#signalHandlers: Partial<Record<ShutdownSignal, () => void>> = {};\n\n\tconstructor(config: RegistryConfigInput<A>) {\n\t\tthis.#config = config;\n\t}\n\n\t#ensureServerlessPoolConfigured(config: RegistryConfig): Promise<void> | undefined {\n\t\tif (!config.configurePool) return undefined;\n\n\t\tif (!this.#configureServerlessPoolPromise) {\n\t\t\tthis.#configureServerlessPoolPromise = configureServerlessPool(config).catch(\n\t\t\t\t(error) => {\n\t\t\t\t\tthis.#configureServerlessPoolPromise = undefined;\n\t\t\t\t\tthrow error;\n\t\t\t\t},\n\t\t\t);\n\t\t\tthis.#configureServerlessPoolPromise.catch(() => {});\n\t\t}\n\n\t\treturn this.#configureServerlessPoolPromise;\n\t}\n\n\t/**\n\t * Handle an incoming HTTP request for serverless deployments.\n\t *\n\t * @example\n\t * ```ts\n\t * const app = new Hono();\n\t * app.all(\"/api/rivet/*\", (c) => registry.handler(c.req.raw));\n\t * export default app;\n\t * ```\n\t */\n\tpublic async handler(request: Request): Promise<Response> {\n\t\tconst config = this.parseConfig();\n\t\tthis.#printWelcome(config, \"serverless\");\n\n\t\tif (!this.#runtimeServerlessPromise) {\n\t\t\tthis.#runtimeServerlessPromise = buildConfiguredRegistry(config);\n\t\t}\n\n\t\tconst { runtime, registry, serveConfig } =\n\t\t\tawait this.#runtimeServerlessPromise;\n\t\tconst isStartRequest = isServerlessStartRequest(\n\t\t\trequest,\n\t\t\tserveConfig.serverlessBasePath ?? \"/api/rivet\",\n\t\t);\n\t\tconst isMetadataRequest = isServerlessMetadataRequest(\n\t\t\trequest,\n\t\t\tserveConfig.serverlessBasePath ?? \"/api/rivet\",\n\t\t);\n\t\tconst isEngineMetadataRequest =\n\t\t\trequest.headers.get(\"user-agent\")?.startsWith(\"RivetEngine/\") ?? false;\n\n\t\tif (isStartRequest) {\n\t\t\ttry {\n\t\t\t\tawait this.#ensureServerlessPoolConfigured(config);\n\t\t\t} catch (error) {\n\t\t\t\treturn new Response(\n\t\t\t\t\tJSON.stringify({\n\t\t\t\t\t\tgroup: \"guard\",\n\t\t\t\t\t\tcode: \"service_unavailable\",\n\t\t\t\t\t\tmessage: \"Serverless pool is not configured.\",\n\t\t\t\t\t\tmetadata: null,\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: 503,\n\t\t\t\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst cancelToken = runtime.createCancellationToken();\n\t\tconst abort = () => runtime.cancelCancellationToken(cancelToken);\n\t\tif (request.signal.aborted) {\n\t\t\tabort();\n\t\t} else {\n\t\t\trequest.signal.addEventListener(\"abort\", abort, { once: true });\n\t\t}\n\n\t\tconst requestBody = await request.arrayBuffer();\n\t\tif (\n\t\t\tisStartRequest &&\n\t\t\trequestBody.byteLength > serveConfig.serverlessMaxStartPayloadBytes\n\t\t) {\n\t\t\trequest.signal.removeEventListener(\"abort\", abort);\n\t\t\truntime.cancelCancellationToken(cancelToken);\n\t\t\treturn new Response(\n\t\t\t\tJSON.stringify({\n\t\t\t\t\tgroup: \"message\",\n\t\t\t\t\tcode: \"incoming_too_long\",\n\t\t\t\t\tmessage: `Incoming message too long. Received ${requestBody.byteLength} bytes, limit is ${serveConfig.serverlessMaxStartPayloadBytes} bytes.`,\n\t\t\t\t\tmetadata: null,\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tstatus: 413,\n\t\t\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\tlet settled = false;\n\t\tlet controllerRef:\n\t\t\t| ReadableStreamDefaultController<Uint8Array>\n\t\t\t| undefined;\n\t\tconst backpressureWaiters: Array<() => void> = [];\n\t\tconst resolveBackpressure = () => {\n\t\t\twhile (\n\t\t\t\tcontrollerRef &&\n\t\t\t\t(controllerRef.desiredSize ?? 1) > 0 &&\n\t\t\t\tbackpressureWaiters.length > 0\n\t\t\t) {\n\t\t\t\tbackpressureWaiters.shift()?.();\n\t\t\t}\n\t\t};\n\t\tconst waitForBackpressure = async () => {\n\t\t\tif (!controllerRef || (controllerRef.desiredSize ?? 1) > 0) return;\n\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\tbackpressureWaiters.push(resolve);\n\t\t\t});\n\t\t};\n\t\tconst stream = new ReadableStream<Uint8Array>({\n\t\t\tstart(controller) {\n\t\t\t\tcontrollerRef = controller;\n\t\t\t},\n\t\t\tpull() {\n\t\t\t\tresolveBackpressure();\n\t\t\t},\n\t\t\tcancel() {\n\t\t\t\tsettled = true;\n\t\t\t\tresolveBackpressure();\n\t\t\t\truntime.cancelCancellationToken(cancelToken);\n\t\t\t},\n\t\t});\n\n\t\tconst headers: Record<string, string> = {};\n\t\trequest.headers.forEach((value, key) => {\n\t\t\theaders[key] = value;\n\t\t});\n\n\t\tlet head: RuntimeServerlessResponseHead;\n\t\ttry {\n\t\t\thead = await runtime.handleServerlessRequest(\n\t\t\t\tregistry,\n\t\t\t\t{\n\t\t\t\t\tmethod: request.method,\n\t\t\t\t\turl: request.url,\n\t\t\t\t\theaders,\n\t\t\t\t\tbody: new Uint8Array(requestBody),\n\t\t\t\t},\n\t\t\t\tasync (\n\t\t\t\t\terror: unknown,\n\t\t\t\t\tevent?: {\n\t\t\t\t\t\tkind: \"chunk\" | \"end\";\n\t\t\t\t\t\tchunk?: Uint8Array;\n\t\t\t\t\t\terror?: {\n\t\t\t\t\t\t\tgroup: string;\n\t\t\t\t\t\t\tcode: string;\n\t\t\t\t\t\t\tmessage: string;\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t) => {\n\t\t\t\t\tif (error) throw error;\n\t\t\t\t\tif (!event || settled) return;\n\t\t\t\t\tif (event.kind === \"chunk\") {\n\t\t\t\t\t\tawait waitForBackpressure();\n\t\t\t\t\t\tif (settled) return;\n\t\t\t\t\t\tif (event.chunk) controllerRef?.enqueue(event.chunk);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tsettled = true;\n\t\t\t\t\tresolveBackpressure();\n\t\t\t\t\trequest.signal.removeEventListener(\"abort\", abort);\n\t\t\t\t\tif (event.error) {\n\t\t\t\t\t\tcontrollerRef?.error(\n\t\t\t\t\t\t\tnew Error(\n\t\t\t\t\t\t\t\t`${event.error.group}.${event.error.code}: ${event.error.message}`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontrollerRef?.close();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcancelToken,\n\t\t\t\tserveConfig,\n\t\t\t);\n\t\t} catch (err) {\n\t\t\t// The runtime call itself rejected (e.g. `registry_shut_down_error`).\n\t\t\t// Clean up the abort listener so it doesn't leak, then propagate.\n\t\t\trequest.signal.removeEventListener(\"abort\", abort);\n\t\t\truntime.cancelCancellationToken(cancelToken);\n\t\t\tthrow err;\n\t\t}\n\n\t\tif (isMetadataRequest && !isEngineMetadataRequest) {\n\t\t\ttry {\n\t\t\t\tawait this.#ensureServerlessPoolConfigured(config);\n\t\t\t} catch (error) {\n\t\t\t\treturn new Response(\n\t\t\t\t\tJSON.stringify({\n\t\t\t\t\t\tgroup: \"guard\",\n\t\t\t\t\t\tcode: \"service_unavailable\",\n\t\t\t\t\t\tmessage: \"Serverless pool is not configured.\",\n\t\t\t\t\t\tmetadata: null,\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: 503,\n\t\t\t\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn new Response(stream, {\n\t\t\tstatus: head.status,\n\t\t\theaders: head.headers,\n\t\t});\n\t}\n\n\t/**\n\t * Returns a fetch handler for serverless deployments.\n\t *\n\t * @example\n\t * ```ts\n\t * export default registry.serve();\n\t * ```\n\t */\n\tpublic serve(): ServerlessHandler {\n\t\treturn {\n\t\t\tfetch: (request) => this.handler(request),\n\t\t};\n\t}\n\n\tpublic async diagnostics(): Promise<RegistryDiagnostics> {\n\t\tconst candidates = [\n\t\t\tthis.#runtimeServerlessPromise,\n\t\t\tthis.#runtimeServeConfiguredPromise,\n\t\t].filter((candidate): candidate is ReturnType<typeof buildConfiguredRegistry> =>\n\t\t\tcandidate !== undefined\n\t\t);\n\n\t\tfor (const candidate of candidates) {\n\t\t\tconst { runtime, registry } = await candidate;\n\t\t\tconst diagnostics = await runtime.registryDiagnostics?.(registry);\n\t\t\tif (diagnostics) return diagnostics;\n\t\t}\n\n\t\treturn { mode: \"not_started\", envoyActiveActorCount: null };\n\t}\n\n\t/**\n\t * Starts an actor envoy for standalone server deployments.\n\t */\n\t#startEnvoy(config: RegistryConfig, printWelcome: boolean) {\n\t\tif (!this.#runtimeServePromise) {\n\t\t\tconst configuredRegistryPromise = buildConfiguredRegistry(config);\n\t\t\tthis.#runtimeServeConfiguredPromise = configuredRegistryPromise;\n\t\t\tthis.#runtimeServePromise = configuredRegistryPromise\n\t\t\t\t.then(async ({ runtime, registry, serveConfig }) => {\n\t\t\t\t\tawait runtime.serveRegistry(registry, serveConfig);\n\t\t\t\t})\n\t\t\t\t.catch((err) => {\n\t\t\t\t\t// Always-attached catch so the stored promise never leaves a\n\t\t\t\t\t// rejection unhandled. Downstream awaits (e.g. #runShutdown's\n\t\t\t\t\t// Promise.race) attach their own catches and still observe\n\t\t\t\t\t// resolution via the race.\n\t\t\t\t\tlogger().warn({ err }, \"runtime registry serve errored\");\n\t\t\t\t});\n\t\t\t// Install signal handlers once an envoy lifecycle has begun. Only\n\t\t\t// Mode A ever reaches here. Mode B (handler(request)) intentionally\n\t\t\t// does not install handlers because it runs on Workers/Vercel/Deno\n\t\t\t// Deploy where `process.on` is absent or forbidden; those platforms\n\t\t\t// own their own signal policy.\n\t\t\tthis.#installSignalHandlers(config, configuredRegistryPromise);\n\t\t}\n\t\tif (printWelcome) {\n\t\t\tthis.#printWelcome(config, \"serverful\");\n\t\t}\n\t}\n\n\t#installSignalHandlers(\n\t\tconfig: RegistryConfig,\n\t\tconfiguredRegistryPromise: ReturnType<typeof buildConfiguredRegistry>,\n\t): void {\n\t\tif (this.#shutdownInstalled) return;\n\t\tif (config.shutdown?.disableSignalHandlers) return;\n\t\t// Guard against non-Node runtimes (Workers/Edge) where `process` may\n\t\t// exist but `process.on` is unavailable or forbidden.\n\t\tif (\n\t\t\ttypeof process === \"undefined\" ||\n\t\t\ttypeof process.on !== \"function\" ||\n\t\t\ttypeof process.kill !== \"function\"\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#shutdownInstalled = true;\n\n\t\tconst install = (signal: ShutdownSignal) => {\n\t\t\tconst handler = () =>\n\t\t\t\tthis.#onShutdownSignal(\n\t\t\t\t\tsignal,\n\t\t\t\t\tconfig,\n\t\t\t\t\tconfiguredRegistryPromise,\n\t\t\t\t);\n\t\t\tthis.#signalHandlers[signal] = handler;\n\t\t\tprocess.on(signal, handler);\n\t\t};\n\t\tinstall(\"SIGINT\");\n\t\tinstall(\"SIGTERM\");\n\t}\n\n\t#onShutdownSignal(\n\t\tsignal: ShutdownSignal,\n\t\tconfig: RegistryConfig,\n\t\tconfiguredRegistryPromise: ReturnType<typeof buildConfiguredRegistry>,\n\t): void {\n\t\tif (this.#shutdownInFlight !== null) {\n\t\t\t// Second delivery of the same (or another) shutdown signal.\n\t\t\t// Remove our handler only (preserving any user-installed listeners)\n\t\t\t// and re-raise so Node proceeds with its default exit path.\n\t\t\tthis.#removeSignalHandlers();\n\t\t\tprocess.kill(process.pid, signal);\n\t\t\treturn;\n\t\t}\n\t\tthis.#shutdownInFlight = this.#runShutdown(\n\t\t\tsignal,\n\t\t\tconfig,\n\t\t\tconfiguredRegistryPromise,\n\t\t).catch((err) => {\n\t\t\tlogger().warn({ err }, \"shutdown error\");\n\t\t});\n\t}\n\n\tasync #runShutdown(\n\t\tsignal: ShutdownSignal,\n\t\tconfig: RegistryConfig,\n\t\tconfiguredRegistryPromise: ReturnType<typeof buildConfiguredRegistry>,\n\t): Promise<void> {\n\t\tconst gracePeriodMs = config.shutdown?.gracePeriodMs ?? 30_000;\n\t\t// Race the entire drain sequence (both modes + serve promise) against\n\t\t// a single grace ceiling. Without this, each mode's Rust-side drain\n\t\t// (20s) could stack sequentially and blow past gracePeriodMs before\n\t\t// we re-raise the signal.\n\t\tconst drain = async () => {\n\t\t\t// Shut down every live `CoreRegistry` we know about. Mode A\n\t\t\t// (`start()`) and Mode B (`handler()`) each build a separate\n\t\t\t// runtime registry, so one signal handler fans out to both to\n\t\t\t// honor the spec invariant \"single shutdown tears down both modes\".\n\t\t\tconst registries: Promise<void>[] = [\n\t\t\t\t(async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { runtime, registry } =\n\t\t\t\t\t\t\tawait configuredRegistryPromise;\n\t\t\t\t\t\tawait runtime.shutdownRegistry(registry);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tlogger().warn(\n\t\t\t\t\t\t\t{ err },\n\t\t\t\t\t\t\t\"runtime registry shutdown errored (mode A)\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t})(),\n\t\t\t];\n\t\t\tconst runtimeServerlessPromise = this.#runtimeServerlessPromise;\n\t\t\tif (runtimeServerlessPromise !== undefined) {\n\t\t\t\tregistries.push(\n\t\t\t\t\t(async () => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst { runtime, registry } =\n\t\t\t\t\t\t\t\tawait runtimeServerlessPromise;\n\t\t\t\t\t\t\tawait runtime.shutdownRegistry(registry);\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\tlogger().warn(\n\t\t\t\t\t\t\t\t{ err },\n\t\t\t\t\t\t\t\t\"runtime registry shutdown errored (mode B)\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t})(),\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait Promise.all(registries);\n\n\t\t\tconst runtimeServePromise = this.#runtimeServePromise;\n\t\t\tif (runtimeServePromise !== undefined) {\n\t\t\t\t// Swallow rejection so the race doesn't itself reject; the\n\t\t\t\t// always-attached `.catch` at the promise assignment site has\n\t\t\t\t// already logged any serve-side error.\n\t\t\t\tawait runtimeServePromise.catch(() => undefined);\n\t\t\t}\n\t\t};\n\t\tawait Promise.race([\n\t\t\tdrain(),\n\t\t\tnew Promise<void>((resolve) =>\n\t\t\t\tsetTimeout(resolve, gracePeriodMs).unref?.(),\n\t\t\t),\n\t\t]);\n\t\tthis.#removeSignalHandlers();\n\t\tprocess.kill(process.pid, signal);\n\t}\n\n\t#removeSignalHandlers(): void {\n\t\tfor (const [signal, handler] of Object.entries(\n\t\t\tthis.#signalHandlers,\n\t\t) as [ShutdownSignal, () => void][]) {\n\t\t\tif (handler) process.removeListener(signal, handler);\n\t\t}\n\t\tthis.#signalHandlers = {};\n\t}\n\n\tpublic startEnvoy() {\n\t\tthis.#startEnvoy(this.parseConfig(), true);\n\t}\n\n\t/**\n\t * Starts the actor envoy for standalone server deployments.\n\t *\n\t * @example\n\t * ```ts\n\t * const registry = setup({ use: { counter } });\n\t * registry.start();\n\t * ```\n\t */\n\tpublic start() {\n\t\tconst config = this.parseConfig();\n\t\tthis.#startEnvoy(config, true);\n\t}\n\n\t#printWelcome(\n\t\tconfig: RegistryConfig,\n\t\tkind: \"serverless\" | \"serverful\",\n\t): void {\n\t\tif (config.noWelcome || this.#welcomePrinted) return;\n\t\tthis.#welcomePrinted = true;\n\n\t\tconst logLine = (label: string, value: string) => {\n\t\t\tconst padding = \" \".repeat(Math.max(0, 13 - label.length));\n\t\t\tconsole.log(` - ${label}:${padding}${value}`);\n\t\t};\n\n\t\tconsole.log();\n\t\tconsole.log(\n\t\t\t` RivetKit ${VERSION} (Engine - ${kind === \"serverless\" ? \"Serverless\" : \"Serverful\"})`,\n\t\t);\n\n\t\tif (config.namespace !== \"default\") {\n\t\t\tlogLine(\"Namespace\", config.namespace);\n\t\t}\n\n\t\tif (config.endpoint) {\n\t\t\tconst endpointType =\n\t\t\t\tconfig.endpoint === ENGINE_ENDPOINT ? \"local native\" : \"remote\";\n\t\t\tlogLine(\"Endpoint\", `${config.endpoint} (${endpointType})`);\n\t\t}\n\n\t\tif (kind === \"serverless\" && config.publicEndpoint) {\n\t\t\tlogLine(\"Client\", config.publicEndpoint);\n\t\t}\n\n\t\tlogLine(\"Actors\", Object.keys(config.use).length.toString());\n\t\tconsole.log();\n\t}\n}\n\nfunction isServerlessStartRequest(request: Request, basePath: string): boolean {\n\tif (request.method !== \"POST\") return false;\n\tconst parsed = new URL(request.url);\n\tconst normalizedBase =\n\t\tbasePath === \"/\" ? \"\" : `/${basePath.replace(/^\\/+|\\/+$/g, \"\")}`;\n\treturn parsed.pathname === `${normalizedBase}/start`;\n}\n\nfunction isServerlessMetadataRequest(request: Request, basePath: string): boolean {\n\tif (request.method !== \"GET\") return false;\n\tconst parsed = new URL(request.url);\n\tconst normalizedBase =\n\t\tbasePath === \"/\" ? \"\" : `/${basePath.replace(/^\\/+|\\/+$/g, \"\")}`;\n\treturn parsed.pathname === `${normalizedBase}/metadata`;\n}\n\nexport function setup<A extends RegistryActors>(\n\tinput: RegistryConfigInput<A>,\n): Registry<A> {\n\treturn new Registry(input);\n}\n\nexport type { RegistryConfig, RegistryActors };\nexport { RegistryConfigSchema };\n"],"mappings":"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","names":["logger","logger","z","z","z","z","VirtualWebSocket","asRegistryHandle","asActorFactoryHandle","method","queue","event","isPromiseLike","logger","VirtualWebSocket","event","_a","_b","rows","error","_a","event","logger"]}
1
+ {"version":3,"sources":["../../src/actor/log.ts","../../src/actor/definition.ts","../../src/actor/schema.ts","../../src/common/inline-websocket-adapter.ts","../../src/common/engine.ts","../../src/registry/log.ts","../../src/serverless/configure.ts","../../src/registry/config/index.ts","../../src/registry/config/envoy.ts","../../src/registry/config/serverless.ts","../../src/registry/native.ts","../../src/common/database/native-database.ts","../../src/registry/runtime.ts","../../src/registry/napi-runtime.ts","../../src/registry/native-validation.ts","../../src/registry/wasm-runtime.ts","../../src/registry/index.ts"],"sourcesContent":["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 type { RegistryConfig } from \"@/registry/config\";\nimport { ActorConfigSchema, type Actions, type ActorConfig, type ActorConfigInput } from \"./config\";\nimport { loggerWithoutContext } from \"./log\";\nimport type { AnyDatabaseProvider } from \"@/common/database/config\";\nimport type { EventSchemaConfig, QueueSchemaConfig } from \"./schema\";\n\nconst warnedDeprecatedTimeoutKeys = new Set<string>();\n\nfunction warnDeprecatedShutdownTimeoutKeys(options: unknown) {\n\tif (!options || typeof options !== \"object\") return;\n\tconst opts = options as Record<string, unknown>;\n\tfor (const key of [\"onDestroyTimeout\", \"waitUntilTimeout\"]) {\n\t\tif (opts[key] !== undefined && !warnedDeprecatedTimeoutKeys.has(key)) {\n\t\t\twarnedDeprecatedTimeoutKeys.add(key);\n\t\t\tloggerWithoutContext().warn({\n\t\t\t\tmsg: `actor option \\`${key}\\` is deprecated and is now ignored. Configure \\`sleepGracePeriod\\` instead, which bounds the entire graceful shutdown window for both sleep and destroy. Will be removed in 2.2.0.`,\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport interface BaseActorDefinition<\n\tS,\n\tCP,\n\tCS,\n\tV,\n\tI,\n\tDB extends AnyDatabaseProvider,\n\tE extends EventSchemaConfig = Record<never, never>,\n\tQ extends QueueSchemaConfig = Record<never, never>,\n\tR extends Actions<S, CP, CS, V, I, DB, E, Q> = Actions<\n\t\tS,\n\t\tCP,\n\t\tCS,\n\t\tV,\n\t\tI,\n\t\tDB,\n\t\tE,\n\t\tQ\n\t>,\n> {\n\treadonly config: ActorConfig<S, CP, CS, V, I, DB, E, Q>;\n}\n\nexport type AnyActorDefinition = BaseActorDefinition<\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany\n>;\n\nexport type AnyStaticActorDefinition = ActorDefinition<\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany\n>;\n\nexport class ActorDefinition<\n\tS,\n\tCP,\n\tCS,\n\tV,\n\tI,\n\tDB extends AnyDatabaseProvider,\n\tE extends EventSchemaConfig = Record<never, never>,\n\tQ extends QueueSchemaConfig = Record<never, never>,\n\tR extends Actions<S, CP, CS, V, I, DB, E, Q> = Actions<\n\t\tS,\n\t\tCP,\n\t\tCS,\n\t\tV,\n\t\tI,\n\t\tDB,\n\t\tE,\n\t\tQ\n\t>,\n> implements BaseActorDefinition<S, CP, CS, V, I, DB, E, Q, R>\n{\n\t#config: ActorConfig<S, CP, CS, V, I, DB, E, Q>;\n\n\tconstructor(config: ActorConfig<S, CP, CS, V, I, DB, E, Q>) {\n\t\tthis.#config = config;\n\t}\n\n\tget config(): ActorConfig<S, CP, CS, V, I, DB, E, Q> {\n\t\treturn this.#config;\n\t}\n}\n\nexport interface BaseActorInstance<\n\tS = any,\n\tCP = any,\n\tCS = any,\n\tV = any,\n\tI = any,\n\tDB extends AnyDatabaseProvider = AnyDatabaseProvider,\n\tE extends EventSchemaConfig = Record<never, never>,\n\tQ extends QueueSchemaConfig = Record<never, never>,\n> {\n\tid: string;\n\tconfig: ActorConfig<S, CP, CS, V, I, DB, E, Q>;\n\trLog: Record<string, (...args: any[]) => any>;\n\t[key: string]: any;\n}\n\nexport type AnyActorInstance = BaseActorInstance<\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany,\n\tany\n>;\n\nexport type AnyStaticActorInstance = AnyActorInstance;\n\nexport function isStaticActorInstance(\n\t_actor: AnyActorInstance,\n): _actor is AnyStaticActorInstance {\n\treturn true;\n}\n\nexport function actor<\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\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> = 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): ActorDefinition<\n\tTState,\n\tTConnParams,\n\tTConnState,\n\tTVars,\n\tTInput,\n\tTDatabase,\n\tTEvents,\n\tTQueues,\n\tTActions\n> {\n\twarnDeprecatedShutdownTimeoutKeys(\n\t\t(input as { options?: unknown } | undefined)?.options,\n\t);\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 new ActorDefinition(config);\n}\n\nexport function isStaticActorDefinition(\n\tdefinition: AnyActorDefinition,\n): definition is AnyStaticActorDefinition {\n\treturn definition instanceof ActorDefinition;\n}\n\nexport function lookupInRegistry(\n\tconfig: RegistryConfig,\n\tname: string,\n): AnyActorDefinition {\n\tconst definition = config.use[name];\n\tif (!definition) throw new Error(`no actor in registry for name ${name}`);\n\treturn definition;\n}\n","import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { unsupportedFeature } 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<TMessage, TComplete = never, TContext = any> {\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<TMessage, TComplete, TContext> {\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? InferSchema<T[\"message\"]>\n\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\t? InferSchema<T[\"schema\"]>\n\t\t\t\t: T extends StandardSchemaV1<any, infer O>\n\t\t\t\t\t? O\n\t\t\t\t\t: T extends EventTypeToken<infer R, any>\n\t\t\t\t\t\t? R\n\t\t\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? [C] extends [never]\n\t\t\t? never\n\t\t\t: C\n\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 unsupportedFeature(\"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 { WSContext } from \"hono/ws\";\nimport type { UpgradeWebSocketArgs } from \"@/common/actor-websocket\";\nimport type { UniversalWebSocket } from \"@/common/websocket-interface\";\nimport { VirtualWebSocket } from \"@rivetkit/virtual-websocket\";\nimport { getLogger } from \"./log\";\n\nfunction logger() {\n\treturn getLogger(\"inline-websocket-adapter\");\n}\n\n/**\n * InlineWebSocketAdapter creates two linked WebSocket objects:\n * - clientWs: for the client/proxy side (returned from openWebSocket)\n * - actorWs: for the actor side (passed via wsContext.raw)\n *\n * Each side's send() triggers the OTHER side's message event.\n */\nexport class InlineWebSocketAdapter {\n\t#handler: UpgradeWebSocketArgs;\n\t#wsContext: WSContext;\n\t#readyState: 0 | 1 | 2 | 3 = 0;\n\t#restoring: boolean;\n\t#pendingClientMessages: Array<{\n\t\tdata: string | ArrayBufferLike | Blob | ArrayBufferView;\n\t\trivetMessageIndex?: number;\n\t}> = [];\n\n\t#clientWs: VirtualWebSocket;\n\t#actorWs: VirtualWebSocket;\n\n\tconstructor(\n\t\thandler: UpgradeWebSocketArgs,\n\t\toptions: {\n\t\t\trestoring?: boolean;\n\t\t} = {},\n\t) {\n\t\tthis.#handler = handler;\n\t\tthis.#restoring = options.restoring ?? false;\n\n\t\t// Create linked WebSocket pair\n\t\t// Client's send() -> handler.onMessage (for RPC) + Actor's message event (for raw WS)\n\t\t// Actor's send() -> Client's message event\n\t\tthis.#clientWs = new VirtualWebSocket({\n\t\t\tgetReadyState: () => this.#readyState,\n\t\t\tonSend: (data) => this.dispatchClientMessageWithMetadata(data),\n\t\t\tonClose: (code, reason) => this.#close(code, reason),\n\t\t});\n\n\t\tthis.#actorWs = new VirtualWebSocket({\n\t\t\tgetReadyState: () => this.#readyState,\n\t\t\tonSend: (data) => this.#clientWs.triggerMessage(data),\n\t\t\tonClose: (code, reason) => this.#close(code, reason),\n\t\t});\n\n\t\t// Create WSContext with actorWs as raw\n\t\tthis.#wsContext = new WSContext({\n\t\t\traw: this.#actorWs,\n\t\t\tsend: (data: string | ArrayBuffer | Uint8Array) => {\n\t\t\t\tlogger().debug({ msg: \"WSContext.send called\" });\n\t\t\t\tthis.#clientWs.triggerMessage(data);\n\t\t\t},\n\t\t\tclose: (code?: number, reason?: string) => {\n\t\t\t\tlogger().debug({ msg: \"WSContext.close called\", code, reason });\n\t\t\t\tthis.#close(code || 1000, reason || \"\");\n\t\t\t},\n\t\t\treadyState: 1,\n\t\t});\n\n\t\t// Defer initialization to allow event listeners to be attached first\n\t\tsetTimeout(() => {\n\t\t\tthis.#initialize();\n\t\t}, 0);\n\t}\n\n\t/** Get the client-side WebSocket (for proxy/client code) */\n\tget clientWebSocket(): UniversalWebSocket {\n\t\treturn this.#clientWs;\n\t}\n\n\t/** Get the actor-side WebSocket (passed to actor via wsContext.raw) */\n\tget actorWebSocket(): UniversalWebSocket {\n\t\treturn this.#actorWs;\n\t}\n\n\t/**\n\t * Dispatch a client->actor message with optional transport metadata.\n\t *\n\t * This is used by dynamic actor host bridges to preserve\n\t * `rivetMessageIndex` on hibernatable engine websocket paths.\n\t */\n\tdispatchClientMessageWithMetadata(\n\t\tdata: string | ArrayBufferLike | Blob | ArrayBufferView,\n\t\trivetMessageIndex?: number,\n\t): void {\n\t\tif (this.#readyState === this.#clientWs.CONNECTING) {\n\t\t\tthis.#pendingClientMessages.push({ data, rivetMessageIndex });\n\t\t\treturn;\n\t\t}\n\t\tif (\n\t\t\tthis.#readyState === this.#clientWs.CLOSING ||\n\t\t\tthis.#readyState === this.#clientWs.CLOSED\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#dispatchClientMessage(data, rivetMessageIndex);\n\t}\n\n\t#dispatchClientMessage(\n\t\tdata: string | ArrayBufferLike | Blob | ArrayBufferView,\n\t\trivetMessageIndex?: number,\n\t): void {\n\t\ttry {\n\t\t\tthis.#handler.onMessage(\n\t\t\t\t{ data, rivetMessageIndex },\n\t\t\t\tthis.#wsContext,\n\t\t\t);\n\t\t\t(this.#actorWs as any).dispatchEvent({\n\t\t\t\ttype: \"message\",\n\t\t\t\tdata,\n\t\t\t\trivetMessageIndex,\n\t\t\t\ttarget: this.#actorWs,\n\t\t\t\tcurrentTarget: this.#actorWs,\n\t\t\t});\n\t\t} catch (err) {\n\t\t\tthis.#handleError(err);\n\t\t\tthis.#close(1011, \"Internal error processing message\");\n\t\t}\n\t}\n\n\tasync #initialize(): Promise<void> {\n\t\ttry {\n\t\t\tlogger().debug({ msg: \"websocket initializing\" });\n\n\t\t\tthis.#readyState = 1; // OPEN\n\n\t\t\tif (this.#restoring && this.#handler.onRestore) {\n\t\t\t\tlogger().debug({\n\t\t\t\t\tmsg: \"calling handler.onRestore with WSContext\",\n\t\t\t\t});\n\t\t\t\tthis.#handler.onRestore(this.#wsContext);\n\t\t\t} else {\n\t\t\t\tlogger().debug({\n\t\t\t\t\tmsg: \"calling handler.onOpen with WSContext\",\n\t\t\t\t});\n\t\t\t\tthis.#handler.onOpen(undefined, this.#wsContext);\n\t\t\t}\n\n\t\t\t// Fire open event to both sides\n\t\t\tthis.#clientWs.triggerOpen();\n\t\t\tthis.#actorWs.triggerOpen();\n\t\t\twhile (this.#pendingClientMessages.length > 0) {\n\t\t\t\tconst next = this.#pendingClientMessages.shift();\n\t\t\t\tif (!next) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthis.#dispatchClientMessage(next.data, next.rivetMessageIndex);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tthis.#handleError(err);\n\t\t\tthis.#close(1011, \"Internal error during initialization\");\n\t\t}\n\t}\n\n\t#handleError(err: unknown): void {\n\t\tconsole.error(\"INLINE_WEBSOCKET_ADAPTER_ERROR\", err);\n\t\tlogger().error({\n\t\t\tmsg: \"error in websocket\",\n\t\t\terror: err,\n\t\t\terrorMessage: err instanceof Error ? err.message : String(err),\n\t\t\tstack: err instanceof Error ? err.stack : undefined,\n\t\t});\n\n\t\t// Call handler.onError\n\t\ttry {\n\t\t\tthis.#handler.onError(err, this.#wsContext);\n\t\t} catch (handlerErr) {\n\t\t\tlogger().error({\n\t\t\t\tmsg: \"error in onError handler\",\n\t\t\t\terror: handlerErr,\n\t\t\t});\n\t\t}\n\n\t\t// Fire error event to both sides\n\t\tthis.#clientWs.triggerError(err);\n\t\tthis.#actorWs.triggerError(err);\n\t}\n\n\t#close(code: number, reason: string): void {\n\t\tif (this.#readyState === 3 || this.#readyState === 2) {\n\t\t\treturn;\n\t\t}\n\n\t\tlogger().debug({ msg: \"closing websocket\", code, reason });\n\n\t\tthis.#readyState = 2; // CLOSING\n\n\t\ttry {\n\t\t\tthis.#handler.onClose(\n\t\t\t\t{ code, reason, wasClean: true },\n\t\t\t\tthis.#wsContext,\n\t\t\t);\n\t\t} catch (err) {\n\t\t\tlogger().error({ msg: \"error closing websocket\", error: err });\n\t\t} finally {\n\t\t\tthis.#readyState = 3; // CLOSED\n\n\t\t\t// Fire close event to both sides\n\t\t\tthis.#clientWs.triggerClose(code, reason);\n\t\t\tthis.#actorWs.triggerClose(code, reason);\n\t\t}\n\t}\n}\n\n/**\n * Creates an InlineWebSocketAdapter and returns the client-side WebSocket.\n * This is the main entry point for creating inline WebSocket connections.\n */\nexport function createInlineWebSocket(\n\thandler: UpgradeWebSocketArgs,\n): UniversalWebSocket {\n\tconst adapter = new InlineWebSocketAdapter(handler);\n\treturn adapter.clientWebSocket;\n}\n","export const ENGINE_PORT = 6420;\nexport const ENGINE_ENDPOINT = `http://127.0.0.1:${ENGINE_PORT}`;\n","import { getLogger } from \"@/common/log\";\n\nexport function logger() {\n\treturn getLogger(\"registry\");\n}\n","import { convertRegistryConfigToClientConfig } from \"@/client/config\";\nimport {\n\tgetDatacenters,\n\tupdateRunnerConfig,\n} from \"@/engine-client/api-endpoints\";\nimport { stringifyError } from \"@/common/utils\";\nimport type { RegistryConfig } from \"@/registry/config\";\nimport { logger } from \"@/registry/log\";\n\nconst DEFAULT_CONFIGURE_TIMEOUT_MS = 60_000;\nconst CONFIGURE_RETRY_DELAY_MS = 1_000;\n\nfunction sleep(ms: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction configureTimeoutMs() {\n\tconst value = process.env.RIVET_SERVERLESS_CONFIGURE_TIMEOUT_MS;\n\tif (value === undefined || value === \"\") return DEFAULT_CONFIGURE_TIMEOUT_MS;\n\n\tconst parsed = Number(value);\n\tif (!Number.isFinite(parsed) || parsed < 0) {\n\t\tthrow new Error(\"RIVET_SERVERLESS_CONFIGURE_TIMEOUT_MS must be a finite non-negative number\");\n\t}\n\n\treturn parsed;\n}\n\nexport async function configureServerlessPool(\n\tconfig: RegistryConfig,\n): Promise<void> {\n\tlogger().debug({ msg: \"configuring serverless pool\" });\n\n\tconst startedAt = Date.now();\n\tconst timeoutMs = configureTimeoutMs();\n\tlet attempts = 0;\n\tlet lastError: unknown;\n\n\twhile (Date.now() - startedAt <= timeoutMs) {\n\t\tattempts += 1;\n\t\ttry {\n\t\t\tif (!config.namespace) {\n\t\t\t\tthrow new Error(\"namespace is required for serverless configuration\");\n\t\t\t}\n\t\t\tif (!config.endpoint) {\n\t\t\t\tthrow new Error(\"endpoint is required for serverless configuration\");\n\t\t\t}\n\t\t\tif (!config.configurePool) {\n\t\t\t\tthrow new Error(\"configurePool is required for serverless configuration\");\n\t\t\t}\n\n\t\t\tconst customConfig = config.configurePool;\n\t\t\tconst clientConfig = convertRegistryConfigToClientConfig(config);\n\t\t\tconst dcsRes = await getDatacenters(clientConfig);\n\t\t\tconst poolName = customConfig.name ?? \"default\";\n\t\t\tconst serverlessToken = config.token ?? config.publicToken;\n\t\t\tconst headers = {\n\t\t\t\t...(serverlessToken ? { \"x-rivet-token\": serverlessToken } : {}),\n\t\t\t\t...(customConfig.headers ?? {}),\n\t\t\t};\n\t\t\tconst serverlessConfig = {\n\t\t\t\tserverless: {\n\t\t\t\t\turl: customConfig.url,\n\t\t\t\t\theaders,\n\t\t\t\t\trequest_lifespan: customConfig.requestLifespan ?? 60 * 60,\n\t\t\t\t\tdrain_grace_period: customConfig.drainGracePeriod,\n\t\t\t\t\tmetadata_poll_interval:\n\t\t\t\t\t\tcustomConfig.metadataPollInterval ?? 1000,\n\t\t\t\t\tmax_runners: 100_000,\n\t\t\t\t\tmin_runners: 0,\n\t\t\t\t\trunners_margin: 0,\n\t\t\t\t\tslots_per_runner: 1,\n\t\t\t\t},\n\t\t\t\tmetadata: customConfig.metadata ?? {},\n\t\t\t\tdrain_on_version_upgrade:\n\t\t\t\t\tcustomConfig.drainOnVersionUpgrade ?? true,\n\t\t\t};\n\n\t\t\tawait updateRunnerConfig(clientConfig, poolName, {\n\t\t\t\tdatacenters: Object.fromEntries(\n\t\t\t\t\tdcsRes.datacenters.map((dc) => [dc.name, serverlessConfig]),\n\t\t\t\t),\n\t\t\t});\n\n\t\t\tlogger().info({\n\t\t\t\tmsg: \"serverless pool configured successfully\",\n\t\t\t\tpoolName,\n\t\t\t\tnamespace: config.namespace,\n\t\t\t\tattempts,\n\t\t\t});\n\t\t\treturn;\n\t\t} catch (error) {\n\t\t\tlastError = error;\n\t\t\tlogger().warn({\n\t\t\t\tmsg: \"serverless pool configuration attempt failed\",\n\t\t\t\tattempts,\n\t\t\t\terror: stringifyError(error),\n\t\t\t});\n\t\t\tawait sleep(CONFIGURE_RETRY_DELAY_MS);\n\t\t}\n\t}\n\n\tlogger().error({\n\t\tmsg: \"failed to configure serverless pool, validate endpoint is configured correctly then restart this process\",\n\t\tattempts,\n\t\terror: stringifyError(lastError),\n\t});\n\tthrow lastError;\n}\n","import { z } from \"zod\";\nimport { getRunMetadata } from \"@/actor/config\";\nimport type {\n\tAnyActorDefinition,\n\tBaseActorDefinition,\n} from \"@/actor/definition\";\nimport {\n\tKEYS,\n\tqueueMessagesPrefix,\n\tqueueMetadataKey,\n\tworkflowStoragePrefix,\n} from \"@/actor/keys\";\nimport { ENGINE_ENDPOINT } from \"@/common/engine\";\nimport { type Logger, LogLevelSchema } from \"@/common/log\";\nimport { VERSION } from \"@/utils\";\nimport { tryParseEndpoint } from \"@/utils/endpoint-parser\";\nimport {\n\tgetRivetEndpoint,\n\tgetRivetEngine,\n\tgetRivetkitRuntime,\n\tgetRivetNamespace,\n\tgetRivetRunEngine,\n\tgetRivetRunEngineVersion,\n\tgetRivetToken,\n\tisDev,\n} from \"@/utils/env-vars\";\nimport { EnvoyConfigSchema } from \"./envoy\";\nimport {\n\tConfigurePoolSchema,\n\tDEFAULT_SERVERLESS_MAX_START_PAYLOAD_BYTES,\n\tServerlessConfigSchema,\n} from \"./serverless\";\n\nexport const ActorsSchema = z.record(\n\tz.string(),\n\tz.custom<\n\t\tBaseActorDefinition<any, any, any, any, any, any, any, any, any>\n\t>(),\n);\nexport type RegistryActors = z.infer<typeof ActorsSchema>;\n\nexport const RuntimeKindSchema = z.enum([\"auto\", \"native\", \"wasm\"]);\nexport type RuntimeKind = z.infer<typeof RuntimeKindSchema>;\nexport type WasmRuntimeBindings = typeof import(\"@rivetkit/rivetkit-wasm\");\nexport type WasmRuntimeInitInput = Parameters<\n\tWasmRuntimeBindings[\"default\"]\n>[0];\nexport const SqliteBackendSchema = z.enum([\"local\", \"remote\"]);\nexport type SqliteBackend = z.infer<typeof SqliteBackendSchema>;\n\nexport const TestConfigSchema = z.object({\n\tenabled: z.boolean().optional().default(false),\n\tsqliteBackend: SqliteBackendSchema.optional(),\n});\nexport type TestConfig = z.infer<typeof TestConfigSchema>;\n\nexport const WasmRuntimeConfigSchema = z.object({\n\tbindings: z.custom<WasmRuntimeBindings>().optional(),\n\tinitInput: z.custom<WasmRuntimeInitInput>().optional(),\n});\nexport type WasmRuntimeConfig = z.infer<typeof WasmRuntimeConfigSchema>;\n\nexport const SqliteConfigSchema = z\n\t.union([\n\t\tSqliteBackendSchema,\n\t\tz.object({\n\t\t\tbackend: SqliteBackendSchema,\n\t\t}),\n\t])\n\t.optional()\n\t.transform((config) => {\n\t\tif (config === undefined) return undefined;\n\t\tif (typeof config === \"string\") return { backend: config };\n\t\treturn config;\n\t});\nexport type SqliteConfig = z.infer<typeof SqliteConfigSchema>;\n\n// TODO: Add sane defaults for NODE_ENV=development\nexport const RegistryConfigSchema = z\n\t.object({\n\t\t// MARK: Actors\n\t\tuse: z.record(z.string(), z.custom<AnyActorDefinition>()),\n\n\t\t// TODO: Find a better way of passing around the test config\n\t\t/**\n\t\t * Test configuration.\n\t\t *\n\t\t * DO NOT MANUALLY ENABLE. THIS IS USED INTERNALLY.\n\t\t * @internal\n\t\t **/\n\t\ttest: TestConfigSchema.optional().default({ enabled: false }),\n\n\t\t// MARK: Networking\n\t\t/** @experimental */\n\t\tmaxIncomingMessageSize: z.number().optional().default(65_536),\n\n\t\t/** @experimental */\n\t\tmaxOutgoingMessageSize: z.number().optional().default(1_048_576),\n\n\t\t// MARK: Runtime\n\t\t/**\n\t\t * @experimental\n\t\t *\n\t\t * Runtime binding to use for RivetKit core.\n\t\t * */\n\t\truntime: RuntimeKindSchema.optional().transform((val, ctx) => {\n\t\t\tconst rawRuntime = val ?? getRivetkitRuntime();\n\t\t\tif (rawRuntime === undefined) {\n\t\t\t\treturn \"auto\";\n\t\t\t}\n\n\t\t\tconst parsed = RuntimeKindSchema.safeParse(rawRuntime);\n\t\t\tif (!parsed.success) {\n\t\t\t\tctx.addIssue({\n\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"RIVETKIT_RUNTIME must be one of auto, native, or wasm\",\n\t\t\t\t});\n\t\t\t\treturn \"auto\";\n\t\t\t}\n\n\t\t\treturn parsed.data;\n\t\t}),\n\n\t\t/**\n\t\t * @experimental\n\t\t *\n\t\t * WebAssembly runtime configuration.\n\t\t * */\n\t\twasm: WasmRuntimeConfigSchema.optional().default(() => ({})),\n\n\t\t/**\n\t\t * @experimental\n\t\t *\n\t\t * SQLite backend selection.\n\t\t * */\n\t\tsqlite: SqliteConfigSchema,\n\n\t\t/**\n\t\t * @experimental\n\t\t *\n\t\t * Disable welcome message.\n\t\t * */\n\t\tnoWelcome: z.boolean().optional().default(false),\n\n\t\t/**\n\t\t * @experimental\n\t\t * */\n\t\tlogging: z\n\t\t\t.object({\n\t\t\t\tbaseLogger: z.custom<Logger>().optional(),\n\t\t\t\tlevel: LogLevelSchema.optional(),\n\t\t\t})\n\t\t\t.optional()\n\t\t\t.default(() => ({})),\n\n\t\t// MARK: Routing\n\t\t// // This is a function to allow for lazy configuration of upgradeWebSocket on the\n\t\t// // fly. This is required since the dependencies that upgradeWebSocket\n\t\t// // (specifically Node.js) can sometimes only be specified after the router is\n\t\t// // created or must be imported async using `await import(...)`\n\t\t// getUpgradeWebSocket: z.custom<GetUpgradeWebSocket>().optional(),\n\n\t\t// MARK: Runner Configuration\n\t\t/**\n\t\t * Endpoint to connect to for Rivet Engine.\n\t\t *\n\t\t * Supports URL auth syntax for namespace and token:\n\t\t * - `https://namespace:token@api.rivet.dev`\n\t\t * - `https://namespace@api.rivet.dev`\n\t\t *\n\t\t * Can also be set via RIVET_ENDPOINT environment variables.\n\t\t */\n\t\tendpoint: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.transform((val) => val ?? getRivetEngine() ?? getRivetEndpoint()),\n\t\ttoken: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.transform((val) => val ?? getRivetToken()),\n\t\tnamespace: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.transform((val) => val ?? getRivetNamespace()),\n\t\theaders: z.record(z.string(), z.string()).optional().default({}),\n\n\t\t// MARK: Client\n\t\t// TODO:\n\t\t// client: ClientConfigSchema.optional(),\n\n\t\t// MARK: Local HTTP\n\t\t/**\n\t\t * Directory to serve static files from.\n\t\t *\n\t\t * When set, the local RivetKit server will serve static files from this\n\t\t * directory. This is used by `registry.start()` to serve a frontend\n\t\t * alongside the actor API.\n\t\t */\n\t\tstaticDir: z.string().optional(),\n\t\t/**\n\t\t * @experimental\n\t\t *\n\t\t * Base path for the local RivetKit API. This is used to prefix all routes.\n\t\t * For example, if the base path is `/foo`, then the route `/actors`\n\t\t * will be available at `/foo/actors`.\n\t\t */\n\t\thttpBasePath: z.string().optional().default(\"/\"),\n\t\t/**\n\t\t * @experimental\n\t\t *\n\t\t * What port to run the local HTTP server on.\n\t\t */\n\t\thttpPort: z.number().optional().default(6421),\n\t\t/**\n\t\t * @experimental\n\t\t *\n\t\t * What host to bind the local HTTP server to.\n\t\t */\n\t\thttpHost: z.string().optional(),\n\n\t\t// MARK: Engine\n\t\t/**\n\t\t * @experimental\n\t\t *\n\t\t * Starts the full Rust engine process locally.\n\t\t */\n\t\tstartEngine: z.boolean().default(() => getRivetRunEngine()),\n\t\t/** @experimental */\n\t\tengineVersion: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.default(() => getRivetRunEngineVersion() ?? VERSION),\n\t\t/**\n\t\t * @experimental\n\t\t *\n\t\t * Automatically configure serverless envoys in the engine.\n\t\t */\n\t\tconfigurePool: ConfigurePoolSchema.optional(),\n\n\t\t// MARK: Runtime-specific\n\t\tserverless: ServerlessConfigSchema.optional().default(() =>\n\t\t\tServerlessConfigSchema.parse({}),\n\t\t),\n\t\tenvoy: EnvoyConfigSchema.optional().default(() =>\n\t\t\tEnvoyConfigSchema.parse({}),\n\t\t),\n\n\t\t// MARK: Shutdown\n\t\t/**\n\t\t * Graceful shutdown configuration for SIGINT/SIGTERM.\n\t\t *\n\t\t * When a persistent envoy is running (Mode A, started via `registry.start()`),\n\t\t * rivetkit installs Node SIGINT/SIGTERM handlers that call into core's\n\t\t * `shutdown()` and wait up to `gracePeriodMs` for the envoy to drain\n\t\t * before re-raising the signal to let Node exit via its default path.\n\t\t *\n\t\t * Handlers are NOT installed when `handler(request)` is used alone\n\t\t * (Mode B / serverless): platform runtimes (Cloudflare Workers, Vercel,\n\t\t * Deno Deploy) own their own signal policy there, and `process.on` may\n\t\t * not exist.\n\t\t */\n\t\tshutdown: z\n\t\t\t.object({\n\t\t\t\t/**\n\t\t\t\t * Wait this many milliseconds for the serve promise to resolve\n\t\t\t\t * after calling `CoreRegistry::shutdown()`. Defaults to the\n\t\t\t\t * engine-provided actor stop threshold once the envoy connects.\n\t\t\t\t *\n\t\t\t\t * Must be >= rivetkit-core's drain timeout (20s) + margin.\n\t\t\t\t */\n\t\t\t\tgracePeriodMs: z\n\t\t\t\t\t.number()\n\t\t\t\t\t.int()\n\t\t\t\t\t.min(1_000)\n\t\t\t\t\t.optional(),\n\t\t\t\t/**\n\t\t\t\t * If true, rivetkit will not install SIGINT/SIGTERM handlers.\n\t\t\t\t * Use when the host application owns signal policy and will\n\t\t\t\t * call `nativeRegistry.shutdown()` itself.\n\t\t\t\t */\n\t\t\t\tdisableSignalHandlers: z.boolean().optional().default(false),\n\t\t\t})\n\t\t\t.optional()\n\t\t\t.default(() => ({\n\t\t\t\tdisableSignalHandlers: false,\n\t\t\t})),\n\t})\n\t.transform((config, ctx) => {\n\t\tconst isDevEnv = isDev();\n\t\tconst sqliteBackend =\n\t\t\tconfig.sqlite?.backend ?? config.test?.sqliteBackend;\n\n\t\tif (config.runtime === \"wasm\" && sqliteBackend === \"local\") {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tmessage:\n\t\t\t\t\t\"WebAssembly runtime cannot use local SQLite. Use remote SQLite instead.\",\n\t\t\t\tpath:\n\t\t\t\t\tconfig.sqlite?.backend === \"local\"\n\t\t\t\t\t\t? [\"sqlite\"]\n\t\t\t\t\t\t: [\"test\", \"sqliteBackend\"],\n\t\t\t});\n\t\t}\n\n\t\tconst sqlite =\n\t\t\tconfig.runtime === \"wasm\" && config.sqlite === undefined\n\t\t\t\t? { backend: \"remote\" as const }\n\t\t\t\t: config.sqlite;\n\n\t\t// Parse endpoint string (env var fallback is applied via transform above)\n\t\tconst parsedEndpoint = config.endpoint\n\t\t\t? tryParseEndpoint(ctx, {\n\t\t\t\t\tendpoint: config.endpoint,\n\t\t\t\t\tpath: [\"endpoint\"],\n\t\t\t\t\tnamespace: config.namespace,\n\t\t\t\t\ttoken: config.token,\n\t\t\t\t})\n\t\t\t: undefined;\n\n\t\t// Can't start a local engine and connect to a remote endpoint.\n\t\tif (config.startEngine && parsedEndpoint) {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tmessage: \"cannot specify both startEngine and endpoint\",\n\t\t\t});\n\t\t}\n\n\t\t// configurePool requires an engine (via endpoint or startEngine).\n\t\tif (config.configurePool && !parsedEndpoint && !config.startEngine) {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tmessage:\n\t\t\t\t\t\"configurePool requires either endpoint or startEngine\",\n\t\t\t});\n\t\t}\n\n\t\t// Flatten the endpoint and apply defaults for namespace/token\n\t\t// If startEngine is enabled, set endpoint to the engine endpoint.\n\t\tconst endpoint = config.startEngine\n\t\t\t? ENGINE_ENDPOINT\n\t\t\t: (parsedEndpoint?.endpoint ??\n\t\t\t\t(isDevEnv ? ENGINE_ENDPOINT : undefined));\n\t\tconst validateServerlessEndpoint = Boolean(\n\t\t\tconfig.startEngine || parsedEndpoint,\n\t\t);\n\t\t// Namespace priority: parsed from endpoint URL > config value (includes env var) > \"default\"\n\t\tconst namespace =\n\t\t\tparsedEndpoint?.namespace ?? config.namespace ?? \"default\";\n\t\t// Token priority: parsed from endpoint URL > config value (includes env var)\n\t\tconst token = parsedEndpoint?.token ?? config.token;\n\n\t\t// Parse publicEndpoint string (env var fallback is applied via transform in serverless schema)\n\t\tconst parsedPublicEndpoint = config.serverless.publicEndpoint\n\t\t\t? tryParseEndpoint(ctx, {\n\t\t\t\t\tendpoint: config.serverless.publicEndpoint,\n\t\t\t\t\tpath: [\"serverless\", \"publicEndpoint\"],\n\t\t\t\t})\n\t\t\t: undefined;\n\n\t\t// Validate that publicEndpoint namespace matches backend namespace if specified\n\t\tif (\n\t\t\tparsedPublicEndpoint?.namespace &&\n\t\t\tparsedPublicEndpoint.namespace !== namespace\n\t\t) {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tmessage: `publicEndpoint namespace \"${parsedPublicEndpoint.namespace}\" must match backend namespace \"${namespace}\"`,\n\t\t\t\tpath: [\"serverless\", \"publicEndpoint\"],\n\t\t\t});\n\t\t}\n\n\t\t// In dev mode, clients connect directly to the local Rivet Engine.\n\t\tconst publicEndpoint =\n\t\t\tparsedPublicEndpoint?.endpoint ??\n\t\t\t(isDevEnv && config.startEngine ? ENGINE_ENDPOINT : undefined);\n\t\t// We extract publicNamespace to validate that it matches the backend\n\t\t// namespace (see validation above), not for functional use.\n\t\tconst publicNamespace = parsedPublicEndpoint?.namespace;\n\t\tconst publicToken =\n\t\t\tparsedPublicEndpoint?.token ?? config.serverless.publicToken;\n\n\t\t// If endpoint is set or starting the engine, we'll use the engine driver.\n\t\treturn {\n\t\t\t...config,\n\t\t\tsqlite,\n\t\t\tendpoint,\n\t\t\tnamespace,\n\t\t\ttoken,\n\t\t\tpublicEndpoint,\n\t\t\tpublicNamespace,\n\t\t\tpublicToken,\n\t\t\tvalidateServerlessEndpoint,\n\t\t\tserverless: {\n\t\t\t\t...config.serverless,\n\t\t\t\tpublicEndpoint,\n\t\t\t},\n\t\t};\n\t});\n\nexport type RegistryConfig = z.infer<typeof RegistryConfigSchema>;\nexport type RegistryConfigInput<A extends RegistryActors> = Omit<\n\tz.input<typeof RegistryConfigSchema>,\n\t\"use\"\n> & { use: A };\n\nexport function buildActorNames(\n\tconfig: RegistryConfig,\n): Record<string, { metadata: Record<string, unknown> }> {\n\treturn Object.fromEntries(\n\t\tObject.keys(config.use).map((actorName) => {\n\t\t\tconst definition = config.use[actorName];\n\t\t\tconst options = definition.config.options ?? {};\n\t\t\tconst runMeta = getRunMetadata(definition.config.run);\n\t\t\tconst metadata: Record<string, unknown> = {};\n\t\t\t// Actor options take precedence over run metadata\n\t\t\tmetadata.icon = options.icon ?? runMeta.icon;\n\t\t\tmetadata.name = options.name ?? runMeta.name;\n\t\t\tmetadata.preload = {\n\t\t\t\tkeys: [\n\t\t\t\t\tArray.from(KEYS.PERSIST_DATA),\n\t\t\t\t\tArray.from(KEYS.INSPECTOR_TOKEN),\n\t\t\t\t\tArray.from(queueMetadataKey()),\n\t\t\t\t\tArray.from(KEYS.LAST_PUSHED_ALARM),\n\t\t\t\t],\n\t\t\t\tprefixes: [\n\t\t\t\t\t{\n\t\t\t\t\t\tprefix: Array.from(workflowStoragePrefix()),\n\t\t\t\t\t\tmaxBytes: options.preloadMaxWorkflowBytes ?? 131_072,\n\t\t\t\t\t\tpartial: false,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tprefix: Array.from(KEYS.CONN_PREFIX),\n\t\t\t\t\t\tmaxBytes: options.preloadMaxConnectionsBytes ?? 65_536,\n\t\t\t\t\t\tpartial: false,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tprefix: Array.from(queueMessagesPrefix()),\n\t\t\t\t\t\tmaxBytes: 65_536,\n\t\t\t\t\t\tpartial: false,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t\t// Remove undefined values\n\t\t\tif (!metadata.icon) delete metadata.icon;\n\t\t\tif (!metadata.name) delete metadata.name;\n\t\t\treturn [actorName, { metadata }];\n\t\t}),\n\t);\n}\n\n// MARK: Documentation Schemas\n// These schemas are JSON-serializable versions used for documentation generation.\n// They exclude runtime-only fields (transforms, custom types, Logger instances).\n\nexport const DocConfigurePoolSchema = z\n\t.object({\n\t\tname: z.string().optional().describe(\"Name of the runner pool.\"),\n\t\turl: z\n\t\t\t.string()\n\t\t\t.describe(\"URL of the serverless platform to configure runners.\"),\n\t\theaders: z\n\t\t\t.record(z.string(), z.string())\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Headers to include in requests to the serverless platform.\",\n\t\t\t),\n\t\trequestLifespan: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\"Maximum lifespan of a request in seconds.\"),\n\t\tdrainGracePeriod: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Grace period before the serverless request is forcibly closed, in seconds.\",\n\t\t\t),\n\t\tmetadata: 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\"Additional metadata to pass to the serverless platform.\",\n\t\t\t),\n\t\tmetadataPollInterval: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Interval in milliseconds between metadata polls from the engine. Defaults to 10000 milliseconds (10 seconds).\",\n\t\t\t),\n\t\tdrainOnVersionUpgrade: z\n\t\t\t.boolean()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Drain runners when a new version is deployed. Defaults to true.\",\n\t\t\t),\n\t})\n\t.optional();\n\nexport const DocServerlessConfigSchema = z\n\t.object({\n\t\tbasePath: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Base path for serverless API routes. Default: '/api/rivet'\",\n\t\t\t),\n\t\tmaxStartPayloadBytes: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t`Maximum POST /start body size in bytes. Default: ${DEFAULT_SERVERLESS_MAX_START_PAYLOAD_BYTES}`,\n\t\t\t),\n\t\tpublicEndpoint: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"The endpoint that clients should connect to. Supports URL auth syntax: https://namespace:token@api.rivet.dev\",\n\t\t\t),\n\t\tpublicToken: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Token that clients should use when connecting via the public endpoint.\",\n\t\t\t),\n\t})\n\t.describe(\"Configuration for serverless deployment mode.\");\n\nexport const DocEnvoyConfigSchema = z\n\t.object({\n\t\ttotalSlots: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\"Total number of actor slots available. Default: 100000\"),\n\t\tpoolName: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\"Name of this envoy pool. Default: 'default'\"),\n\t\tenvoyKey: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\"Deprecated. Authentication key for the envoy.\"),\n\t\tversion: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\"Version number of this envoy. Default: 1\"),\n\t})\n\t.describe(\"Configuration for envoy mode.\");\n\nexport const DocSqliteConfigSchema = z\n\t.object({\n\t\tbackend: SqliteBackendSchema.optional().describe(\n\t\t\t\"SQLite backend to use. Native defaults to local. Wasm defaults to remote and cannot use local.\",\n\t\t),\n\t})\n\t.optional()\n\t.describe(\"SQLite runtime configuration.\");\n\nexport const DocRegistryConfigSchema = z\n\t.object({\n\t\tuse: z\n\t\t\t.record(z.string(), z.unknown())\n\t\t\t.describe(\n\t\t\t\t\"Actor definitions. Keys are actor names, values are actor definitions.\",\n\t\t\t),\n\t\tmaxIncomingMessageSize: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Maximum size of incoming WebSocket messages in bytes. Default: 65536\",\n\t\t\t),\n\t\tmaxOutgoingMessageSize: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Maximum size of outgoing WebSocket messages in bytes. Default: 1048576\",\n\t\t\t),\n\t\tnoWelcome: z\n\t\t\t.boolean()\n\t\t\t.optional()\n\t\t\t.describe(\"Disable the welcome message on startup. Default: false\"),\n\t\tsqlite: DocSqliteConfigSchema,\n\t\tlogging: z\n\t\t\t.object({\n\t\t\t\tlevel: LogLevelSchema.optional().describe(\n\t\t\t\t\t\"Log level for RivetKit. Default: 'warn'\",\n\t\t\t\t),\n\t\t\t})\n\t\t\t.optional()\n\t\t\t.describe(\"Logging configuration.\"),\n\t\tendpoint: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Endpoint URL to connect to Rivet Engine. Supports URL auth syntax: https://namespace:token@api.rivet.dev. Can also be set via RIVET_ENDPOINT environment variable.\",\n\t\t\t),\n\t\ttoken: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Authentication token for Rivet Engine. Can also be set via RIVET_TOKEN environment variable.\",\n\t\t\t),\n\t\tnamespace: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Namespace to use. Default: 'default'. Can also be set via RIVET_NAMESPACE environment variable.\",\n\t\t\t),\n\t\theaders: z\n\t\t\t.record(z.string(), z.string())\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Additional headers to include in requests to Rivet Engine.\",\n\t\t\t),\n\t\tstaticDir: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Directory to serve static files from. When set, registry.start() serves static files alongside the actor API.\",\n\t\t\t),\n\t\thttpBasePath: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\"Base path for the local RivetKit API. Default: '/'\"),\n\t\thttpPort: z\n\t\t\t.number()\n\t\t\t.optional()\n\t\t\t.describe(\"Port to run the local HTTP server on. Default: 6421\"),\n\t\thttpHost: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\"Host to bind the local HTTP server to.\"),\n\t\tstartEngine: z\n\t\t\t.boolean()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Starts the full Rust engine process locally. Default: false\",\n\t\t\t),\n\t\tengineVersion: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"Version of the local engine package to use. Defaults to the current RivetKit version.\",\n\t\t\t),\n\t\tconfigurePool: DocConfigurePoolSchema.describe(\n\t\t\t\"Automatically configure serverless runners in the engine.\",\n\t\t),\n\t\tserverless: DocServerlessConfigSchema.optional(),\n\t\tenvoy: DocEnvoyConfigSchema.optional(),\n\t})\n\t.describe(\"RivetKit registry configuration.\");\n","import { z } from \"zod/v4\";\nimport { getLogger } from \"@/common/log\";\nimport {\n\tisDev,\n\tgetNodeEnv,\n\tgetRivetPool,\n\tgetRivetTotalSlots,\n\tgetRivetEnvoyVersion,\n} from \"@/utils/env-vars\";\n\nlet warnedMissingVersion = false;\n\nexport const EnvoyConfigSchema = z.object({\n\tpoolName: z.string().default(() => getRivetPool() ?? \"default\"),\n\tversion: z.number().default(() => {\n\t\tconst version = getRivetEnvoyVersion();\n\t\tif (version !== undefined) return version;\n\n\t\tif (getNodeEnv() === \"production\" && !warnedMissingVersion) {\n\t\t\twarnedMissingVersion = true;\n\t\t\tgetLogger(\"rivetkit\").error(\n\t\t\t\t\"RIVET_ENVOY_VERSION is not set. Actors will not be versioned, which means they won't be drained on deploy. This is only needed when self-hosting or using a custom envoy (not needed for Rivet Compute). Set this as a build arg in your Dockerfile. See https://rivet.dev/docs/actors/versions\",\n\t\t\t);\n\t\t}\n\n\t\treturn 1;\n\t}),\n\n\t// Deprecated.\n\ttotalSlots: z.number().default(() => getRivetTotalSlots() ?? 100000),\n\tenvoyKey: z.string().optional(),\n});\nexport type EnvoyConfigInput = z.input<typeof EnvoyConfigSchema>;\nexport type EnvoyConfig = z.infer<typeof EnvoyConfigSchema>;\n","import { z } from \"zod/v4\";\nimport { getRivetPublicEndpoint, getRivetPublicToken } from \"@/utils/env-vars\";\n\nexport const DEFAULT_SERVERLESS_MAX_START_PAYLOAD_BYTES = 16 * 1024 * 1024;\n\nexport const ConfigurePoolSchema = z\n\t.object({\n\t\tname: z.string().optional(),\n\t\turl: z.string(),\n\t\theaders: z.record(z.string(), z.string()).optional(),\n\t\trequestLifespan: z.number().optional(),\n\t\tdrainGracePeriod: z.number().optional(),\n\t\tmetadata: z.record(z.string(), z.unknown()).optional(),\n\t\tmetadataPollInterval: z.number().optional(),\n\t\tdrainOnVersionUpgrade: z.boolean().optional(),\n\t})\n\t.optional();\n\nexport const ServerlessConfigSchema = z.object({\n\t// MARK: Routing\n\tbasePath: z.string().optional().default(\"/api/rivet\"),\n\tmaxStartPayloadBytes: z\n\t\t.number()\n\t\t.optional()\n\t\t.default(DEFAULT_SERVERLESS_MAX_START_PAYLOAD_BYTES),\n\n\t// MARK: Public Endpoint Configuration\n\t/**\n\t * The endpoint that clients should connect to.\n\t *\n\t * This is useful if clients connect to serverless directly\n\t * (e.g. `http://localhost:3000/api/rivet`), they will fetch\n\t * `http://localhost:3000/api/rivet/metadata` and be redirected to\n\t * the public endpoint.\n\t *\n\t * Supports URL auth syntax for namespace and token:\n\t * - `https://namespace:token@api.rivet.dev`\n\t * - `https://namespace@api.rivet.dev`\n\t *\n\t * Auto-determined based on endpoint and NODE_ENV if not specified.\n\t *\n\t * Can also be set via RIVET_PUBLIC_ENDPOINT environment variable.\n\t */\n\tpublicEndpoint: z\n\t\t.string()\n\t\t.optional()\n\t\t.transform((val) => val ?? getRivetPublicEndpoint()),\n\n\t/**\n\t * Token that clients should use when connecting via the public endpoint.\n\t *\n\t * Can also be set via RIVET_PUBLIC_TOKEN environment variable.\n\t *\n\t * Can also be specified in the publicEndpoint URL as `https://namespace:token@host`.\n\t */\n\tpublicToken: z\n\t\t.string()\n\t\t.optional()\n\t\t.transform((val) => val ?? getRivetPublicToken()),\n\n\t// There is no publicNamespace config option because the frontend and backend\n\t// cannot use different namespaces. The namespace is extracted from the\n\t// publicEndpoint URL auth syntax if provided.\n});\nexport type ServerlessConfigInput = z.input<typeof ServerlessConfigSchema>;\nexport type ServerlessConfig = z.infer<typeof ServerlessConfigSchema>;\n","import { VirtualWebSocket } from \"@rivetkit/virtual-websocket\";\nimport {\n\tACTOR_CONTEXT_INTERNAL_SYMBOL,\n\tCONN_STATE_MANAGER_SYMBOL,\n\tgetRunFunction,\n\tgetRunInspectorConfig,\n\ttype WorkflowInspectorConfig,\n} from \"@/actor/config\";\nimport type { AnyActorDefinition } from \"@/actor/definition\";\nimport {\n\tdecodeBridgeRivetError,\n\tencodeBridgeRivetError,\n\tforbiddenError,\n\tINTERNAL_ERROR_CODE,\n\tisRivetErrorLike,\n\tRivetError,\n\ttype RivetErrorLike,\n\ttoRivetError,\n} from \"@/actor/errors\";\nimport { makePrefixedKey, removePrefixFromKey } from \"@/actor/keys\";\nimport {\n\tgetEventCanSubscribe,\n\tgetQueueCanPublish,\n\thasSchemaConfigKey,\n} from \"@/actor/schema\";\nimport {\n\ttype AnyClient,\n\ttype Client,\n\tcreateClientWithDriver,\n} from \"@/client/client\";\nimport { convertRegistryConfigToClientConfig } from \"@/client/config\";\nimport { HEADER_CONN_PARAMS } from \"@/common/actor-router-consts\";\nimport type { AnyDatabaseProvider } from \"@/common/database/config\";\nimport { wrapJsNativeDatabase } from \"@/common/database/native-database\";\nimport { decodeWorkflowHistoryTransport } from \"@/common/inspector-transport\";\nimport { deconstructError, stringifyError } from \"@/common/utils\";\nimport type {\n\tRivetCloseEvent,\n\tRivetEvent,\n\tRivetMessageEvent,\n\tUniversalWebSocket,\n} from \"@/common/websocket-interface\";\nimport { RemoteEngineControlClient } from \"@/engine-client/mod\";\nimport type { Registry } from \"@/registry\";\nimport type {\n\tRegistryConfig,\n\tRuntimeKind,\n\tSqliteBackend,\n} from \"@/registry/config\";\nimport {\n\tdecodeCborCompat,\n\tdecodeCborJsonCompat,\n\tencodeCborCompat,\n} from \"@/serde\";\nimport { getEnvUniversal, VERSION } from \"@/utils\";\nimport { logger } from \"./log\";\nimport { loadNapiRuntime } from \"./napi-runtime\";\nimport {\n\ttype NativeValidationConfig,\n\tvalidateActionArgs,\n\tvalidateConnParams,\n\tvalidateEventArgs,\n\tvalidateQueueBody,\n\tvalidateQueueComplete,\n} from \"./native-validation\";\nimport type {\n\tActorContextHandle,\n\tActorFactoryHandle,\n\tCancellationTokenHandle,\n\tConnHandle,\n\tCoreRuntime,\n\tRegistryHandle,\n\tRuntimeActorConfig,\n\tRuntimeBytes,\n\tRuntimeHttpResponse,\n\tRuntimeQueueMessage,\n\tRuntimeServeConfig,\n\tRuntimeStateDeltaPayload,\n\tWebSocketHandle,\n} from \"./runtime\";\nimport { loadWasmRuntime } from \"./wasm-runtime\";\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\ntype ResolvedRuntimeKind = Exclude<RuntimeKind, \"auto\">;\ntype RuntimeHostKind = \"node-like\" | \"edge-like\";\nexport type RuntimeLoaders = {\n\tloadNative: () => ReturnType<typeof loadNapiRuntime>;\n\tloadWasm: (\n\t\tconfig?: RegistryConfig[\"wasm\"],\n\t) => ReturnType<typeof loadWasmRuntime>;\n\tdetectHost: () => RuntimeHostKind;\n};\ntype SerializeStateReason = \"save\" | \"inspector\";\ntype NativeOnStateChangeHandler = (\n\tctx: ActorContextHandleAdapter,\n\tstate: unknown,\n) => void | Promise<void>;\ntype NativePersistConnState = {\n\tstate: unknown;\n};\n\nconst defaultRuntimeLoaders: RuntimeLoaders = {\n\tloadNative: loadNapiRuntime,\n\tloadWasm: loadWasmRuntime,\n\tdetectHost: detectRuntimeHost,\n};\n\nfunction trySetProcessEnv(key: string, value: string) {\n\tif (typeof process === \"undefined\") return;\n\ttry {\n\t\tprocess.env[key] = value;\n\t} catch {\n\t\t// Some edge runtimes expose a read-only Node-compatible process.env.\n\t}\n}\n\nexport function detectRuntimeHost(): RuntimeHostKind {\n\tconst globalScope = globalThis as typeof globalThis & {\n\t\tBun?: unknown;\n\t\tDeno?: unknown;\n\t\tprocess?: { versions?: { node?: string } };\n\t\tself?: unknown;\n\t\twindow?: unknown;\n\t};\n\n\tif (\n\t\tglobalScope.Deno !== undefined ||\n\t\tglobalScope.Bun !== undefined ||\n\t\ttypeof globalScope.process?.versions?.node === \"string\"\n\t) {\n\t\treturn \"node-like\";\n\t}\n\n\treturn \"edge-like\";\n}\n\nexport function resolveRuntimeKind(\n\truntime: RuntimeKind | undefined,\n): RuntimeKind {\n\treturn runtime ?? \"auto\";\n}\n\nfunction loadedRuntimeKind(runtime: CoreRuntime): ResolvedRuntimeKind {\n\tswitch (runtime.kind) {\n\t\tcase \"napi\":\n\t\t\treturn \"native\";\n\t\tcase \"wasm\":\n\t\t\treturn \"wasm\";\n\t}\n\n\tthrow new RivetError(\n\t\t\"config\",\n\t\t\"unknown_runtime\",\n\t\t\"RivetKit runtime must be NAPI or wasm.\",\n\t\t{\n\t\t\tpublic: true,\n\t\t\tstatusCode: 500,\n\t\t},\n\t);\n}\n\nexport async function loadAutoRuntime(\n\tconfig: RegistryConfig,\n\tloaders: RuntimeLoaders = defaultRuntimeLoaders,\n): Promise<CoreRuntime> {\n\tif (loaders.detectHost() === \"edge-like\") {\n\t\treturn (await loaders.loadWasm(config.wasm)).runtime;\n\t}\n\n\ttry {\n\t\treturn (await loaders.loadNative()).runtime;\n\t} catch {\n\t\treturn (await loaders.loadWasm(config.wasm)).runtime;\n\t}\n}\n\nexport async function loadConfiguredRuntime(\n\tconfig: RegistryConfig,\n\tloaders: RuntimeLoaders = defaultRuntimeLoaders,\n): Promise<CoreRuntime> {\n\tconst requested = resolveRuntimeKind(config.runtime);\n\n\tif (requested === \"native\") {\n\t\treturn (await loaders.loadNative()).runtime;\n\t}\n\n\tif (requested === \"wasm\") {\n\t\treturn (await loaders.loadWasm(config.wasm)).runtime;\n\t}\n\n\treturn loadAutoRuntime(config, loaders);\n}\n\nfunction sqliteBackendForConfig(\n\tconfig: RegistryConfig,\n): SqliteBackend | undefined {\n\treturn config.sqlite?.backend ?? config.test?.sqliteBackend;\n}\n\nexport function normalizeRuntimeConfigForKind(\n\tconfig: RegistryConfig,\n\truntimeKind: ResolvedRuntimeKind,\n): RegistryConfig {\n\tif (runtimeKind === \"native\") {\n\t\treturn config;\n\t}\n\n\tif (sqliteBackendForConfig(config) === \"local\") {\n\t\tthrow new RivetError(\n\t\t\t\"config\",\n\t\t\t\"wasm_local_sqlite\",\n\t\t\t\"WebAssembly runtime cannot use local SQLite. Use remote SQLite instead.\",\n\t\t\t{\n\t\t\t\tpublic: true,\n\t\t\t\tstatusCode: 400,\n\t\t\t\tmetadata: { runtime: \"wasm\", sqliteBackend: \"local\" },\n\t\t\t},\n\t\t);\n\t}\n\n\treturn {\n\t\t...config,\n\t\tsqlite: {\n\t\t\t...config.sqlite,\n\t\t\tbackend: \"remote\",\n\t\t},\n\t\ttest: {\n\t\t\t...config.test,\n\t\t\tenabled: config.test?.enabled ?? false,\n\t\t\tsqliteBackend: \"remote\",\n\t\t},\n\t};\n}\n\nexport function normalizeRuntimeConfig(\n\tconfig: RegistryConfig,\n\truntime: CoreRuntime,\n): RegistryConfig {\n\treturn normalizeRuntimeConfigForKind(config, loadedRuntimeKind(runtime));\n}\ntype NativePersistActorState = {\n\tstate: unknown;\n\tisInOnStateChange: boolean;\n\tconnStates: Map<string, NativePersistConnState>;\n};\ntype NativeDestroyGate = {\n\tdestroyCompletion?: Promise<void>;\n\tresolveDestroy?: () => void;\n};\ntype NativeDatabaseClientState = {\n\tclient: unknown;\n};\ntype NativeActorRuntimeState = {\n\tsql?: ReturnType<typeof wrapJsNativeDatabase>;\n\tdatabaseClient?: NativeDatabaseClientState;\n\tvarsInitialized?: boolean;\n\tvars?: unknown;\n\tdestroyGate?: NativeDestroyGate;\n\tpersistState?: NativePersistActorState;\n};\n\n// Keep JS-only actor caches on the NAPI ActorContext runtime-state bag instead\n// of actorId-keyed module globals so same-key recreates start from a fresh\n// generation.\nfunction getNativeRuntimeState(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n): NativeActorRuntimeState {\n\tconst runtimeState = callNativeSync(() =>\n\t\truntime.actorRuntimeState(ctx),\n\t) as NativeActorRuntimeState;\n\tif (!runtimeState.destroyGate) {\n\t\truntimeState.destroyGate = {};\n\t}\n\tif (!runtimeState.persistState) {\n\t\truntimeState.persistState = {\n\t\t\tstate: undefined,\n\t\t\tisInOnStateChange: false,\n\t\t\tconnStates: new Map(),\n\t\t};\n\t}\n\treturn runtimeState;\n}\n\nfunction getNativePersistState(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n): NativePersistActorState {\n\tconst persistState = getNativeRuntimeState(runtime, ctx).persistState;\n\tif (!persistState) {\n\t\tthrow new Error(\"native persist state was not initialized\");\n\t}\n\treturn persistState;\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<void> {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"then\" in value &&\n\t\ttypeof value.then === \"function\"\n\t);\n}\n\nfunction getNativeConnPersistState(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n\tconn: ConnHandle,\n): NativePersistConnState {\n\tconst persistState = getNativePersistState(runtime, ctx);\n\tconst connId = callNativeSync(() => runtime.connId(conn));\n\tlet connState = persistState.connStates.get(connId);\n\tif (!connState) {\n\t\tconnState = {\n\t\t\tstate: undefined,\n\t\t};\n\t\tpersistState.connStates.set(connId, connState);\n\t}\n\treturn connState;\n}\n\nfunction stateMutationReentrantError(): RivetError {\n\treturn new RivetError(\n\t\t\"actor\",\n\t\t\"state_mutation_reentrant\",\n\t\t\"State mutations are not allowed inside onStateChange.\",\n\t);\n}\n\nfunction databaseNotConfiguredError(): RivetError {\n\treturn new RivetError(\n\t\t\"actor\",\n\t\t\"database_not_configured\",\n\t\t\"database is not configured for this actor\",\n\t\t{ public: true },\n\t);\n}\n\nfunction stateNotEnabledError(): RivetError {\n\treturn new RivetError(\n\t\t\"actor\",\n\t\t\"state_not_enabled\",\n\t\t\"State not enabled. Must implement `createState` or `state` to use state. (https://www.rivet.dev/docs/actors/state/#initializing-state)\",\n\t\t{ public: true },\n\t);\n}\n\nfunction nativeClientNotConfiguredError(): RivetError {\n\treturn new RivetError(\n\t\t\"native\",\n\t\t\"client_not_configured\",\n\t\t\"native actor client is not configured\",\n\t\t{ public: true },\n\t);\n}\n\nfunction nativeEndpointNotConfiguredError(): RivetError {\n\treturn new RivetError(\n\t\t\"native\",\n\t\t\"endpoint_not_configured\",\n\t\t\"registry endpoint is required for native envoy startup\",\n\t\t{ public: true },\n\t);\n}\n\nfunction getNativeDestroyGate(runtime: CoreRuntime, ctx: ActorContextHandle) {\n\tconst destroyGate = getNativeRuntimeState(runtime, ctx).destroyGate;\n\tif (!destroyGate) {\n\t\tthrow new Error(\"native destroy gate was not initialized\");\n\t}\n\treturn destroyGate;\n}\n\nfunction markNativeDestroyRequested(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n) {\n\tconst gate = getNativeDestroyGate(runtime, ctx);\n\tif (!gate.destroyCompletion) {\n\t\tgate.destroyCompletion = new Promise<void>((resolve) => {\n\t\t\tgate.resolveDestroy = resolve;\n\t\t});\n\t}\n}\n\nfunction resolveNativeDestroy(runtime: CoreRuntime, ctx: ActorContextHandle) {\n\tconst gate = getNativeRuntimeState(runtime, ctx).destroyGate;\n\tif (!gate?.resolveDestroy) {\n\t\treturn;\n\t}\n\n\tgate.resolveDestroy();\n\tgate.resolveDestroy = undefined;\n\tgate.destroyCompletion = undefined;\n}\n\nfunction clearNativeRuntimeState(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n) {\n\tcallNativeSync(() => runtime.actorClearRuntimeState(ctx));\n}\n\nasync function cleanupNativeSleepRuntimeState(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n): Promise<void> {\n\tawait runtime.actorWaitForTrackedShutdownWork(ctx);\n\tawait closeNativeDatabaseClient(runtime, ctx);\n\tawait closeNativeSqlDatabase(runtime, ctx);\n\tclearNativeRuntimeState(runtime, ctx);\n}\n\nfunction closeNativeSqlDatabase(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n): Promise<void> | undefined {\n\tconst runtimeState = getNativeRuntimeState(runtime, ctx);\n\tconst database = runtimeState.sql;\n\tif (!database) {\n\t\treturn;\n\t}\n\n\truntimeState.sql = undefined;\n\treturn database.close();\n}\n\nasync function closeNativeDatabaseClient(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n): Promise<void> {\n\tconst runtimeState = getNativeRuntimeState(runtime, ctx);\n\tconst entry = runtimeState.databaseClient;\n\tif (!entry) {\n\t\treturn;\n\t}\n\n\truntimeState.databaseClient = undefined;\n\n\tif (\n\t\tentry.client &&\n\t\ttypeof entry.client === \"object\" &&\n\t\t\"close\" in entry.client &&\n\t\ttypeof entry.client.close === \"function\"\n\t) {\n\t\tawait entry.client.close();\n\t}\n}\n\nfunction getOrCreateNativeSqlDatabase(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n): ReturnType<typeof wrapJsNativeDatabase> {\n\tconst runtimeState = getNativeRuntimeState(runtime, ctx);\n\tconst cachedDatabase = runtimeState.sql;\n\tif (cachedDatabase) {\n\t\treturn cachedDatabase;\n\t}\n\n\tconst database = wrapJsNativeDatabase({\n\t\texec: (sql) => runtime.actorSqlExec(ctx, sql),\n\t\texecute: (sql, params) => runtime.actorSqlExecute(ctx, sql, params),\n\t\tquery: (sql, params) => runtime.actorSqlQuery(ctx, sql, params),\n\t\trun: (sql, params) => runtime.actorSqlRun(ctx, sql, params),\n\t\tmetrics: () => runtime.actorSqlMetrics(ctx),\n\t\ttakeLastKvError: () => runtime.actorSqlTakeLastKvError(ctx),\n\t\tclose: () => runtime.actorSqlClose(ctx),\n\t});\n\truntimeState.sql = database;\n\treturn database;\n}\n\nfunction toRuntimeBytes(\n\tvalue: string | Uint8Array | ArrayBuffer,\n): RuntimeBytes {\n\tif (typeof value === \"string\") {\n\t\treturn textEncoder.encode(value);\n\t}\n\tif (value instanceof Uint8Array) {\n\t\treturn value;\n\t}\n\treturn new Uint8Array(value);\n}\n\nfunction arrayBufferViewToRuntimeBytes(value: ArrayBufferView): RuntimeBytes {\n\treturn new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n}\n\nfunction runtimeBytesToArrayBuffer(value: RuntimeBytes): ArrayBuffer {\n\treturn value.buffer.slice(\n\t\tvalue.byteOffset,\n\t\tvalue.byteOffset + value.byteLength,\n\t) as ArrayBuffer;\n}\n\ntype NativeKvValueType = \"text\" | \"arrayBuffer\" | \"binary\";\ntype NativeKvKeyType = \"text\" | \"binary\";\n\ntype NativeKvValueTypeMap = {\n\ttext: string;\n\tarrayBuffer: ArrayBuffer;\n\tbinary: Uint8Array;\n};\n\ntype NativeKvKeyTypeMap = {\n\ttext: string;\n\tbinary: Uint8Array;\n};\n\ntype NativeKvValueOptions<T extends NativeKvValueType = \"text\"> = {\n\ttype?: T;\n};\n\ntype NativeKvListOptions<\n\tT extends NativeKvValueType = \"text\",\n\tK extends NativeKvKeyType = \"text\",\n> = NativeKvValueOptions<T> & {\n\tkeyType?: K;\n\treverse?: boolean;\n\tlimit?: number;\n};\n\nfunction decodeNativeKvKey<K extends NativeKvKeyType = \"text\">(\n\tkey: Uint8Array,\n\tkeyType?: K,\n): NativeKvKeyTypeMap[K] {\n\tconst resolvedKeyType = keyType ?? \"text\";\n\tswitch (resolvedKeyType) {\n\t\tcase \"text\":\n\t\t\treturn textDecoder.decode(key) as NativeKvKeyTypeMap[K];\n\t\tcase \"binary\":\n\t\t\treturn key as NativeKvKeyTypeMap[K];\n\t\tdefault:\n\t\t\tthrow new TypeError(\"Invalid kv key type\");\n\t}\n}\n\nfunction encodeNativeKvUserKey<K extends NativeKvKeyType = NativeKvKeyType>(\n\tkey: NativeKvKeyTypeMap[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 decodeNativeKvValue<T extends NativeKvValueType = \"text\">(\n\tvalue: Uint8Array,\n\toptions?: NativeKvValueOptions<T>,\n): NativeKvValueTypeMap[T] {\n\tconst type = options?.type ?? \"text\";\n\tswitch (type) {\n\t\tcase \"text\":\n\t\t\treturn textDecoder.decode(value) as NativeKvValueTypeMap[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 NativeKvValueTypeMap[T];\n\t\t}\n\t\tcase \"binary\":\n\t\t\treturn value as NativeKvValueTypeMap[T];\n\t\tdefault:\n\t\t\tthrow new TypeError(\"Invalid kv value type\");\n\t}\n}\n\nasync function loadEngineCli(): Promise<typeof import(\"@rivetkit/engine-cli\")> {\n\treturn import([\"@rivetkit\", \"engine-cli\"].join(\"/\"));\n}\n\nfunction decodeValue<T>(value?: RuntimeBytes | null): T {\n\tif (!value || value.length === 0) {\n\t\treturn undefined as T;\n\t}\n\n\treturn decodeCborJsonCompat(value);\n}\n\nfunction encodeValue(value: unknown): RuntimeBytes {\n\treturn encodeCborCompat(value);\n}\n\nfunction unwrapTsfnPayload<T>(error: unknown, payload: T): T {\n\tif (error !== null && error !== undefined) {\n\t\tthrow error;\n\t}\n\n\treturn payload;\n}\n\nfunction normalizeNativeBridgeError(error: unknown): unknown {\n\tif (typeof error === \"string\") {\n\t\treturn decodeBridgeRivetError(error) ?? error;\n\t}\n\n\tif (error instanceof Error) {\n\t\tconst bridged = decodeBridgeRivetError(error.message);\n\t\tif (bridged) {\n\t\t\treturn bridged;\n\t\t}\n\t}\n\n\tif (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"reason\" in error &&\n\t\ttypeof error.reason === \"string\"\n\t) {\n\t\tconst bridged = decodeBridgeRivetError(error.reason);\n\t\tif (bridged) {\n\t\t\treturn bridged;\n\t\t}\n\t}\n\n\treturn error;\n}\n\nfunction isStructuredBridgeError(\n\terror: unknown,\n): error is RivetError | RivetErrorLike {\n\tif (error instanceof RivetError) {\n\t\treturn true;\n\t}\n\n\treturn (\n\t\tisRivetErrorLike(error) &&\n\t\t\"__type\" in error &&\n\t\t(error.__type === \"RivetError\" || error.__type === \"ActorError\")\n\t);\n}\n\nfunction encodeNativeCallbackError(error: unknown): Error {\n\tconst structuredError = isStructuredBridgeError(error)\n\t\t? error\n\t\t: deconstructError(error, true);\n\n\tconst bridgeError = new Error(encodeBridgeRivetError(structuredError), {\n\t\tcause: error instanceof Error ? error : undefined,\n\t});\n\treturn Object.assign(bridgeError, {\n\t\tgroup: structuredError.group,\n\t\tcode: structuredError.code,\n\t\tmetadata: structuredError.metadata,\n\t});\n}\n\nasync function callNative<T>(invoke: () => Promise<T>): Promise<T> {\n\ttry {\n\t\treturn await invoke();\n\t} catch (error) {\n\t\tthrow normalizeNativeBridgeError(error);\n\t}\n}\n\nfunction callNativeSync<T>(invoke: () => T): T {\n\ttry {\n\t\treturn invoke();\n\t} catch (error) {\n\t\tthrow normalizeNativeBridgeError(error);\n\t}\n}\n\nfunction actorAbortedError(): Error & { group: string; code: string } {\n\treturn Object.assign(new Error(\"Actor aborted\"), {\n\t\tgroup: \"actor\",\n\t\tcode: \"aborted\",\n\t});\n}\n\ntype NativeWorkflowInspectorConfig = WorkflowInspectorConfig<ArrayBuffer> & {\n\tgetState?: () => Promise<unknown> | unknown;\n};\n\nfunction isClosedTaskRegistrationError(error: unknown): boolean {\n\tconst metadata = error instanceof RivetError ? error.metadata : undefined;\n\tconst metadataError =\n\t\tmetadata && typeof metadata === \"object\" && \"error\" in metadata\n\t\t\t? metadata.error\n\t\t\t: undefined;\n\treturn (\n\t\terror instanceof RivetError &&\n\t\terror.group === \"core\" &&\n\t\terror.code === INTERNAL_ERROR_CODE &&\n\t\ttypeof metadataError === \"string\" &&\n\t\t/actor task registration is (closed|not configured)/.test(metadataError)\n\t);\n}\n\nasync function createCancellationTokenHandle(\n\truntime: CoreRuntime,\n\tsignal?: AbortSignal,\n): Promise<{\n\ttoken?: CancellationTokenHandle;\n\tcleanup?: () => void;\n}> {\n\tif (!signal) {\n\t\treturn {};\n\t}\n\n\tconst token = runtime.createCancellationToken();\n\n\tif (signal.aborted) {\n\t\truntime.cancelCancellationToken(token);\n\t\treturn { token };\n\t}\n\n\tconst abort = () => runtime.cancelCancellationToken(token);\n\tsignal.addEventListener(\"abort\", abort, { once: true });\n\treturn {\n\t\ttoken,\n\t\tcleanup: () => signal.removeEventListener(\"abort\", abort),\n\t};\n}\n\nfunction decodeWorkflowCbor(data: ArrayBuffer | null): unknown | null {\n\tif (data === null) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\treturn decodeCborCompat(new Uint8Array(data));\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction serializeWorkflowLocation(\n\tlocation: ReturnType<\n\t\ttypeof decodeWorkflowHistoryTransport\n\t>[\"entries\"][number][\"location\"],\n): Array<\n\t| { tag: \"WorkflowNameIndex\"; val: number }\n\t| {\n\t\t\ttag: \"WorkflowLoopIterationMarker\";\n\t\t\tval: { loop: number; iteration: number };\n\t }\n> {\n\treturn location.map((segment) => {\n\t\tif (segment.tag === \"WorkflowNameIndex\") {\n\t\t\treturn {\n\t\t\t\ttag: segment.tag,\n\t\t\t\tval: segment.val,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\ttag: segment.tag,\n\t\t\tval: {\n\t\t\t\tloop: segment.val.loop,\n\t\t\t\titeration: segment.val.iteration,\n\t\t\t},\n\t\t};\n\t});\n}\n\nfunction serializeWorkflowBranches(\n\tbranches: ReadonlyMap<\n\t\tstring,\n\t\tReturnType<\n\t\t\ttypeof decodeWorkflowHistoryTransport\n\t\t>[\"entries\"][number][\"kind\"] extends infer T\n\t\t\t? T extends { tag: \"WorkflowJoinEntry\"; val: { branches: infer B } }\n\t\t\t\t? B extends ReadonlyMap<string, infer V>\n\t\t\t\t\t? V\n\t\t\t\t\t: never\n\t\t\t\t: T extends {\n\t\t\t\t\t\t\ttag: \"WorkflowRaceEntry\";\n\t\t\t\t\t\t\tval: { branches: infer B };\n\t\t\t\t\t\t}\n\t\t\t\t\t? B extends ReadonlyMap<string, infer V>\n\t\t\t\t\t\t? V\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t: never\n\t>,\n): Record<\n\tstring,\n\t{ status: string; output: unknown | null; error: string | null }\n> {\n\treturn Object.fromEntries(\n\t\tArray.from(branches.entries()).map(([name, branch]) => [\n\t\t\tname,\n\t\t\t{\n\t\t\t\tstatus: branch.status,\n\t\t\t\toutput: decodeWorkflowCbor(branch.output),\n\t\t\t\terror: branch.error,\n\t\t\t},\n\t\t]),\n\t);\n}\n\nfunction serializeWorkflowEntryKind(\n\tkind: ReturnType<\n\t\ttypeof decodeWorkflowHistoryTransport\n\t>[\"entries\"][number][\"kind\"],\n):\n\t| {\n\t\t\ttag: \"WorkflowStepEntry\";\n\t\t\tval: { output: unknown | null; error: string | null };\n\t }\n\t| {\n\t\t\ttag: \"WorkflowLoopEntry\";\n\t\t\tval: {\n\t\t\t\tstate: unknown | null;\n\t\t\t\titeration: number;\n\t\t\t\toutput: unknown | null;\n\t\t\t};\n\t }\n\t| { tag: \"WorkflowSleepEntry\"; val: { deadline: number; state: string } }\n\t| {\n\t\t\ttag: \"WorkflowMessageEntry\";\n\t\t\tval: { name: string; messageData: unknown | null };\n\t }\n\t| { tag: \"WorkflowRollbackCheckpointEntry\"; val: { name: string } }\n\t| {\n\t\t\ttag: \"WorkflowJoinEntry\";\n\t\t\tval: {\n\t\t\t\tbranches: Record<\n\t\t\t\t\tstring,\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: string;\n\t\t\t\t\t\toutput: unknown | null;\n\t\t\t\t\t\terror: string | null;\n\t\t\t\t\t}\n\t\t\t\t>;\n\t\t\t};\n\t }\n\t| {\n\t\t\ttag: \"WorkflowRaceEntry\";\n\t\t\tval: {\n\t\t\t\twinner: string | null;\n\t\t\t\tbranches: Record<\n\t\t\t\t\tstring,\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: string;\n\t\t\t\t\t\toutput: unknown | null;\n\t\t\t\t\t\terror: string | null;\n\t\t\t\t\t}\n\t\t\t\t>;\n\t\t\t};\n\t }\n\t| {\n\t\t\ttag: \"WorkflowRemovedEntry\";\n\t\t\tval: { originalType: string; originalName: string | null };\n\t } {\n\tswitch (kind.tag) {\n\t\tcase \"WorkflowStepEntry\":\n\t\t\treturn {\n\t\t\t\ttag: kind.tag,\n\t\t\t\tval: {\n\t\t\t\t\toutput: decodeWorkflowCbor(kind.val.output),\n\t\t\t\t\terror: kind.val.error,\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"WorkflowLoopEntry\":\n\t\t\treturn {\n\t\t\t\ttag: kind.tag,\n\t\t\t\tval: {\n\t\t\t\t\tstate: decodeWorkflowCbor(kind.val.state),\n\t\t\t\t\titeration: kind.val.iteration,\n\t\t\t\t\toutput: decodeWorkflowCbor(kind.val.output),\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"WorkflowSleepEntry\":\n\t\t\treturn {\n\t\t\t\ttag: kind.tag,\n\t\t\t\tval: {\n\t\t\t\t\tdeadline: Number(kind.val.deadline),\n\t\t\t\t\tstate: kind.val.state,\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"WorkflowMessageEntry\":\n\t\t\treturn {\n\t\t\t\ttag: kind.tag,\n\t\t\t\tval: {\n\t\t\t\t\tname: kind.val.name,\n\t\t\t\t\tmessageData: decodeWorkflowCbor(kind.val.messageData),\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"WorkflowRollbackCheckpointEntry\":\n\t\t\treturn {\n\t\t\t\ttag: kind.tag,\n\t\t\t\tval: {\n\t\t\t\t\tname: kind.val.name,\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"WorkflowJoinEntry\":\n\t\t\treturn {\n\t\t\t\ttag: kind.tag,\n\t\t\t\tval: {\n\t\t\t\t\tbranches: serializeWorkflowBranches(kind.val.branches),\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"WorkflowRaceEntry\":\n\t\t\treturn {\n\t\t\t\ttag: kind.tag,\n\t\t\t\tval: {\n\t\t\t\t\twinner: kind.val.winner,\n\t\t\t\t\tbranches: serializeWorkflowBranches(kind.val.branches),\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"WorkflowRemovedEntry\":\n\t\t\treturn {\n\t\t\t\ttag: kind.tag,\n\t\t\t\tval: {\n\t\t\t\t\toriginalType: kind.val.originalType,\n\t\t\t\t\toriginalName: kind.val.originalName,\n\t\t\t\t},\n\t\t\t};\n\t}\n}\n\nfunction serializeWorkflowHistoryForJson(data: ArrayBuffer | null): {\n\tnameRegistry: string[];\n\tentries: Array<{\n\t\tid: string;\n\t\tlocation: Array<\n\t\t\t| { tag: \"WorkflowNameIndex\"; val: number }\n\t\t\t| {\n\t\t\t\t\ttag: \"WorkflowLoopIterationMarker\";\n\t\t\t\t\tval: { loop: number; iteration: number };\n\t\t\t }\n\t\t>;\n\t\tkind: ReturnType<typeof serializeWorkflowEntryKind>;\n\t}>;\n\tentryMetadata: Record<\n\t\tstring,\n\t\t{\n\t\t\tstatus: string;\n\t\t\terror: string | null;\n\t\t\tattempts: number;\n\t\t\tlastAttemptAt: number;\n\t\t\tcreatedAt: number;\n\t\t\tcompletedAt: number | null;\n\t\t\trollbackCompletedAt: number | null;\n\t\t\trollbackError: string | null;\n\t\t}\n\t>;\n} | null {\n\tif (data === null) {\n\t\treturn null;\n\t}\n\n\tconst history = decodeWorkflowHistoryTransport(data);\n\n\treturn {\n\t\tnameRegistry: [...history.nameRegistry],\n\t\tentries: history.entries.map((entry) => ({\n\t\t\tid: entry.id,\n\t\t\tlocation: serializeWorkflowLocation(entry.location),\n\t\t\tkind: serializeWorkflowEntryKind(entry.kind),\n\t\t})),\n\t\tentryMetadata: Object.fromEntries(\n\t\t\tArray.from(history.entryMetadata.entries()).map(\n\t\t\t\t([entryId, meta]) => [\n\t\t\t\t\tentryId,\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: meta.status,\n\t\t\t\t\t\terror: meta.error,\n\t\t\t\t\t\tattempts: meta.attempts,\n\t\t\t\t\t\tlastAttemptAt: Number(meta.lastAttemptAt),\n\t\t\t\t\t\tcreatedAt: Number(meta.createdAt),\n\t\t\t\t\t\tcompletedAt:\n\t\t\t\t\t\t\tmeta.completedAt === null\n\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t: Number(meta.completedAt),\n\t\t\t\t\t\trollbackCompletedAt:\n\t\t\t\t\t\t\tmeta.rollbackCompletedAt === null\n\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t: Number(meta.rollbackCompletedAt),\n\t\t\t\t\t\trollbackError: meta.rollbackError,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t),\n\t\t),\n\t};\n}\n\nfunction toHttpJsonCompatible<T>(value: T): T {\n\treturn JSON.parse(\n\t\tJSON.stringify(value, (_key, nestedValue) =>\n\t\t\ttypeof nestedValue === \"bigint\"\n\t\t\t\t? Number(nestedValue)\n\t\t\t\t: nestedValue instanceof Uint8Array\n\t\t\t\t\t? Array.from(nestedValue)\n\t\t\t\t\t: nestedValue,\n\t\t),\n\t) as T;\n}\n\nfunction jsonSafe<T>(value: T): T {\n\treturn toHttpJsonCompatible(value);\n}\n\nfunction normalizeSqlitePropertyBindings(\n\tproperties: Record<string, unknown>,\n): Record<string, unknown> {\n\tconst normalized: Record<string, unknown> = {};\n\tfor (const [key, value] of Object.entries(properties)) {\n\t\tif (/^[:@$]/.test(key)) {\n\t\t\tnormalized[key] = value;\n\t\t\tcontinue;\n\t\t}\n\n\t\tnormalized[`:${key}`] = value;\n\t\tnormalized[`@${key}`] = value;\n\t\tnormalized[`$${key}`] = value;\n\t}\n\treturn normalized;\n}\n\nfunction queryRows(result: unknown): Array<Record<string, unknown>> {\n\tif (Array.isArray(result)) {\n\t\treturn result as Array<Record<string, unknown>>;\n\t}\n\tif (\n\t\tresult &&\n\t\ttypeof result === \"object\" &&\n\t\t\"columns\" in result &&\n\t\t\"rows\" in result &&\n\t\tArray.isArray((result as { columns: unknown }).columns) &&\n\t\tArray.isArray((result as { rows: unknown }).rows)\n\t) {\n\t\tconst columns = (result as { columns: string[] }).columns;\n\t\treturn ((result as { rows: unknown[][] }).rows ?? []).map((row) =>\n\t\t\tObject.fromEntries(\n\t\t\t\tcolumns.map((column, index) => [column, row[index]]),\n\t\t\t),\n\t\t);\n\t}\n\treturn [];\n}\n\nfunction wrapNativeCallback<Args extends Array<unknown>, Result>(\n\tcallback: (...args: Args) => Result | Promise<Result>,\n): (...args: Args) => Promise<Result> {\n\treturn async (...args: Args) => {\n\t\ttry {\n\t\t\treturn await callback(...args);\n\t\t} catch (error) {\n\t\t\tthrow encodeNativeCallbackError(error);\n\t\t}\n\t};\n}\n\nfunction decodeArgs(value?: RuntimeBytes | null): unknown[] {\n\tconst decoded = decodeValue<unknown>(value);\n\treturn Array.isArray(decoded)\n\t\t? decoded\n\t\t: decoded === undefined\n\t\t\t? []\n\t\t\t: [decoded];\n}\n\nfunction createWriteThroughProxy<T>(\n\tvalue: T,\n\tcommit: (next: T) => void,\n\tbeforeChange?: () => void,\n): T {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn value;\n\t}\n\n\tconst proxies = new WeakMap<object, object>();\n\tconst wrap = (target: object): object => {\n\t\tconst cached = proxies.get(target);\n\t\tif (cached) {\n\t\t\treturn cached;\n\t\t}\n\n\t\tconst proxy = new Proxy(target, {\n\t\t\tget(innerTarget, property, receiver) {\n\t\t\t\tconst result = Reflect.get(innerTarget, property, receiver);\n\t\t\t\treturn result && typeof result === \"object\"\n\t\t\t\t\t? wrap(result as object)\n\t\t\t\t\t: result;\n\t\t\t},\n\t\t\tset(innerTarget, property, nextValue, receiver) {\n\t\t\t\tbeforeChange?.();\n\t\t\t\tconst updated = Reflect.set(\n\t\t\t\t\tinnerTarget,\n\t\t\t\t\tproperty,\n\t\t\t\t\tnextValue,\n\t\t\t\t\treceiver,\n\t\t\t\t);\n\t\t\t\tcommit(value);\n\t\t\t\treturn updated;\n\t\t\t},\n\t\t\tdeleteProperty(innerTarget, property) {\n\t\t\t\tbeforeChange?.();\n\t\t\t\tconst updated = Reflect.deleteProperty(innerTarget, property);\n\t\t\t\tcommit(value);\n\t\t\t\treturn updated;\n\t\t\t},\n\t\t});\n\n\t\tproxies.set(target, proxy);\n\t\treturn proxy;\n\t};\n\n\treturn wrap(value as object) as T;\n}\n\nfunction buildRequest(init: {\n\tmethod: string;\n\turi: string;\n\theaders?: Record<string, string>;\n\tbody?: RuntimeBytes;\n}): Request {\n\tconst url = init.uri.startsWith(\"http\")\n\t\t? init.uri\n\t\t: new URL(init.uri, \"http://127.0.0.1\").toString();\n\tconst body =\n\t\tinit.body && init.body.length > 0\n\t\t\t? runtimeBytesToArrayBuffer(init.body)\n\t\t\t: undefined;\n\treturn new Request(url, {\n\t\tmethod: init.method,\n\t\theaders: init.headers,\n\t\tbody,\n\t});\n}\n\nasync function toRuntimeHttpResponse(\n\tresponse: Response,\n): Promise<RuntimeHttpResponse> {\n\tconst headers = Object.fromEntries(response.headers.entries());\n\tconst body = new Uint8Array(await response.arrayBuffer());\n\treturn {\n\t\tstatus: response.status,\n\t\theaders,\n\t\tbody,\n\t};\n}\n\nfunction toActorKey(\n\tsegments: Array<{\n\t\tkind: string;\n\t\tstringValue?: string;\n\t\tnumberValue?: number;\n\t}>,\n): string[] {\n\treturn segments.map((segment) =>\n\t\tsegment.kind === \"number\"\n\t\t\t? String(segment.numberValue ?? 0)\n\t\t\t: (segment.stringValue ?? \"\"),\n\t);\n}\n\nclass NativeConnAdapter {\n\t#runtime: CoreRuntime;\n\t#conn: ConnHandle;\n\t#schemas: NativeValidationConfig;\n\t#ctx?: ActorContextHandle;\n\t#queueHibernationRemoval?: (connId: string) => void;\n\n\tconstructor(\n\t\truntime: CoreRuntime,\n\t\tconn: ConnHandle,\n\t\tschemas: NativeValidationConfig = {},\n\t\tctx?: ActorContextHandle,\n\t\tqueueHibernationRemoval?: (connId: string) => void,\n\t) {\n\t\tthis.#runtime = runtime;\n\t\tthis.#conn = conn;\n\t\tthis.#schemas = schemas;\n\t\tthis.#ctx = ctx;\n\t\tthis.#queueHibernationRemoval = queueHibernationRemoval;\n\t\t(\n\t\t\tthis as NativeConnAdapter & {\n\t\t\t\t[CONN_STATE_MANAGER_SYMBOL]?: unknown;\n\t\t\t}\n\t\t)[CONN_STATE_MANAGER_SYMBOL] = {\n\t\t\tstateEnabled: true,\n\t\t\tget state() {\n\t\t\t\treturn thisConn.state;\n\t\t\t},\n\t\t};\n\t\tconst thisConn = this;\n\t}\n\n\tget id(): string {\n\t\treturn this.#runtime.connId(this.#conn);\n\t}\n\n\tget params(): unknown {\n\t\treturn validateConnParams(\n\t\t\tthis.#schemas.connParamsSchema,\n\t\t\tdecodeValue(this.#runtime.connParams(this.#conn)),\n\t\t);\n\t}\n\n\tget state(): unknown {\n\t\tconst nextState = this.#readState();\n\t\treturn createWriteThroughProxy(nextState, (nextValue) => {\n\t\t\tthis.#writeState(nextValue, { writeNative: true });\n\t\t});\n\t}\n\n\tset state(value: unknown) {\n\t\tthis.#writeState(value, { writeNative: true });\n\t}\n\n\tinitializeState(value: unknown): void {\n\t\tthis.#writeState(value, { writeNative: false });\n\t}\n\n\tget isHibernatable(): boolean {\n\t\treturn callNativeSync(() =>\n\t\t\tthis.#runtime.connIsHibernatable(this.#conn),\n\t\t);\n\t}\n\n\tsend(name: string, ...args: unknown[]): void {\n\t\tconst validatedArgs = validateEventArgs(\n\t\t\tthis.#schemas.events,\n\t\t\tname,\n\t\t\targs,\n\t\t);\n\t\tcallNativeSync(() =>\n\t\t\tthis.#runtime.connSend(\n\t\t\t\tthis.#conn,\n\t\t\t\tname,\n\t\t\t\tencodeValue(validatedArgs),\n\t\t\t),\n\t\t);\n\t}\n\n\tasync disconnect(reason?: string): Promise<void> {\n\t\tconst connId = this.id;\n\t\tawait callNative(() =>\n\t\t\tthis.#runtime.connDisconnect(this.#conn, reason),\n\t\t);\n\t\tif (this.isHibernatable) {\n\t\t\tthis.#queueHibernationRemoval?.(connId);\n\t\t}\n\t}\n\n\t#readState(): unknown {\n\t\tif (!this.#ctx) {\n\t\t\treturn decodeValue(this.#runtime.connState(this.#conn));\n\t\t}\n\n\t\tconst connState = getNativeConnPersistState(\n\t\t\tthis.#runtime,\n\t\t\tthis.#ctx,\n\t\t\tthis.#conn,\n\t\t);\n\t\tif (connState.state === undefined) {\n\t\t\tconnState.state = decodeValue(this.#runtime.connState(this.#conn));\n\t\t}\n\t\treturn connState.state;\n\t}\n\n\t#writeState(\n\t\tvalue: unknown,\n\t\toptions: {\n\t\t\twriteNative: boolean;\n\t\t},\n\t): void {\n\t\tconst encoded = encodeValue(value);\n\t\tif (!this.#ctx) {\n\t\t\tthis.#runtime.connSetState(this.#conn, encoded);\n\t\t\treturn;\n\t\t}\n\n\t\tconst connState = getNativeConnPersistState(\n\t\t\tthis.#runtime,\n\t\t\tthis.#ctx,\n\t\t\tthis.#conn,\n\t\t);\n\t\tconnState.state = value;\n\t\tif (options.writeNative) {\n\t\t\tthis.#runtime.connSetState(this.#conn, encoded);\n\t\t}\n\t}\n}\n\nclass NativeScheduleAdapter {\n\t#runtime: CoreRuntime;\n\t#ctx: ActorContextHandle;\n\n\tconstructor(runtime: CoreRuntime, ctx: ActorContextHandle) {\n\t\tthis.#runtime = runtime;\n\t\tthis.#ctx = ctx;\n\t}\n\n\tasync after(\n\t\tduration: number,\n\t\taction: string,\n\t\t...args: unknown[]\n\t): Promise<void> {\n\t\tcallNativeSync(() =>\n\t\t\tthis.#runtime.actorScheduleAfter(\n\t\t\t\tthis.#ctx,\n\t\t\t\tduration,\n\t\t\t\taction,\n\t\t\t\tencodeValue(args),\n\t\t\t),\n\t\t);\n\t}\n\n\tasync at(\n\t\ttimestamp: number,\n\t\taction: string,\n\t\t...args: unknown[]\n\t): Promise<void> {\n\t\tcallNativeSync(() =>\n\t\t\tthis.#runtime.actorScheduleAt(\n\t\t\t\tthis.#ctx,\n\t\t\t\ttimestamp,\n\t\t\t\taction,\n\t\t\t\tencodeValue(args),\n\t\t\t),\n\t\t);\n\t}\n}\n\nclass NativeKvAdapter {\n\t#runtime: CoreRuntime;\n\t#ctx: ActorContextHandle;\n\n\tconstructor(runtime: CoreRuntime, ctx: ActorContextHandle) {\n\t\tthis.#runtime = runtime;\n\t\tthis.#ctx = ctx;\n\t}\n\n\tasync get<T extends NativeKvValueType = \"text\">(\n\t\tkey: string | Uint8Array,\n\t\toptions?: NativeKvValueOptions<T>,\n\t): Promise<NativeKvValueTypeMap[T] | null> {\n\t\tconst value = await callNative(() =>\n\t\t\tthis.#runtime.actorKvGet(\n\t\t\t\tthis.#ctx,\n\t\t\t\tmakePrefixedKey(encodeNativeKvUserKey(key)),\n\t\t\t),\n\t\t);\n\t\treturn value\n\t\t\t? decodeNativeKvValue(new Uint8Array(value), options)\n\t\t\t: null;\n\t}\n\n\tasync put(\n\t\tkey: string | Uint8Array,\n\t\tvalue: string | Uint8Array | ArrayBuffer,\n\t\t_options?: NativeKvValueOptions,\n\t): Promise<void> {\n\t\tawait callNative(() =>\n\t\t\tthis.#runtime.actorKvPut(\n\t\t\t\tthis.#ctx,\n\t\t\t\tmakePrefixedKey(encodeNativeKvUserKey(key)),\n\t\t\t\ttoRuntimeBytes(value),\n\t\t\t),\n\t\t);\n\t}\n\n\tasync delete(key: string | Uint8Array): Promise<void> {\n\t\tawait callNative(() =>\n\t\t\tthis.#runtime.actorKvDelete(\n\t\t\t\tthis.#ctx,\n\t\t\t\tmakePrefixedKey(encodeNativeKvUserKey(key)),\n\t\t\t),\n\t\t);\n\t}\n\n\tasync deleteRange(\n\t\tstart: string | Uint8Array,\n\t\tend: string | Uint8Array,\n\t): Promise<void> {\n\t\tawait callNative(() =>\n\t\t\tthis.#runtime.actorKvDeleteRange(\n\t\t\t\tthis.#ctx,\n\t\t\t\tmakePrefixedKey(encodeNativeKvUserKey(start)),\n\t\t\t\tmakePrefixedKey(encodeNativeKvUserKey(end)),\n\t\t\t),\n\t\t);\n\t}\n\n\tasync rawDeleteRange(start: Uint8Array, end: Uint8Array): Promise<void> {\n\t\tawait callNative(() =>\n\t\t\tthis.#runtime.actorKvDeleteRange(this.#ctx, start, end),\n\t\t);\n\t}\n\n\tasync listPrefix<\n\t\tT extends NativeKvValueType = \"text\",\n\t\tK extends NativeKvKeyType = \"text\",\n\t>(\n\t\tprefix: string | Uint8Array,\n\t\toptions?: NativeKvListOptions<T, K>,\n\t): Promise<Array<[NativeKvKeyTypeMap[K], NativeKvValueTypeMap[T]]>> {\n\t\tconst entries = await callNative(() =>\n\t\t\tthis.#runtime.actorKvListPrefix(\n\t\t\t\tthis.#ctx,\n\t\t\t\tmakePrefixedKey(\n\t\t\t\t\tencodeNativeKvUserKey(\n\t\t\t\t\t\tprefix as NativeKvKeyTypeMap[K],\n\t\t\t\t\t\toptions?.keyType,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\treverse: options?.reverse,\n\t\t\t\t\tlimit: options?.limit,\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\t\treturn entries.map((entry) => [\n\t\t\tdecodeNativeKvKey(\n\t\t\t\tremovePrefixFromKey(new Uint8Array(entry.key)),\n\t\t\t\toptions?.keyType,\n\t\t\t),\n\t\t\tdecodeNativeKvValue(new Uint8Array(entry.value), options),\n\t\t]);\n\t}\n\n\tasync rawListPrefix(\n\t\tprefix: Uint8Array,\n\t): Promise<Array<[Uint8Array, Uint8Array]>> {\n\t\tconst entries = await callNative(() =>\n\t\t\tthis.#runtime.actorKvListPrefix(this.#ctx, prefix, {}),\n\t\t);\n\t\treturn entries.map((entry) => [\n\t\t\tnew Uint8Array(entry.key),\n\t\t\tnew Uint8Array(entry.value),\n\t\t]);\n\t}\n\n\tasync listRange<\n\t\tT extends NativeKvValueType = \"text\",\n\t\tK extends NativeKvKeyType = \"text\",\n\t>(\n\t\tstart: string | Uint8Array,\n\t\tend: string | Uint8Array,\n\t\toptions?: NativeKvListOptions<T, K>,\n\t): Promise<Array<[NativeKvKeyTypeMap[K], NativeKvValueTypeMap[T]]>> {\n\t\tconst entries = await callNative(() =>\n\t\t\tthis.#runtime.actorKvListRange(\n\t\t\t\tthis.#ctx,\n\t\t\t\tmakePrefixedKey(\n\t\t\t\t\tencodeNativeKvUserKey(\n\t\t\t\t\t\tstart as NativeKvKeyTypeMap[K],\n\t\t\t\t\t\toptions?.keyType,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\tmakePrefixedKey(\n\t\t\t\t\tencodeNativeKvUserKey(\n\t\t\t\t\t\tend as NativeKvKeyTypeMap[K],\n\t\t\t\t\t\toptions?.keyType,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\treverse: options?.reverse,\n\t\t\t\t\tlimit: options?.limit,\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\t\treturn entries.map((entry) => [\n\t\t\tdecodeNativeKvKey(\n\t\t\t\tremovePrefixFromKey(new Uint8Array(entry.key)),\n\t\t\t\toptions?.keyType,\n\t\t\t),\n\t\t\tdecodeNativeKvValue(new Uint8Array(entry.value), options),\n\t\t]);\n\t}\n\n\tasync list<\n\t\tT extends NativeKvValueType = \"text\",\n\t\tK extends NativeKvKeyType = \"text\",\n\t>(\n\t\tprefix: string | Uint8Array,\n\t\toptions?: NativeKvListOptions<T, K>,\n\t): Promise<Array<[NativeKvKeyTypeMap[K], NativeKvValueTypeMap[T]]>> {\n\t\treturn this.listPrefix(prefix, options);\n\t}\n\n\tasync batchGet(keys: Uint8Array[]): Promise<Array<Uint8Array | null>> {\n\t\tconst values = await callNative(() =>\n\t\t\tthis.#runtime.actorKvBatchGet(this.#ctx, keys),\n\t\t);\n\t\treturn values.map((value) => (value ? new Uint8Array(value) : null));\n\t}\n\n\tasync batchPut(entries: [Uint8Array, Uint8Array][]): Promise<void> {\n\t\tawait callNative(() =>\n\t\t\tthis.#runtime.actorKvBatchPut(\n\t\t\t\tthis.#ctx,\n\t\t\t\tentries.map(([key, value]) => ({\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue,\n\t\t\t\t})),\n\t\t\t),\n\t\t);\n\t}\n\n\tasync batchDelete(keys: Uint8Array[]): Promise<void> {\n\t\tawait callNative(() =>\n\t\t\tthis.#runtime.actorKvBatchDelete(this.#ctx, keys),\n\t\t);\n\t}\n}\n\nfunction wrapQueueMessage(\n\tmessage: RuntimeQueueMessage,\n\tschemas: NativeValidationConfig[\"queues\"],\n) {\n\tconst name = callNativeSync(() => message.name());\n\treturn {\n\t\tid: Number(callNativeSync(() => message.id())),\n\t\tname,\n\t\tbody: validateQueueBody(\n\t\t\tschemas,\n\t\t\tname,\n\t\t\tdecodeValue(callNativeSync(() => message.body())),\n\t\t),\n\t\tcreatedAt: callNativeSync(() => message.createdAt()),\n\t\tcomplete: callNativeSync(() => message.isCompletable())\n\t\t\t? async (response?: unknown) =>\n\t\t\t\t\tawait callNative(() =>\n\t\t\t\t\t\tmessage.complete(\n\t\t\t\t\t\t\tresponse === undefined\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: encodeValue(\n\t\t\t\t\t\t\t\t\t\tvalidateQueueComplete(\n\t\t\t\t\t\t\t\t\t\t\tschemas,\n\t\t\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\t\t\tresponse,\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t: undefined,\n\t};\n}\n\nclass NativeQueueAdapter {\n\t#runtime: CoreRuntime;\n\t#ctx: ActorContextHandle;\n\t#schemas: NativeValidationConfig[\"queues\"];\n\t#pendingCompletableMessageIds = new Set<string>();\n\n\tconstructor(\n\t\truntime: CoreRuntime,\n\t\tctx: ActorContextHandle,\n\t\tschemas: NativeValidationConfig[\"queues\"] = undefined,\n\t) {\n\t\tthis.#runtime = runtime;\n\t\tthis.#ctx = ctx;\n\t\tthis.#schemas = schemas;\n\t}\n\n\tasync send(name: string, body: unknown) {\n\t\tconst validatedBody = validateQueueBody(this.#schemas, name, body);\n\t\treturn wrapQueueMessage(\n\t\t\tawait callNative(() =>\n\t\t\t\tthis.#runtime.actorQueueSend(\n\t\t\t\t\tthis.#ctx,\n\t\t\t\t\tname,\n\t\t\t\t\tencodeValue(validatedBody),\n\t\t\t\t),\n\t\t\t),\n\t\t\tthis.#schemas,\n\t\t);\n\t}\n\n\tasync next(options?: {\n\t\tnames?: readonly string[];\n\t\ttimeout?: number;\n\t\tsignal?: AbortSignal;\n\t\tcompletable?: boolean;\n\t}) {\n\t\tconst messages = await this.nextBatch({\n\t\t\tnames: options?.names,\n\t\t\tcount: 1,\n\t\t\ttimeout: options?.timeout,\n\t\t\tsignal: options?.signal,\n\t\t\tcompletable: options?.completable,\n\t\t});\n\t\treturn messages[0];\n\t}\n\n\tasync nextBatch(options?: {\n\t\tnames?: readonly string[];\n\t\tcount?: number;\n\t\ttimeout?: number;\n\t\tsignal?: AbortSignal;\n\t\tcompletable?: boolean;\n\t}) {\n\t\tconst completable = options?.completable === true;\n\t\tif (this.#pendingCompletableMessageIds.size > 0) {\n\t\t\tthrow new RivetError(\n\t\t\t\t\"queue\",\n\t\t\t\t\"previous_message_not_completed\",\n\t\t\t\t\"Previous completable queue message is not completed. Call `message.complete(...)` before receiving the next message.\",\n\t\t\t\t{\n\t\t\t\t\tpublic: true,\n\t\t\t\t\tstatusCode: 400,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\tconst { token, cleanup } = await createCancellationTokenHandle(\n\t\t\tthis.#runtime,\n\t\t\toptions?.signal,\n\t\t);\n\n\t\ttry {\n\t\t\tconst messages = await callNative(() =>\n\t\t\t\tthis.#runtime.actorQueueNextBatch(\n\t\t\t\t\tthis.#ctx,\n\t\t\t\t\t{\n\t\t\t\t\t\tnames: this.#normalizeNames(options?.names),\n\t\t\t\t\t\tcount: options?.count,\n\t\t\t\t\t\ttimeoutMs: options?.timeout,\n\t\t\t\t\t\tcompletable,\n\t\t\t\t\t},\n\t\t\t\t\ttoken,\n\t\t\t\t),\n\t\t\t);\n\t\t\tconst wrapped = messages.map((message) =>\n\t\t\t\twrapQueueMessage(message, this.#schemas),\n\t\t\t);\n\t\t\treturn completable\n\t\t\t\t? wrapped.map((message) =>\n\t\t\t\t\t\tthis.#makeCompletableMessage(message),\n\t\t\t\t\t)\n\t\t\t\t: wrapped;\n\t\t} finally {\n\t\t\tcleanup?.();\n\t\t}\n\t}\n\n\tasync waitForNames(\n\t\tnames: readonly string[],\n\t\toptions?: {\n\t\t\ttimeout?: number;\n\t\t\tsignal?: AbortSignal;\n\t\t\tcompletable?: boolean;\n\t\t},\n\t) {\n\t\tconst { token, cleanup } = await createCancellationTokenHandle(\n\t\t\tthis.#runtime,\n\t\t\toptions?.signal,\n\t\t);\n\n\t\ttry {\n\t\t\treturn wrapQueueMessage(\n\t\t\t\tawait callNative(() =>\n\t\t\t\t\tthis.#runtime.actorQueueWaitForNames(\n\t\t\t\t\t\tthis.#ctx,\n\t\t\t\t\t\t[...names],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttimeoutMs: options?.timeout,\n\t\t\t\t\t\t\tcompletable: options?.completable,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttoken,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\tthis.#schemas,\n\t\t\t);\n\t\t} finally {\n\t\t\tcleanup?.();\n\t\t}\n\t}\n\n\tasync waitForNamesAvailable(\n\t\tnames: readonly string[],\n\t\toptions?: {\n\t\t\ttimeout?: number;\n\t\t\tsignal?: AbortSignal;\n\t\t},\n\t) {\n\t\tif (!options?.signal) {\n\t\t\tawait callNative(() =>\n\t\t\t\tthis.#runtime.actorQueueWaitForNamesAvailable(\n\t\t\t\t\tthis.#ctx,\n\t\t\t\t\t[...names],\n\t\t\t\t\t{\n\t\t\t\t\t\ttimeoutMs: options?.timeout,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst deadline =\n\t\t\toptions.timeout === undefined\n\t\t\t\t? undefined\n\t\t\t\t: Date.now() + options.timeout;\n\n\t\tfor (;;) {\n\t\t\tif (options.signal.aborted) {\n\t\t\t\tthrow actorAbortedError();\n\t\t\t}\n\n\t\t\tconst remainingTimeout =\n\t\t\t\tdeadline === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: Math.max(0, deadline - Date.now());\n\t\t\tconst sliceTimeout =\n\t\t\t\tremainingTimeout === undefined\n\t\t\t\t\t? 100\n\t\t\t\t\t: Math.min(remainingTimeout, 100);\n\n\t\t\ttry {\n\t\t\t\tawait callNative(() =>\n\t\t\t\t\tthis.#runtime.actorQueueWaitForNamesAvailable(\n\t\t\t\t\t\tthis.#ctx,\n\t\t\t\t\t\t[...names],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttimeoutMs: sliceTimeout,\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t} catch (error) {\n\t\t\t\tif (\n\t\t\t\t\t(error as { group?: string; code?: string }).group ===\n\t\t\t\t\t\t\"queue\" &&\n\t\t\t\t\t(error as { group?: string; code?: string }).code ===\n\t\t\t\t\t\t\"timed_out\"\n\t\t\t\t) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tremainingTimeout === undefined ||\n\t\t\t\t\t\tremainingTimeout > 100\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\tasync enqueueAndWait(\n\t\tname: string,\n\t\tbody: unknown,\n\t\toptions?: {\n\t\t\ttimeout?: number;\n\t\t\tsignal?: AbortSignal;\n\t\t},\n\t) {\n\t\tconst validatedBody = validateQueueBody(this.#schemas, name, body);\n\t\tconst { token, cleanup } = await createCancellationTokenHandle(\n\t\t\tthis.#runtime,\n\t\t\toptions?.signal,\n\t\t);\n\n\t\ttry {\n\t\t\tconst response = await callNative(() =>\n\t\t\t\tthis.#runtime.actorQueueEnqueueAndWait(\n\t\t\t\t\tthis.#ctx,\n\t\t\t\t\tname,\n\t\t\t\t\tencodeValue(validatedBody),\n\t\t\t\t\t{\n\t\t\t\t\t\ttimeoutMs: options?.timeout,\n\t\t\t\t\t},\n\t\t\t\t\ttoken,\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn response === undefined || response === null\n\t\t\t\t? undefined\n\t\t\t\t: validateQueueComplete(\n\t\t\t\t\t\tthis.#schemas,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tdecodeValue(response),\n\t\t\t\t\t);\n\t\t} finally {\n\t\t\tcleanup?.();\n\t\t}\n\t}\n\n\tasync tryNext(options?: {\n\t\tnames?: readonly string[];\n\t\tcompletable?: boolean;\n\t}) {\n\t\tconst messages = await this.tryNextBatch({\n\t\t\tnames: options?.names,\n\t\t\tcount: 1,\n\t\t\tcompletable: options?.completable,\n\t\t});\n\t\treturn messages[0];\n\t}\n\n\tasync tryNextBatch(options?: {\n\t\tnames?: readonly string[];\n\t\tcount?: number;\n\t\tcompletable?: boolean;\n\t}) {\n\t\tif (options?.completable) {\n\t\t\treturn await this.nextBatch({\n\t\t\t\tnames: options.names,\n\t\t\t\tcount: options.count,\n\t\t\t\ttimeout: 0,\n\t\t\t\tcompletable: true,\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\treturn await this.nextBatch({\n\t\t\t\tnames: options?.names,\n\t\t\t\tcount: options?.count,\n\t\t\t\ttimeout: 0,\n\t\t\t\tcompletable: false,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\t(error as { group?: string; code?: string }).group ===\n\t\t\t\t\t\"queue\" &&\n\t\t\t\t(error as { group?: string; code?: string }).code ===\n\t\t\t\t\t\"timed_out\"\n\t\t\t) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync *iter(options?: {\n\t\tnames?: readonly string[];\n\t\tsignal?: AbortSignal;\n\t\tcompletable?: boolean;\n\t}): AsyncIterableIterator<\n\t\tNonNullable<Awaited<ReturnType<NativeQueueAdapter[\"next\"]>>>\n\t> {\n\t\tfor (;;) {\n\t\t\ttry {\n\t\t\t\tconst message = await this.next(options);\n\t\t\t\tif (!message) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tyield message;\n\t\t\t} catch (error) {\n\t\t\t\tif (\n\t\t\t\t\tisRivetErrorLike(error) &&\n\t\t\t\t\terror.group === \"actor\" &&\n\t\t\t\t\terror.code === \"aborted\"\n\t\t\t\t) {\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#normalizeNames(\n\t\tnames: readonly string[] | undefined,\n\t): 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: Awaited<ReturnType<typeof wrapQueueMessage>>,\n\t) {\n\t\tconst messageId = message.id.toString();\n\t\tthis.#pendingCompletableMessageIds.add(messageId);\n\t\tlet completed = false;\n\n\t\treturn {\n\t\t\t...message,\n\t\t\tcomplete: async (response?: unknown) => {\n\t\t\t\tif (typeof message.complete !== \"function\") {\n\t\t\t\t\tthrow new RivetError(\n\t\t\t\t\t\t\"queue\",\n\t\t\t\t\t\t\"complete_not_configured\",\n\t\t\t\t\t\t`Queue '${message.name}' does not support completion responses.`,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpublic: true,\n\t\t\t\t\t\t\tstatusCode: 400,\n\t\t\t\t\t\t\tmetadata: { name: message.name },\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (completed) {\n\t\t\t\t\tthrow new RivetError(\n\t\t\t\t\t\t\"queue\",\n\t\t\t\t\t\t\"already_completed\",\n\t\t\t\t\t\t\"Queue message was already completed.\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpublic: true,\n\t\t\t\t\t\t\tstatusCode: 400,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tawait message.complete(response);\n\t\t\t\tcompleted = true;\n\t\t\t\tthis.#pendingCompletableMessageIds.delete(messageId);\n\t\t\t},\n\t\t};\n\t}\n}\n\nclass NativeWebSocketAdapter {\n\t#runtime: CoreRuntime;\n\t#ws: WebSocketHandle;\n\t#virtual: VirtualWebSocket;\n\t#readyState: 0 | 1 | 2 | 3 = VirtualWebSocket.OPEN;\n\n\tconstructor(runtime: CoreRuntime, ws: WebSocketHandle) {\n\t\tthis.#runtime = runtime;\n\t\tthis.#ws = ws;\n\t\tthis.#virtual = new VirtualWebSocket({\n\t\t\tgetReadyState: () => this.#readyState,\n\t\t\tonSend: (data) => {\n\t\t\t\tif (typeof data === \"string\") {\n\t\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\t\tthis.#runtime.webSocketSend(\n\t\t\t\t\t\t\tthis.#ws,\n\t\t\t\t\t\t\ttextEncoder.encode(data),\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst bytes = ArrayBuffer.isView(data)\n\t\t\t\t\t? arrayBufferViewToRuntimeBytes(data)\n\t\t\t\t\t: new Uint8Array(data as ArrayBufferLike);\n\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\tthis.#runtime.webSocketSend(this.#ws, bytes, true),\n\t\t\t\t);\n\t\t\t},\n\t\t\tonClose: (code, reason) => {\n\t\t\t\tthis.#readyState = VirtualWebSocket.CLOSING;\n\t\t\t\tvoid callNative(() =>\n\t\t\t\t\tthis.#runtime.webSocketClose(this.#ws, code, reason),\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\t\tthis.#runtime.webSocketSetEventCallback(this.#ws, (event) => {\n\t\t\tif (event.kind === \"message\") {\n\t\t\t\tthis.#virtual.triggerMessage(\n\t\t\t\t\tevent.binary\n\t\t\t\t\t\t? runtimeBytesToArrayBuffer(event.data as RuntimeBytes)\n\t\t\t\t\t\t: event.data,\n\t\t\t\t\tevent.messageIndex,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.#readyState = VirtualWebSocket.CLOSED;\n\t\t\tthis.#virtual.triggerClose(\n\t\t\t\tevent.code,\n\t\t\t\tevent.reason,\n\t\t\t\tevent.wasClean,\n\t\t\t);\n\t\t});\n\t}\n\n\tget readyState() {\n\t\treturn this.#virtual.readyState;\n\t}\n\n\tget CONNECTING() {\n\t\treturn this.#virtual.CONNECTING;\n\t}\n\n\tget OPEN() {\n\t\treturn this.#virtual.OPEN;\n\t}\n\n\tget CLOSING() {\n\t\treturn this.#virtual.CLOSING;\n\t}\n\n\tget CLOSED() {\n\t\treturn this.#virtual.CLOSED;\n\t}\n\n\tget binaryType() {\n\t\treturn this.#virtual.binaryType;\n\t}\n\n\tset binaryType(value: \"arraybuffer\" | \"blob\") {\n\t\tthis.#virtual.binaryType = value;\n\t}\n\n\tget bufferedAmount() {\n\t\treturn this.#virtual.bufferedAmount;\n\t}\n\n\tget extensions() {\n\t\treturn this.#virtual.extensions;\n\t}\n\n\tget protocol() {\n\t\treturn this.#virtual.protocol;\n\t}\n\n\tget url() {\n\t\treturn this.#virtual.url;\n\t}\n\n\tget onopen() {\n\t\treturn this.#virtual.onopen;\n\t}\n\n\tset onopen(value) {\n\t\tthis.#virtual.onopen = value;\n\t}\n\n\tget onclose() {\n\t\treturn this.#virtual.onclose;\n\t}\n\n\tset onclose(value) {\n\t\tthis.#virtual.onclose = value;\n\t}\n\n\tget onerror() {\n\t\treturn this.#virtual.onerror;\n\t}\n\n\tset onerror(value) {\n\t\tthis.#virtual.onerror = value;\n\t}\n\n\tget onmessage() {\n\t\treturn this.#virtual.onmessage;\n\t}\n\n\tset onmessage(value) {\n\t\tthis.#virtual.onmessage = value;\n\t}\n\n\tsend(data: string | ArrayBuffer | ArrayBufferView): void {\n\t\tthis.#virtual.send(data);\n\t}\n\n\tclose(code?: number, reason?: string): void {\n\t\tthis.#virtual.close(code, reason);\n\t}\n\n\taddEventListener(\n\t\ttype: string,\n\t\tlistener: (event: any) => void | Promise<void>,\n\t): void {\n\t\tthis.#virtual.addEventListener(type, listener);\n\t}\n\n\tremoveEventListener(\n\t\ttype: string,\n\t\tlistener: (event: any) => void | Promise<void>,\n\t): void {\n\t\tthis.#virtual.removeEventListener(type, listener);\n\t}\n\n\tdispatchEvent(event: {\n\t\ttype: string;\n\t\ttarget?: unknown;\n\t\tcurrentTarget?: unknown;\n\t}): boolean {\n\t\treturn this.#virtual.dispatchEvent(event);\n\t}\n}\n\ntype TrackedWebSocketListener = (event: any) => void | Promise<void>;\n\nclass TrackedWebSocketHandleAdapter implements UniversalWebSocket {\n\t#ctx: ActorContextHandleAdapter;\n\t#inner: UniversalWebSocket;\n\t#listeners = new Map<string, TrackedWebSocketListener[]>();\n\t#onopen: ((event: RivetEvent) => void | Promise<void>) | null = null;\n\t#onclose: ((event: RivetCloseEvent) => void | Promise<void>) | null = null;\n\t#onerror: ((event: RivetEvent) => void | Promise<void>) | null = null;\n\t#onmessage: ((event: RivetMessageEvent) => void | Promise<void>) | null =\n\t\tnull;\n\n\tconstructor(ctx: ActorContextHandleAdapter, inner: UniversalWebSocket) {\n\t\tthis.#ctx = ctx;\n\t\tthis.#inner = inner;\n\n\t\tinner.addEventListener(\"open\", (event) => {\n\t\t\tthis.#dispatch(\"open\", this.#createEvent(\"open\", event));\n\t\t});\n\t\tinner.addEventListener(\"message\", (event) => {\n\t\t\tthis.#dispatch(\"message\", this.#createEvent(\"message\", event));\n\t\t});\n\t\tinner.addEventListener(\"close\", (event) => {\n\t\t\tthis.#dispatch(\"close\", this.#createEvent(\"close\", event));\n\t\t});\n\t\tinner.addEventListener(\"error\", (event) => {\n\t\t\tthis.#dispatch(\"error\", this.#createEvent(\"error\", event));\n\t\t});\n\t}\n\n\tget CONNECTING(): 0 {\n\t\treturn this.#inner.CONNECTING;\n\t}\n\n\tget OPEN(): 1 {\n\t\treturn this.#inner.OPEN;\n\t}\n\n\tget CLOSING(): 2 {\n\t\treturn this.#inner.CLOSING;\n\t}\n\n\tget CLOSED(): 3 {\n\t\treturn this.#inner.CLOSED;\n\t}\n\n\tget readyState(): 0 | 1 | 2 | 3 {\n\t\treturn this.#inner.readyState;\n\t}\n\n\tget binaryType(): \"arraybuffer\" | \"blob\" {\n\t\treturn this.#inner.binaryType;\n\t}\n\n\tset binaryType(value: \"arraybuffer\" | \"blob\") {\n\t\tthis.#inner.binaryType = value;\n\t}\n\n\tget bufferedAmount(): number {\n\t\treturn this.#inner.bufferedAmount;\n\t}\n\n\tget extensions(): string {\n\t\treturn this.#inner.extensions;\n\t}\n\n\tget protocol(): string {\n\t\treturn this.#inner.protocol;\n\t}\n\n\tget url(): string {\n\t\treturn this.#inner.url;\n\t}\n\n\tsend(data: string | ArrayBufferLike | Blob | ArrayBufferView): void {\n\t\tthis.#inner.send(data);\n\t}\n\n\tclose(code?: number, reason?: string): void {\n\t\tthis.#inner.close(code, reason);\n\t}\n\n\taddEventListener(type: string, listener: TrackedWebSocketListener): void {\n\t\tlet listeners = this.#listeners.get(type);\n\t\tif (!listeners) {\n\t\t\tlisteners = [];\n\t\t\tthis.#listeners.set(type, listeners);\n\t\t}\n\t\tlisteners.push(listener);\n\t}\n\n\tremoveEventListener(\n\t\ttype: string,\n\t\tlistener: TrackedWebSocketListener,\n\t): void {\n\t\tconst listeners = this.#listeners.get(type);\n\t\tif (!listeners) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst index = listeners.indexOf(listener);\n\t\tif (index !== -1) {\n\t\t\tlisteners.splice(index, 1);\n\t\t}\n\t}\n\n\tdispatchEvent(event: RivetEvent): boolean {\n\t\tthis.#dispatch(event.type, this.#createEvent(event.type, event));\n\t\treturn true;\n\t}\n\n\tget onopen(): ((event: RivetEvent) => void | Promise<void>) | null {\n\t\treturn this.#onopen;\n\t}\n\n\tset onopen(fn: ((event: RivetEvent) => void | Promise<void>) | null) {\n\t\tthis.#onopen = fn;\n\t}\n\n\tget onclose(): ((event: RivetCloseEvent) => void | Promise<void>) | null {\n\t\treturn this.#onclose;\n\t}\n\n\tset onclose(fn: ((event: RivetCloseEvent) => void | Promise<void>) | null) {\n\t\tthis.#onclose = fn;\n\t}\n\n\tget onerror(): ((event: RivetEvent) => void | Promise<void>) | null {\n\t\treturn this.#onerror;\n\t}\n\n\tset onerror(fn: ((event: RivetEvent) => void | Promise<void>) | null) {\n\t\tthis.#onerror = fn;\n\t}\n\n\tget onmessage():\n\t\t| ((event: RivetMessageEvent) => void | Promise<void>)\n\t\t| null {\n\t\treturn this.#onmessage;\n\t}\n\n\tset onmessage(fn:\n\t\t| ((event: RivetMessageEvent) => void | Promise<void>)\n\t\t| null,) {\n\t\tthis.#onmessage = fn;\n\t}\n\n\t#createEvent(type: string, event: any): any {\n\t\tswitch (type) {\n\t\t\tcase \"message\":\n\t\t\t\treturn {\n\t\t\t\t\ttype,\n\t\t\t\t\tdata: event.data,\n\t\t\t\t\trivetMessageIndex: event.rivetMessageIndex,\n\t\t\t\t\ttarget: this,\n\t\t\t\t\tcurrentTarget: this,\n\t\t\t\t} satisfies RivetMessageEvent;\n\t\t\tcase \"close\":\n\t\t\t\treturn {\n\t\t\t\t\ttype,\n\t\t\t\t\tcode: event.code,\n\t\t\t\t\treason: event.reason,\n\t\t\t\t\twasClean: event.wasClean,\n\t\t\t\t\ttarget: this,\n\t\t\t\t\tcurrentTarget: this,\n\t\t\t\t} satisfies RivetCloseEvent;\n\t\t\tdefault:\n\t\t\t\treturn {\n\t\t\t\t\ttype,\n\t\t\t\t\ttarget: this,\n\t\t\t\t\tcurrentTarget: this,\n\t\t\t\t\t...(event.message !== undefined\n\t\t\t\t\t\t? { message: event.message }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...(event.error !== undefined\n\t\t\t\t\t\t? { error: event.error }\n\t\t\t\t\t\t: {}),\n\t\t\t\t} satisfies RivetEvent;\n\t\t}\n\t}\n\n\t#dispatch(type: string, event: any): void {\n\t\tconst listeners = this.#listeners.get(type);\n\t\tif (listeners && listeners.length > 0) {\n\t\t\tfor (const listener of [...listeners]) {\n\t\t\t\tthis.#callHandler(type, listener, event);\n\t\t\t}\n\t\t}\n\n\t\tswitch (type) {\n\t\t\tcase \"open\":\n\t\t\t\tif (this.#onopen) this.#callHandler(type, this.#onopen, event);\n\t\t\t\tbreak;\n\t\t\tcase \"close\":\n\t\t\t\tif (this.#onclose)\n\t\t\t\t\tthis.#callHandler(type, this.#onclose, event);\n\t\t\t\tbreak;\n\t\t\tcase \"error\":\n\t\t\t\tif (this.#onerror)\n\t\t\t\t\tthis.#callHandler(type, this.#onerror, event);\n\t\t\t\tbreak;\n\t\t\tcase \"message\":\n\t\t\t\tif (this.#onmessage)\n\t\t\t\t\tthis.#callHandler(type, this.#onmessage, event);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t#callHandler(\n\t\ttype: string,\n\t\thandler: TrackedWebSocketListener,\n\t\tevent: any,\n\t): void {\n\t\ttry {\n\t\t\tconst result = handler(event);\n\t\t\tif (!this.#isPromiseLike(result)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst callbackRegionId = this.#ctx.beginWebSocketCallback();\n\t\t\tthis.#ctx.waitUntil(\n\t\t\t\tPromise.resolve(result)\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\tlogger().error({\n\t\t\t\t\t\t\tmsg: \"async websocket handler failed\",\n\t\t\t\t\t\t\teventType: type,\n\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tthis.#ctx.endWebSocketCallback(callbackRegionId);\n\t\t\t\t\t})\n\t\t\t\t\t.then(() => null),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tlogger().error({\n\t\t\t\tmsg: \"websocket handler failed\",\n\t\t\t\teventType: type,\n\t\t\t\terror,\n\t\t\t});\n\t\t}\n\t}\n\n\t#isPromiseLike(value: unknown): value is PromiseLike<void> {\n\t\treturn (\n\t\t\ttypeof value === \"object\" &&\n\t\t\tvalue !== null &&\n\t\t\t\"then\" in value &&\n\t\t\ttypeof value.then === \"function\"\n\t\t);\n\t}\n}\n\nexport class ActorContextHandleAdapter {\n\t#runtime: CoreRuntime;\n\t#ctx: ActorContextHandle;\n\t#schemas: NativeValidationConfig;\n\t#abortSignal?: AbortSignal;\n\t#abortSignalCleanup?: () => void;\n\t#client?: AnyClient;\n\t#clientFactory?: () => AnyClient;\n\t#databaseProvider?: Exclude<AnyDatabaseProvider, undefined>;\n\t#db?: unknown;\n\t#dbProxy?: unknown;\n\t#dispatchCancelToken?: CancellationTokenHandle;\n\t#kv?: NativeKvAdapter;\n\t#queue?: NativeQueueAdapter;\n\t#request?: Request;\n\t#schedule?: NativeScheduleAdapter;\n\t#sql?: ReturnType<typeof wrapJsNativeDatabase>;\n\t#runHandlerActiveProvider?: () => boolean;\n\t#onStateChange?: NativeOnStateChangeHandler;\n\t#stateEnabled: boolean;\n\n\tconstructor(\n\t\truntime: CoreRuntime,\n\t\tctx: ActorContextHandle,\n\t\tclientFactory?: () => AnyClient,\n\t\tschemas: NativeValidationConfig = {},\n\t\tdatabaseProvider?: AnyDatabaseProvider,\n\t\trequest?: Request,\n\t\tstateEnabled = true,\n\t\trunHandlerActiveProvider?: () => boolean,\n\t\tonStateChange?: NativeOnStateChangeHandler,\n\t\tdispatchCancelToken?: CancellationTokenHandle,\n\t) {\n\t\tthis.#runtime = runtime;\n\t\tthis.#ctx = ctx;\n\t\tthis.#clientFactory = clientFactory;\n\t\tthis.#schemas = schemas;\n\t\tthis.#dispatchCancelToken = dispatchCancelToken;\n\t\tthis.#runHandlerActiveProvider = runHandlerActiveProvider;\n\t\tthis.#onStateChange = onStateChange;\n\t\tthis.#stateEnabled = stateEnabled;\n\t\tif (databaseProvider) {\n\t\t\tthis.#databaseProvider = databaseProvider;\n\t\t}\n\t\tthis.#request = request;\n\t\t(\n\t\t\tthis as ActorContextHandleAdapter & {\n\t\t\t\t[ACTOR_CONTEXT_INTERNAL_SYMBOL]?: unknown;\n\t\t\t}\n\t\t)[ACTOR_CONTEXT_INTERNAL_SYMBOL] = new NativeWorkflowRuntimeAdapter(\n\t\t\tthis,\n\t\t);\n\t}\n\n\tget kv() {\n\t\tif (!this.#kv) {\n\t\t\tthis.#kv = new NativeKvAdapter(this.#runtime, this.#ctx);\n\t\t}\n\t\treturn this.#kv;\n\t}\n\n\tget sql() {\n\t\tif (!this.#sql) {\n\t\t\tthis.#sql = getOrCreateNativeSqlDatabase(this.#runtime, this.#ctx);\n\t\t}\n\t\treturn this.#sql;\n\t}\n\n\tget db() {\n\t\tif (!this.#databaseProvider) {\n\t\t\tthrow databaseNotConfiguredError();\n\t\t}\n\n\t\tif (!this.#dbProxy) {\n\t\t\tthis.#dbProxy = new Proxy(\n\t\t\t\t{},\n\t\t\t\t{\n\t\t\t\t\tget: (_target, property) => {\n\t\t\t\t\t\tif (property === \"then\") {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn async (...args: Array<unknown>) => {\n\t\t\t\t\t\t\tconst client = await this.ensureDatabaseClient();\n\t\t\t\t\t\t\tconst value = Reflect.get(\n\t\t\t\t\t\t\t\tclient as object,\n\t\t\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (typeof value !== \"function\") {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn await value.apply(client, args);\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\treturn this.#dbProxy;\n\t}\n\n\tget state(): unknown {\n\t\tif (!this.#stateEnabled) {\n\t\t\tthrow stateNotEnabledError();\n\t\t}\n\t\tconst nextState = this.#readState();\n\t\treturn createWriteThroughProxy(\n\t\t\tnextState,\n\t\t\t(nextValue) => {\n\t\t\t\tthis.#writeState(nextValue, { scheduleSave: true });\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tthis.#assertCanMutateState();\n\t\t\t},\n\t\t);\n\t}\n\n\tset state(value: unknown) {\n\t\tif (!this.#stateEnabled) {\n\t\t\tthrow stateNotEnabledError();\n\t\t}\n\t\tthis.#assertCanMutateState();\n\t\tthis.#writeState(value, { scheduleSave: true });\n\t}\n\n\tinitializeState(value: unknown): void {\n\t\tif (!this.#stateEnabled) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#writeState(value, { scheduleSave: false });\n\t}\n\n\tget vars(): unknown {\n\t\tconst runtimeState = getNativeRuntimeState(this.#runtime, this.#ctx);\n\t\tif (runtimeState.varsInitialized) {\n\t\t\treturn runtimeState.vars;\n\t\t}\n\n\t\truntimeState.varsInitialized = true;\n\t\truntimeState.vars = undefined;\n\t\treturn undefined;\n\t}\n\n\tset vars(value: unknown) {\n\t\tconst runtimeState = getNativeRuntimeState(this.#runtime, this.#ctx);\n\t\truntimeState.varsInitialized = true;\n\t\truntimeState.vars = value;\n\t}\n\n\tget queue(): NativeQueueAdapter {\n\t\tif (!this.#queue) {\n\t\t\tthis.#queue = new NativeQueueAdapter(\n\t\t\t\tthis.#runtime,\n\t\t\t\tthis.#ctx,\n\t\t\t\tthis.#schemas.queues,\n\t\t\t);\n\t\t}\n\t\treturn this.#queue;\n\t}\n\n\tget schedule(): NativeScheduleAdapter {\n\t\tif (!this.#schedule) {\n\t\t\tthis.#schedule = new NativeScheduleAdapter(\n\t\t\t\tthis.#runtime,\n\t\t\t\tthis.#ctx,\n\t\t\t);\n\t\t}\n\t\treturn this.#schedule;\n\t}\n\n\tget actorId(): string {\n\t\treturn callNativeSync(() => this.#runtime.actorId(this.#ctx));\n\t}\n\n\tget name(): string {\n\t\treturn callNativeSync(() => this.#runtime.actorName(this.#ctx));\n\t}\n\n\tget key(): string[] {\n\t\treturn toActorKey(\n\t\t\tcallNativeSync(() => this.#runtime.actorKey(this.#ctx)),\n\t\t);\n\t}\n\n\tget region(): string {\n\t\treturn callNativeSync(() => this.#runtime.actorRegion(this.#ctx));\n\t}\n\n\tget conns(): Map<string, NativeConnAdapter> {\n\t\treturn new Map(\n\t\t\tcallNativeSync(() => this.#runtime.actorConns(this.#ctx)).map(\n\t\t\t\t(conn) => [\n\t\t\t\t\tthis.#runtime.connId(conn),\n\t\t\t\t\tnew NativeConnAdapter(\n\t\t\t\t\t\tthis.#runtime,\n\t\t\t\t\t\tconn,\n\t\t\t\t\t\tthis.#schemas,\n\t\t\t\t\t\tthis.#ctx,\n\t\t\t\t\t\t(connId) =>\n\t\t\t\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\t\t\t\tthis.#runtime.actorQueueHibernationRemoval(\n\t\t\t\t\t\t\t\t\tthis.#ctx,\n\t\t\t\t\t\t\t\t\tconnId,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t],\n\t\t\t),\n\t\t);\n\t}\n\n\tget log() {\n\t\treturn logger();\n\t}\n\n\tget abortSignal(): AbortSignal {\n\t\tif (!this.#abortSignal) {\n\t\t\tconst actorSignal = this.#createActorAbortSignal();\n\t\t\tif (this.#dispatchCancelToken === undefined) {\n\t\t\t\tthis.#abortSignal = actorSignal;\n\t\t\t} else {\n\t\t\t\tconst controller = new AbortController();\n\t\t\t\tlet cleanedUp = false;\n\t\t\t\tconst onActorAbort = () => {\n\t\t\t\t\tcleanup();\n\t\t\t\t\tcontroller.abort();\n\t\t\t\t};\n\t\t\t\tconst cleanup = () => {\n\t\t\t\t\tif (cleanedUp) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcleanedUp = true;\n\t\t\t\t\tactorSignal.removeEventListener(\"abort\", onActorAbort);\n\t\t\t\t\tthis.#abortSignalCleanup = undefined;\n\t\t\t\t};\n\n\t\t\t\tif (\n\t\t\t\t\tactorSignal.aborted ||\n\t\t\t\t\tthis.#runtime.cancellationTokenAborted(\n\t\t\t\t\t\tthis.#dispatchCancelToken,\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tcontroller.abort();\n\t\t\t\t} else {\n\t\t\t\t\tconst dispatchCancelToken = this.#dispatchCancelToken;\n\t\t\t\t\tthis.#abortSignalCleanup = cleanup;\n\t\t\t\t\tactorSignal.addEventListener(\"abort\", onActorAbort, {\n\t\t\t\t\t\tonce: true,\n\t\t\t\t\t});\n\t\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\t\tthis.#runtime.onCancellationTokenCancelled(\n\t\t\t\t\t\t\tdispatchCancelToken,\n\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\tcleanup();\n\t\t\t\t\t\t\t\tcontroller.abort();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tthis.#abortSignal = controller.signal;\n\t\t\t}\n\t\t}\n\t\treturn this.#abortSignal;\n\t}\n\n\tget aborted(): boolean {\n\t\treturn this.abortSignal.aborted;\n\t}\n\n\tget request(): Request | undefined {\n\t\treturn this.#request;\n\t}\n\n\tprivate async ensureDatabaseClient(): Promise<unknown> {\n\t\tif (!this.#databaseProvider) {\n\t\t\tthrow databaseNotConfiguredError();\n\t\t}\n\n\t\tif (this.#db) {\n\t\t\treturn this.#db;\n\t\t}\n\n\t\tconst runtimeState = getNativeRuntimeState(this.#runtime, this.#ctx);\n\t\tconst cachedClient = runtimeState.databaseClient;\n\t\tif (cachedClient) {\n\t\t\tthis.#db = cachedClient.client;\n\t\t\treturn this.#db;\n\t\t}\n\n\t\tconst actorId = this.actorId;\n\t\tconst client = await this.#databaseProvider.createClient({\n\t\t\tactorId,\n\t\t\tkv: {\n\t\t\t\tbatchPut: async (entries) => {\n\t\t\t\t\tawait this.kv.batchPut(\n\t\t\t\t\t\tentries.map(([key, value]) => [key, value]),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tbatchGet: async (keys) => {\n\t\t\t\t\treturn await this.kv.batchGet([...keys]);\n\t\t\t\t},\n\t\t\t\tbatchDelete: async (keys) => {\n\t\t\t\t\tawait this.kv.batchDelete([...keys]);\n\t\t\t\t},\n\t\t\t\tdeleteRange: async (start, end) => {\n\t\t\t\t\tawait this.kv.deleteRange(start, end);\n\t\t\t\t},\n\t\t\t},\n\t\t\tlog: {\n\t\t\t\tdebug: (obj) => logger().debug(obj),\n\t\t\t},\n\t\t\tnativeDatabaseProvider: {\n\t\t\t\topen: async (requestedActorId) => {\n\t\t\t\t\tvoid requestedActorId;\n\t\t\t\t\treturn getOrCreateNativeSqlDatabase(\n\t\t\t\t\t\tthis.#runtime,\n\t\t\t\t\t\tthis.#ctx,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t\truntimeState.databaseClient = {\n\t\t\tclient,\n\t\t};\n\t\tthis.#db = client;\n\t\treturn client;\n\t}\n\n\tasync prepare(): Promise<void> {\n\t\tif (!this.#databaseProvider) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.ensureDatabaseClient();\n\t}\n\n\tasync runDatabaseMigrations(): Promise<void> {\n\t\tif (!this.#databaseProvider) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.#databaseProvider.onMigrate(\n\t\t\t(await this.ensureDatabaseClient()) as never,\n\t\t);\n\t}\n\n\tasync closeDatabase(): Promise<void> {\n\t\tthis.#db = undefined;\n\t\tthis.#sql = undefined;\n\t\tawait closeNativeDatabaseClient(this.#runtime, this.#ctx);\n\t\tawait closeNativeSqlDatabase(this.#runtime, this.#ctx);\n\t}\n\n\tbroadcast(name: string, ...args: unknown[]): void {\n\t\tconst validatedArgs = validateEventArgs(\n\t\t\tthis.#schemas.events,\n\t\t\tname,\n\t\t\targs,\n\t\t);\n\t\tcallNativeSync(() =>\n\t\t\tthis.#runtime.actorBroadcast(\n\t\t\t\tthis.#ctx,\n\t\t\t\tname,\n\t\t\t\tencodeValue(validatedArgs),\n\t\t\t),\n\t\t);\n\t}\n\n\tasync saveState(opts?: {\n\t\timmediate?: boolean;\n\t\tmaxWait?: number;\n\t}): Promise<void> {\n\t\tif (opts?.immediate) {\n\t\t\tawait callNative(() =>\n\t\t\t\tthis.#runtime.actorRequestSaveAndWait(this.#ctx, {\n\t\t\t\t\timmediate: true,\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (opts?.maxWait != null) {\n\t\t\tcallNativeSync(() =>\n\t\t\t\tthis.#runtime.actorRequestSave(this.#ctx, {\n\t\t\t\t\tmaxWaitMs: opts.maxWait,\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tcallNativeSync(() =>\n\t\t\tthis.#runtime.actorRequestSave(this.#ctx, { immediate: false }),\n\t\t);\n\t}\n\n\tserializeForTick(reason: SerializeStateReason): RuntimeStateDeltaPayload {\n\t\tvoid reason;\n\t\tconst actorState = getNativePersistState(this.#runtime, this.#ctx);\n\t\tconst connHibernationRemoved = callNativeSync(() =>\n\t\t\tthis.#runtime.actorTakePendingHibernationChanges(this.#ctx),\n\t\t);\n\t\tfor (const connId of connHibernationRemoved) {\n\t\t\tactorState.connStates.delete(connId);\n\t\t}\n\t\tconst state =\n\t\t\tthis.#stateEnabled && this.#readState() !== undefined\n\t\t\t\t? encodeValue(this.#readState())\n\t\t\t\t: undefined;\n\t\tconst connHibernation = callNativeSync(() =>\n\t\t\tthis.#runtime.actorDirtyHibernatableConns(this.#ctx),\n\t\t).map((conn) => {\n\t\t\tconst connId = callNativeSync(() => this.#runtime.connId(conn));\n\t\t\treturn {\n\t\t\t\tconnId,\n\t\t\t\tbytes: callNativeSync(() => this.#runtime.connState(conn)),\n\t\t\t};\n\t\t});\n\n\t\treturn {\n\t\t\tstate,\n\t\t\tconnHibernation,\n\t\t\tconnHibernationRemoved,\n\t\t};\n\t}\n\n\tasync restartRunHandler(): Promise<void> {\n\t\tawait callNative(async () => {\n\t\t\tthis.#runtime.actorRestartRunHandler(this.#ctx);\n\t\t});\n\t}\n\n\tasync setAlarm(timestampMs?: number): Promise<void> {\n\t\tawait callNative(async () => {\n\t\t\tthis.#runtime.actorSetAlarm(this.#ctx, timestampMs);\n\t\t});\n\t}\n\n\tkeepAwake<T>(promise: Promise<T>): Promise<T> {\n\t\tconst trackedPromise = Promise.resolve(promise)\n\t\t\t.catch((error) => {\n\t\t\t\tlogger().warn({\n\t\t\t\t\tmsg: \"keepAwake promise rejected\",\n\t\t\t\t\terror: stringifyError(error),\n\t\t\t\t});\n\t\t\t})\n\t\t\t.then(() => null);\n\t\ttry {\n\t\t\tcallNativeSync(() =>\n\t\t\t\tthis.#runtime.actorKeepAwake(this.#ctx, trackedPromise),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tif (!isClosedTaskRegistrationError(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\treturn promise;\n\t}\n\n\trunHandlerActive(): boolean {\n\t\treturn this.#runHandlerActiveProvider?.() ?? false;\n\t}\n\n\tinternalKeepAwake<T>(run: Promise<T> | (() => Promise<T>)): Promise<T> {\n\t\tconst promise = typeof run === \"function\" ? run() : run;\n\t\tconst trackedPromise = promise.then(() => null);\n\t\ttry {\n\t\t\tcallNativeSync(() =>\n\t\t\t\tthis.#runtime.actorRegisterTask(this.#ctx, trackedPromise),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tif (!isClosedTaskRegistrationError(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\treturn promise;\n\t}\n\n\twaitUntil(promise: Promise<unknown>): void {\n\t\tconst trackedPromise = Promise.resolve(promise).then(() => null);\n\t\ttry {\n\t\t\tcallNativeSync(() =>\n\t\t\t\tthis.#runtime.actorWaitUntil(this.#ctx, trackedPromise),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tif (!isClosedTaskRegistrationError(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\tbeginWebSocketCallback(): number {\n\t\treturn callNativeSync(() =>\n\t\t\tthis.#runtime.actorBeginWebsocketCallback(this.#ctx),\n\t\t);\n\t}\n\n\tendWebSocketCallback(callbackRegionId: number): void {\n\t\tcallNativeSync(() =>\n\t\t\tthis.#runtime.actorEndWebsocketCallback(\n\t\t\t\tthis.#ctx,\n\t\t\t\tcallbackRegionId,\n\t\t\t),\n\t\t);\n\t}\n\n\t// Intentionally a no-op. `setPreventSleep` / `preventSleep` are kept on the\n\t// surface for legacy callers but must not gate sleep here. Callers that\n\t// need to keep an actor awake should use `keepAwake(promise)` or\n\t// `waitUntil(promise)` so the native counter machinery in rivetkit-core\n\t// owns the lifecycle.\n\t/** @deprecated Use `keepAwake(promise)` or `waitUntil(promise)` instead. */\n\tsetPreventSleep(_preventSleep: boolean): void {\n\t\tlogger().warn({\n\t\t\tmsg: \"setPreventSleep is deprecated and is a no-op; use keepAwake(promise) or waitUntil(promise) instead\",\n\t\t});\n\t}\n\n\t/** @deprecated Use `keepAwake(promise)` or `waitUntil(promise)` instead. */\n\tget preventSleep(): boolean {\n\t\tlogger().warn({\n\t\t\tmsg: \"preventSleep is deprecated and always returns false; use keepAwake(promise) or waitUntil(promise) instead\",\n\t\t});\n\t\treturn false;\n\t}\n\n\tsleep(): void {\n\t\tcallNativeSync(() => this.#runtime.actorSleep(this.#ctx));\n\t}\n\n\tdestroy(): void {\n\t\t// Call the native destroy first so it can throw `actor/starting` or\n\t\t// `actor/stopping` without leaving an unresolved destroyCompletion\n\t\t// promise behind in the native runtime state.\n\t\tcallNativeSync(() => this.#runtime.actorDestroy(this.#ctx));\n\t\tmarkNativeDestroyRequested(this.#runtime, this.#ctx);\n\t}\n\n\tclient<T = AnyClient>(): T extends Registry<any> ? Client<T> : T {\n\t\tif (!this.#client) {\n\t\t\tif (!this.#clientFactory) {\n\t\t\t\tthrow nativeClientNotConfiguredError();\n\t\t\t}\n\t\t\tthis.#client = this.#clientFactory();\n\t\t}\n\n\t\treturn this.#client as T extends Registry<any> ? Client<T> : T;\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tthis.#abortSignalCleanup?.();\n\t\tthis.#sql = undefined;\n\t}\n\n\t#createActorAbortSignal(): AbortSignal {\n\t\tconst nativeSignal = callNativeSync(() =>\n\t\t\tthis.#runtime.actorAbortSignal(this.#ctx),\n\t\t);\n\t\tconst controller = new AbortController();\n\t\tif (nativeSignal.aborted) {\n\t\t\tcontroller.abort();\n\t\t} else {\n\t\t\tnativeSignal.addEventListener(\"abort\", () => controller.abort(), {\n\t\t\t\tonce: true,\n\t\t\t});\n\t\t}\n\t\treturn controller.signal;\n\t}\n\n\t#readState(): unknown {\n\t\tconst actorState = getNativePersistState(this.#runtime, this.#ctx);\n\t\tif (actorState.state === undefined) {\n\t\t\tactorState.state = decodeValue(\n\t\t\t\tcallNativeSync(() => this.#runtime.actorState(this.#ctx)),\n\t\t\t);\n\t\t}\n\t\treturn actorState.state;\n\t}\n\n\t#writeState(\n\t\tvalue: unknown,\n\t\toptions: {\n\t\t\tscheduleSave: boolean;\n\t\t},\n\t): void {\n\t\tencodeValue(value);\n\t\tconst actorState = getNativePersistState(this.#runtime, this.#ctx);\n\t\tactorState.state = value;\n\t\tif (!options.scheduleSave) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#handleStateChange();\n\t}\n\n\t#assertCanMutateState(): void {\n\t\tconst actorState = getNativePersistState(this.#runtime, this.#ctx);\n\t\tif (actorState.isInOnStateChange) {\n\t\t\tthrow stateMutationReentrantError();\n\t\t}\n\t}\n\n\t#handleStateChange(): void {\n\t\tconst actorState = getNativePersistState(this.#runtime, this.#ctx);\n\t\tencodeValue(actorState.state);\n\t\tcallNativeSync(() =>\n\t\t\tthis.#runtime.actorRequestSave(this.#ctx, { immediate: false }),\n\t\t);\n\n\t\tif (!this.#onStateChange) {\n\t\t\treturn;\n\t\t}\n\n\t\tactorState.isInOnStateChange = true;\n\t\tcallNativeSync(() => this.#runtime.actorBeginOnStateChange(this.#ctx));\n\t\tlet shouldFinish = true;\n\t\ttry {\n\t\t\tconst result = this.#onStateChange(\n\t\t\t\tthis,\n\t\t\t\tactorState.state,\n\t\t\t) as unknown;\n\t\t\tif (isPromiseLike(result)) {\n\t\t\t\tshouldFinish = false;\n\t\t\t\tvoid Promise.resolve(result)\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\tlogger().error({\n\t\t\t\t\t\t\tmsg: \"error in `onStateChange`\",\n\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tactorState.isInOnStateChange = false;\n\t\t\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\t\t\tthis.#runtime.actorEndOnStateChange(this.#ctx),\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t}\n\t\t} finally {\n\t\t\tif (shouldFinish) {\n\t\t\t\tactorState.isInOnStateChange = false;\n\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\tthis.#runtime.actorEndOnStateChange(this.#ctx),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n\ntype NativeWorkflowQueueMessage = Awaited<\n\tReturnType<NativeQueueAdapter[\"next\"]>\n>;\n\nclass NativeWorkflowRuntimeAdapter {\n\t#ctx: ActorContextHandleAdapter;\n\t#completions = new Map<string, (response?: unknown) => Promise<void>>();\n\n\treadonly id: string;\n\treadonly driver: {\n\t\tkvBatchGet: (\n\t\t\tactorId: string,\n\t\t\tkeys: Uint8Array[],\n\t\t) => Promise<Array<Uint8Array | null>>;\n\t\tkvBatchPut: (\n\t\t\tactorId: string,\n\t\t\tentries: Array<[Uint8Array, Uint8Array]>,\n\t\t) => Promise<void>;\n\t\tkvBatchDelete: (actorId: string, keys: Uint8Array[]) => Promise<void>;\n\t\tkvDeleteRange: (\n\t\t\tactorId: string,\n\t\t\tstart: Uint8Array,\n\t\t\tend: Uint8Array,\n\t\t) => Promise<void>;\n\t\tkvListPrefix: (\n\t\t\tactorId: string,\n\t\t\tprefix: Uint8Array,\n\t\t) => Promise<Array<[Uint8Array, Uint8Array]>>;\n\t\tsetAlarm: (_actor: unknown, wakeAt: number) => Promise<void>;\n\t};\n\treadonly queueManager: {\n\t\tenqueue: (name: string, body: unknown) => Promise<unknown>;\n\t\treceive: (\n\t\t\tnames: string[] | undefined,\n\t\t\tcount: number,\n\t\t\ttimeout?: number,\n\t\t\t_abortSignal?: AbortSignal,\n\t\t\tcompletable?: boolean,\n\t\t) => Promise<\n\t\t\tArray<{\n\t\t\t\tid: bigint;\n\t\t\t\tname: string;\n\t\t\t\tbody: unknown;\n\t\t\t\tcreatedAt: number;\n\t\t\t\tcomplete?: (response?: unknown) => Promise<void>;\n\t\t\t}>\n\t\t>;\n\t\tcompleteMessage: (\n\t\t\tmessage: {\n\t\t\t\tid: bigint;\n\t\t\t\tcomplete?: (response?: unknown) => Promise<void>;\n\t\t\t},\n\t\t\tresponse?: unknown,\n\t\t) => Promise<void>;\n\t\tcompleteMessageById: (\n\t\t\tmessageId: bigint,\n\t\t\tresponse?: unknown,\n\t\t) => Promise<void>;\n\t\twaitForNames: (\n\t\t\tnames: readonly string[] | undefined,\n\t\t\tabortSignal?: AbortSignal,\n\t\t) => Promise<void>;\n\t};\n\treadonly stateManager: {\n\t\tsaveState: (opts?: {\n\t\t\timmediate?: boolean;\n\t\t\tmaxWait?: number;\n\t\t}) => Promise<void>;\n\t};\n\n\tconstructor(ctx: ActorContextHandleAdapter) {\n\t\tthis.#ctx = ctx;\n\t\tthis.id = ctx.actorId;\n\t\tthis.driver = {\n\t\t\tkvBatchGet: async (actorId, keys) => {\n\t\t\t\tthis.#assertActorId(actorId);\n\t\t\t\treturn await this.#ctx.kv.batchGet(keys);\n\t\t\t},\n\t\t\tkvBatchPut: async (actorId, entries) => {\n\t\t\t\tthis.#assertActorId(actorId);\n\t\t\t\tawait this.#ctx.kv.batchPut(entries);\n\t\t\t},\n\t\t\tkvBatchDelete: async (actorId, keys) => {\n\t\t\t\tthis.#assertActorId(actorId);\n\t\t\t\tawait this.#ctx.kv.batchDelete(keys);\n\t\t\t},\n\t\t\tkvDeleteRange: async (actorId, start, end) => {\n\t\t\t\tthis.#assertActorId(actorId);\n\t\t\t\tawait this.#ctx.kv.rawDeleteRange(start, end);\n\t\t\t},\n\t\t\tkvListPrefix: async (actorId, prefix) => {\n\t\t\t\tthis.#assertActorId(actorId);\n\t\t\t\treturn await this.#ctx.kv.rawListPrefix(prefix);\n\t\t\t},\n\t\t\tsetAlarm: async (_actor, wakeAt) => {\n\t\t\t\tawait this.#ctx.setAlarm(wakeAt);\n\t\t\t},\n\t\t};\n\t\tthis.queueManager = {\n\t\t\tenqueue: async (name, body) => {\n\t\t\t\treturn this.#wrapQueueMessage(\n\t\t\t\t\tawait this.#ctx.queue.send(name, body),\n\t\t\t\t);\n\t\t\t},\n\t\t\treceive: async (\n\t\t\t\tnames,\n\t\t\t\tcount,\n\t\t\t\ttimeout,\n\t\t\t\t_abortSignal,\n\t\t\t\tcompletable,\n\t\t\t) => {\n\t\t\t\tconst messages = await this.#ctx.queue.nextBatch({\n\t\t\t\t\tnames,\n\t\t\t\t\tcount,\n\t\t\t\t\ttimeout: timeout ?? 0,\n\t\t\t\t\tcompletable,\n\t\t\t\t});\n\t\t\t\treturn messages.map((message) =>\n\t\t\t\t\tthis.#wrapQueueMessage(message),\n\t\t\t\t);\n\t\t\t},\n\t\t\tcompleteMessage: async (message, response) => {\n\t\t\t\tawait message.complete?.(response);\n\t\t\t\tthis.#completions.delete(message.id.toString());\n\t\t\t},\n\t\t\tcompleteMessageById: async (messageId, response) => {\n\t\t\t\tconst complete = this.#completions.get(messageId.toString());\n\t\t\t\tif (!complete) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait complete(response);\n\t\t\t\tthis.#completions.delete(messageId.toString());\n\t\t\t},\n\t\t\twaitForNames: async (names, abortSignal) => {\n\t\t\t\tawait this.#ctx.queue.waitForNamesAvailable(names ?? [], {\n\t\t\t\t\tsignal: abortSignal,\n\t\t\t\t});\n\t\t\t},\n\t\t};\n\t\tthis.stateManager = {\n\t\t\tsaveState: async (opts) => {\n\t\t\t\tawait this.#ctx.saveState(opts);\n\t\t\t},\n\t\t};\n\t}\n\n\tisRunHandlerActive(): boolean {\n\t\treturn this.#ctx.runHandlerActive();\n\t}\n\n\tasync restartRunHandler(): Promise<void> {\n\t\tawait this.#ctx.restartRunHandler();\n\t}\n\n\t#assertActorId(actorId: string): void {\n\t\tif (actorId !== this.id) {\n\t\t\tthrow new Error(\n\t\t\t\t`workflow runtime actor id mismatch: expected ${this.id}, got ${actorId}`,\n\t\t\t);\n\t\t}\n\t}\n\n\t#wrapQueueMessage(message: NativeWorkflowQueueMessage) {\n\t\tif (!message) {\n\t\t\tthrow new Error(\"native workflow queue message missing\");\n\t\t}\n\n\t\tconst id = BigInt(message.id);\n\t\tlet complete: ((response?: unknown) => Promise<void>) | undefined;\n\t\tif (message.complete) {\n\t\t\tcomplete = async (response?: unknown) => {\n\t\t\t\tawait message.complete?.(response);\n\t\t\t};\n\t\t\tthis.#completions.set(id.toString(), complete);\n\t\t}\n\n\t\treturn {\n\t\t\tid,\n\t\t\tname: message.name,\n\t\t\tbody: message.body,\n\t\t\tcreatedAt: message.createdAt,\n\t\t\tcomplete,\n\t\t};\n\t}\n}\n\nfunction withConnContext(\n\truntime: CoreRuntime,\n\tctx: ActorContextHandle,\n\tconn: ConnHandle,\n\tclientFactory?: () => AnyClient,\n\tschemas: NativeValidationConfig = {},\n\tdatabaseProvider?: AnyDatabaseProvider,\n\trequest?: Request,\n\tstateEnabled = true,\n\tonStateChange?: NativeOnStateChangeHandler,\n\tdispatchCancelToken?: CancellationTokenHandle,\n) {\n\treturn Object.assign(\n\t\tnew ActorContextHandleAdapter(\n\t\t\truntime,\n\t\t\tctx,\n\t\t\tclientFactory,\n\t\t\tschemas,\n\t\t\tdatabaseProvider,\n\t\t\trequest,\n\t\t\tstateEnabled,\n\t\t\tundefined,\n\t\t\tonStateChange,\n\t\t\tdispatchCancelToken,\n\t\t),\n\t\t{\n\t\t\tconn: new NativeConnAdapter(runtime, conn, schemas, ctx, (connId) =>\n\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\truntime.actorQueueHibernationRemoval(ctx, connId),\n\t\t\t\t),\n\t\t\t),\n\t\t},\n\t);\n}\n\nfunction buildActorConfig(\n\tdefinition: AnyActorDefinition,\n\tregistryConfig: RegistryConfig,\n): RuntimeActorConfig {\n\tconst config = definition.config as unknown as Record<string, unknown>;\n\tconst options = (config.options ?? {}) as Record<string, unknown>;\n\tconst canHibernate = options.canHibernateWebSocket;\n\n\treturn {\n\t\tname: options.name as string | undefined,\n\t\ticon: options.icon as string | undefined,\n\t\thasDatabase: config.db !== undefined,\n\t\tremoteSqlite:\n\t\t\tconfig.db !== undefined &&\n\t\t\tsqliteBackendForConfig(registryConfig) === \"remote\",\n\t\thasState:\n\t\t\tconfig.state !== undefined ||\n\t\t\ttypeof config.createState === \"function\",\n\t\tcanHibernateWebsocket:\n\t\t\ttypeof canHibernate === \"boolean\" ? canHibernate : undefined,\n\t\tstateSaveIntervalMs: options.stateSaveInterval as number | undefined,\n\t\tcreateVarsTimeoutMs: options.createVarsTimeout as number | undefined,\n\t\tcreateConnStateTimeoutMs: options.createConnStateTimeout as\n\t\t\t| number\n\t\t\t| undefined,\n\t\tonBeforeConnectTimeoutMs: options.onBeforeConnectTimeout as\n\t\t\t| number\n\t\t\t| undefined,\n\t\tonConnectTimeoutMs: options.onConnectTimeout as number | undefined,\n\t\tonMigrateTimeoutMs: options.onMigrateTimeout as number | undefined,\n\t\tactionTimeoutMs: options.actionTimeout as number | undefined,\n\t\tsleepTimeoutMs: options.sleepTimeout as number | undefined,\n\t\tnoSleep: options.noSleep as boolean | undefined,\n\t\tsleepGracePeriodMs: options.sleepGracePeriod as number | undefined,\n\t\tconnectionLivenessTimeoutMs: options.connectionLivenessTimeout as\n\t\t\t| number\n\t\t\t| undefined,\n\t\tconnectionLivenessIntervalMs: options.connectionLivenessInterval as\n\t\t\t| number\n\t\t\t| undefined,\n\t\tmaxQueueSize: options.maxQueueSize as number | undefined,\n\t\tmaxQueueMessageSize: options.maxQueueMessageSize as number | undefined,\n\t\tmaxIncomingMessageSize: registryConfig.maxIncomingMessageSize as\n\t\t\t| number\n\t\t\t| undefined,\n\t\tmaxOutgoingMessageSize: registryConfig.maxOutgoingMessageSize as\n\t\t\t| number\n\t\t\t| undefined,\n\t\tpreloadMaxWorkflowBytes: options.preloadMaxWorkflowBytes as\n\t\t\t| number\n\t\t\t| undefined,\n\t\tpreloadMaxConnectionsBytes: options.preloadMaxConnectionsBytes as\n\t\t\t| number\n\t\t\t| undefined,\n\t\tactions: Object.keys((config.actions ?? {}) as Record<string, unknown>)\n\t\t\t.sort()\n\t\t\t.map((name) => ({ name })),\n\t};\n}\n\nexport function buildNativeFactory(\n\truntime: CoreRuntime,\n\tregistryConfig: RegistryConfig,\n\tdefinition: AnyActorDefinition,\n): ActorFactoryHandle {\n\tconst config = definition.config as Record<string, any>;\n\tconst databaseProvider = config.db as AnyDatabaseProvider;\n\tconst schemaConfig: NativeValidationConfig = {\n\t\tactionInputSchemas: config.actionInputSchemas,\n\t\tconnParamsSchema: config.connParamsSchema,\n\t\tevents: config.events,\n\t\tqueues: config.queues,\n\t};\n\tconst actionHandlers = Object.fromEntries(\n\t\t(\n\t\t\tObject.entries(config.actions ?? {}) as Array<\n\t\t\t\t[string, (...args: Array<any>) => any]\n\t\t\t>\n\t\t).map(([name, handler]) => [name, handler]),\n\t);\n\tconst createClient = () =>\n\t\tcreateClientWithDriver(\n\t\t\tnew RemoteEngineControlClient(\n\t\t\t\tconvertRegistryConfigToClientConfig(registryConfig),\n\t\t\t),\n\t\t\t{ encoding: \"bare\" },\n\t\t);\n\tconst nativeRunHandlerActiveByActorId = new Map<string, boolean>();\n\tconst isNativeRunHandlerActive = (ctx: ActorContextHandle) =>\n\t\tnativeRunHandlerActiveByActorId.get(\n\t\t\tcallNativeSync(() => runtime.actorId(ctx)),\n\t\t) ?? false;\n\tconst getNativeWorkflowInspector = (ctx: ActorContextHandle) =>\n\t\tgetRunInspectorConfig(\n\t\t\tconfig.run,\n\t\t\tcallNativeSync(() => runtime.actorId(ctx)),\n\t\t)?.workflow as NativeWorkflowInspectorConfig | undefined;\n\tconst onStateChange =\n\t\ttypeof config.onStateChange === \"function\"\n\t\t\t? (actorCtx: ActorContextHandleAdapter, nextState: unknown) => {\n\t\t\t\t\tconfig.onStateChange(actorCtx, nextState);\n\t\t\t\t}\n\t\t\t: undefined;\n\tconst hasStaticState = \"state\" in config;\n\tconst hasStaticVars = \"vars\" in config;\n\tconst hasStaticConnState = Object.hasOwn(config, \"connState\");\n\tconst hasDynamicConnState = typeof config.createConnState === \"function\";\n\tconst onSleep =\n\t\ttypeof config.onSleep === \"function\" ? config.onSleep : undefined;\n\tconst needsDisconnectCallback =\n\t\ttypeof config.onDisconnect === \"function\" ||\n\t\thasStaticConnState ||\n\t\thasDynamicConnState ||\n\t\tconfig.options?.canHibernateWebSocket === true;\n\tconst stateEnabled =\n\t\tconfig.state !== undefined || typeof config.createState === \"function\";\n\tconst makeActorCtx = (\n\t\tctx: ActorContextHandle,\n\t\trequest?: Request,\n\t\tcancelToken?: CancellationTokenHandle,\n\t) =>\n\t\tnew ActorContextHandleAdapter(\n\t\t\truntime,\n\t\t\tctx,\n\t\t\tcreateClient,\n\t\t\tschemaConfig,\n\t\t\tdatabaseProvider,\n\t\t\trequest,\n\t\t\tstateEnabled,\n\t\t\t() => isNativeRunHandlerActive(ctx),\n\t\t\tonStateChange,\n\t\t\tcancelToken,\n\t\t);\n\tconst makeConnCtx = (\n\t\tctx: ActorContextHandle,\n\t\tconn: ConnHandle,\n\t\trequest?: Request,\n\t\tcancelToken?: CancellationTokenHandle,\n\t) =>\n\t\twithConnContext(\n\t\t\truntime,\n\t\t\tctx,\n\t\t\tconn,\n\t\t\tcreateClient,\n\t\t\tschemaConfig,\n\t\t\tdatabaseProvider,\n\t\t\trequest,\n\t\t\tstateEnabled,\n\t\t\tonStateChange,\n\t\t\tcancelToken,\n\t\t);\n\tconst maybeHandleNativeInspectorRequest = async (\n\t\tctx: ActorContextHandle,\n\t\t_rawRequest: {\n\t\t\tmethod: string;\n\t\t\turi: string;\n\t\t\theaders?: Record<string, string>;\n\t\t\tbody?: RuntimeBytes;\n\t\t},\n\t\tjsRequest: Request,\n\t): Promise<Response | undefined> => {\n\t\tconst url = new URL(jsRequest.url);\n\t\tif (!url.pathname.startsWith(\"/inspector/\")) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst jsonResponse = (body: unknown, init?: ResponseInit) =>\n\t\t\tnew Response(JSON.stringify(body), {\n\t\t\t\tstatus: init?.status ?? 200,\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t...(init?.headers ?? {}),\n\t\t\t\t},\n\t\t\t});\n\t\tconst errorResponse = (error: unknown, status?: number) => {\n\t\t\tconst rivetError = toRivetError(error);\n\t\t\treturn jsonResponse(\n\t\t\t\t{\n\t\t\t\t\tgroup: rivetError.group,\n\t\t\t\t\tcode: rivetError.code,\n\t\t\t\t\tmessage: rivetError.message,\n\t\t\t\t\tmetadata: rivetError.metadata ?? null,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tstatus:\n\t\t\t\t\t\tstatus ??\n\t\t\t\t\t\trivetError.statusCode ??\n\t\t\t\t\t\t(rivetError.public ? 400 : 500),\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\t\ttry {\n\t\t\tawait runtime.actorVerifyInspectorAuth(\n\t\t\t\tctx,\n\t\t\t\tjsRequest.headers\n\t\t\t\t\t.get(\"authorization\")\n\t\t\t\t\t?.replace(/^Bearer\\s+/i, \"\") ?? null,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\treturn errorResponse(error, 401);\n\t\t}\n\n\t\tconst workflowHistory = () =>\n\t\t\tserializeWorkflowHistoryForJson(\n\t\t\t\tgetNativeWorkflowInspector(ctx)?.getHistory() ?? null,\n\t\t\t);\n\t\tconst workflowState = async () =>\n\t\t\t(await getNativeWorkflowInspector(ctx)?.getState?.()) ?? null;\n\t\tconst actorCtx = makeActorCtx(ctx, jsRequest);\n\t\ttry {\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/state\" &&\n\t\t\t\tjsRequest.method === \"GET\"\n\t\t\t) {\n\t\t\t\treturn jsonResponse({\n\t\t\t\t\tstate: stateEnabled ? actorCtx.state : undefined,\n\t\t\t\t\tisStateEnabled: stateEnabled,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/state\" &&\n\t\t\t\tjsRequest.method === \"PATCH\"\n\t\t\t) {\n\t\t\t\tconst body = (await jsRequest.json()) as { state?: unknown };\n\t\t\t\tactorCtx.state = body.state;\n\t\t\t\tawait actorCtx.saveState({ immediate: true });\n\t\t\t\treturn jsonResponse({ ok: true });\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/connections\" &&\n\t\t\t\tjsRequest.method === \"GET\"\n\t\t\t) {\n\t\t\t\treturn jsonResponse({\n\t\t\t\t\tconnections: Array.from(actorCtx.conns.values()).map(\n\t\t\t\t\t\t(conn) => ({\n\t\t\t\t\t\t\ttype: null,\n\t\t\t\t\t\t\tid: conn.id,\n\t\t\t\t\t\t\tdetails: {\n\t\t\t\t\t\t\t\ttype: null,\n\t\t\t\t\t\t\t\tparams: conn.params,\n\t\t\t\t\t\t\t\tstateEnabled: true,\n\t\t\t\t\t\t\t\tstate: conn.state,\n\t\t\t\t\t\t\t\tsubscriptions: 0,\n\t\t\t\t\t\t\t\tisHibernatable: conn.isHibernatable,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/rpcs\" &&\n\t\t\t\tjsRequest.method === \"GET\"\n\t\t\t) {\n\t\t\t\treturn jsonResponse({\n\t\t\t\t\trpcs: Object.keys(actionHandlers).sort(),\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/queue\" &&\n\t\t\t\tjsRequest.method === \"GET\"\n\t\t\t) {\n\t\t\t\tconst limitParam = url.searchParams.get(\"limit\");\n\t\t\t\tconst parsedLimit = limitParam ? Number(limitParam) : 100;\n\t\t\t\tconst limit =\n\t\t\t\t\tNumber.isFinite(parsedLimit) && parsedLimit > 0\n\t\t\t\t\t\t? Math.floor(parsedLimit)\n\t\t\t\t\t\t: 100;\n\t\t\t\tconst allMessages =\n\t\t\t\t\tawait runtime.actorQueueInspectMessages(ctx);\n\t\t\t\tconst truncated = allMessages.length > limit;\n\t\t\t\tconst messages = allMessages.slice(0, limit).map((m) => ({\n\t\t\t\t\tid: m.id,\n\t\t\t\t\tname: m.name,\n\t\t\t\t\tcreatedAtMs: m.createdAtMs,\n\t\t\t\t}));\n\t\t\t\treturn jsonResponse({\n\t\t\t\t\tsize: allMessages.length,\n\t\t\t\t\tmaxSize: runtime.actorQueueMaxSize(ctx),\n\t\t\t\t\ttruncated,\n\t\t\t\t\tmessages,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/traces\" &&\n\t\t\t\tjsRequest.method === \"GET\"\n\t\t\t) {\n\t\t\t\treturn jsonResponse({ otlp: [], clamped: false });\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/workflow-history\" &&\n\t\t\t\tjsRequest.method === \"GET\"\n\t\t\t) {\n\t\t\t\treturn jsonResponse({\n\t\t\t\t\thistory: workflowHistory(),\n\t\t\t\t\tworkflowState: await workflowState(),\n\t\t\t\t\tisWorkflowEnabled:\n\t\t\t\t\t\tgetNativeWorkflowInspector(ctx) !== undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/workflow/replay\" &&\n\t\t\t\tjsRequest.method === \"POST\"\n\t\t\t) {\n\t\t\t\ttry {\n\t\t\t\t\tconst body = (await jsRequest.json()) as {\n\t\t\t\t\t\tentryId?: string;\n\t\t\t\t\t};\n\t\t\t\t\tconst history = await getNativeWorkflowInspector(\n\t\t\t\t\t\tctx,\n\t\t\t\t\t)?.replayFromStep?.(body.entryId);\n\t\t\t\t\treturn jsonResponse({\n\t\t\t\t\t\thistory: serializeWorkflowHistoryForJson(\n\t\t\t\t\t\t\thistory ?? null,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tworkflowState: await workflowState(),\n\t\t\t\t\t\tisWorkflowEnabled:\n\t\t\t\t\t\t\tgetNativeWorkflowInspector(ctx) !== undefined,\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn errorResponse(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/database/schema\" &&\n\t\t\t\tjsRequest.method === \"GET\"\n\t\t\t) {\n\t\t\t\tconst db = actorCtx.sql;\n\t\t\t\tconst tables = queryRows(\n\t\t\t\t\tawait db.query(\n\t\t\t\t\t\t\"SELECT name, type FROM sqlite_master WHERE type IN ('table', 'view') AND name NOT LIKE 'sqlite_%' AND name NOT LIKE '__drizzle_%' ORDER BY name\",\n\t\t\t\t\t),\n\t\t\t\t) as Array<{ name: string; type: string }>;\n\t\t\t\tconst tableInfos = [];\n\t\t\t\tfor (const table of tables) {\n\t\t\t\t\tconst quoted = `\"${table.name.replace(/\"/g, '\"\"')}\"`;\n\t\t\t\t\tconst columns = queryRows(\n\t\t\t\t\t\tawait db.query(`PRAGMA table_info(${quoted})`),\n\t\t\t\t\t);\n\t\t\t\t\tconst foreignKeys = queryRows(\n\t\t\t\t\t\tawait db.query(`PRAGMA foreign_key_list(${quoted})`),\n\t\t\t\t\t);\n\t\t\t\t\tconst countResult = queryRows(\n\t\t\t\t\t\tawait db.query(\n\t\t\t\t\t\t\t`SELECT COUNT(*) as count FROM ${quoted}`,\n\t\t\t\t\t\t),\n\t\t\t\t\t) as Array<{ count?: number }>;\n\t\t\t\t\ttableInfos.push({\n\t\t\t\t\t\ttable: {\n\t\t\t\t\t\t\tschema: \"main\",\n\t\t\t\t\t\t\tname: table.name,\n\t\t\t\t\t\t\ttype: table.type,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcolumns: jsonSafe(columns),\n\t\t\t\t\t\tforeignKeys: jsonSafe(foreignKeys),\n\t\t\t\t\t\trecords: countResult[0]?.count ?? 0,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn jsonResponse({ schema: { tables: tableInfos } });\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/database/rows\" &&\n\t\t\t\tjsRequest.method === \"GET\"\n\t\t\t) {\n\t\t\t\tconst table = url.searchParams.get(\"table\");\n\t\t\t\tif (!table) {\n\t\t\t\t\treturn jsonResponse(\n\t\t\t\t\t\t{ error: \"Missing required table query parameter\" },\n\t\t\t\t\t\t{ status: 400 },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst limit = Number.parseInt(\n\t\t\t\t\turl.searchParams.get(\"limit\") ?? \"100\",\n\t\t\t\t\t10,\n\t\t\t\t);\n\t\t\t\tconst offset = Number.parseInt(\n\t\t\t\t\turl.searchParams.get(\"offset\") ?? \"0\",\n\t\t\t\t\t10,\n\t\t\t\t);\n\t\t\t\tconst quoted = `\"${table.replace(/\"/g, '\"\"')}\"`;\n\t\t\t\tconst rows = queryRows(\n\t\t\t\t\tawait actorCtx.sql.query(\n\t\t\t\t\t\t`SELECT * FROM ${quoted} LIMIT ? OFFSET ?`,\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tMath.max(0, Math.min(limit, 500)),\n\t\t\t\t\t\t\tMath.max(0, offset),\n\t\t\t\t\t\t],\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\treturn jsonResponse({ rows: jsonSafe(rows) });\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/database/execute\" &&\n\t\t\t\tjsRequest.method === \"POST\"\n\t\t\t) {\n\t\t\t\tconst body = (await jsRequest.json()) as {\n\t\t\t\t\tsql?: unknown;\n\t\t\t\t\targs?: unknown;\n\t\t\t\t\tproperties?: unknown;\n\t\t\t\t};\n\t\t\t\tif (typeof body.sql !== \"string\" || body.sql.trim() === \"\") {\n\t\t\t\t\treturn jsonResponse(\n\t\t\t\t\t\t{ error: \"sql is required\" },\n\t\t\t\t\t\t{ status: 400 },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tArray.isArray(body.args) &&\n\t\t\t\t\tbody.properties &&\n\t\t\t\t\ttypeof body.properties === \"object\"\n\t\t\t\t) {\n\t\t\t\t\treturn jsonResponse(\n\t\t\t\t\t\t{ error: \"use either args or properties, not both\" },\n\t\t\t\t\t\t{ status: 400 },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tbody.properties &&\n\t\t\t\t\ttypeof body.properties === \"object\" &&\n\t\t\t\t\t!Array.isArray(body.properties)\n\t\t\t\t) {\n\t\t\t\t\tconst bindings = normalizeSqlitePropertyBindings(\n\t\t\t\t\t\tbody.properties as Record<string, unknown>,\n\t\t\t\t\t);\n\t\t\t\t\tconst rows = queryRows(\n\t\t\t\t\t\tawait actorCtx.sql.query(body.sql, bindings),\n\t\t\t\t\t);\n\t\t\t\t\treturn jsonResponse({ rows: jsonSafe(rows) });\n\t\t\t\t}\n\t\t\t\tconst args = Array.isArray(body.args) ? body.args : [];\n\t\t\t\tconst rows = queryRows(\n\t\t\t\t\tawait actorCtx.sql.query(body.sql, args),\n\t\t\t\t);\n\t\t\t\treturn jsonResponse({ rows: jsonSafe(rows) });\n\t\t\t}\n\t\t\tif (\n\t\t\t\turl.pathname === \"/inspector/summary\" &&\n\t\t\t\tjsRequest.method === \"GET\"\n\t\t\t) {\n\t\t\t\tconst inspectorSnapshot = callNativeSync(() =>\n\t\t\t\t\truntime.actorInspectorSnapshot(ctx),\n\t\t\t\t);\n\t\t\t\treturn jsonResponse({\n\t\t\t\t\tstate: stateEnabled ? actorCtx.state : undefined,\n\t\t\t\t\tconnections: Array.from(actorCtx.conns.values()).map(\n\t\t\t\t\t\t(conn) => ({\n\t\t\t\t\t\t\ttype: null,\n\t\t\t\t\t\t\tid: conn.id,\n\t\t\t\t\t\t\tdetails: {\n\t\t\t\t\t\t\t\ttype: null,\n\t\t\t\t\t\t\t\tparams: conn.params,\n\t\t\t\t\t\t\t\tstateEnabled: true,\n\t\t\t\t\t\t\t\tstate: conn.state,\n\t\t\t\t\t\t\t\tsubscriptions: 0,\n\t\t\t\t\t\t\t\tisHibernatable: conn.isHibernatable,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t\trpcs: Object.keys(actionHandlers).sort(),\n\t\t\t\t\tqueueSize: inspectorSnapshot.queueSize,\n\t\t\t\t\tisStateEnabled: stateEnabled,\n\t\t\t\t\tisDatabaseEnabled: databaseProvider !== undefined,\n\t\t\t\t\tisWorkflowEnabled:\n\t\t\t\t\t\tgetNativeWorkflowInspector(ctx) !== undefined,\n\t\t\t\t\tworkflowState: await workflowState(),\n\t\t\t\t\tworkflowHistory: workflowHistory(),\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (\n\t\t\t\tjsRequest.method === \"POST\" &&\n\t\t\t\turl.pathname.startsWith(\"/inspector/action/\")\n\t\t\t) {\n\t\t\t\tconst actionName = url.pathname.replace(\n\t\t\t\t\t\"/inspector/action/\",\n\t\t\t\t\t\"\",\n\t\t\t\t);\n\t\t\t\tconst action = actionHandlers[actionName];\n\t\t\t\tif (!action) {\n\t\t\t\t\treturn errorResponse(\n\t\t\t\t\t\tnew RivetError(\n\t\t\t\t\t\t\t\"action\",\n\t\t\t\t\t\t\t\"action_not_found\",\n\t\t\t\t\t\t\t`Action ${actionName} not found`,\n\t\t\t\t\t\t),\n\t\t\t\t\t\t404,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst body = (await jsRequest.json()) as { args?: unknown[] };\n\t\t\t\ttry {\n\t\t\t\t\tconst output = await action(\n\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t...validateActionArgs(\n\t\t\t\t\t\t\tschemaConfig.actionInputSchemas,\n\t\t\t\t\t\t\tactionName,\n\t\t\t\t\t\t\tbody.args ?? [],\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\treturn jsonResponse({ output });\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn errorResponse(error);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jsonResponse(\n\t\t\t\t{\n\t\t\t\t\tgroup: \"actor\",\n\t\t\t\t\tcode: \"not_found\",\n\t\t\t\t\tmessage: \"Inspector route was not found\",\n\t\t\t\t\tmetadata: null,\n\t\t\t\t},\n\t\t\t\t{ status: 404 },\n\t\t\t);\n\t\t} catch (error) {\n\t\t\treturn errorResponse(error);\n\t\t} finally {\n\t\t\tawait actorCtx.dispose();\n\t\t}\n\t};\n\tconst callbacks = {\n\t\tcreateState:\n\t\t\thasStaticState || typeof config.createState === \"function\"\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tinput?: RuntimeBytes;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t): Promise<RuntimeBytes> => {\n\t\t\t\t\t\t\tconst { ctx, input } = unwrapTsfnPayload(\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst decodedInput = decodeValue(input);\n\t\t\t\t\t\t\t\tconst startedAt = performance.now();\n\t\t\t\t\t\t\t\tconst state = hasStaticState\n\t\t\t\t\t\t\t\t\t? structuredClone(config.state)\n\t\t\t\t\t\t\t\t\t: await config.createState(\n\t\t\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\t\t\tdecodedInput,\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tlogger().debug({\n\t\t\t\t\t\t\t\t\tmsg: \"perf user: createStateMs\",\n\t\t\t\t\t\t\t\t\tdurationMs: performance.now() - startedAt,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tactorCtx.initializeState(state);\n\t\t\t\t\t\t\t\treturn encodeValue(state);\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tonCreate:\n\t\t\ttypeof config.onCreate === \"function\"\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tinput?: RuntimeBytes;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t): Promise<void> => {\n\t\t\t\t\t\t\tconst { ctx, input } = unwrapTsfnPayload(\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait config.onCreate(\n\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\tdecodeValue(input),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tcreateVars:\n\t\t\thasStaticVars || typeof config.createVars === \"function\"\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: { ctx: ActorContextHandle },\n\t\t\t\t\t\t): Promise<void> => {\n\t\t\t\t\t\t\tconst { ctx } = unwrapTsfnPayload(error, payload);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst startedAt = performance.now();\n\t\t\t\t\t\t\t\tconst vars = hasStaticVars\n\t\t\t\t\t\t\t\t\t? structuredClone(config.vars)\n\t\t\t\t\t\t\t\t\t: await config.createVars(\n\t\t\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tlogger().debug({\n\t\t\t\t\t\t\t\t\tmsg: \"perf user: createVarsMs\",\n\t\t\t\t\t\t\t\t\tdurationMs: performance.now() - startedAt,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tactorCtx.vars = vars;\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tonMigrate:\n\t\t\ttypeof config.onMigrate === \"function\" ||\n\t\t\tdatabaseProvider !== undefined\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tisNew: boolean;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx, isNew } = unwrapTsfnPayload(\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tif (!isNew) {\n\t\t\t\t\t\t\t\t\tawait actorCtx.closeDatabase();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tawait actorCtx.runDatabaseMigrations();\n\t\t\t\t\t\t\t\tif (typeof config.onMigrate === \"function\") {\n\t\t\t\t\t\t\t\t\tawait config.onMigrate(actorCtx, isNew);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tawait actorCtx.closeDatabase();\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tonWake:\n\t\t\ttypeof config.onWake === \"function\"\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: { ctx: ActorContextHandle },\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx } = unwrapTsfnPayload(error, payload);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst startedAt = performance.now();\n\t\t\t\t\t\t\t\tawait config.onWake(actorCtx);\n\t\t\t\t\t\t\t\tlogger().debug({\n\t\t\t\t\t\t\t\t\tmsg: \"perf user: onWakeMs\",\n\t\t\t\t\t\t\t\t\tdurationMs: performance.now() - startedAt,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tonBeforeActorStart:\n\t\t\ttypeof config.onBeforeActorStart === \"function\"\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: { ctx: ActorContextHandle },\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx } = unwrapTsfnPayload(error, payload);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait config.onBeforeActorStart(actorCtx);\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tonSleep: wrapNativeCallback(\n\t\t\tasync (error: unknown, payload: { ctx: ActorContextHandle }) => {\n\t\t\t\tconst { ctx } = unwrapTsfnPayload(error, payload);\n\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\ttry {\n\t\t\t\t\tif (onSleep) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait onSleep(actorCtx);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (runtime.kind === \"wasm\") {\n\t\t\t\t\t\t\t\t// Wasm cannot use the native context save helper here because\n\t\t\t\t\t\t\t\t// the runtime owns the serialized state handoff.\n\t\t\t\t\t\t\t\tawait runtime.actorSaveState(\n\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\tactorCtx.serializeForTick(\"save\"),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tawait actorCtx.saveState({ immediate: true });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait cleanupNativeSleepRuntimeState(runtime, ctx);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tonDestroy: wrapNativeCallback(\n\t\t\tasync (error: unknown, payload: { ctx: ActorContextHandle }) => {\n\t\t\t\tconst { ctx } = unwrapTsfnPayload(error, payload);\n\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\ttry {\n\t\t\t\t\tif (typeof config.onDestroy === \"function\") {\n\t\t\t\t\t\tawait config.onDestroy(actorCtx);\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tresolveNativeDestroy(runtime, ctx);\n\t\t\t\t\tawait actorCtx.closeDatabase();\n\t\t\t\t\tclearNativeRuntimeState(runtime, ctx);\n\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tonBeforeConnect:\n\t\t\ttypeof config.onBeforeConnect === \"function\"\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tparams: RuntimeBytes;\n\t\t\t\t\t\t\t\trequest?: {\n\t\t\t\t\t\t\t\t\tmethod: string;\n\t\t\t\t\t\t\t\t\turi: string;\n\t\t\t\t\t\t\t\t\theaders?: Record<string, string>;\n\t\t\t\t\t\t\t\t\tbody?: RuntimeBytes;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx, params, request } = unwrapTsfnPayload(\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(\n\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\trequest ? buildRequest(request) : undefined,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait config.onBeforeConnect(\n\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\tvalidateConnParams(\n\t\t\t\t\t\t\t\t\t\tschemaConfig.connParamsSchema,\n\t\t\t\t\t\t\t\t\t\tdecodeValue(params),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tcreateConnState:\n\t\t\thasStaticConnState || hasDynamicConnState\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tconn: ConnHandle;\n\t\t\t\t\t\t\t\tparams: RuntimeBytes;\n\t\t\t\t\t\t\t\trequest?: {\n\t\t\t\t\t\t\t\t\tmethod: string;\n\t\t\t\t\t\t\t\t\turi: string;\n\t\t\t\t\t\t\t\t\theaders?: Record<string, string>;\n\t\t\t\t\t\t\t\t\tbody?: RuntimeBytes;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t): Promise<RuntimeBytes> => {\n\t\t\t\t\t\t\tconst { ctx, conn, params, request } =\n\t\t\t\t\t\t\t\tunwrapTsfnPayload(error, payload);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(\n\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\trequest ? buildRequest(request) : undefined,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst connAdapter = new NativeConnAdapter(\n\t\t\t\t\t\t\t\truntime,\n\t\t\t\t\t\t\t\tconn,\n\t\t\t\t\t\t\t\tschemaConfig,\n\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t(connId) =>\n\t\t\t\t\t\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\t\t\t\t\t\truntime.actorQueueHibernationRemoval(\n\t\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\t\tconnId,\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst nextConnState = hasStaticConnState\n\t\t\t\t\t\t\t\t\t? structuredClone(config.connState)\n\t\t\t\t\t\t\t\t\t: await config.createConnState(\n\t\t\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\t\t\tvalidateConnParams(\n\t\t\t\t\t\t\t\t\t\t\t\tschemaConfig.connParamsSchema,\n\t\t\t\t\t\t\t\t\t\t\t\tdecodeValue(params),\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconnAdapter.initializeState(nextConnState);\n\t\t\t\t\t\t\t\treturn encodeValue(nextConnState);\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tonConnect:\n\t\t\ttypeof config.onConnect === \"function\"\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tconn: ConnHandle;\n\t\t\t\t\t\t\t\trequest?: {\n\t\t\t\t\t\t\t\t\tmethod: string;\n\t\t\t\t\t\t\t\t\turi: string;\n\t\t\t\t\t\t\t\t\theaders?: Record<string, string>;\n\t\t\t\t\t\t\t\t\tbody?: RuntimeBytes;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx, conn, request } = unwrapTsfnPayload(\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(\n\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\trequest ? buildRequest(request) : undefined,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst connAdapter = new NativeConnAdapter(\n\t\t\t\t\t\t\t\truntime,\n\t\t\t\t\t\t\t\tconn,\n\t\t\t\t\t\t\t\tschemaConfig,\n\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t(connId) =>\n\t\t\t\t\t\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\t\t\t\t\t\truntime.actorQueueHibernationRemoval(\n\t\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\t\tconnId,\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait config.onConnect(\n\t\t\t\t\t\t\t\t\tObject.assign(actorCtx, {\n\t\t\t\t\t\t\t\t\t\tconn: connAdapter,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\tconnAdapter,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tonDisconnectFinal: needsDisconnectCallback\n\t\t\t? wrapNativeCallback(\n\t\t\t\t\tasync (\n\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\tconn: ConnHandle;\n\t\t\t\t\t\t},\n\t\t\t\t\t) => {\n\t\t\t\t\t\tconst { ctx, conn } = unwrapTsfnPayload(error, payload);\n\t\t\t\t\t\tconst actorCtx = makeConnCtx(ctx, conn);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// Core already removed the connection; this hook is\n\t\t\t\t\t\t\t// pure user dispatch.\n\t\t\t\t\t\t\tif (typeof config.onDisconnect === \"function\") {\n\t\t\t\t\t\t\t\tawait config.onDisconnect(\n\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\tnew NativeConnAdapter(\n\t\t\t\t\t\t\t\t\t\truntime,\n\t\t\t\t\t\t\t\t\t\tconn,\n\t\t\t\t\t\t\t\t\t\tschemaConfig,\n\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\t(connId) =>\n\t\t\t\t\t\t\t\t\t\t\tcallNativeSync(() =>\n\t\t\t\t\t\t\t\t\t\t\t\truntime.actorQueueHibernationRemoval(\n\t\t\t\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\t\t\t\tconnId,\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t: undefined,\n\t\tonBeforeSubscribe:\n\t\t\tschemaConfig.events &&\n\t\t\tObject.values(schemaConfig.events).some(\n\t\t\t\t(schema) =>\n\t\t\t\t\ttypeof (schema as { canSubscribe?: unknown })\n\t\t\t\t\t\t.canSubscribe === \"function\",\n\t\t\t)\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tconn: ConnHandle;\n\t\t\t\t\t\t\t\teventName: string;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx, conn, eventName } = unwrapTsfnPayload(\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst actorCtx = makeConnCtx(ctx, conn);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst canSubscribe = getEventCanSubscribe(\n\t\t\t\t\t\t\t\t\tschemaConfig.events,\n\t\t\t\t\t\t\t\t\teventName,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tif (!canSubscribe) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst result = await canSubscribe(actorCtx);\n\t\t\t\t\t\t\t\tif (typeof result !== \"boolean\") {\n\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t\"canSubscribe must return a boolean\",\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (!result) {\n\t\t\t\t\t\t\t\t\tthrow forbiddenError();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tonBeforeActionResponse:\n\t\t\ttypeof config.onBeforeActionResponse === \"function\"\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tname: string;\n\t\t\t\t\t\t\t\targs: RuntimeBytes;\n\t\t\t\t\t\t\t\toutput: RuntimeBytes;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx, name, args, output } =\n\t\t\t\t\t\t\t\tunwrapTsfnPayload(error, payload);\n\t\t\t\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\treturn encodeValue(\n\t\t\t\t\t\t\t\t\tawait config.onBeforeActionResponse(\n\t\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\t\tdecodeArgs(args),\n\t\t\t\t\t\t\t\t\t\tdecodeValue(output),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tonRequest: wrapNativeCallback(\n\t\t\tasync (\n\t\t\t\terror: unknown,\n\t\t\t\tpayload: {\n\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tmethod: string;\n\t\t\t\t\t\turi: string;\n\t\t\t\t\t\theaders?: Record<string, string>;\n\t\t\t\t\t\tbody?: RuntimeBytes;\n\t\t\t\t\t};\n\t\t\t\t\tcancelToken?: CancellationTokenHandle;\n\t\t\t\t},\n\t\t\t) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst { ctx, request, cancelToken } = unwrapTsfnPayload(\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t);\n\t\t\t\t\tconst jsRequest = buildRequest(request);\n\t\t\t\t\tconst inspectorResponse =\n\t\t\t\t\t\tawait maybeHandleNativeInspectorRequest(\n\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\trequest,\n\t\t\t\t\t\t\tjsRequest,\n\t\t\t\t\t\t);\n\t\t\t\t\tif (inspectorResponse) {\n\t\t\t\t\t\treturn await toRuntimeHttpResponse(inspectorResponse);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof config.onRequest !== \"function\") {\n\t\t\t\t\t\treturn await toRuntimeHttpResponse(\n\t\t\t\t\t\t\tnew Response(null, { status: 404 }),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst rawConnParams =\n\t\t\t\t\t\tjsRequest.headers.get(HEADER_CONN_PARAMS);\n\t\t\t\t\tlet requestCtx:\n\t\t\t\t\t\t| ReturnType<typeof withConnContext>\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tlet conn: ConnHandle | undefined;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst connParams = validateConnParams(\n\t\t\t\t\t\t\tschemaConfig.connParamsSchema,\n\t\t\t\t\t\t\trawConnParams\n\t\t\t\t\t\t\t\t? JSON.parse(rawConnParams)\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconn = await callNative(() =>\n\t\t\t\t\t\t\truntime.actorConnectConn(\n\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\tencodeValue(connParams),\n\t\t\t\t\t\t\t\trequest,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\trequestCtx = makeConnCtx(\n\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\tconn,\n\t\t\t\t\t\t\tjsRequest,\n\t\t\t\t\t\t\tcancelToken,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst response = await config.onRequest(\n\t\t\t\t\t\t\trequestCtx,\n\t\t\t\t\t\t\tjsRequest,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (!(response instanceof Response)) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\"onRequest handler must return a Response\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn await toRuntimeHttpResponse(response);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tawait requestCtx?.dispose();\n\t\t\t\t\t\tif (conn) {\n\t\t\t\t\t\t\tawait runtime.connDisconnect(conn);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger().error({\n\t\t\t\t\t\tmsg: \"native onRequest failed\",\n\t\t\t\t\t\terror,\n\t\t\t\t\t});\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tonWebSocket:\n\t\t\ttypeof config.onWebSocket === \"function\"\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tconn: ConnHandle;\n\t\t\t\t\t\t\t\tws: WebSocketHandle;\n\t\t\t\t\t\t\t\trequest?: {\n\t\t\t\t\t\t\t\t\tmethod: string;\n\t\t\t\t\t\t\t\t\turi: string;\n\t\t\t\t\t\t\t\t\theaders?: Record<string, string>;\n\t\t\t\t\t\t\t\t\tbody?: RuntimeBytes;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx, conn, ws, request } =\n\t\t\t\t\t\t\t\tunwrapTsfnPayload(error, payload);\n\t\t\t\t\t\t\tconst jsRequest = request\n\t\t\t\t\t\t\t\t? buildRequest(request)\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\tconst actorCtx = makeConnCtx(ctx, conn, jsRequest);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait config.onWebSocket(\n\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\tnew TrackedWebSocketHandleAdapter(\n\t\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\t\tnew NativeWebSocketAdapter(runtime, ws),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\trun: (() => {\n\t\t\tconst run = getRunFunction(config.run);\n\t\t\tif (!run) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn wrapNativeCallback(\n\t\t\t\tasync (\n\t\t\t\t\terror: unknown,\n\t\t\t\t\tpayload: { ctx: ActorContextHandle },\n\t\t\t\t) => {\n\t\t\t\t\tconst { ctx } = unwrapTsfnPayload(error, payload);\n\t\t\t\t\tconst actorId = callNativeSync(() => runtime.actorId(ctx));\n\t\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\t\tnativeRunHandlerActiveByActorId.set(actorId, true);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait run(actorCtx);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tnativeRunHandlerActiveByActorId.set(actorId, false);\n\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t);\n\t\t})(),\n\t\tgetWorkflowHistory:\n\t\t\tgetRunInspectorConfig(config.run) !== undefined\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: { ctx: ActorContextHandle },\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx } = unwrapTsfnPayload(error, payload);\n\t\t\t\t\t\t\tconst history =\n\t\t\t\t\t\t\t\tgetNativeWorkflowInspector(ctx)?.getHistory();\n\t\t\t\t\t\t\treturn history == null\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: encodeValue(history);\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\treplayWorkflow:\n\t\t\tgetRunInspectorConfig(config.run) !== undefined\n\t\t\t\t? wrapNativeCallback(\n\t\t\t\t\t\tasync (\n\t\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\t\tentryId?: string;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst { ctx, entryId } = unwrapTsfnPayload(\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst workflowInspector =\n\t\t\t\t\t\t\t\tgetNativeWorkflowInspector(ctx);\n\t\t\t\t\t\t\tif (!workflowInspector?.replayFromStep) {\n\t\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst history =\n\t\t\t\t\t\t\t\t(await workflowInspector.replayFromStep(\n\t\t\t\t\t\t\t\t\tentryId,\n\t\t\t\t\t\t\t\t)) ?? null;\n\t\t\t\t\t\t\treturn history == null\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: encodeValue(history);\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\tactions: Object.fromEntries(\n\t\t\tObject.entries(actionHandlers).map(([name, handler]) => [\n\t\t\t\tname,\n\t\t\t\twrapNativeCallback(\n\t\t\t\t\tasync (\n\t\t\t\t\t\terror: unknown,\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\t\t\tconn: ConnHandle | null;\n\t\t\t\t\t\t\tname: string;\n\t\t\t\t\t\t\targs: RuntimeBytes;\n\t\t\t\t\t\t\tcancelToken?: CancellationTokenHandle;\n\t\t\t\t\t\t},\n\t\t\t\t\t) => {\n\t\t\t\t\t\tconst { ctx, conn, args, cancelToken } =\n\t\t\t\t\t\t\tunwrapTsfnPayload(error, payload);\n\t\t\t\t\t\tconst actorCtx =\n\t\t\t\t\t\t\tconn != null\n\t\t\t\t\t\t\t\t? makeConnCtx(ctx, conn, undefined, cancelToken)\n\t\t\t\t\t\t\t\t: makeActorCtx(ctx, undefined, cancelToken);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\treturn encodeValue(\n\t\t\t\t\t\t\t\tawait handler(\n\t\t\t\t\t\t\t\t\tactorCtx,\n\t\t\t\t\t\t\t\t\t...validateActionArgs(\n\t\t\t\t\t\t\t\t\t\tschemaConfig.actionInputSchemas,\n\t\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\t\tdecodeArgs(args),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t]),\n\t\t),\n\t\tonQueueSend: wrapNativeCallback(\n\t\t\tasync (\n\t\t\t\terror: unknown,\n\t\t\t\tpayload: {\n\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\tconn: ConnHandle;\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tmethod: string;\n\t\t\t\t\t\turi: string;\n\t\t\t\t\t\theaders?: Record<string, string>;\n\t\t\t\t\t\tbody?: RuntimeBytes;\n\t\t\t\t\t};\n\t\t\t\t\tname: string;\n\t\t\t\t\tbody: RuntimeBytes;\n\t\t\t\t\twait: boolean;\n\t\t\t\t\ttimeoutMs?: bigint | number;\n\t\t\t\t\tcancelToken?: CancellationTokenHandle;\n\t\t\t\t},\n\t\t\t) => {\n\t\t\t\tconst {\n\t\t\t\t\tctx,\n\t\t\t\t\tconn,\n\t\t\t\t\trequest,\n\t\t\t\t\tname,\n\t\t\t\t\tbody,\n\t\t\t\t\twait,\n\t\t\t\t\ttimeoutMs,\n\t\t\t\t\tcancelToken,\n\t\t\t\t} = unwrapTsfnPayload(error, payload);\n\t\t\t\tconst jsRequest = buildRequest(request);\n\t\t\t\tconst actorCtx = withConnContext(\n\t\t\t\t\truntime,\n\t\t\t\t\tctx,\n\t\t\t\t\tconn,\n\t\t\t\t\tcreateClient,\n\t\t\t\t\tschemaConfig,\n\t\t\t\t\tdatabaseProvider,\n\t\t\t\t\tjsRequest,\n\t\t\t\t\tstateEnabled,\n\t\t\t\t\tonStateChange,\n\t\t\t\t\tcancelToken,\n\t\t\t\t);\n\t\t\t\ttry {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!schemaConfig.queues ||\n\t\t\t\t\t\t!hasSchemaConfigKey(schemaConfig.queues, name)\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn { status: \"completed\" };\n\t\t\t\t\t}\n\n\t\t\t\t\tconst canPublish = getQueueCanPublish(\n\t\t\t\t\t\tschemaConfig.queues,\n\t\t\t\t\t\tname,\n\t\t\t\t\t);\n\t\t\t\t\tif (canPublish && !(await canPublish(actorCtx))) {\n\t\t\t\t\t\tthrow forbiddenError();\n\t\t\t\t\t}\n\n\t\t\t\t\tconst decodedBody = decodeValue(body);\n\t\t\t\t\tif (wait) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst response =\n\t\t\t\t\t\t\t\tawait actorCtx.queue.enqueueAndWait(\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tdecodedBody,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttimeout:\n\t\t\t\t\t\t\t\t\t\t\ttimeoutMs === undefined ||\n\t\t\t\t\t\t\t\t\t\t\ttimeoutMs === null\n\t\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t\t: Number(timeoutMs),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\t\t\t\tresponse:\n\t\t\t\t\t\t\t\t\tresponse === undefined\n\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t: encodeValue(response),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t(error as { group?: string; code?: string })\n\t\t\t\t\t\t\t\t\t.group === \"queue\" &&\n\t\t\t\t\t\t\t\t(error as { group?: string; code?: string })\n\t\t\t\t\t\t\t\t\t.code === \"timed_out\"\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn { status: \"timedOut\" };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tawait actorCtx.queue.send(name, decodedBody);\n\t\t\t\t\treturn { status: \"completed\" };\n\t\t\t\t} finally {\n\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tserializeState: wrapNativeCallback(\n\t\t\tasync (\n\t\t\t\terror: unknown,\n\t\t\t\tpayload: {\n\t\t\t\t\tctx: ActorContextHandle;\n\t\t\t\t\treason: SerializeStateReason;\n\t\t\t\t},\n\t\t\t) => {\n\t\t\t\tconst { ctx, reason } = unwrapTsfnPayload(error, payload);\n\t\t\t\tconst actorCtx = makeActorCtx(ctx);\n\t\t\t\ttry {\n\t\t\t\t\treturn actorCtx.serializeForTick(reason);\n\t\t\t\t} finally {\n\t\t\t\t\tawait actorCtx.dispose();\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t};\n\n\treturn runtime.createActorFactory(\n\t\tcallbacks,\n\t\tbuildActorConfig(definition, registryConfig),\n\t);\n}\n\nexport async function buildServeConfig(\n\tconfig: RegistryConfig,\n): Promise<RuntimeServeConfig> {\n\tif (!config.endpoint) {\n\t\tthrow nativeEndpointNotConfiguredError();\n\t}\n\n\tconst serveConfig: RuntimeServeConfig = {\n\t\tversion: config.envoy.version,\n\t\tendpoint: config.endpoint,\n\t\ttoken: config.token,\n\t\tnamespace: config.namespace,\n\t\tpoolName: config.envoy.poolName,\n\t\thandleInspectorHttpInRuntime: true,\n\t\tserverlessBasePath: config.serverless.basePath,\n\t\tserverlessPackageVersion: VERSION,\n\t\tserverlessClientEndpoint: config.publicEndpoint,\n\t\tserverlessClientNamespace: config.publicNamespace,\n\t\tserverlessClientToken: config.publicToken,\n\t\tserverlessValidateEndpoint: config.validateServerlessEndpoint,\n\t\tserverlessMaxStartPayloadBytes: config.serverless.maxStartPayloadBytes,\n\t};\n\n\tif (config.startEngine) {\n\t\tconst { getEnginePath } = await loadEngineCli();\n\t\tserveConfig.engineBinaryPath = getEnginePath();\n\t}\n\tif (config.test?.enabled) {\n\t\tserveConfig.inspectorTestToken =\n\t\t\tgetEnvUniversal(\"_RIVET_TEST_INSPECTOR_TOKEN\") ?? \"token\";\n\t}\n\n\treturn serveConfig;\n}\n\nexport async function buildRegistryWithRuntime(\n\tconfig: RegistryConfig,\n\truntime: CoreRuntime,\n): Promise<{\n\truntime: CoreRuntime;\n\tregistry: RegistryHandle;\n\tserveConfig: RuntimeServeConfig;\n}> {\n\tif (\n\t\tconfig.test?.enabled &&\n\t\tgetEnvUniversal(\"_RIVET_TEST_INSPECTOR_TOKEN\") === undefined\n\t) {\n\t\ttrySetProcessEnv(\"_RIVET_TEST_INSPECTOR_TOKEN\", \"token\");\n\t}\n\n\tconst registry = runtime.createRegistry();\n\n\tfor (const [name, definition] of Object.entries(config.use)) {\n\t\truntime.registerActor(\n\t\t\tregistry,\n\t\t\tname,\n\t\t\tbuildNativeFactory(runtime, config, definition),\n\t\t);\n\t}\n\n\treturn {\n\t\truntime,\n\t\tregistry,\n\t\tserveConfig: await buildServeConfig(config),\n\t};\n}\n\nexport async function buildNativeRegistry(config: RegistryConfig): Promise<{\n\truntime: CoreRuntime;\n\tregistry: RegistryHandle;\n\tserveConfig: RuntimeServeConfig;\n}> {\n\tconst { runtime } = await loadNapiRuntime();\n\treturn buildRegistryWithRuntime(\n\t\tnormalizeRuntimeConfigForKind(config, \"native\"),\n\t\truntime,\n\t);\n}\n\nexport async function buildConfiguredRegistry(config: RegistryConfig): Promise<{\n\truntime: CoreRuntime;\n\tregistry: RegistryHandle;\n\tserveConfig: RuntimeServeConfig;\n}> {\n\tconst runtime = await loadConfiguredRuntime(config);\n\treturn buildRegistryWithRuntime(\n\t\tnormalizeRuntimeConfig(config, runtime),\n\t\truntime,\n\t);\n}\n","import { decodeBridgeRivetError } from \"@/actor/errors\";\nimport type {\n\tSqliteBindings,\n\tSqliteDatabase,\n\tSqliteExecuteResult,\n\tSqliteNativeMetrics,\n} from \"./config\";\n\ntype NativeBindNoValues = {\n\tintValue?: never;\n\tfloatValue?: never;\n\ttextValue?: never;\n\tblobValue?: never;\n};\n\ntype NativeBindParam =\n\t| ({ kind: \"null\" } & NativeBindNoValues)\n\t| {\n\t\t\tkind: \"int\";\n\t\t\tintValue: number;\n\t\t\tfloatValue?: never;\n\t\t\ttextValue?: never;\n\t\t\tblobValue?: never;\n\t }\n\t| {\n\t\t\tkind: \"float\";\n\t\t\tintValue?: never;\n\t\t\tfloatValue: number;\n\t\t\ttextValue?: never;\n\t\t\tblobValue?: never;\n\t }\n\t| {\n\t\t\tkind: \"text\";\n\t\t\tintValue?: never;\n\t\t\tfloatValue?: never;\n\t\t\ttextValue: string;\n\t\t\tblobValue?: never;\n\t }\n\t| {\n\t\t\tkind: \"blob\";\n\t\t\tintValue?: never;\n\t\t\tfloatValue?: never;\n\t\t\ttextValue?: never;\n\t\t\tblobValue: Buffer;\n\t };\n\ninterface NativeExecResult {\n\tcolumns: string[];\n\trows: unknown[][];\n}\n\ninterface NativeQueryResult {\n\tcolumns: string[];\n\trows: unknown[][];\n}\n\ninterface NativeRunResult {\n\tchanges: number;\n}\n\ninterface NativeExecuteResult {\n\tcolumns: string[];\n\trows: unknown[][];\n\tchanges: number;\n\tlastInsertRowId?: number | null;\n}\n\nexport interface JsNativeDatabaseLike {\n\texec(sql: string): Promise<NativeExecResult>;\n\texecute(\n\t\tsql: string,\n\t\tparams?: NativeBindParam[] | null,\n\t): Promise<NativeExecuteResult>;\n\tquery(\n\t\tsql: string,\n\t\tparams?: NativeBindParam[] | null,\n\t): Promise<NativeQueryResult>;\n\trun(\n\t\tsql: string,\n\t\tparams?: NativeBindParam[] | null,\n\t): Promise<NativeRunResult>;\n\tmetrics?(): SqliteNativeMetrics | null;\n\ttakeLastKvError?(): string | null;\n\tclose(): Promise<void>;\n}\n\nfunction shouldAttachNativeKvError(message: string): boolean {\n\treturn /i\\/o error|unable to open database file/i.test(message);\n}\n\nfunction enrichNativeDatabaseError(\n\tdatabase: JsNativeDatabaseLike,\n\terror: unknown,\n): never {\n\tconst bridgeReason =\n\t\ttypeof error === \"string\"\n\t\t\t? error\n\t\t\t: error instanceof Error\n\t\t\t\t? error.message\n\t\t\t: undefined;\n\tconst bridged =\n\t\tbridgeReason === undefined\n\t\t\t? undefined\n\t\t\t: decodeBridgeRivetError(bridgeReason);\n\tif (bridged) {\n\t\tthrow bridged;\n\t}\n\n\tconst kvError = database.takeLastKvError?.();\n\tif (\n\t\terror instanceof Error &&\n\t\tkvError &&\n\t\tshouldAttachNativeKvError(error.message) &&\n\t\t!error.message.includes(kvError)\n\t) {\n\t\terror.message = `${error.message} (native sqlite kv error: ${kvError})`;\n\t}\n\tthrow error;\n}\n\nfunction toNativeBinding(arg: unknown): NativeBindParam {\n\tif (arg === null || arg === undefined) {\n\t\treturn { kind: \"null\" };\n\t}\n\tif (typeof arg === \"bigint\") {\n\t\treturn { kind: \"int\", intValue: Number(arg) };\n\t}\n\tif (typeof arg === \"number\") {\n\t\tif (Number.isInteger(arg)) {\n\t\t\treturn { kind: \"int\", intValue: arg };\n\t\t}\n\t\treturn { kind: \"float\", floatValue: arg };\n\t}\n\tif (typeof arg === \"string\") {\n\t\treturn { kind: \"text\", textValue: arg };\n\t}\n\tif (typeof arg === \"boolean\") {\n\t\treturn { kind: \"int\", intValue: arg ? 1 : 0 };\n\t}\n\tif (arg instanceof Uint8Array) {\n\t\treturn { kind: \"blob\", blobValue: Buffer.from(arg) };\n\t}\n\tthrow new Error(`unsupported bind parameter type: ${typeof arg}`);\n}\n\nfunction extractNamedSqliteParameters(sql: string): string[] {\n\tconst orderedNames: string[] = [];\n\tconst seen = new Set<string>();\n\tconst pattern = /([:@$][A-Za-z_][A-Za-z0-9_]*)/g;\n\tfor (const match of sql.matchAll(pattern)) {\n\t\tconst name = match[1];\n\t\tif (seen.has(name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(name);\n\t\torderedNames.push(name);\n\t}\n\treturn orderedNames;\n}\n\nfunction getNamedSqliteBinding(\n\tbindings: Record<string, unknown>,\n\tname: string,\n): unknown {\n\tif (name in bindings) {\n\t\treturn bindings[name];\n\t}\n\n\tconst bareName = name.slice(1);\n\tif (bareName in bindings) {\n\t\treturn bindings[bareName];\n\t}\n\n\tfor (const prefix of [\":\", \"@\", \"$\"] as const) {\n\t\tconst candidate = `${prefix}${bareName}`;\n\t\tif (candidate in bindings) {\n\t\t\treturn bindings[candidate];\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\nfunction toNativeBindings(\n\tsql: string,\n\tparams?: SqliteBindings,\n): NativeBindParam[] | null {\n\tif (params === undefined) {\n\t\treturn null;\n\t}\n\n\tif (Array.isArray(params)) {\n\t\treturn params.map((arg) => toNativeBinding(arg));\n\t}\n\n\tconst orderedNames = extractNamedSqliteParameters(sql);\n\tif (orderedNames.length === 0) {\n\t\treturn Object.values(params).map((arg) => toNativeBinding(arg));\n\t}\n\n\treturn orderedNames.map((name) => {\n\t\tconst value = getNamedSqliteBinding(params, name);\n\t\tif (value === undefined) {\n\t\t\tthrow new Error(`missing bind parameter: ${name}`);\n\t\t}\n\t\treturn toNativeBinding(value);\n\t});\n}\n\nfunction normalizeNativeMetrics(\n\tmetrics: SqliteNativeMetrics | null | undefined,\n): SqliteNativeMetrics | null {\n\tif (!metrics) return null;\n\tconst raw = metrics as unknown as Record<string, unknown>;\n\tconst numberField = (camel: string, snake: string) =>\n\t\tNumber(raw[camel] ?? raw[snake] ?? 0);\n\n\treturn {\n\t\trequestBuildNs: numberField(\"requestBuildNs\", \"request_build_ns\"),\n\t\tserializeNs: numberField(\"serializeNs\", \"serialize_ns\"),\n\t\ttransportNs: numberField(\"transportNs\", \"transport_ns\"),\n\t\tstateUpdateNs: numberField(\"stateUpdateNs\", \"state_update_ns\"),\n\t\ttotalNs: numberField(\"totalNs\", \"total_ns\"),\n\t\tcommitCount: numberField(\"commitCount\", \"commit_count\"),\n\t\tpageCacheEntries: numberField(\"pageCacheEntries\", \"page_cache_entries\"),\n\t\tpageCacheWeightedSize: numberField(\n\t\t\t\"pageCacheWeightedSize\",\n\t\t\t\"page_cache_weighted_size\",\n\t\t),\n\t\tpageCacheCapacityPages: numberField(\n\t\t\t\"pageCacheCapacityPages\",\n\t\t\t\"page_cache_capacity_pages\",\n\t\t),\n\t\twriteBufferDirtyPages: numberField(\n\t\t\t\"writeBufferDirtyPages\",\n\t\t\t\"write_buffer_dirty_pages\",\n\t\t),\n\t\tdbSizePages: numberField(\"dbSizePages\", \"db_size_pages\"),\n\t};\n}\n\nclass NativeCloseGate {\n\t#active = 0;\n\t#closed = false;\n\t#waiters: (() => void)[] = [];\n\n\tenter(): () => void {\n\t\tif (this.#closed) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Database is closed. This usually means a background timer (setInterval, setTimeout) or a stray promise is still running after the actor stopped. Use c.abortSignal to clean up timers before the actor shuts down.\",\n\t\t\t);\n\t\t}\n\n\t\tthis.#active++;\n\t\tlet released = false;\n\t\treturn () => {\n\t\t\tif (released) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treleased = true;\n\t\t\tthis.#active--;\n\t\t\tif (this.#active === 0) {\n\t\t\t\tconst waiters = this.#waiters.splice(0);\n\t\t\t\tfor (const waiter of waiters) {\n\t\t\t\t\twaiter();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tasync close(callback: () => Promise<void>): Promise<void> {\n\t\tif (this.#closed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#closed = true;\n\t\tif (this.#active > 0) {\n\t\t\tawait new Promise<void>((resolve) => this.#waiters.push(resolve));\n\t\t}\n\t\tawait callback();\n\t}\n}\n\nexport function wrapJsNativeDatabase(\n\tdatabase: JsNativeDatabaseLike,\n): SqliteDatabase {\n\tconst gate = new NativeCloseGate();\n\tlet closePromise: Promise<void> | undefined;\n\tlet lastInsertRowId: number | null = null;\n\n\tconst executeNative = async (\n\t\tsql: string,\n\t\tparams?: SqliteBindings,\n\t): Promise<SqliteExecuteResult> => {\n\t\tconst lastInsertRowIdColumn = lastInsertRowIdColumnName(sql);\n\t\tif (lastInsertRowIdColumn) {\n\t\t\treturn {\n\t\t\t\tcolumns: [lastInsertRowIdColumn],\n\t\t\t\trows: [[lastInsertRowId ?? 0]],\n\t\t\t\tchanges: 0,\n\t\t\t\tlastInsertRowId,\n\t\t\t};\n\t\t}\n\n\t\tconst release = gate.enter();\n\t\ttry {\n\t\t\tconst nativeParams = toNativeBindings(sql, params);\n\t\t\tconst result = await database.execute(sql, nativeParams);\n\t\t\tif (result.lastInsertRowId !== undefined) {\n\t\t\t\tlastInsertRowId = result.lastInsertRowId;\n\t\t\t}\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tenrichNativeDatabaseError(database, error);\n\t\t} finally {\n\t\t\trelease();\n\t\t}\n\t};\n\n\treturn {\n\t\tasync exec(\n\t\t\tsql: string,\n\t\t\tcallback?: (row: unknown[], columns: string[]) => void,\n\t\t): Promise<void> {\n\t\t\tconst release = gate.enter();\n\t\t\tlet result: NativeExecResult;\n\t\t\ttry {\n\t\t\t\tresult = await database.exec(sql);\n\t\t\t} catch (error) {\n\t\t\t\tenrichNativeDatabaseError(database, error);\n\t\t\t} finally {\n\t\t\t\trelease();\n\t\t\t}\n\t\t\tif (!callback) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfor (const row of result.rows) {\n\t\t\t\tcallback(row, result.columns);\n\t\t\t}\n\t\t},\n\t\tasync execute(\n\t\t\tsql: string,\n\t\t\tparams?: SqliteBindings,\n\t\t): Promise<SqliteExecuteResult> {\n\t\t\treturn await executeNative(sql, params);\n\t\t},\n\t\tasync run(sql: string, params?: SqliteBindings): Promise<void> {\n\t\t\tawait executeNative(sql, params);\n\t\t},\n\t\tasync query(sql: string, params?: SqliteBindings) {\n\t\t\tconst { columns, rows } = await executeNative(sql, params);\n\t\t\treturn { columns, rows };\n\t\t},\n\t\tnativeMetrics(): SqliteNativeMetrics | null {\n\t\t\treturn normalizeNativeMetrics(database.metrics?.());\n\t\t},\n\t\tasync close(): Promise<void> {\n\t\t\tclosePromise ??= gate.close(() => database.close());\n\t\t\tawait closePromise;\n\t\t},\n\t};\n}\n\nfunction lastInsertRowIdColumnName(sql: string): string | undefined {\n\tconst match = sql.match(\n\t\t/^\\s*SELECT\\s+last_insert_rowid\\s*\\(\\s*\\)\\s*(?:AS\\s+(\"[^\"]+\"|`[^`]+`|\\[[^\\]]+\\]|\\w+))?\\s*;?\\s*$/i,\n\t);\n\tif (!match) {\n\t\treturn undefined;\n\t}\n\n\tconst alias = match[1];\n\tif (!alias) {\n\t\treturn \"last_insert_rowid()\";\n\t}\n\tif (\n\t\t(alias.startsWith('\"') && alias.endsWith('\"')) ||\n\t\t(alias.startsWith(\"`\") && alias.endsWith(\"`\")) ||\n\t\t(alias.startsWith(\"[\") && alias.endsWith(\"]\"))\n\t) {\n\t\treturn alias.slice(1, -1);\n\t}\n\treturn alias;\n}\n","import type { SqliteNativeMetrics } from \"@/common/database/config\";\nimport type { RegistryConfig } from \"./config\";\n\ndeclare const handleBrand: unique symbol;\n\ntype OpaqueHandle<Name extends string> = {\n\treadonly [handleBrand]: Name;\n};\n\nexport type RegistryHandle = OpaqueHandle<\"registry\">;\nexport type ActorFactoryHandle = OpaqueHandle<\"actorFactory\">;\nexport type ActorContextHandle = OpaqueHandle<\"actorContext\">;\nexport type ConnHandle = OpaqueHandle<\"conn\">;\nexport type WebSocketHandle = OpaqueHandle<\"webSocket\">;\nexport type CancellationTokenHandle = OpaqueHandle<\"cancellationToken\">;\n\nexport type RuntimeBytes = Uint8Array;\n\nexport interface RuntimeActorKeySegment {\n\tkind: string;\n\tstringValue?: string;\n\tnumberValue?: number;\n}\n\nexport interface RuntimeHttpRequest {\n\tmethod: string;\n\turi: string;\n\theaders?: Record<string, string>;\n\tbody?: RuntimeBytes;\n}\n\nexport interface RuntimeHttpResponse {\n\tstatus?: number;\n\theaders?: Record<string, string>;\n\tbody?: RuntimeBytes;\n}\n\nexport interface RuntimeStateDeltaPayload {\n\tstate?: RuntimeBytes;\n\tconnHibernation: Array<{\n\t\tconnId: string;\n\t\tbytes: RuntimeBytes;\n\t}>;\n\tconnHibernationRemoved: string[];\n}\n\nexport interface RuntimeRequestSaveOpts {\n\timmediate?: boolean;\n\tmaxWaitMs?: number;\n}\n\nexport interface RuntimeInspectorSnapshot {\n\tstateRevision: number;\n\tconnectionsRevision: number;\n\tqueueRevision: number;\n\tactiveConnections: number;\n\tqueueSize: number;\n\tconnectedClients: number;\n}\n\nexport interface RuntimeQueueMessage {\n\tid(): bigint;\n\tname(): string;\n\tbody(): RuntimeBytes;\n\tcreatedAt(): number;\n\tisCompletable(): boolean;\n\tcomplete(response?: RuntimeBytes | undefined | null): Promise<void>;\n}\n\nexport interface RuntimeQueueInspectMessage {\n\tid: number;\n\tname: string;\n\tcreatedAtMs: number;\n}\n\nexport interface RuntimeQueueSendResult {\n\tstatus: string;\n\tresponse?: RuntimeBytes;\n}\n\nexport interface RuntimeQueueNextBatchOptions {\n\tnames?: string[];\n\tcount?: number;\n\ttimeoutMs?: number;\n\tcompletable?: boolean;\n}\n\nexport interface RuntimeQueueWaitOptions {\n\ttimeoutMs?: number;\n\tcompletable?: boolean;\n}\n\nexport interface RuntimeQueueEnqueueAndWaitOptions {\n\ttimeoutMs?: number;\n}\n\nexport interface RuntimeQueueTryNextBatchOptions {\n\tnames?: string[];\n\tcount?: number;\n\tcompletable?: boolean;\n}\n\nexport interface RuntimeKvListOptions {\n\treverse?: boolean;\n\tlimit?: number;\n}\n\nexport interface RuntimeKvEntry {\n\tkey: RuntimeBytes;\n\tvalue: RuntimeBytes;\n}\n\ntype RuntimeSqlBindNoValues = {\n\tintValue?: never;\n\tfloatValue?: never;\n\ttextValue?: never;\n\tblobValue?: never;\n};\n\nexport type RuntimeSqlBindParam =\n\t| ({ kind: \"null\" } & RuntimeSqlBindNoValues)\n\t| {\n\t\t\tkind: \"int\";\n\t\t\tintValue: number;\n\t\t\tfloatValue?: never;\n\t\t\ttextValue?: never;\n\t\t\tblobValue?: never;\n\t }\n\t| {\n\t\t\tkind: \"float\";\n\t\t\tintValue?: never;\n\t\t\tfloatValue: number;\n\t\t\ttextValue?: never;\n\t\t\tblobValue?: never;\n\t }\n\t| {\n\t\t\tkind: \"text\";\n\t\t\tintValue?: never;\n\t\t\tfloatValue?: never;\n\t\t\ttextValue: string;\n\t\t\tblobValue?: never;\n\t }\n\t| {\n\t\t\tkind: \"blob\";\n\t\t\tintValue?: never;\n\t\t\tfloatValue?: never;\n\t\t\ttextValue?: never;\n\t\t\tblobValue: RuntimeBytes;\n\t };\n\nexport type RuntimeSqlBindParams = RuntimeSqlBindParam[] | null;\n\nexport interface RuntimeSqlQueryResult {\n\tcolumns: string[];\n\trows: unknown[][];\n}\n\nexport type RuntimeSqlExecResult = RuntimeSqlQueryResult;\n\nexport interface RuntimeSqlExecuteResult extends RuntimeSqlQueryResult {\n\tchanges: number;\n\tlastInsertRowId?: number | null;\n}\n\nexport function normalizeRuntimeSqlExecuteResult(\n\tresult: RuntimeSqlQueryResult & {\n\t\tchanges: number;\n\t\tlastInsertRowId?: number | null;\n\t},\n): RuntimeSqlExecuteResult {\n\treturn result;\n}\n\nexport interface RuntimeSqlRunResult {\n\tchanges: number;\n}\n\nexport interface RuntimeSqlDatabase {\n\texec(sql: string): Promise<RuntimeSqlExecResult>;\n\texecute(\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlExecuteResult>;\n\tquery(\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlQueryResult>;\n\trun(\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlRunResult>;\n\tmetrics?(): SqliteNativeMetrics | null;\n\ttakeLastKvError?(): string | null;\n\tclose(): Promise<void>;\n}\n\nexport interface RuntimeActorConfig {\n\tname?: string;\n\ticon?: string;\n\thasDatabase?: boolean;\n\tremoteSqlite?: boolean;\n\thasState?: boolean;\n\tcanHibernateWebsocket?: boolean;\n\tstateSaveIntervalMs?: number;\n\tcreateStateTimeoutMs?: number;\n\tonCreateTimeoutMs?: number;\n\tcreateVarsTimeoutMs?: number;\n\tcreateConnStateTimeoutMs?: number;\n\tonBeforeConnectTimeoutMs?: number;\n\tonConnectTimeoutMs?: number;\n\tonMigrateTimeoutMs?: number;\n\tonWakeTimeoutMs?: number;\n\tonBeforeActorStartTimeoutMs?: number;\n\tactionTimeoutMs?: number;\n\tonRequestTimeoutMs?: number;\n\tsleepTimeoutMs?: number;\n\tnoSleep?: boolean;\n\tsleepGracePeriodMs?: number;\n\tconnectionLivenessTimeoutMs?: number;\n\tconnectionLivenessIntervalMs?: number;\n\tmaxQueueSize?: number;\n\tmaxQueueMessageSize?: number;\n\tmaxIncomingMessageSize?: number;\n\tmaxOutgoingMessageSize?: number;\n\tpreloadMaxWorkflowBytes?: number;\n\tpreloadMaxConnectionsBytes?: number;\n\tactions?: Array<{ name: string }>;\n}\n\nexport interface RuntimeServeConfig {\n\tversion: number;\n\tendpoint: string;\n\ttoken?: string;\n\tnamespace: string;\n\tpoolName: string;\n\tengineBinaryPath?: string;\n\thandleInspectorHttpInRuntime?: boolean;\n\tinspectorTestToken?: string;\n\tserverlessBasePath?: string;\n\tserverlessPackageVersion: string;\n\tserverlessClientEndpoint?: string;\n\tserverlessClientNamespace?: string;\n\tserverlessClientToken?: string;\n\tserverlessValidateEndpoint: boolean;\n\tserverlessMaxStartPayloadBytes: number;\n}\n\nexport interface RuntimeServerlessRequest {\n\tmethod: string;\n\turl: string;\n\theaders: Record<string, string>;\n\tbody: RuntimeBytes;\n}\n\nexport interface RuntimeServerlessResponseHead {\n\tstatus: number;\n\theaders: Record<string, string>;\n}\n\nexport interface RuntimeRegistryRouteResponse {\n\tstatus: number;\n\theaders: Record<string, string>;\n\tbody: RuntimeBytes;\n}\n\nexport type RuntimeServerlessStreamEvent =\n\t| {\n\t\t\tkind: \"chunk\";\n\t\t\tchunk?: RuntimeBytes;\n\t }\n\t| {\n\t\t\tkind: \"end\";\n\t\t\terror?: {\n\t\t\t\tgroup: string;\n\t\t\t\tcode: string;\n\t\t\t\tmessage: string;\n\t\t\t};\n\t };\n\nexport type RuntimeServerlessStreamCallback = (\n\terror: unknown,\n\tevent?: RuntimeServerlessStreamEvent,\n) => unknown;\n\nexport type RuntimeWebSocketEvent =\n\t| {\n\t\t\tkind: \"message\";\n\t\t\tdata: string | RuntimeBytes;\n\t\t\tbinary: boolean;\n\t\t\tmessageIndex?: number;\n\t }\n\t| {\n\t\t\tkind: \"close\";\n\t\t\tcode: number;\n\t\t\treason: string;\n\t\t\twasClean: boolean;\n\t };\n\nexport interface CoreRuntime {\n\treadonly kind: \"napi\" | \"wasm\";\n\n\tcreateRegistry(): RegistryHandle;\n\tregisterActor(\n\t\tregistry: RegistryHandle,\n\t\tname: string,\n\t\tfactory: ActorFactoryHandle,\n\t): void;\n\tserveRegistry(\n\t\tregistry: RegistryHandle,\n\t\tconfig: RuntimeServeConfig,\n\t): Promise<void>;\n\tshutdownRegistry(registry: RegistryHandle): Promise<void>;\n\tregistryActorStopThresholdMs?(\n\t\tregistry: RegistryHandle,\n\t): Promise<number | undefined>;\n\thandleServerlessRequest(\n\t\tregistry: RegistryHandle,\n\t\treq: RuntimeServerlessRequest,\n\t\tonStreamEvent: RuntimeServerlessStreamCallback,\n\t\tcancelToken: CancellationTokenHandle,\n\t\tconfig: RuntimeServeConfig,\n\t): Promise<RuntimeServerlessResponseHead>;\n\tregistryHealth?(\n\t\tregistry: RegistryHandle,\n\t): Promise<RuntimeRegistryRouteResponse>;\n\tregistryMetadata?(\n\t\tregistry: RegistryHandle,\n\t): Promise<RuntimeRegistryRouteResponse>;\n\tregistryMetrics?(\n\t\tregistry: RegistryHandle,\n\t): Promise<RuntimeRegistryRouteResponse>;\n\tcreateActorFactory(\n\t\tcallbacks: object,\n\t\tconfig?: RuntimeActorConfig | undefined | null,\n\t): ActorFactoryHandle;\n\n\tcreateCancellationToken(): CancellationTokenHandle;\n\tcancellationTokenAborted(token: CancellationTokenHandle): boolean;\n\tcancelCancellationToken(token: CancellationTokenHandle): void;\n\tonCancellationTokenCancelled(\n\t\ttoken: CancellationTokenHandle,\n\t\tcallback: (...args: unknown[]) => unknown,\n\t): void;\n\n\tactorState(ctx: ActorContextHandle): RuntimeBytes;\n\tactorBeginOnStateChange(ctx: ActorContextHandle): void;\n\tactorEndOnStateChange(ctx: ActorContextHandle): void;\n\tactorSetAlarm(\n\t\tctx: ActorContextHandle,\n\t\ttimestampMs?: number | undefined | null,\n\t): void;\n\tactorRequestSave(\n\t\tctx: ActorContextHandle,\n\t\topts?: RuntimeRequestSaveOpts | undefined | null,\n\t): void;\n\tactorRequestSaveAndWait(\n\t\tctx: ActorContextHandle,\n\t\topts?: RuntimeRequestSaveOpts | undefined | null,\n\t): Promise<void>;\n\tactorInspectorSnapshot(ctx: ActorContextHandle): RuntimeInspectorSnapshot;\n\tactorDecodeInspectorRequest(\n\t\tctx: ActorContextHandle,\n\t\tbytes: RuntimeBytes,\n\t\tadvertisedVersion: number,\n\t): RuntimeBytes;\n\tactorEncodeInspectorResponse(\n\t\tctx: ActorContextHandle,\n\t\tbytes: RuntimeBytes,\n\t\ttargetVersion: number,\n\t): RuntimeBytes;\n\tactorVerifyInspectorAuth(\n\t\tctx: ActorContextHandle,\n\t\tbearerToken?: string | undefined | null,\n\t): Promise<void>;\n\tactorQueueHibernationRemoval(ctx: ActorContextHandle, connId: string): void;\n\tactorTakePendingHibernationChanges(ctx: ActorContextHandle): string[];\n\tactorDirtyHibernatableConns(ctx: ActorContextHandle): ConnHandle[];\n\tactorSaveState(\n\t\tctx: ActorContextHandle,\n\t\tpayload: RuntimeStateDeltaPayload,\n\t): Promise<void>;\n\tactorId(ctx: ActorContextHandle): string;\n\tactorName(ctx: ActorContextHandle): string;\n\tactorKey(ctx: ActorContextHandle): RuntimeActorKeySegment[];\n\tactorRegion(ctx: ActorContextHandle): string;\n\tactorSleep(ctx: ActorContextHandle): void;\n\tactorDestroy(ctx: ActorContextHandle): void;\n\tactorAbortSignal(ctx: ActorContextHandle): AbortSignal;\n\tactorConns(ctx: ActorContextHandle): ConnHandle[];\n\tactorConnectConn(\n\t\tctx: ActorContextHandle,\n\t\tparams: RuntimeBytes,\n\t\trequest?: RuntimeHttpRequest | undefined | null,\n\t): Promise<ConnHandle>;\n\tactorBroadcast(\n\t\tctx: ActorContextHandle,\n\t\tname: string,\n\t\targs: RuntimeBytes,\n\t): void;\n\tactorWaitUntil(ctx: ActorContextHandle, promise: Promise<unknown>): void;\n\tactorWaitForTrackedShutdownWork(ctx: ActorContextHandle): Promise<boolean>;\n\tactorKeepAwake(ctx: ActorContextHandle, promise: Promise<unknown>): void;\n\tactorBeginKeepAwake(ctx: ActorContextHandle): number;\n\tactorEndKeepAwake(ctx: ActorContextHandle, regionId: number): void;\n\tactorRegisterTask(ctx: ActorContextHandle, promise: Promise<unknown>): void;\n\tactorRuntimeState(ctx: ActorContextHandle): object;\n\tactorClearRuntimeState(ctx: ActorContextHandle): void;\n\tactorRestartRunHandler(ctx: ActorContextHandle): void;\n\tactorBeginWebsocketCallback(ctx: ActorContextHandle): number;\n\tactorEndWebsocketCallback(ctx: ActorContextHandle, regionId: number): void;\n\n\tactorKvGet(\n\t\tctx: ActorContextHandle,\n\t\tkey: RuntimeBytes,\n\t): Promise<RuntimeBytes | null>;\n\tactorKvPut(\n\t\tctx: ActorContextHandle,\n\t\tkey: RuntimeBytes,\n\t\tvalue: RuntimeBytes,\n\t): Promise<void>;\n\tactorKvDelete(ctx: ActorContextHandle, key: RuntimeBytes): Promise<void>;\n\tactorKvDeleteRange(\n\t\tctx: ActorContextHandle,\n\t\tstart: RuntimeBytes,\n\t\tend: RuntimeBytes,\n\t): Promise<void>;\n\tactorKvListPrefix(\n\t\tctx: ActorContextHandle,\n\t\tprefix: RuntimeBytes,\n\t\toptions?: RuntimeKvListOptions | undefined | null,\n\t): Promise<RuntimeKvEntry[]>;\n\tactorKvListRange(\n\t\tctx: ActorContextHandle,\n\t\tstart: RuntimeBytes,\n\t\tend: RuntimeBytes,\n\t\toptions?: RuntimeKvListOptions | undefined | null,\n\t): Promise<RuntimeKvEntry[]>;\n\tactorKvBatchGet(\n\t\tctx: ActorContextHandle,\n\t\tkeys: RuntimeBytes[],\n\t): Promise<Array<RuntimeBytes | undefined | null>>;\n\tactorKvBatchPut(\n\t\tctx: ActorContextHandle,\n\t\tentries: RuntimeKvEntry[],\n\t): Promise<void>;\n\tactorKvBatchDelete(\n\t\tctx: ActorContextHandle,\n\t\tkeys: RuntimeBytes[],\n\t): Promise<void>;\n\n\tactorSqlExec(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t): Promise<RuntimeSqlExecResult>;\n\tactorSqlExecute(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlExecuteResult>;\n\tactorSqlQuery(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlQueryResult>;\n\tactorSqlRun(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlRunResult>;\n\tactorSqlMetrics(ctx: ActorContextHandle): SqliteNativeMetrics | null;\n\tactorSqlTakeLastKvError(ctx: ActorContextHandle): string | null;\n\tactorSqlClose(ctx: ActorContextHandle): Promise<void>;\n\n\tactorQueueSend(\n\t\tctx: ActorContextHandle,\n\t\tname: string,\n\t\tbody: RuntimeBytes,\n\t): Promise<RuntimeQueueMessage>;\n\tactorQueueNextBatch(\n\t\tctx: ActorContextHandle,\n\t\toptions?: RuntimeQueueNextBatchOptions | undefined | null,\n\t\tsignal?: CancellationTokenHandle | undefined | null,\n\t): Promise<RuntimeQueueMessage[]>;\n\tactorQueueWaitForNames(\n\t\tctx: ActorContextHandle,\n\t\tnames: string[],\n\t\toptions?: RuntimeQueueWaitOptions | undefined | null,\n\t\tsignal?: CancellationTokenHandle | undefined | null,\n\t): Promise<RuntimeQueueMessage>;\n\tactorQueueWaitForNamesAvailable(\n\t\tctx: ActorContextHandle,\n\t\tnames: string[],\n\t\toptions?: RuntimeQueueWaitOptions | undefined | null,\n\t): Promise<void>;\n\tactorQueueEnqueueAndWait(\n\t\tctx: ActorContextHandle,\n\t\tname: string,\n\t\tbody: RuntimeBytes,\n\t\toptions?: RuntimeQueueEnqueueAndWaitOptions | undefined | null,\n\t\tsignal?: CancellationTokenHandle | undefined | null,\n\t): Promise<RuntimeBytes | null>;\n\tactorQueueTryNextBatch(\n\t\tctx: ActorContextHandle,\n\t\toptions?: RuntimeQueueTryNextBatchOptions | undefined | null,\n\t): RuntimeQueueMessage[];\n\tactorQueueMaxSize(ctx: ActorContextHandle): number;\n\tactorQueueInspectMessages(\n\t\tctx: ActorContextHandle,\n\t): Promise<RuntimeQueueInspectMessage[]>;\n\n\tactorScheduleAfter(\n\t\tctx: ActorContextHandle,\n\t\tdurationMs: number,\n\t\tactionName: string,\n\t\targs: RuntimeBytes,\n\t): void;\n\tactorScheduleAt(\n\t\tctx: ActorContextHandle,\n\t\ttimestampMs: number,\n\t\tactionName: string,\n\t\targs: RuntimeBytes,\n\t): void;\n\n\tconnId(conn: ConnHandle): string;\n\tconnParams(conn: ConnHandle): RuntimeBytes;\n\tconnState(conn: ConnHandle): RuntimeBytes;\n\tconnSetState(conn: ConnHandle, state: RuntimeBytes): void;\n\tconnIsHibernatable(conn: ConnHandle): boolean;\n\tconnSend(conn: ConnHandle, name: string, args: RuntimeBytes): void;\n\tconnDisconnect(\n\t\tconn: ConnHandle,\n\t\treason?: string | undefined | null,\n\t): Promise<void>;\n\n\twebSocketSend(\n\t\tws: WebSocketHandle,\n\t\tdata: RuntimeBytes,\n\t\tbinary: boolean,\n\t): void;\n\twebSocketClose(\n\t\tws: WebSocketHandle,\n\t\tcode?: number | undefined | null,\n\t\treason?: string | undefined | null,\n\t): Promise<void>;\n\twebSocketSetEventCallback(\n\t\tws: WebSocketHandle,\n\t\tcallback: (event: RuntimeWebSocketEvent) => void,\n\t): void;\n}\n\nexport interface RuntimeBundle {\n\truntime: CoreRuntime;\n}\n\nexport async function buildServeConfig(\n\tconfig: RegistryConfig,\n\tloadEnginePath: () => Promise<string>,\n\tversion: string,\n): Promise<RuntimeServeConfig> {\n\tif (!config.endpoint) {\n\t\tthrow new Error(\"registry endpoint is required\");\n\t}\n\n\tconst serveConfig: RuntimeServeConfig = {\n\t\tversion: config.envoy.version,\n\t\tendpoint: config.endpoint,\n\t\ttoken: config.token,\n\t\tnamespace: config.namespace,\n\t\tpoolName: config.envoy.poolName,\n\t\thandleInspectorHttpInRuntime: true,\n\t\tserverlessBasePath: config.serverless.basePath,\n\t\tserverlessPackageVersion: version,\n\t\tserverlessClientEndpoint: config.publicEndpoint,\n\t\tserverlessClientNamespace: config.publicNamespace,\n\t\tserverlessClientToken: config.publicToken,\n\t\tserverlessValidateEndpoint: config.validateServerlessEndpoint,\n\t\tserverlessMaxStartPayloadBytes: config.serverless.maxStartPayloadBytes,\n\t};\n\n\tif (config.startEngine) {\n\t\tserveConfig.engineBinaryPath = await loadEnginePath();\n\t}\n\tif (config.test?.enabled) {\n\t\tserveConfig.inspectorTestToken =\n\t\t\tprocess.env._RIVET_TEST_INSPECTOR_TOKEN ?? \"token\";\n\t}\n\n\treturn serveConfig;\n}\n","import type {\n\tActorContext as NativeActorContext,\n\tNapiActorFactory as NativeActorFactory,\n\tCancellationToken as NativeCancellationToken,\n\tConnHandle as NativeConnHandle,\n\tCoreRegistry as NativeCoreRegistry,\n\tWebSocket as NativeWebSocket,\n} from \"@rivetkit/rivetkit-napi\";\nimport type {\n\tActorContextHandle,\n\tActorFactoryHandle,\n\tCancellationTokenHandle,\n\tConnHandle,\n\tCoreRuntime,\n\tRegistryHandle,\n\tRuntimeActorConfig,\n\tRuntimeBytes,\n\tRuntimeHttpRequest,\n\tRuntimeKvEntry,\n\tRuntimeKvListOptions,\n\tRuntimeQueueEnqueueAndWaitOptions,\n\tRuntimeQueueMessage,\n\tRuntimeQueueNextBatchOptions,\n\tRuntimeQueueTryNextBatchOptions,\n\tRuntimeQueueWaitOptions,\n\tRuntimeRequestSaveOpts,\n\tRuntimeRegistryRouteResponse,\n\tRuntimeServeConfig,\n\tRuntimeServerlessRequest,\n\tRuntimeServerlessResponseHead,\n\tRuntimeServerlessStreamCallback,\n\tRuntimeSqlBindParam,\n\tRuntimeSqlBindParams,\n\tRuntimeSqlExecResult,\n\tRuntimeSqlExecuteResult,\n\tRuntimeSqlQueryResult,\n\tRuntimeSqlRunResult,\n\tRuntimeStateDeltaPayload,\n\tRuntimeWebSocketEvent,\n\tWebSocketHandle,\n} from \"./runtime\";\nimport { normalizeRuntimeSqlExecuteResult } from \"./runtime\";\n\ntype NativeBindings = typeof import(\"@rivetkit/rivetkit-napi\");\ntype NapiSqlDatabase = ReturnType<NativeActorContext[\"sql\"]>;\ntype NapiSqlBindParams = Parameters<NapiSqlDatabase[\"execute\"]>[1];\n\nfunction asNativeRegistry(handle: RegistryHandle): NativeCoreRegistry {\n\treturn handle as unknown as NativeCoreRegistry;\n}\n\nfunction asNativeFactory(handle: ActorFactoryHandle): NativeActorFactory {\n\treturn handle as unknown as NativeActorFactory;\n}\n\nfunction asNativeActorContext(handle: ActorContextHandle): NativeActorContext {\n\treturn handle as unknown as NativeActorContext;\n}\n\nfunction asNativeConn(handle: ConnHandle): NativeConnHandle {\n\treturn handle as unknown as NativeConnHandle;\n}\n\nfunction asNativeWebSocket(handle: WebSocketHandle): NativeWebSocket {\n\treturn handle as unknown as NativeWebSocket;\n}\n\nfunction asNativeCancellationToken(\n\thandle: CancellationTokenHandle,\n): NativeCancellationToken {\n\treturn handle as unknown as NativeCancellationToken;\n}\n\nfunction asRegistryHandle(handle: NativeCoreRegistry): RegistryHandle {\n\treturn handle as unknown as RegistryHandle;\n}\n\nfunction asActorFactoryHandle(handle: NativeActorFactory): ActorFactoryHandle {\n\treturn handle as unknown as ActorFactoryHandle;\n}\n\nfunction toNapiSqlBindParam(\n\tparam: RuntimeSqlBindParam,\n): NonNullable<NapiSqlBindParams>[number] {\n\tswitch (param.kind) {\n\t\tcase \"null\":\n\t\t\treturn { kind: \"null\" };\n\t\tcase \"int\":\n\t\t\treturn { kind: \"int\", intValue: param.intValue };\n\t\tcase \"float\":\n\t\t\treturn { kind: \"float\", floatValue: param.floatValue };\n\t\tcase \"text\":\n\t\t\treturn { kind: \"text\", textValue: param.textValue };\n\t\tcase \"blob\":\n\t\t\treturn { kind: \"blob\", blobValue: Buffer.from(param.blobValue) };\n\t}\n}\n\nfunction toNapiSqlBindParams(params?: RuntimeSqlBindParams): NapiSqlBindParams {\n\tif (params == null) {\n\t\treturn params;\n\t}\n\treturn params.map((param) => toNapiSqlBindParam(param));\n}\n\nfunction toNapiBuffer(value: RuntimeBytes): Buffer {\n\treturn Buffer.from(value);\n}\n\nfunction toNapiHttpRequest(\n\trequest?: RuntimeHttpRequest | undefined | null,\n): Parameters<NativeActorContext[\"connectConn\"]>[1] {\n\tif (!request) {\n\t\treturn request;\n\t}\n\treturn {\n\t\t...request,\n\t\tbody: request.body ? toNapiBuffer(request.body) : undefined,\n\t};\n}\n\nfunction toNapiStateDeltaPayload(\n\tpayload: RuntimeStateDeltaPayload,\n): Parameters<NativeActorContext[\"saveState\"]>[0] {\n\treturn {\n\t\t...payload,\n\t\tstate: payload.state ? toNapiBuffer(payload.state) : undefined,\n\t\tconnHibernation: payload.connHibernation.map((conn) => ({\n\t\t\t...conn,\n\t\t\tbytes: toNapiBuffer(conn.bytes),\n\t\t})),\n\t};\n}\n\nfunction toNapiKvEntry(entry: RuntimeKvEntry): {\n\tkey: Buffer;\n\tvalue: Buffer;\n} {\n\treturn {\n\t\tkey: toNapiBuffer(entry.key),\n\t\tvalue: toNapiBuffer(entry.value),\n\t};\n}\n\nfunction toNapiQueueMessage(message: RuntimeQueueMessage): RuntimeQueueMessage {\n\treturn {\n\t\tid: () => message.id(),\n\t\tname: () => message.name(),\n\t\tbody: () => message.body(),\n\t\tcreatedAt: () => message.createdAt(),\n\t\tisCompletable: () => message.isCompletable(),\n\t\tcomplete: async (response?: RuntimeBytes | undefined | null) => {\n\t\t\tawait message.complete(\n\t\t\t\tresponse === null || response === undefined\n\t\t\t\t\t? response\n\t\t\t\t\t: toNapiBuffer(response),\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport class NapiCoreRuntime implements CoreRuntime {\n\treadonly kind = \"napi\";\n\n\t#bindings: NativeBindings;\n\t#sql = new WeakMap<NativeActorContext, NapiSqlDatabase>();\n\n\tconstructor(bindings: NativeBindings) {\n\t\tthis.#bindings = bindings;\n\t}\n\n\t#actorSql(ctx: ActorContextHandle): NapiSqlDatabase {\n\t\tconst nativeCtx = asNativeActorContext(ctx);\n\t\tlet database = this.#sql.get(nativeCtx);\n\t\tif (!database) {\n\t\t\tdatabase = nativeCtx.sql();\n\t\t\tthis.#sql.set(nativeCtx, database);\n\t\t}\n\t\treturn database;\n\t}\n\n\tcreateRegistry(): RegistryHandle {\n\t\treturn asRegistryHandle(new this.#bindings.CoreRegistry());\n\t}\n\n\tregisterActor(\n\t\tregistry: RegistryHandle,\n\t\tname: string,\n\t\tfactory: ActorFactoryHandle,\n\t): void {\n\t\tasNativeRegistry(registry).register(name, asNativeFactory(factory));\n\t}\n\n\tasync serveRegistry(\n\t\tregistry: RegistryHandle,\n\t\tconfig: RuntimeServeConfig,\n\t): Promise<void> {\n\t\tawait asNativeRegistry(registry).serve(config);\n\t}\n\n\tasync shutdownRegistry(registry: RegistryHandle): Promise<void> {\n\t\tawait asNativeRegistry(registry).shutdown();\n\t}\n\n\tasync registryActorStopThresholdMs(\n\t\tregistry: RegistryHandle,\n\t): Promise<number | undefined> {\n\t\treturn (\n\t\t\t(await asNativeRegistry(registry).actorStopThresholdMs()) ??\n\t\t\tundefined\n\t\t);\n\t}\n\n\tasync registryHealth(\n\t\tregistry: RegistryHandle,\n\t): Promise<RuntimeRegistryRouteResponse> {\n\t\tconst response = await asNativeRegistry(registry).health();\n\t\treturn {\n\t\t\tstatus: response.status,\n\t\t\theaders: response.headers,\n\t\t\tbody: response.body,\n\t\t};\n\t}\n\n\tasync registryMetadata(\n\t\tregistry: RegistryHandle,\n\t): Promise<RuntimeRegistryRouteResponse> {\n\t\tconst response = asNativeRegistry(registry).metadata();\n\t\treturn {\n\t\t\tstatus: response.status,\n\t\t\theaders: response.headers,\n\t\t\tbody: response.body,\n\t\t};\n\t}\n\n\tasync registryMetrics(\n\t\tregistry: RegistryHandle,\n\t): Promise<RuntimeRegistryRouteResponse> {\n\t\tconst response = asNativeRegistry(registry).metrics();\n\t\treturn {\n\t\t\tstatus: response.status,\n\t\t\theaders: response.headers,\n\t\t\tbody: response.body,\n\t\t};\n\t}\n\n\tasync handleServerlessRequest(\n\t\tregistry: RegistryHandle,\n\t\treq: RuntimeServerlessRequest,\n\t\tonStreamEvent: RuntimeServerlessStreamCallback,\n\t\tcancelToken: CancellationTokenHandle,\n\t\tconfig: RuntimeServeConfig,\n\t): Promise<RuntimeServerlessResponseHead> {\n\t\treturn await asNativeRegistry(registry).handleServerlessRequest(\n\t\t\t{ ...req, body: toNapiBuffer(req.body) },\n\t\t\tonStreamEvent,\n\t\t\tasNativeCancellationToken(cancelToken),\n\t\t\tconfig,\n\t\t);\n\t}\n\n\tcreateActorFactory(\n\t\tcallbacks: object,\n\t\tconfig?: RuntimeActorConfig | undefined | null,\n\t): ActorFactoryHandle {\n\t\treturn asActorFactoryHandle(\n\t\t\tnew this.#bindings.NapiActorFactory(callbacks, config),\n\t\t);\n\t}\n\n\tcreateCancellationToken(): CancellationTokenHandle {\n\t\treturn new this.#bindings.CancellationToken() as unknown as CancellationTokenHandle;\n\t}\n\n\tcreateTestActorContext(\n\t\tactorId: string,\n\t\tname: string,\n\t\tregion: string,\n\t): ActorContextHandle {\n\t\treturn new this.#bindings.ActorContext(\n\t\t\tactorId,\n\t\t\tname,\n\t\t\tregion,\n\t\t) as unknown as ActorContextHandle;\n\t}\n\n\tcancellationTokenAborted(token: CancellationTokenHandle): boolean {\n\t\treturn asNativeCancellationToken(token).aborted();\n\t}\n\n\tcancelCancellationToken(token: CancellationTokenHandle): void {\n\t\tasNativeCancellationToken(token).cancel();\n\t}\n\n\tonCancellationTokenCancelled(\n\t\ttoken: CancellationTokenHandle,\n\t\tcallback: (...args: unknown[]) => unknown,\n\t): void {\n\t\tasNativeCancellationToken(token).onCancelled(callback);\n\t}\n\n\tactorState(ctx: ActorContextHandle): Buffer {\n\t\treturn asNativeActorContext(ctx).state();\n\t}\n\n\tactorBeginOnStateChange(ctx: ActorContextHandle): void {\n\t\tasNativeActorContext(ctx).beginOnStateChange();\n\t}\n\n\tactorEndOnStateChange(ctx: ActorContextHandle): void {\n\t\tasNativeActorContext(ctx).endOnStateChange();\n\t}\n\n\tactorSetAlarm(\n\t\tctx: ActorContextHandle,\n\t\ttimestampMs?: number | undefined | null,\n\t): void {\n\t\tasNativeActorContext(ctx).setAlarm(timestampMs);\n\t}\n\n\tactorRequestSave(\n\t\tctx: ActorContextHandle,\n\t\topts?: RuntimeRequestSaveOpts | undefined | null,\n\t): void {\n\t\tasNativeActorContext(ctx).requestSave(opts);\n\t}\n\n\tasync actorRequestSaveAndWait(\n\t\tctx: ActorContextHandle,\n\t\topts?: RuntimeRequestSaveOpts | undefined | null,\n\t): Promise<void> {\n\t\tawait asNativeActorContext(ctx).requestSaveAndWait(opts);\n\t}\n\n\tactorInspectorSnapshot(ctx: ActorContextHandle) {\n\t\treturn asNativeActorContext(ctx).inspectorSnapshot();\n\t}\n\n\tactorDecodeInspectorRequest(\n\t\tctx: ActorContextHandle,\n\t\tbytes: RuntimeBytes,\n\t\tadvertisedVersion: number,\n\t): RuntimeBytes {\n\t\treturn asNativeActorContext(ctx).decodeInspectorRequest(\n\t\t\ttoNapiBuffer(bytes),\n\t\t\tadvertisedVersion,\n\t\t);\n\t}\n\n\tactorEncodeInspectorResponse(\n\t\tctx: ActorContextHandle,\n\t\tbytes: RuntimeBytes,\n\t\ttargetVersion: number,\n\t): RuntimeBytes {\n\t\treturn asNativeActorContext(ctx).encodeInspectorResponse(\n\t\t\ttoNapiBuffer(bytes),\n\t\t\ttargetVersion,\n\t\t);\n\t}\n\n\tasync actorVerifyInspectorAuth(\n\t\tctx: ActorContextHandle,\n\t\tbearerToken?: string | undefined | null,\n\t): Promise<void> {\n\t\tawait asNativeActorContext(ctx).verifyInspectorAuth(bearerToken);\n\t}\n\n\tactorQueueHibernationRemoval(\n\t\tctx: ActorContextHandle,\n\t\tconnId: string,\n\t): void {\n\t\tasNativeActorContext(ctx).queueHibernationRemoval(connId);\n\t}\n\n\tactorTakePendingHibernationChanges(ctx: ActorContextHandle): string[] {\n\t\treturn asNativeActorContext(ctx).takePendingHibernationChanges();\n\t}\n\n\tactorDirtyHibernatableConns(ctx: ActorContextHandle): ConnHandle[] {\n\t\treturn asNativeActorContext(\n\t\t\tctx,\n\t\t).dirtyHibernatableConns() as unknown as ConnHandle[];\n\t}\n\n\tasync actorSaveState(\n\t\tctx: ActorContextHandle,\n\t\tpayload: RuntimeStateDeltaPayload,\n\t): Promise<void> {\n\t\tawait asNativeActorContext(ctx).saveState(\n\t\t\ttoNapiStateDeltaPayload(payload),\n\t\t);\n\t}\n\n\tactorId(ctx: ActorContextHandle): string {\n\t\treturn asNativeActorContext(ctx).actorId();\n\t}\n\n\tactorName(ctx: ActorContextHandle): string {\n\t\treturn asNativeActorContext(ctx).name();\n\t}\n\n\tactorKey(ctx: ActorContextHandle) {\n\t\treturn asNativeActorContext(ctx).key();\n\t}\n\n\tactorRegion(ctx: ActorContextHandle): string {\n\t\treturn asNativeActorContext(ctx).region();\n\t}\n\n\tactorSleep(ctx: ActorContextHandle): void {\n\t\tasNativeActorContext(ctx).sleep();\n\t}\n\n\tactorDestroy(ctx: ActorContextHandle): void {\n\t\tasNativeActorContext(ctx).destroy();\n\t}\n\n\tactorAbortSignal(ctx: ActorContextHandle): AbortSignal {\n\t\treturn asNativeActorContext(ctx).abortSignal();\n\t}\n\n\tactorConns(ctx: ActorContextHandle): ConnHandle[] {\n\t\treturn asNativeActorContext(ctx).conns() as unknown as ConnHandle[];\n\t}\n\n\tasync actorConnectConn(\n\t\tctx: ActorContextHandle,\n\t\tparams: RuntimeBytes,\n\t\trequest?: RuntimeHttpRequest | undefined | null,\n\t): Promise<ConnHandle> {\n\t\treturn (await asNativeActorContext(ctx).connectConn(\n\t\t\ttoNapiBuffer(params),\n\t\t\ttoNapiHttpRequest(request),\n\t\t)) as unknown as ConnHandle;\n\t}\n\n\tactorBroadcast(\n\t\tctx: ActorContextHandle,\n\t\tname: string,\n\t\targs: RuntimeBytes,\n\t): void {\n\t\tasNativeActorContext(ctx).broadcast(name, toNapiBuffer(args));\n\t}\n\n\tactorWaitUntil(ctx: ActorContextHandle, promise: Promise<unknown>): void {\n\t\tasNativeActorContext(ctx).waitUntil(promise);\n\t}\n\n\tasync actorWaitForTrackedShutdownWork(\n\t\tctx: ActorContextHandle,\n\t): Promise<boolean> {\n\t\treturn await asNativeActorContext(ctx).waitForTrackedShutdownWork();\n\t}\n\n\tactorKeepAwake(ctx: ActorContextHandle, promise: Promise<unknown>): void {\n\t\tasNativeActorContext(ctx).keepAwake(promise);\n\t}\n\n\tactorBeginKeepAwake(ctx: ActorContextHandle): number {\n\t\treturn asNativeActorContext(ctx).beginKeepAwake();\n\t}\n\n\tactorEndKeepAwake(ctx: ActorContextHandle, regionId: number): void {\n\t\tasNativeActorContext(ctx).endKeepAwake(regionId);\n\t}\n\n\tactorRegisterTask(\n\t\tctx: ActorContextHandle,\n\t\tpromise: Promise<unknown>,\n\t): void {\n\t\tasNativeActorContext(ctx).registerTask(promise);\n\t}\n\n\tactorRuntimeState(ctx: ActorContextHandle): object {\n\t\treturn asNativeActorContext(ctx).runtimeState();\n\t}\n\n\tactorClearRuntimeState(ctx: ActorContextHandle): void {\n\t\tasNativeActorContext(ctx).clearRuntimeState();\n\t}\n\n\tactorRestartRunHandler(ctx: ActorContextHandle): void {\n\t\tasNativeActorContext(ctx).restartRunHandler();\n\t}\n\n\tactorBeginWebsocketCallback(ctx: ActorContextHandle): number {\n\t\treturn asNativeActorContext(ctx).beginWebsocketCallback();\n\t}\n\n\tactorEndWebsocketCallback(ctx: ActorContextHandle, regionId: number): void {\n\t\tasNativeActorContext(ctx).endWebsocketCallback(regionId);\n\t}\n\n\tasync actorKvGet(\n\t\tctx: ActorContextHandle,\n\t\tkey: RuntimeBytes,\n\t): Promise<RuntimeBytes | null> {\n\t\treturn await asNativeActorContext(ctx).kv().get(toNapiBuffer(key));\n\t}\n\n\tasync actorKvPut(\n\t\tctx: ActorContextHandle,\n\t\tkey: RuntimeBytes,\n\t\tvalue: RuntimeBytes,\n\t): Promise<void> {\n\t\tawait asNativeActorContext(ctx)\n\t\t\t.kv()\n\t\t\t.put(toNapiBuffer(key), toNapiBuffer(value));\n\t}\n\n\tasync actorKvDelete(\n\t\tctx: ActorContextHandle,\n\t\tkey: RuntimeBytes,\n\t): Promise<void> {\n\t\tawait asNativeActorContext(ctx).kv().delete(toNapiBuffer(key));\n\t}\n\n\tasync actorKvDeleteRange(\n\t\tctx: ActorContextHandle,\n\t\tstart: RuntimeBytes,\n\t\tend: RuntimeBytes,\n\t): Promise<void> {\n\t\tawait asNativeActorContext(ctx)\n\t\t\t.kv()\n\t\t\t.deleteRange(toNapiBuffer(start), toNapiBuffer(end));\n\t}\n\n\tasync actorKvListPrefix(\n\t\tctx: ActorContextHandle,\n\t\tprefix: RuntimeBytes,\n\t\toptions?: RuntimeKvListOptions | undefined | null,\n\t): Promise<RuntimeKvEntry[]> {\n\t\treturn await asNativeActorContext(ctx)\n\t\t\t.kv()\n\t\t\t.listPrefix(toNapiBuffer(prefix), options);\n\t}\n\n\tasync actorKvListRange(\n\t\tctx: ActorContextHandle,\n\t\tstart: RuntimeBytes,\n\t\tend: RuntimeBytes,\n\t\toptions?: RuntimeKvListOptions | undefined | null,\n\t): Promise<RuntimeKvEntry[]> {\n\t\treturn await asNativeActorContext(ctx)\n\t\t\t.kv()\n\t\t\t.listRange(toNapiBuffer(start), toNapiBuffer(end), options);\n\t}\n\n\tasync actorKvBatchGet(\n\t\tctx: ActorContextHandle,\n\t\tkeys: RuntimeBytes[],\n\t): Promise<Array<RuntimeBytes | undefined | null>> {\n\t\treturn await asNativeActorContext(ctx)\n\t\t\t.kv()\n\t\t\t.batchGet(keys.map(toNapiBuffer));\n\t}\n\n\tasync actorKvBatchPut(\n\t\tctx: ActorContextHandle,\n\t\tentries: RuntimeKvEntry[],\n\t): Promise<void> {\n\t\tawait asNativeActorContext(ctx)\n\t\t\t.kv()\n\t\t\t.batchPut(entries.map(toNapiKvEntry));\n\t}\n\n\tasync actorKvBatchDelete(\n\t\tctx: ActorContextHandle,\n\t\tkeys: RuntimeBytes[],\n\t): Promise<void> {\n\t\tawait asNativeActorContext(ctx)\n\t\t\t.kv()\n\t\t\t.batchDelete(keys.map(toNapiBuffer));\n\t}\n\n\tasync actorSqlExec(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t): Promise<RuntimeSqlExecResult> {\n\t\treturn await this.#actorSql(ctx).exec(sql);\n\t}\n\n\tasync actorSqlExecute(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlExecuteResult> {\n\t\tconst result = await this.#actorSql(ctx).execute(\n\t\t\tsql,\n\t\t\ttoNapiSqlBindParams(params),\n\t\t);\n\t\treturn normalizeRuntimeSqlExecuteResult(result);\n\t}\n\n\tasync actorSqlQuery(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlQueryResult> {\n\t\treturn await this.#actorSql(ctx).query(\n\t\t\tsql,\n\t\t\ttoNapiSqlBindParams(params),\n\t\t);\n\t}\n\n\tasync actorSqlRun(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlRunResult> {\n\t\treturn await this.#actorSql(ctx).run(sql, toNapiSqlBindParams(params));\n\t}\n\n\tactorSqlMetrics(ctx: ActorContextHandle) {\n\t\treturn this.#actorSql(ctx).metrics?.() ?? null;\n\t}\n\n\tactorSqlTakeLastKvError(ctx: ActorContextHandle): string | null {\n\t\treturn this.#actorSql(ctx).takeLastKvError?.() ?? null;\n\t}\n\n\tasync actorSqlClose(ctx: ActorContextHandle): Promise<void> {\n\t\tconst nativeCtx = asNativeActorContext(ctx);\n\t\tconst database = this.#sql.get(nativeCtx);\n\t\tif (!database) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#sql.delete(nativeCtx);\n\t\tawait database.close();\n\t}\n\n\tasync actorQueueSend(\n\t\tctx: ActorContextHandle,\n\t\tname: string,\n\t\tbody: RuntimeBytes,\n\t): Promise<RuntimeQueueMessage> {\n\t\treturn toNapiQueueMessage(\n\t\t\tawait asNativeActorContext(ctx)\n\t\t\t\t.queue()\n\t\t\t\t.send(name, toNapiBuffer(body)),\n\t\t);\n\t}\n\n\tasync actorQueueNextBatch(\n\t\tctx: ActorContextHandle,\n\t\toptions?: RuntimeQueueNextBatchOptions | undefined | null,\n\t\tsignal?: CancellationTokenHandle | undefined | null,\n\t): Promise<RuntimeQueueMessage[]> {\n\t\tconst messages = await asNativeActorContext(ctx)\n\t\t\t.queue()\n\t\t\t.nextBatch(\n\t\t\t\toptions,\n\t\t\t\tsignal ? asNativeCancellationToken(signal) : signal,\n\t\t\t);\n\t\treturn messages.map(toNapiQueueMessage);\n\t}\n\n\tasync actorQueueWaitForNames(\n\t\tctx: ActorContextHandle,\n\t\tnames: string[],\n\t\toptions?: RuntimeQueueWaitOptions | undefined | null,\n\t\tsignal?: CancellationTokenHandle | undefined | null,\n\t): Promise<RuntimeQueueMessage> {\n\t\treturn toNapiQueueMessage(\n\t\t\tawait asNativeActorContext(ctx)\n\t\t\t\t.queue()\n\t\t\t\t.waitForNames(\n\t\t\t\t\tnames,\n\t\t\t\t\toptions,\n\t\t\t\t\tsignal ? asNativeCancellationToken(signal) : signal,\n\t\t\t\t),\n\t\t);\n\t}\n\n\tasync actorQueueWaitForNamesAvailable(\n\t\tctx: ActorContextHandle,\n\t\tnames: string[],\n\t\toptions?: RuntimeQueueWaitOptions | undefined | null,\n\t): Promise<void> {\n\t\tawait asNativeActorContext(ctx)\n\t\t\t.queue()\n\t\t\t.waitForNamesAvailable(names, options);\n\t}\n\n\tasync actorQueueEnqueueAndWait(\n\t\tctx: ActorContextHandle,\n\t\tname: string,\n\t\tbody: RuntimeBytes,\n\t\toptions?: RuntimeQueueEnqueueAndWaitOptions | undefined | null,\n\t\tsignal?: CancellationTokenHandle | undefined | null,\n\t): Promise<RuntimeBytes | null> {\n\t\treturn await asNativeActorContext(ctx)\n\t\t\t.queue()\n\t\t\t.enqueueAndWait(\n\t\t\t\tname,\n\t\t\t\ttoNapiBuffer(body),\n\t\t\t\toptions,\n\t\t\t\tsignal ? asNativeCancellationToken(signal) : signal,\n\t\t\t);\n\t}\n\n\tactorQueueTryNextBatch(\n\t\tctx: ActorContextHandle,\n\t\toptions?: RuntimeQueueTryNextBatchOptions | undefined | null,\n\t): RuntimeQueueMessage[] {\n\t\treturn asNativeActorContext(ctx)\n\t\t\t.queue()\n\t\t\t.tryNextBatch(options)\n\t\t\t.map(toNapiQueueMessage);\n\t}\n\n\tactorQueueMaxSize(ctx: ActorContextHandle): number {\n\t\treturn asNativeActorContext(ctx).queue().maxSize();\n\t}\n\n\tasync actorQueueInspectMessages(ctx: ActorContextHandle) {\n\t\treturn await asNativeActorContext(ctx).queue().inspectMessages();\n\t}\n\n\tactorScheduleAfter(\n\t\tctx: ActorContextHandle,\n\t\tdurationMs: number,\n\t\tactionName: string,\n\t\targs: RuntimeBytes,\n\t): void {\n\t\tasNativeActorContext(ctx)\n\t\t\t.schedule()\n\t\t\t.after(durationMs, actionName, toNapiBuffer(args));\n\t}\n\n\tactorScheduleAt(\n\t\tctx: ActorContextHandle,\n\t\ttimestampMs: number,\n\t\tactionName: string,\n\t\targs: RuntimeBytes,\n\t): void {\n\t\tasNativeActorContext(ctx)\n\t\t\t.schedule()\n\t\t\t.at(timestampMs, actionName, toNapiBuffer(args));\n\t}\n\n\tconnId(conn: ConnHandle): string {\n\t\treturn asNativeConn(conn).id();\n\t}\n\n\tconnParams(conn: ConnHandle): RuntimeBytes {\n\t\treturn asNativeConn(conn).params();\n\t}\n\n\tconnState(conn: ConnHandle): RuntimeBytes {\n\t\treturn asNativeConn(conn).state();\n\t}\n\n\tconnSetState(conn: ConnHandle, state: RuntimeBytes): void {\n\t\tasNativeConn(conn).setState(toNapiBuffer(state));\n\t}\n\n\tconnIsHibernatable(conn: ConnHandle): boolean {\n\t\treturn asNativeConn(conn).isHibernatable();\n\t}\n\n\tconnSend(conn: ConnHandle, name: string, args: RuntimeBytes): void {\n\t\tasNativeConn(conn).send(name, toNapiBuffer(args));\n\t}\n\n\tasync connDisconnect(\n\t\tconn: ConnHandle,\n\t\treason?: string | undefined | null,\n\t): Promise<void> {\n\t\tawait asNativeConn(conn).disconnect(reason);\n\t}\n\n\twebSocketSend(\n\t\tws: WebSocketHandle,\n\t\tdata: RuntimeBytes,\n\t\tbinary: boolean,\n\t): void {\n\t\tasNativeWebSocket(ws).send(toNapiBuffer(data), binary);\n\t}\n\n\tasync webSocketClose(\n\t\tws: WebSocketHandle,\n\t\tcode?: number | undefined | null,\n\t\treason?: string | undefined | null,\n\t): Promise<void> {\n\t\tawait asNativeWebSocket(ws).close(code, reason);\n\t}\n\n\twebSocketSetEventCallback(\n\t\tws: WebSocketHandle,\n\t\tcallback: (event: RuntimeWebSocketEvent) => void,\n\t): void {\n\t\tasNativeWebSocket(ws).setEventCallback(callback);\n\t}\n}\n\nexport type NapiBindings = NativeBindings;\n\nexport async function loadNapiRuntime(): Promise<{\n\tbindings: NapiBindings;\n\truntime: NapiCoreRuntime;\n}> {\n\tconst bindings = await import([\"@rivetkit\", \"rivetkit-napi\"].join(\"/\"));\n\treturn {\n\t\tbindings,\n\t\truntime: new NapiCoreRuntime(bindings),\n\t};\n}\n","import { RivetError } from \"@/actor/errors\";\nimport {\n\tisEventSchemaDefinition,\n\tisQueueSchemaDefinition,\n\tisStandardSchema,\n\tvalidateSchemaSync,\n\ttype EventSchemaConfig,\n\ttype PrimitiveSchema,\n\ttype QueueSchemaConfig,\n} from \"@/actor/schema\";\n\nconst CONN_PARAMS_KEY = \"__conn_params__\";\n\nexport interface NativeValidationConfig {\n\tactionInputSchemas?: Record<string, PrimitiveSchema>;\n\tconnParamsSchema?: PrimitiveSchema;\n\tevents?: EventSchemaConfig;\n\tqueues?: QueueSchemaConfig;\n}\n\nexport function validateActionArgs(\n\tschemas: NativeValidationConfig[\"actionInputSchemas\"],\n\tname: string,\n\targs: unknown[],\n): unknown[] {\n\tif (!schemas?.[name]) {\n\t\treturn args;\n\t}\n\n\tconst result = validateSchemaSync(schemas as EventSchemaConfig, name, args);\n\tif (!result.success) {\n\t\tthrow validationError(`action \\`${name}\\` arguments`, result.issues);\n\t}\n\treturn Array.isArray(result.data) ? result.data : [result.data];\n}\n\nexport function validateConnParams(\n\tschema: NativeValidationConfig[\"connParamsSchema\"],\n\tparams: unknown,\n): unknown {\n\tif (!schema) {\n\t\treturn params;\n\t}\n\n\tconst result = validateSchemaSync(\n\t\t{ [CONN_PARAMS_KEY]: schema } as EventSchemaConfig,\n\t\tCONN_PARAMS_KEY,\n\t\tparams,\n\t);\n\tif (!result.success) {\n\t\tthrow validationError(\"connection params\", result.issues);\n\t}\n\treturn result.data;\n}\n\nexport function validateEventArgs(\n\tschemas: NativeValidationConfig[\"events\"],\n\tname: string,\n\targs: unknown[],\n): unknown[] {\n\tif (!schemas?.[name]) {\n\t\treturn args;\n\t}\n\n\tconst payload = args.length <= 1 ? args[0] : args;\n\tconst result = validateSchemaSync(schemas, name, payload);\n\tif (!result.success) {\n\t\tthrow validationError(`event \\`${name}\\` payload`, result.issues);\n\t}\n\treturn args.length <= 1\n\t\t? [result.data]\n\t\t: Array.isArray(result.data)\n\t\t\t? result.data\n\t\t\t: [result.data];\n}\n\nexport function validateQueueBody(\n\tschemas: NativeValidationConfig[\"queues\"],\n\tname: string,\n\tbody: unknown,\n): unknown {\n\tif (!schemas?.[name]) {\n\t\treturn body;\n\t}\n\n\tconst result = validateSchemaSync(schemas, name, body);\n\tif (!result.success) {\n\t\tthrow validationError(`queue \\`${name}\\` message`, result.issues);\n\t}\n\treturn result.data;\n}\n\nexport function validateQueueComplete(\n\tschemas: NativeValidationConfig[\"queues\"],\n\tname: string,\n\tresponse: unknown,\n): unknown {\n\tconst schema = schemas?.[name];\n\tif (!schema) {\n\t\treturn response;\n\t}\n\n\tlet completeSchema: PrimitiveSchema | undefined;\n\tif (isQueueSchemaDefinition(schema)) {\n\t\tcompleteSchema = schema.complete;\n\t} else if (\n\t\t!isStandardSchema(schema) &&\n\t\t!isEventSchemaDefinition(schema) &&\n\t\ttypeof schema === \"object\" &&\n\t\tschema !== null &&\n\t\t\"complete\" in schema\n\t) {\n\t\tconst candidate = (schema as { complete?: unknown }).complete;\n\t\tif (candidate !== undefined) {\n\t\t\tcompleteSchema = candidate as PrimitiveSchema;\n\t\t}\n\t}\n\n\tif (!completeSchema) {\n\t\treturn response;\n\t}\n\n\tconst result = validateSchemaSync(\n\t\t{ [name]: completeSchema } as EventSchemaConfig,\n\t\tname,\n\t\tresponse,\n\t);\n\tif (!result.success) {\n\t\tthrow validationError(`queue \\`${name}\\` completion response`, result.issues);\n\t}\n\treturn result.data;\n}\n\nfunction validationError(target: string, issues: unknown[]): RivetError {\n\treturn new RivetError(\n\t\t\"actor\",\n\t\t\"validation_error\",\n\t\t`Invalid ${target}`,\n\t\t{\n\t\t\tpublic: true,\n\t\t\tmetadata: { issues },\n\t\t},\n\t);\n}\n","import type {\n\tActorContext as WasmActorContext,\n\tActorFactory as WasmActorFactory,\n\tCancellationToken as WasmCancellationToken,\n\tConnHandle as WasmConnHandle,\n\tCoreRegistry as WasmCoreRegistry,\n\tWebSocketHandle as WasmWebSocketHandle,\n} from \"@rivetkit/rivetkit-wasm\";\nimport { decodeBridgeRivetError, RivetError } from \"@/actor/errors\";\nimport type {\n\tWasmRuntimeBindings,\n\tWasmRuntimeConfig,\n\tWasmRuntimeInitInput,\n} from \"./config\";\nimport type {\n\tActorContextHandle,\n\tActorFactoryHandle,\n\tCancellationTokenHandle,\n\tConnHandle,\n\tCoreRuntime,\n\tRegistryHandle,\n\tRuntimeActorConfig,\n\tRuntimeActorKeySegment,\n\tRuntimeBytes,\n\tRuntimeHttpRequest,\n\tRuntimeInspectorSnapshot,\n\tRuntimeKvEntry,\n\tRuntimeKvListOptions,\n\tRuntimeQueueEnqueueAndWaitOptions,\n\tRuntimeQueueInspectMessage,\n\tRuntimeQueueMessage,\n\tRuntimeQueueNextBatchOptions,\n\tRuntimeQueueTryNextBatchOptions,\n\tRuntimeQueueWaitOptions,\n\tRuntimeRequestSaveOpts,\n\tRuntimeRegistryRouteResponse,\n\tRuntimeServeConfig,\n\tRuntimeServerlessRequest,\n\tRuntimeServerlessResponseHead,\n\tRuntimeServerlessStreamCallback,\n\tRuntimeSqlBindParams,\n\tRuntimeSqlDatabase,\n\tRuntimeSqlExecResult,\n\tRuntimeSqlExecuteResult,\n\tRuntimeSqlQueryResult,\n\tRuntimeSqlRunResult,\n\tRuntimeStateDeltaPayload,\n\tRuntimeWebSocketEvent,\n\tWebSocketHandle,\n} from \"./runtime\";\nimport { normalizeRuntimeSqlExecuteResult } from \"./runtime\";\n\ntype WasmBindings = WasmRuntimeBindings;\nexport type WasmInitInput = WasmRuntimeInitInput;\ntype AnyFunction = (...args: unknown[]) => unknown;\ntype WasmRuntimeLoadConfig = Pick<WasmRuntimeConfig, \"bindings\" | \"initInput\">;\n\nfunction asWasmRegistry(handle: RegistryHandle): WasmCoreRegistry {\n\treturn handle as unknown as WasmCoreRegistry;\n}\n\nfunction asWasmFactory(handle: ActorFactoryHandle): WasmActorFactory {\n\treturn handle as unknown as WasmActorFactory;\n}\n\nfunction asWasmActorContext(handle: ActorContextHandle): WasmActorContext {\n\treturn handle as unknown as WasmActorContext;\n}\n\nfunction asWasmConn(handle: ConnHandle): WasmConnHandle {\n\treturn handle as unknown as WasmConnHandle;\n}\n\nfunction asWasmWebSocket(handle: WebSocketHandle): WasmWebSocketHandle {\n\treturn handle as unknown as WasmWebSocketHandle;\n}\n\nfunction asWasmCancellationToken(\n\thandle: CancellationTokenHandle,\n): WasmCancellationToken {\n\treturn handle as unknown as WasmCancellationToken;\n}\n\nfunction asRegistryHandle(handle: WasmCoreRegistry): RegistryHandle {\n\treturn handle as unknown as RegistryHandle;\n}\n\nfunction asActorFactoryHandle(handle: WasmActorFactory): ActorFactoryHandle {\n\treturn handle as unknown as ActorFactoryHandle;\n}\n\nfunction toBytes(value: RuntimeBytes | null | undefined): RuntimeBytes {\n\treturn value ?? new Uint8Array(0);\n}\n\nfunction optionalBytes(\n\tvalue: RuntimeBytes | null | undefined,\n): RuntimeBytes | null {\n\tif (value === null || value === undefined) {\n\t\treturn null;\n\t}\n\treturn toBytes(value);\n}\n\nfunction optionalWasmNumber(\n\tvalue: number | bigint | null | undefined,\n): number | null | undefined {\n\tif (value === null || value === undefined) {\n\t\treturn value;\n\t}\n\treturn typeof value === \"bigint\" ? Number(value) : value;\n}\n\nfunction wasmNumber(value: number | bigint): number {\n\treturn typeof value === \"bigint\" ? Number(value) : value;\n}\n\nfunction normalizeKvEntry(entry: RuntimeKvEntry): RuntimeKvEntry {\n\treturn {\n\t\tkey: toBytes(entry.key),\n\t\tvalue: toBytes(entry.value),\n\t};\n}\n\nfunction normalizeQueueMessage(\n\tmessage: RuntimeQueueMessage,\n): RuntimeQueueMessage {\n\treturn {\n\t\tid: () => message.id(),\n\t\tname: () => message.name(),\n\t\tbody: () => toBytes(message.body()),\n\t\tcreatedAt: () => message.createdAt(),\n\t\tisCompletable: () => message.isCompletable(),\n\t\tcomplete: async (response?: RuntimeBytes | undefined | null) => {\n\t\t\tawait callWasm(() => message.complete(response));\n\t\t},\n\t};\n}\n\nfunction normalizeWasmBridgeError(error: unknown): unknown {\n\tif (typeof error === \"string\") {\n\t\treturn decodeBridgeRivetError(error) ?? error;\n\t}\n\n\tif (error instanceof Error) {\n\t\tconst bridged = decodeBridgeRivetError(error.message);\n\t\tif (bridged) {\n\t\t\treturn bridged;\n\t\t}\n\t}\n\n\tif (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"reason\" in error &&\n\t\ttypeof error.reason === \"string\"\n\t) {\n\t\tconst bridged = decodeBridgeRivetError(error.reason);\n\t\tif (bridged) {\n\t\t\treturn bridged;\n\t\t}\n\t}\n\n\treturn error;\n}\n\nasync function callWasm<T>(invoke: () => Promise<T>): Promise<T> {\n\ttry {\n\t\treturn await invoke();\n\t} catch (error) {\n\t\tthrow normalizeWasmBridgeError(error);\n\t}\n}\n\nfunction callWasmSync<T>(invoke: () => T): T {\n\ttry {\n\t\treturn invoke();\n\t} catch (error) {\n\t\tthrow normalizeWasmBridgeError(error);\n\t}\n}\n\nfunction unsupportedWasmMethod(method: string): never {\n\tthrow new RivetError(\n\t\t\"runtime\",\n\t\t\"unsupported\",\n\t\t`Unsupported wasm runtime method: ${method}`,\n\t\t{\n\t\t\tmetadata: {\n\t\t\t\truntime: \"wasm\",\n\t\t\t\tmethod,\n\t\t\t},\n\t\t},\n\t);\n}\n\nfunction method<T extends AnyFunction>(target: unknown, name: string): T {\n\tif (\n\t\ttypeof target === \"object\" &&\n\t\ttarget !== null &&\n\t\tname in target &&\n\t\ttypeof target[name as keyof typeof target] === \"function\"\n\t) {\n\t\treturn target[name as keyof typeof target] as T;\n\t}\n\treturn unsupportedWasmMethod(name);\n}\n\nfunction callHandle<T>(handle: unknown, name: string, ...args: unknown[]): T {\n\treturn callWasmSync(() => method(handle, name).apply(handle, args) as T);\n}\n\nasync function callHandleAsync<T>(\n\thandle: unknown,\n\tname: string,\n\t...args: unknown[]\n): Promise<T> {\n\treturn await callWasm(\n\t\tasync () => (await method(handle, name).apply(handle, args)) as T,\n\t);\n}\n\nfunction childHandle<T>(handle: unknown, name: string): T {\n\treturn callHandle<T>(handle, name);\n}\n\nexport class WasmCoreRuntime implements CoreRuntime {\n\treadonly kind = \"wasm\";\n\n\t#bindings: WasmBindings;\n\t#sql = new WeakMap<WasmActorContext, RuntimeSqlDatabase>();\n\n\tconstructor(bindings: WasmBindings) {\n\t\tthis.#bindings = bindings;\n\t}\n\n\t#actorSql(ctx: ActorContextHandle): RuntimeSqlDatabase {\n\t\tconst wasmCtx = asWasmActorContext(ctx);\n\t\tlet database = this.#sql.get(wasmCtx);\n\t\tif (!database) {\n\t\t\tdatabase = callHandle<RuntimeSqlDatabase>(wasmCtx, \"sql\");\n\t\t\tthis.#sql.set(wasmCtx, database);\n\t\t}\n\t\treturn database;\n\t}\n\n\tcreateRegistry(): RegistryHandle {\n\t\treturn callWasmSync(() =>\n\t\t\tasRegistryHandle(new this.#bindings.CoreRegistry()),\n\t\t);\n\t}\n\n\tregisterActor(\n\t\tregistry: RegistryHandle,\n\t\tname: string,\n\t\tfactory: ActorFactoryHandle,\n\t): void {\n\t\tcallWasmSync(() =>\n\t\t\tasWasmRegistry(registry).register(name, asWasmFactory(factory)),\n\t\t);\n\t}\n\n\tasync serveRegistry(\n\t\tregistry: RegistryHandle,\n\t\tconfig: RuntimeServeConfig,\n\t): Promise<void> {\n\t\tawait callWasm(() => asWasmRegistry(registry).serve(config));\n\t}\n\n\tasync shutdownRegistry(registry: RegistryHandle): Promise<void> {\n\t\tawait callWasm(() => asWasmRegistry(registry).shutdown());\n\t}\n\n\tasync registryHealth(): Promise<RuntimeRegistryRouteResponse> {\n\t\treturn {\n\t\t\tstatus: 200,\n\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\tbody: new TextEncoder().encode(\n\t\t\t\tJSON.stringify({\n\t\t\t\t\tstatus: \"ok\",\n\t\t\t\t\truntime: \"rivetkit\",\n\t\t\t\t\tversion: \"wasm\",\n\t\t\t\t}),\n\t\t\t),\n\t\t};\n\t}\n\n\tasync handleServerlessRequest(\n\t\tregistry: RegistryHandle,\n\t\treq: RuntimeServerlessRequest,\n\t\tonStreamEvent: RuntimeServerlessStreamCallback,\n\t\tcancelToken: CancellationTokenHandle,\n\t\tconfig: RuntimeServeConfig,\n\t): Promise<RuntimeServerlessResponseHead> {\n\t\treturn await callHandleAsync<RuntimeServerlessResponseHead>(\n\t\t\tasWasmRegistry(registry),\n\t\t\t\"handleServerlessRequest\",\n\t\t\treq,\n\t\t\tonStreamEvent,\n\t\t\tasWasmCancellationToken(cancelToken),\n\t\t\tconfig,\n\t\t);\n\t}\n\n\tcreateActorFactory(\n\t\tcallbacks: object,\n\t\tconfig?: RuntimeActorConfig | undefined | null,\n\t): ActorFactoryHandle {\n\t\treturn callWasmSync(() =>\n\t\t\tasActorFactoryHandle(\n\t\t\t\tnew this.#bindings.ActorFactory(callbacks, config),\n\t\t\t),\n\t\t);\n\t}\n\n\tcreateCancellationToken(): CancellationTokenHandle {\n\t\treturn callWasmSync(\n\t\t\t() =>\n\t\t\t\tnew this.#bindings.CancellationToken() as unknown as CancellationTokenHandle,\n\t\t);\n\t}\n\n\tcancellationTokenAborted(token: CancellationTokenHandle): boolean {\n\t\treturn callWasmSync(() => asWasmCancellationToken(token).aborted());\n\t}\n\n\tcancelCancellationToken(token: CancellationTokenHandle): void {\n\t\tcallWasmSync(() => asWasmCancellationToken(token).cancel());\n\t}\n\n\tonCancellationTokenCancelled(\n\t\ttoken: CancellationTokenHandle,\n\t\tcallback: (...args: unknown[]) => unknown,\n\t): void {\n\t\tcallWasmSync(() =>\n\t\t\tasWasmCancellationToken(token).onCancelled(callback),\n\t\t);\n\t}\n\n\tactorState(ctx: ActorContextHandle): RuntimeBytes {\n\t\treturn toBytes(\n\t\t\tcallHandle<RuntimeBytes | Uint8Array>(\n\t\t\t\tasWasmActorContext(ctx),\n\t\t\t\t\"state\",\n\t\t\t),\n\t\t);\n\t}\n\n\tactorBeginOnStateChange(ctx: ActorContextHandle): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"beginOnStateChange\");\n\t}\n\n\tactorEndOnStateChange(ctx: ActorContextHandle): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"endOnStateChange\");\n\t}\n\n\tactorSetAlarm(\n\t\tctx: ActorContextHandle,\n\t\ttimestampMs?: number | bigint | undefined | null,\n\t): void {\n\t\tcallHandle(\n\t\t\tasWasmActorContext(ctx),\n\t\t\t\"setAlarm\",\n\t\t\toptionalWasmNumber(timestampMs),\n\t\t);\n\t}\n\n\tactorRequestSave(\n\t\tctx: ActorContextHandle,\n\t\topts?: RuntimeRequestSaveOpts | undefined | null,\n\t): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"requestSave\", opts);\n\t}\n\n\tasync actorRequestSaveAndWait(\n\t\tctx: ActorContextHandle,\n\t\topts?: RuntimeRequestSaveOpts | undefined | null,\n\t): Promise<void> {\n\t\tawait callHandleAsync(\n\t\t\tasWasmActorContext(ctx),\n\t\t\t\"requestSaveAndWait\",\n\t\t\topts,\n\t\t);\n\t}\n\n\tactorInspectorSnapshot(ctx: ActorContextHandle): RuntimeInspectorSnapshot {\n\t\treturn callHandle(asWasmActorContext(ctx), \"inspectorSnapshot\");\n\t}\n\n\tactorDecodeInspectorRequest(\n\t\tctx: ActorContextHandle,\n\t\tbytes: RuntimeBytes,\n\t\tadvertisedVersion: number,\n\t): RuntimeBytes {\n\t\treturn toBytes(\n\t\t\tcallHandle<RuntimeBytes | Uint8Array>(\n\t\t\t\tasWasmActorContext(ctx),\n\t\t\t\t\"decodeInspectorRequest\",\n\t\t\t\tbytes,\n\t\t\t\tadvertisedVersion,\n\t\t\t),\n\t\t);\n\t}\n\n\tactorEncodeInspectorResponse(\n\t\tctx: ActorContextHandle,\n\t\tbytes: RuntimeBytes,\n\t\ttargetVersion: number,\n\t): RuntimeBytes {\n\t\treturn toBytes(\n\t\t\tcallHandle<RuntimeBytes | Uint8Array>(\n\t\t\t\tasWasmActorContext(ctx),\n\t\t\t\t\"encodeInspectorResponse\",\n\t\t\t\tbytes,\n\t\t\t\ttargetVersion,\n\t\t\t),\n\t\t);\n\t}\n\n\tasync actorVerifyInspectorAuth(\n\t\tctx: ActorContextHandle,\n\t\tbearerToken?: string | undefined | null,\n\t): Promise<void> {\n\t\tawait callHandleAsync(\n\t\t\tasWasmActorContext(ctx),\n\t\t\t\"verifyInspectorAuth\",\n\t\t\tbearerToken,\n\t\t);\n\t}\n\n\tactorQueueHibernationRemoval(\n\t\tctx: ActorContextHandle,\n\t\tconnId: string,\n\t): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"queueHibernationRemoval\", connId);\n\t}\n\n\tactorTakePendingHibernationChanges(ctx: ActorContextHandle): string[] {\n\t\treturn callHandle(\n\t\t\tasWasmActorContext(ctx),\n\t\t\t\"takePendingHibernationChanges\",\n\t\t);\n\t}\n\n\tactorDirtyHibernatableConns(ctx: ActorContextHandle): ConnHandle[] {\n\t\treturn callHandle(asWasmActorContext(ctx), \"dirtyHibernatableConns\");\n\t}\n\n\tasync actorSaveState(\n\t\tctx: ActorContextHandle,\n\t\tpayload: RuntimeStateDeltaPayload,\n\t): Promise<void> {\n\t\tawait callHandleAsync(asWasmActorContext(ctx), \"saveState\", payload);\n\t}\n\n\tactorId(ctx: ActorContextHandle): string {\n\t\treturn callHandle(asWasmActorContext(ctx), \"actorId\");\n\t}\n\n\tactorName(ctx: ActorContextHandle): string {\n\t\treturn callHandle(asWasmActorContext(ctx), \"name\");\n\t}\n\n\tactorKey(ctx: ActorContextHandle): RuntimeActorKeySegment[] {\n\t\treturn callHandle(asWasmActorContext(ctx), \"key\");\n\t}\n\n\tactorRegion(ctx: ActorContextHandle): string {\n\t\treturn callHandle(asWasmActorContext(ctx), \"region\");\n\t}\n\n\tactorSleep(ctx: ActorContextHandle): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"sleep\");\n\t}\n\n\tactorDestroy(ctx: ActorContextHandle): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"destroy\");\n\t}\n\n\tactorAbortSignal(ctx: ActorContextHandle): AbortSignal {\n\t\treturn callHandle(asWasmActorContext(ctx), \"abortSignal\");\n\t}\n\n\tactorConns(ctx: ActorContextHandle): ConnHandle[] {\n\t\treturn callHandle(asWasmActorContext(ctx), \"conns\");\n\t}\n\n\tasync actorConnectConn(\n\t\tctx: ActorContextHandle,\n\t\tparams: RuntimeBytes,\n\t\trequest?: RuntimeHttpRequest | undefined | null,\n\t): Promise<ConnHandle> {\n\t\treturn await callHandleAsync(\n\t\t\tasWasmActorContext(ctx),\n\t\t\t\"connectConn\",\n\t\t\tparams,\n\t\t\trequest,\n\t\t);\n\t}\n\n\tactorBroadcast(\n\t\tctx: ActorContextHandle,\n\t\tname: string,\n\t\targs: RuntimeBytes,\n\t): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"broadcast\", name, args);\n\t}\n\n\tactorWaitUntil(ctx: ActorContextHandle, promise: Promise<unknown>): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"waitUntil\", promise);\n\t}\n\n\tasync actorWaitForTrackedShutdownWork(\n\t\tctx: ActorContextHandle,\n\t): Promise<boolean> {\n\t\treturn await callHandle<Promise<boolean>>(\n\t\t\tasWasmActorContext(ctx),\n\t\t\t\"waitForTrackedShutdownWork\",\n\t\t);\n\t}\n\n\tactorKeepAwake(ctx: ActorContextHandle, promise: Promise<unknown>): void {\n\t\tconst wasmCtx = asWasmActorContext(ctx);\n\t\tconst regionId = callHandle<number>(wasmCtx, \"beginKeepAwake\");\n\t\tconst trackedPromise = Promise.resolve(promise)\n\t\t\t.finally(() => {\n\t\t\t\tcallHandle(wasmCtx, \"endKeepAwake\", regionId);\n\t\t\t})\n\t\t\t.then(() => null);\n\t\tcallHandle(wasmCtx, \"registerTask\", trackedPromise);\n\t}\n\n\tactorBeginKeepAwake(ctx: ActorContextHandle): number {\n\t\treturn callHandle<number>(asWasmActorContext(ctx), \"beginKeepAwake\");\n\t}\n\n\tactorEndKeepAwake(ctx: ActorContextHandle, regionId: number): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"endKeepAwake\", regionId);\n\t}\n\n\tactorRegisterTask(\n\t\tctx: ActorContextHandle,\n\t\tpromise: Promise<unknown>,\n\t): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"registerTask\", promise);\n\t}\n\n\tactorRuntimeState(ctx: ActorContextHandle): object {\n\t\treturn callHandle(asWasmActorContext(ctx), \"runtimeState\");\n\t}\n\n\tactorClearRuntimeState(ctx: ActorContextHandle): void {\n\t\tconst runtimeState = this.actorRuntimeState(ctx);\n\t\tfor (const key of Object.keys(runtimeState)) {\n\t\t\tdelete (runtimeState as Record<string, unknown>)[key];\n\t\t}\n\t}\n\n\tactorRestartRunHandler(ctx: ActorContextHandle): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"restartRunHandler\");\n\t}\n\n\tactorBeginWebsocketCallback(ctx: ActorContextHandle): number {\n\t\treturn callHandle(asWasmActorContext(ctx), \"beginWebsocketCallback\");\n\t}\n\n\tactorEndWebsocketCallback(ctx: ActorContextHandle, regionId: number): void {\n\t\tcallHandle(asWasmActorContext(ctx), \"endWebsocketCallback\", regionId);\n\t}\n\n\tasync actorKvGet(\n\t\tctx: ActorContextHandle,\n\t\tkey: RuntimeBytes,\n\t): Promise<RuntimeBytes | null> {\n\t\tconst kv = childHandle(asWasmActorContext(ctx), \"kv\");\n\t\treturn optionalBytes(await callHandleAsync(kv, \"get\", key));\n\t}\n\n\tasync actorKvPut(\n\t\tctx: ActorContextHandle,\n\t\tkey: RuntimeBytes,\n\t\tvalue: RuntimeBytes,\n\t): Promise<void> {\n\t\tconst kv = childHandle(asWasmActorContext(ctx), \"kv\");\n\t\tawait callHandleAsync(kv, \"put\", key, value);\n\t}\n\n\tasync actorKvDelete(\n\t\tctx: ActorContextHandle,\n\t\tkey: RuntimeBytes,\n\t): Promise<void> {\n\t\tconst kv = childHandle(asWasmActorContext(ctx), \"kv\");\n\t\tawait callHandleAsync(kv, \"delete\", key);\n\t}\n\n\tasync actorKvDeleteRange(\n\t\tctx: ActorContextHandle,\n\t\tstart: RuntimeBytes,\n\t\tend: RuntimeBytes,\n\t): Promise<void> {\n\t\tconst kv = childHandle(asWasmActorContext(ctx), \"kv\");\n\t\tawait callHandleAsync(kv, \"deleteRange\", start, end);\n\t}\n\n\tasync actorKvListPrefix(\n\t\tctx: ActorContextHandle,\n\t\tprefix: RuntimeBytes,\n\t\toptions?: RuntimeKvListOptions | undefined | null,\n\t): Promise<RuntimeKvEntry[]> {\n\t\tconst kv = childHandle(asWasmActorContext(ctx), \"kv\");\n\t\tconst entries = await callHandleAsync<RuntimeKvEntry[]>(\n\t\t\tkv,\n\t\t\t\"listPrefix\",\n\t\t\tprefix,\n\t\t\toptions,\n\t\t);\n\t\treturn entries.map(normalizeKvEntry);\n\t}\n\n\tasync actorKvListRange(\n\t\tctx: ActorContextHandle,\n\t\tstart: RuntimeBytes,\n\t\tend: RuntimeBytes,\n\t\toptions?: RuntimeKvListOptions | undefined | null,\n\t): Promise<RuntimeKvEntry[]> {\n\t\tconst kv = childHandle(asWasmActorContext(ctx), \"kv\");\n\t\tconst entries = await callHandleAsync<RuntimeKvEntry[]>(\n\t\t\tkv,\n\t\t\t\"listRange\",\n\t\t\tstart,\n\t\t\tend,\n\t\t\toptions,\n\t\t);\n\t\treturn entries.map(normalizeKvEntry);\n\t}\n\n\tasync actorKvBatchGet(\n\t\tctx: ActorContextHandle,\n\t\tkeys: RuntimeBytes[],\n\t): Promise<Array<RuntimeBytes | undefined | null>> {\n\t\tconst kv = childHandle(asWasmActorContext(ctx), \"kv\");\n\t\tconst values = await callHandleAsync<\n\t\t\tArray<RuntimeBytes | Uint8Array | null | undefined>\n\t\t>(kv, \"batchGet\", keys);\n\t\treturn values.map((value) =>\n\t\t\tvalue === undefined ? undefined : optionalBytes(value),\n\t\t);\n\t}\n\n\tasync actorKvBatchPut(\n\t\tctx: ActorContextHandle,\n\t\tentries: RuntimeKvEntry[],\n\t): Promise<void> {\n\t\tconst kv = childHandle(asWasmActorContext(ctx), \"kv\");\n\t\tawait callHandleAsync(kv, \"batchPut\", entries);\n\t}\n\n\tasync actorKvBatchDelete(\n\t\tctx: ActorContextHandle,\n\t\tkeys: RuntimeBytes[],\n\t): Promise<void> {\n\t\tconst kv = childHandle(asWasmActorContext(ctx), \"kv\");\n\t\tawait callHandleAsync(kv, \"batchDelete\", keys);\n\t}\n\n\tasync actorSqlExec(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t): Promise<RuntimeSqlExecResult> {\n\t\treturn await callWasm(() => this.#actorSql(ctx).exec(sql));\n\t}\n\n\tasync actorSqlExecute(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlExecuteResult> {\n\t\tconst result = await callWasm(() =>\n\t\t\tthis.#actorSql(ctx).execute(sql, params),\n\t\t);\n\t\treturn normalizeRuntimeSqlExecuteResult(result);\n\t}\n\n\tasync actorSqlQuery(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlQueryResult> {\n\t\treturn await callWasm(() => this.#actorSql(ctx).query(sql, params));\n\t}\n\n\tasync actorSqlRun(\n\t\tctx: ActorContextHandle,\n\t\tsql: string,\n\t\tparams?: RuntimeSqlBindParams,\n\t): Promise<RuntimeSqlRunResult> {\n\t\treturn await callWasm(() => this.#actorSql(ctx).run(sql, params));\n\t}\n\n\tactorSqlMetrics(ctx: ActorContextHandle) {\n\t\treturn this.#actorSql(ctx).metrics?.() ?? null;\n\t}\n\n\tactorSqlTakeLastKvError(ctx: ActorContextHandle): string | null {\n\t\treturn this.#actorSql(ctx).takeLastKvError?.() ?? null;\n\t}\n\n\tasync actorSqlClose(ctx: ActorContextHandle): Promise<void> {\n\t\tconst wasmCtx = asWasmActorContext(ctx);\n\t\tconst database = this.#sql.get(wasmCtx);\n\t\tif (!database) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#sql.delete(wasmCtx);\n\t\tawait callWasm(() => database.close());\n\t}\n\n\tasync actorQueueSend(\n\t\tctx: ActorContextHandle,\n\t\tname: string,\n\t\tbody: RuntimeBytes,\n\t): Promise<RuntimeQueueMessage> {\n\t\tconst queue = childHandle(asWasmActorContext(ctx), \"queue\");\n\t\treturn normalizeQueueMessage(\n\t\t\tawait callHandleAsync(queue, \"send\", name, body),\n\t\t);\n\t}\n\n\tasync actorQueueNextBatch(\n\t\tctx: ActorContextHandle,\n\t\toptions?: RuntimeQueueNextBatchOptions | undefined | null,\n\t\tsignal?: CancellationTokenHandle | undefined | null,\n\t): Promise<RuntimeQueueMessage[]> {\n\t\tconst queue = childHandle(asWasmActorContext(ctx), \"queue\");\n\t\tconst messages = await callHandleAsync<RuntimeQueueMessage[]>(\n\t\t\tqueue,\n\t\t\t\"nextBatch\",\n\t\t\toptions,\n\t\t\tsignal ? asWasmCancellationToken(signal) : signal,\n\t\t);\n\t\treturn messages.map(normalizeQueueMessage);\n\t}\n\n\tasync actorQueueWaitForNames(\n\t\tctx: ActorContextHandle,\n\t\tnames: string[],\n\t\toptions?: RuntimeQueueWaitOptions | undefined | null,\n\t\tsignal?: CancellationTokenHandle | undefined | null,\n\t): Promise<RuntimeQueueMessage> {\n\t\tconst queue = childHandle(asWasmActorContext(ctx), \"queue\");\n\t\treturn normalizeQueueMessage(\n\t\t\tawait callHandleAsync(\n\t\t\t\tqueue,\n\t\t\t\t\"waitForNames\",\n\t\t\t\tnames,\n\t\t\t\toptions,\n\t\t\t\tsignal ? asWasmCancellationToken(signal) : signal,\n\t\t\t),\n\t\t);\n\t}\n\n\tasync actorQueueWaitForNamesAvailable(\n\t\tctx: ActorContextHandle,\n\t\tnames: string[],\n\t\toptions?: RuntimeQueueWaitOptions | undefined | null,\n\t): Promise<void> {\n\t\tconst queue = childHandle(asWasmActorContext(ctx), \"queue\");\n\t\tawait callHandleAsync(queue, \"waitForNamesAvailable\", names, options);\n\t}\n\n\tasync actorQueueEnqueueAndWait(\n\t\tctx: ActorContextHandle,\n\t\tname: string,\n\t\tbody: RuntimeBytes,\n\t\toptions?: RuntimeQueueEnqueueAndWaitOptions | undefined | null,\n\t\tsignal?: CancellationTokenHandle | undefined | null,\n\t): Promise<RuntimeBytes | null> {\n\t\tconst queue = childHandle(asWasmActorContext(ctx), \"queue\");\n\t\treturn optionalBytes(\n\t\t\tawait callHandleAsync(\n\t\t\t\tqueue,\n\t\t\t\t\"enqueueAndWait\",\n\t\t\t\tname,\n\t\t\t\tbody,\n\t\t\t\toptions,\n\t\t\t\tsignal ? asWasmCancellationToken(signal) : signal,\n\t\t\t),\n\t\t);\n\t}\n\n\tactorQueueTryNextBatch(\n\t\tctx: ActorContextHandle,\n\t\toptions?: RuntimeQueueTryNextBatchOptions | undefined | null,\n\t): RuntimeQueueMessage[] {\n\t\tconst queue = childHandle(asWasmActorContext(ctx), \"queue\");\n\t\treturn callHandle<RuntimeQueueMessage[]>(\n\t\t\tqueue,\n\t\t\t\"tryNextBatch\",\n\t\t\toptions,\n\t\t).map(normalizeQueueMessage);\n\t}\n\n\tactorQueueMaxSize(ctx: ActorContextHandle): number {\n\t\tconst queue = childHandle(asWasmActorContext(ctx), \"queue\");\n\t\treturn callHandle(queue, \"maxSize\");\n\t}\n\n\tasync actorQueueInspectMessages(\n\t\tctx: ActorContextHandle,\n\t): Promise<RuntimeQueueInspectMessage[]> {\n\t\tconst queue = childHandle(asWasmActorContext(ctx), \"queue\");\n\t\treturn await callHandleAsync(queue, \"inspectMessages\");\n\t}\n\n\tactorScheduleAfter(\n\t\tctx: ActorContextHandle,\n\t\tdurationMs: number | bigint,\n\t\tactionName: string,\n\t\targs: RuntimeBytes,\n\t): void {\n\t\tconst schedule = childHandle(asWasmActorContext(ctx), \"schedule\");\n\t\tcallHandle(schedule, \"after\", wasmNumber(durationMs), actionName, args);\n\t}\n\n\tactorScheduleAt(\n\t\tctx: ActorContextHandle,\n\t\ttimestampMs: number | bigint,\n\t\tactionName: string,\n\t\targs: RuntimeBytes,\n\t): void {\n\t\tconst schedule = childHandle(asWasmActorContext(ctx), \"schedule\");\n\t\tcallHandle(schedule, \"at\", wasmNumber(timestampMs), actionName, args);\n\t}\n\n\tconnId(conn: ConnHandle): string {\n\t\treturn callHandle(asWasmConn(conn), \"id\");\n\t}\n\n\tconnParams(conn: ConnHandle): RuntimeBytes {\n\t\treturn toBytes(callHandle(asWasmConn(conn), \"params\"));\n\t}\n\n\tconnState(conn: ConnHandle): RuntimeBytes {\n\t\treturn toBytes(callHandle(asWasmConn(conn), \"state\"));\n\t}\n\n\tconnSetState(conn: ConnHandle, state: RuntimeBytes): void {\n\t\tcallHandle(asWasmConn(conn), \"setState\", state);\n\t}\n\n\tconnIsHibernatable(conn: ConnHandle): boolean {\n\t\treturn callHandle(asWasmConn(conn), \"isHibernatable\");\n\t}\n\n\tconnSend(conn: ConnHandle, name: string, args: RuntimeBytes): void {\n\t\tcallHandle(asWasmConn(conn), \"send\", name, args);\n\t}\n\n\tasync connDisconnect(\n\t\tconn: ConnHandle,\n\t\treason?: string | undefined | null,\n\t): Promise<void> {\n\t\tawait callHandleAsync(asWasmConn(conn), \"disconnect\", reason);\n\t}\n\n\twebSocketSend(\n\t\tws: WebSocketHandle,\n\t\tdata: RuntimeBytes,\n\t\tbinary: boolean,\n\t): void {\n\t\tcallHandle(asWasmWebSocket(ws), \"send\", data, binary);\n\t}\n\n\tasync webSocketClose(\n\t\tws: WebSocketHandle,\n\t\tcode?: number | undefined | null,\n\t\treason?: string | undefined | null,\n\t): Promise<void> {\n\t\tawait callHandleAsync(asWasmWebSocket(ws), \"close\", code, reason);\n\t}\n\n\twebSocketSetEventCallback(\n\t\tws: WebSocketHandle,\n\t\tcallback: (event: RuntimeWebSocketEvent) => void,\n\t): void {\n\t\tcallHandle(\n\t\t\tasWasmWebSocket(ws),\n\t\t\t\"setEventCallback\",\n\t\t\t(event: RuntimeWebSocketEvent) => {\n\t\t\t\tif (event.kind === \"message\" && event.binary) {\n\t\t\t\t\tcallback({\n\t\t\t\t\t\t...event,\n\t\t\t\t\t\tdata: toBytes(event.data as RuntimeBytes | Uint8Array),\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcallback(event);\n\t\t\t},\n\t\t);\n\t}\n}\n\nexport type { WasmBindings };\n\nexport async function loadWasmRuntime(config?: WasmRuntimeLoadConfig): Promise<{\n\tbindings: WasmBindings;\n\truntime: WasmCoreRuntime;\n}> {\n\tconst bindings =\n\t\tconfig?.bindings ??\n\t\t(await import([\"@rivetkit\", \"rivetkit-wasm\"].join(\"/\")));\n\tawait bindings.default(config?.initInput);\n\treturn {\n\t\tbindings,\n\t\truntime: new WasmCoreRuntime(bindings),\n\t};\n}\n","import { ENGINE_ENDPOINT } from \"@/common/engine\";\nimport { configureServerlessPool } from \"@/serverless/configure\";\nimport { VERSION } from \"@/utils\";\nimport {\n\ttype RegistryActors,\n\ttype RegistryConfig,\n\ttype RegistryConfigInput,\n\tRegistryConfigSchema,\n} from \"./config\";\nimport { logger } from \"./log\";\nimport { buildConfiguredRegistry } from \"./native\";\nimport type { RuntimeServerlessResponseHead } from \"./runtime\";\n\ntype ShutdownSignal = \"SIGINT\" | \"SIGTERM\";\n\nfunction signalExitCode(signal: ShutdownSignal): number {\n\tswitch (signal) {\n\t\tcase \"SIGINT\":\n\t\t\treturn 130;\n\t\tcase \"SIGTERM\":\n\t\t\treturn 143;\n\t}\n}\n\nfunction finishShutdownSignal(signal: ShutdownSignal): void {\n\tif (process.pid === 1) {\n\t\tprocess.exit(signalExitCode(signal));\n\t}\n\tprocess.kill(process.pid, signal);\n}\n\nexport type FetchHandler = (\n\trequest: Request,\n\t...args: any\n) => Response | Promise<Response>;\n\nexport interface ServerlessHandler {\n\tfetch: FetchHandler;\n}\n\nexport interface RegistryRoutes {\n\thealth(): Promise<Response>;\n\tmetadata(): Promise<Response>;\n\tprometheusMetrics(request?: Request): Promise<Response>;\n}\n\nexport class Registry<A extends RegistryActors> {\n\t#config: RegistryConfigInput<A>;\n\tpublic readonly routes: RegistryRoutes;\n\n\tget config(): RegistryConfigInput<A> {\n\t\treturn this.#config;\n\t}\n\n\tparseConfig(): RegistryConfig {\n\t\treturn RegistryConfigSchema.parse(this.#config);\n\t}\n\n\t#runtimeServePromise?: Promise<void>;\n\t#runtimeServeConfiguredPromise?: ReturnType<typeof buildConfiguredRegistry>;\n\t#runtimeServerlessPromise?: ReturnType<typeof buildConfiguredRegistry>;\n\t#configureServerlessPoolPromise?: Promise<void>;\n\t#welcomePrinted = false;\n\t#shutdownInstalled = false;\n\t#shutdownInFlight: Promise<void> | null = null;\n\t#signalHandlers: Partial<Record<ShutdownSignal, () => void>> = {};\n\n\tconstructor(config: RegistryConfigInput<A>) {\n\t\tthis.#config = config;\n\t\tthis.routes = {\n\t\t\thealth: () => this.#healthRoute(),\n\t\t\tmetadata: () => this.#metadataRoute(),\n\t\t\tprometheusMetrics: (request?: Request) =>\n\t\t\t\tthis.#prometheusMetricsRoute(request),\n\t\t};\n\t}\n\n\t#ensureServerlessPoolConfigured(config: RegistryConfig): Promise<void> | undefined {\n\t\tif (!config.configurePool) return undefined;\n\n\t\tif (!this.#configureServerlessPoolPromise) {\n\t\t\tthis.#configureServerlessPoolPromise = configureServerlessPool(config).catch(\n\t\t\t\t(error) => {\n\t\t\t\t\tthis.#configureServerlessPoolPromise = undefined;\n\t\t\t\t\tthrow error;\n\t\t\t\t},\n\t\t\t);\n\t\t\tthis.#configureServerlessPoolPromise.catch(() => {});\n\t\t}\n\n\t\treturn this.#configureServerlessPoolPromise;\n\t}\n\n\t/**\n\t * Handle an incoming HTTP request for serverless deployments.\n\t *\n\t * @example\n\t * ```ts\n\t * const app = new Hono();\n\t * app.all(\"/api/rivet/*\", (c) => registry.handler(c.req.raw));\n\t * export default app;\n\t * ```\n\t */\n\tpublic async handler(request: Request): Promise<Response> {\n\t\tconst config = this.parseConfig();\n\t\tthis.#printWelcome(config, \"serverless\");\n\n\t\tif (!this.#runtimeServerlessPromise) {\n\t\t\tthis.#runtimeServerlessPromise = buildConfiguredRegistry(config);\n\t\t}\n\n\t\tconst { runtime, registry, serveConfig } =\n\t\t\tawait this.#runtimeServerlessPromise;\n\t\tconst isStartRequest = isServerlessStartRequest(\n\t\t\trequest,\n\t\t\tserveConfig.serverlessBasePath ?? \"/api/rivet\",\n\t\t);\n\t\tconst isMetadataRequest = isServerlessMetadataRequest(\n\t\t\trequest,\n\t\t\tserveConfig.serverlessBasePath ?? \"/api/rivet\",\n\t\t);\n\t\tconst isEngineMetadataRequest =\n\t\t\trequest.headers.get(\"user-agent\")?.startsWith(\"RivetEngine/\") ?? false;\n\n\t\tif (isStartRequest) {\n\t\t\ttry {\n\t\t\t\tawait this.#ensureServerlessPoolConfigured(config);\n\t\t\t} catch (error) {\n\t\t\t\treturn new Response(\n\t\t\t\t\tJSON.stringify({\n\t\t\t\t\t\tgroup: \"guard\",\n\t\t\t\t\t\tcode: \"service_unavailable\",\n\t\t\t\t\t\tmessage: \"Serverless pool is not configured.\",\n\t\t\t\t\t\tmetadata: null,\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: 503,\n\t\t\t\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst cancelToken = runtime.createCancellationToken();\n\t\tconst abort = () => runtime.cancelCancellationToken(cancelToken);\n\t\tif (request.signal.aborted) {\n\t\t\tabort();\n\t\t} else {\n\t\t\trequest.signal.addEventListener(\"abort\", abort, { once: true });\n\t\t}\n\n\t\tconst requestBody = await request.arrayBuffer();\n\t\tif (\n\t\t\tisStartRequest &&\n\t\t\trequestBody.byteLength > serveConfig.serverlessMaxStartPayloadBytes\n\t\t) {\n\t\t\trequest.signal.removeEventListener(\"abort\", abort);\n\t\t\truntime.cancelCancellationToken(cancelToken);\n\t\t\treturn new Response(\n\t\t\t\tJSON.stringify({\n\t\t\t\t\tgroup: \"message\",\n\t\t\t\t\tcode: \"incoming_too_long\",\n\t\t\t\t\tmessage: `Incoming message too long. Received ${requestBody.byteLength} bytes, limit is ${serveConfig.serverlessMaxStartPayloadBytes} bytes.`,\n\t\t\t\t\tmetadata: null,\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tstatus: 413,\n\t\t\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\tlet settled = false;\n\t\tlet controllerRef:\n\t\t\t| ReadableStreamDefaultController<Uint8Array>\n\t\t\t| undefined;\n\t\tconst backpressureWaiters: Array<() => void> = [];\n\t\tconst resolveBackpressure = () => {\n\t\t\twhile (\n\t\t\t\tcontrollerRef &&\n\t\t\t\t(controllerRef.desiredSize ?? 1) > 0 &&\n\t\t\t\tbackpressureWaiters.length > 0\n\t\t\t) {\n\t\t\t\tbackpressureWaiters.shift()?.();\n\t\t\t}\n\t\t};\n\t\tconst waitForBackpressure = async () => {\n\t\t\tif (!controllerRef || (controllerRef.desiredSize ?? 1) > 0) return;\n\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\tbackpressureWaiters.push(resolve);\n\t\t\t});\n\t\t};\n\t\tconst stream = new ReadableStream<Uint8Array>({\n\t\t\tstart(controller) {\n\t\t\t\tcontrollerRef = controller;\n\t\t\t},\n\t\t\tpull() {\n\t\t\t\tresolveBackpressure();\n\t\t\t},\n\t\t\tcancel() {\n\t\t\t\tsettled = true;\n\t\t\t\tresolveBackpressure();\n\t\t\t\truntime.cancelCancellationToken(cancelToken);\n\t\t\t},\n\t\t});\n\n\t\tconst headers: Record<string, string> = {};\n\t\trequest.headers.forEach((value, key) => {\n\t\t\theaders[key] = value;\n\t\t});\n\n\t\tlet head: RuntimeServerlessResponseHead;\n\t\ttry {\n\t\t\thead = await runtime.handleServerlessRequest(\n\t\t\t\tregistry,\n\t\t\t\t{\n\t\t\t\t\tmethod: request.method,\n\t\t\t\t\turl: request.url,\n\t\t\t\t\theaders,\n\t\t\t\t\tbody: new Uint8Array(requestBody),\n\t\t\t\t},\n\t\t\t\tasync (\n\t\t\t\t\terror: unknown,\n\t\t\t\t\tevent?: {\n\t\t\t\t\t\tkind: \"chunk\" | \"end\";\n\t\t\t\t\t\tchunk?: Uint8Array;\n\t\t\t\t\t\terror?: {\n\t\t\t\t\t\t\tgroup: string;\n\t\t\t\t\t\t\tcode: string;\n\t\t\t\t\t\t\tmessage: string;\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t) => {\n\t\t\t\t\tif (error) throw error;\n\t\t\t\t\tif (!event || settled) return;\n\t\t\t\t\tif (event.kind === \"chunk\") {\n\t\t\t\t\t\tawait waitForBackpressure();\n\t\t\t\t\t\tif (settled) return;\n\t\t\t\t\t\tif (event.chunk) controllerRef?.enqueue(event.chunk);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tsettled = true;\n\t\t\t\t\tresolveBackpressure();\n\t\t\t\t\trequest.signal.removeEventListener(\"abort\", abort);\n\t\t\t\t\tif (event.error) {\n\t\t\t\t\t\tcontrollerRef?.error(\n\t\t\t\t\t\t\tnew Error(\n\t\t\t\t\t\t\t\t`${event.error.group}.${event.error.code}: ${event.error.message}`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontrollerRef?.close();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcancelToken,\n\t\t\t\tserveConfig,\n\t\t\t);\n\t\t} catch (err) {\n\t\t\t// The runtime call itself rejected (e.g. `registry_shut_down_error`).\n\t\t\t// Clean up the abort listener so it doesn't leak, then propagate.\n\t\t\trequest.signal.removeEventListener(\"abort\", abort);\n\t\t\truntime.cancelCancellationToken(cancelToken);\n\t\t\tthrow err;\n\t\t}\n\n\t\tif (isMetadataRequest && !isEngineMetadataRequest) {\n\t\t\ttry {\n\t\t\t\tawait this.#ensureServerlessPoolConfigured(config);\n\t\t\t} catch (error) {\n\t\t\t\treturn new Response(\n\t\t\t\t\tJSON.stringify({\n\t\t\t\t\t\tgroup: \"guard\",\n\t\t\t\t\t\tcode: \"service_unavailable\",\n\t\t\t\t\t\tmessage: \"Serverless pool is not configured.\",\n\t\t\t\t\t\tmetadata: null,\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: 503,\n\t\t\t\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn new Response(stream, {\n\t\t\tstatus: head.status,\n\t\t\theaders: head.headers,\n\t\t});\n\t}\n\n\t/**\n\t * Returns a fetch handler for serverless deployments.\n\t *\n\t * @example\n\t * ```ts\n\t * export default registry.serve();\n\t * ```\n\t */\n\tpublic serve(): ServerlessHandler {\n\t\treturn {\n\t\t\tfetch: (request) => this.handler(request),\n\t\t};\n\t}\n\n\t/**\n\t * Returns a health response suitable for mounting in a user-owned router.\n\t */\n\tasync #healthRoute(): Promise<Response> {\n\t\tconst configured = await this.#activeConfiguredRegistry();\n\t\tif (!configured) {\n\t\t\treturn jsonRouteResponse(503, {\n\t\t\t\tstatus: \"not_started\",\n\t\t\t\truntime: \"rivetkit\",\n\t\t\t\tversion: VERSION,\n\t\t\t});\n\t\t}\n\n\t\tconst { runtime, registry } = configured;\n\t\tif (!runtime.registryHealth) {\n\t\t\treturn jsonRouteResponse(501, {\n\t\t\t\tstatus: \"unsupported\",\n\t\t\t\truntime: \"rivetkit\",\n\t\t\t\tversion: VERSION,\n\t\t\t});\n\t\t}\n\n\t\tconst response = await runtime.registryHealth(registry);\n\t\treturn new Response(new Uint8Array(response.body), {\n\t\t\tstatus: response.status,\n\t\t\theaders: response.headers,\n\t\t});\n\t}\n\n\t/**\n\t * Returns serverless metadata suitable for mounting in a user-owned router.\n\t */\n\tasync #metadataRoute(): Promise<Response> {\n\t\tconst configured = await this.#activeConfiguredRegistry();\n\t\tif (!configured) {\n\t\t\treturn new Response(\"registry not started\\n\", {\n\t\t\t\tstatus: 503,\n\t\t\t\theaders: { \"content-type\": \"text/plain; charset=utf-8\" },\n\t\t\t});\n\t\t}\n\n\t\tconst { runtime, registry } = configured;\n\t\tif (!runtime.registryMetadata) {\n\t\t\treturn new Response(\"metadata is not supported by this runtime\\n\", {\n\t\t\t\tstatus: 501,\n\t\t\t\theaders: { \"content-type\": \"text/plain; charset=utf-8\" },\n\t\t\t});\n\t\t}\n\n\t\tconst response = await runtime.registryMetadata(registry);\n\t\treturn new Response(new Uint8Array(response.body), {\n\t\t\tstatus: response.status,\n\t\t\theaders: response.headers,\n\t\t});\n\t}\n\n\t/**\n\t * Returns a Prometheus metrics response suitable for mounting in a user-owned router.\n\t */\n\tasync #prometheusMetricsRoute(_request?: Request): Promise<Response> {\n\t\tconst configured = await this.#activeConfiguredRegistry();\n\t\tif (!configured) {\n\t\t\treturn new Response(\"registry not started\\n\", {\n\t\t\t\tstatus: 503,\n\t\t\t\theaders: { \"content-type\": \"text/plain; charset=utf-8\" },\n\t\t\t});\n\t\t}\n\n\t\tconst { runtime, registry } = configured;\n\t\tif (!runtime.registryMetrics) {\n\t\t\treturn new Response(\"metrics are not supported by this runtime\\n\", {\n\t\t\t\tstatus: 501,\n\t\t\t\theaders: { \"content-type\": \"text/plain; charset=utf-8\" },\n\t\t\t});\n\t\t}\n\n\t\tconst response = await runtime.registryMetrics(registry);\n\t\treturn new Response(new Uint8Array(response.body), {\n\t\t\tstatus: response.status,\n\t\t\theaders: response.headers,\n\t\t});\n\t}\n\n\tasync #activeConfiguredRegistry(): Promise<\n\t\tAwaited<ReturnType<typeof buildConfiguredRegistry>> | undefined\n\t> {\n\t\tconst candidates = [\n\t\t\tthis.#runtimeServerlessPromise,\n\t\t\tthis.#runtimeServeConfiguredPromise,\n\t\t].filter((candidate): candidate is ReturnType<typeof buildConfiguredRegistry> =>\n\t\t\tcandidate !== undefined\n\t\t);\n\n\t\tif (candidates.length === 0) return undefined;\n\t\treturn await candidates[0]!;\n\t}\n\n\t/**\n\t * Starts an actor envoy for standalone server deployments.\n\t */\n\t#startEnvoy(config: RegistryConfig, printWelcome: boolean) {\n\t\tif (!this.#runtimeServePromise) {\n\t\t\tconst configuredRegistryPromise = buildConfiguredRegistry(config);\n\t\t\tthis.#runtimeServeConfiguredPromise = configuredRegistryPromise;\n\t\t\tthis.#runtimeServePromise = configuredRegistryPromise\n\t\t\t\t.then(async ({ runtime, registry, serveConfig }) => {\n\t\t\t\t\tawait runtime.serveRegistry(registry, serveConfig);\n\t\t\t\t})\n\t\t\t\t.catch((err) => {\n\t\t\t\t\t// Always-attached catch so the stored promise never leaves a\n\t\t\t\t\t// rejection unhandled. Downstream awaits (e.g. #runShutdown's\n\t\t\t\t\t// Promise.race) attach their own catches and still observe\n\t\t\t\t\t// resolution via the race.\n\t\t\t\t\tlogger().warn({ err }, \"runtime registry serve errored\");\n\t\t\t\t});\n\t\t\t// Install signal handlers once an envoy lifecycle has begun. Only\n\t\t\t// Mode A ever reaches here. Mode B (handler(request)) intentionally\n\t\t\t// does not install handlers because it runs on Workers/Vercel/Deno\n\t\t\t// Deploy where `process.on` is absent or forbidden; those platforms\n\t\t\t// own their own signal policy.\n\t\t\tthis.#installSignalHandlers(config, configuredRegistryPromise);\n\t\t}\n\t\tif (printWelcome) {\n\t\t\tthis.#printWelcome(config, \"serverful\");\n\t\t}\n\t}\n\n\t#installSignalHandlers(\n\t\tconfig: RegistryConfig,\n\t\tconfiguredRegistryPromise: ReturnType<typeof buildConfiguredRegistry>,\n\t): void {\n\t\tif (this.#shutdownInstalled) return;\n\t\tif (config.shutdown?.disableSignalHandlers) return;\n\t\t// Guard against non-Node runtimes (Workers/Edge) where `process` may\n\t\t// exist but `process.on` is unavailable or forbidden.\n\t\tif (\n\t\t\ttypeof process === \"undefined\" ||\n\t\t\ttypeof process.on !== \"function\" ||\n\t\t\ttypeof process.kill !== \"function\"\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#shutdownInstalled = true;\n\n\t\tconst install = (signal: ShutdownSignal) => {\n\t\t\tconst handler = () =>\n\t\t\t\tthis.#onShutdownSignal(\n\t\t\t\t\tsignal,\n\t\t\t\t\tconfig,\n\t\t\t\t\tconfiguredRegistryPromise,\n\t\t\t\t);\n\t\t\tthis.#signalHandlers[signal] = handler;\n\t\t\tprocess.on(signal, handler);\n\t\t};\n\t\tinstall(\"SIGINT\");\n\t\tinstall(\"SIGTERM\");\n\t}\n\n\t#onShutdownSignal(\n\t\tsignal: ShutdownSignal,\n\t\tconfig: RegistryConfig,\n\t\tconfiguredRegistryPromise: ReturnType<typeof buildConfiguredRegistry>,\n\t): void {\n\t\tif (this.#shutdownInFlight !== null) {\n\t\t\t// Second delivery of the same (or another) shutdown signal.\n\t\t\t// Remove our handler only, preserving any user-installed listeners.\n\t\t\t// PID 1 must exit directly because re-raised default signals can be\n\t\t\t// swallowed by the container signal path.\n\t\t\tthis.#removeSignalHandlers();\n\t\t\tfinishShutdownSignal(signal);\n\t\t\treturn;\n\t\t}\n\t\tthis.#shutdownInFlight = this.#runShutdown(\n\t\t\tsignal,\n\t\t\tconfig,\n\t\t\tconfiguredRegistryPromise,\n\t\t).catch((err) => {\n\t\t\tlogger().warn({ err }, \"shutdown error\");\n\t\t});\n\t}\n\n\tasync #runShutdown(\n\t\tsignal: ShutdownSignal,\n\t\tconfig: RegistryConfig,\n\t\tconfiguredRegistryPromise: ReturnType<typeof buildConfiguredRegistry>,\n\t): Promise<void> {\n\t\tconst gracePeriodMs =\n\t\t\tconfig.shutdown?.gracePeriodMs ??\n\t\t\t(await this.#actorStopThresholdMs(configuredRegistryPromise)) ??\n\t\t\t30 * 60 * 1000;\n\t\t// Race the entire drain sequence (both modes + serve promise) against\n\t\t// a single grace ceiling. By default, this uses the engine-provided\n\t\t// actor stop threshold, matching Pegboard's hard cutoff for actors.\n\t\tconst drain = async () => {\n\t\t\t// Shut down every live `CoreRegistry` we know about. Mode A\n\t\t\t// (`start()`) and Mode B (`handler()`) each build a separate\n\t\t\t// runtime registry, so one signal handler fans out to both to\n\t\t\t// honor the spec invariant \"single shutdown tears down both modes\".\n\t\t\tconst registries: Promise<void>[] = [\n\t\t\t\t(async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { runtime, registry } =\n\t\t\t\t\t\t\tawait configuredRegistryPromise;\n\t\t\t\t\t\tawait runtime.shutdownRegistry(registry);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tlogger().warn(\n\t\t\t\t\t\t\t{ err },\n\t\t\t\t\t\t\t\"runtime registry shutdown errored (mode A)\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t})(),\n\t\t\t];\n\t\t\tconst runtimeServerlessPromise = this.#runtimeServerlessPromise;\n\t\t\tif (runtimeServerlessPromise !== undefined) {\n\t\t\t\tregistries.push(\n\t\t\t\t\t(async () => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst { runtime, registry } =\n\t\t\t\t\t\t\t\tawait runtimeServerlessPromise;\n\t\t\t\t\t\t\tawait runtime.shutdownRegistry(registry);\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\tlogger().warn(\n\t\t\t\t\t\t\t\t{ err },\n\t\t\t\t\t\t\t\t\"runtime registry shutdown errored (mode B)\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t})(),\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait Promise.all(registries);\n\n\t\t\tconst runtimeServePromise = this.#runtimeServePromise;\n\t\t\tif (runtimeServePromise !== undefined) {\n\t\t\t\t// Swallow rejection so the race doesn't itself reject; the\n\t\t\t\t// always-attached `.catch` at the promise assignment site has\n\t\t\t\t// already logged any serve-side error.\n\t\t\t\tawait runtimeServePromise.catch(() => undefined);\n\t\t\t}\n\t\t};\n\t\tawait Promise.race([\n\t\t\tdrain(),\n\t\t\tnew Promise<void>((resolve) =>\n\t\t\t\tsetTimeout(resolve, gracePeriodMs).unref?.(),\n\t\t\t),\n\t\t]);\n\t\tthis.#removeSignalHandlers();\n\t\tfinishShutdownSignal(signal);\n\t}\n\n\tasync #actorStopThresholdMs(\n\t\tconfiguredRegistryPromise: ReturnType<typeof buildConfiguredRegistry>,\n\t): Promise<number | undefined> {\n\t\ttry {\n\t\t\tconst { runtime, registry } = await configuredRegistryPromise;\n\t\t\tconst thresholdMs =\n\t\t\t\tawait runtime.registryActorStopThresholdMs?.(registry);\n\t\t\tif (\n\t\t\t\tthresholdMs !== undefined &&\n\t\t\t\tNumber.isFinite(thresholdMs) &&\n\t\t\t\tthresholdMs > 0\n\t\t\t) {\n\t\t\t\treturn thresholdMs;\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tlogger().warn(\n\t\t\t\t{ err },\n\t\t\t\t\"failed to read actor stop threshold for shutdown grace\",\n\t\t\t);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t#removeSignalHandlers(): void {\n\t\tfor (const [signal, handler] of Object.entries(\n\t\t\tthis.#signalHandlers,\n\t\t) as [ShutdownSignal, () => void][]) {\n\t\t\tif (handler) process.removeListener(signal, handler);\n\t\t}\n\t\tthis.#signalHandlers = {};\n\t}\n\n\tpublic startEnvoy() {\n\t\tthis.#startEnvoy(this.parseConfig(), true);\n\t}\n\n\t/**\n\t * Starts the actor envoy for standalone server deployments.\n\t *\n\t * @example\n\t * ```ts\n\t * const registry = setup({ use: { counter } });\n\t * registry.start();\n\t * ```\n\t */\n\tpublic start() {\n\t\tconst config = this.parseConfig();\n\t\tthis.#startEnvoy(config, true);\n\t}\n\n\t#printWelcome(\n\t\tconfig: RegistryConfig,\n\t\tkind: \"serverless\" | \"serverful\",\n\t): void {\n\t\tif (config.noWelcome || this.#welcomePrinted) return;\n\t\tthis.#welcomePrinted = true;\n\n\t\tconst logLine = (label: string, value: string) => {\n\t\t\tconst padding = \" \".repeat(Math.max(0, 13 - label.length));\n\t\t\tconsole.log(` - ${label}:${padding}${value}`);\n\t\t};\n\n\t\tconsole.log();\n\t\tconsole.log(\n\t\t\t` RivetKit ${VERSION} (Engine - ${kind === \"serverless\" ? \"Serverless\" : \"Serverful\"})`,\n\t\t);\n\n\t\tif (config.namespace !== \"default\") {\n\t\t\tlogLine(\"Namespace\", config.namespace);\n\t\t}\n\n\t\tif (config.endpoint) {\n\t\t\tconst endpointType =\n\t\t\t\tconfig.endpoint === ENGINE_ENDPOINT ? \"local native\" : \"remote\";\n\t\t\tlogLine(\"Endpoint\", `${config.endpoint} (${endpointType})`);\n\t\t}\n\n\t\tif (kind === \"serverless\" && config.publicEndpoint) {\n\t\t\tlogLine(\"Client\", config.publicEndpoint);\n\t\t}\n\n\t\tlogLine(\"Actors\", Object.keys(config.use).length.toString());\n\t\tconsole.log();\n\t}\n}\n\nfunction isServerlessStartRequest(request: Request, basePath: string): boolean {\n\tif (request.method !== \"POST\") return false;\n\tconst parsed = new URL(request.url);\n\tconst normalizedBase =\n\t\tbasePath === \"/\" ? \"\" : `/${basePath.replace(/^\\/+|\\/+$/g, \"\")}`;\n\treturn parsed.pathname === `${normalizedBase}/start`;\n}\n\nfunction isServerlessMetadataRequest(request: Request, basePath: string): boolean {\n\tif (request.method !== \"GET\") return false;\n\tconst parsed = new URL(request.url);\n\tconst normalizedBase =\n\t\tbasePath === \"/\" ? \"\" : `/${basePath.replace(/^\\/+|\\/+$/g, \"\")}`;\n\treturn parsed.pathname === `${normalizedBase}/metadata`;\n}\n\nfunction jsonRouteResponse(status: number, body: unknown): Response {\n\treturn new Response(JSON.stringify(body), {\n\t\tstatus,\n\t\theaders: { \"content-type\": \"application/json\" },\n\t});\n}\n\nexport function setup<A extends RegistryActors>(\n\tinput: RegistryConfigInput<A>,\n): Registry<A> {\n\treturn new Registry(input);\n}\n\nexport type { RegistryConfig, RegistryActors };\nexport { RegistryConfigSchema };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,SAAS,uBAAuB;AACtC,SAAO,UAAU,eAAe;AACjC;;;ACCA,IAAM,8BAA8B,oBAAI,IAAY;AAEpD,SAAS,kCAAkC,SAAkB;AAC5D,MAAI,CAAC,WAAW,OAAO,YAAY,SAAU;AAC7C,QAAM,OAAO;AACb,aAAW,OAAO,CAAC,oBAAoB,kBAAkB,GAAG;AAC3D,QAAI,KAAK,GAAG,MAAM,UAAa,CAAC,4BAA4B,IAAI,GAAG,GAAG;AACrE,kCAA4B,IAAI,GAAG;AACnC,2BAAqB,EAAE,KAAK;AAAA,QAC3B,KAAK,kBAAkB,GAAG;AAAA,MAC3B,CAAC;AAAA,IACF;AAAA,EACD;AACD;AAiDO,IAAM,kBAAN,MAoBP;AAAA,EACC;AAAA,EAEA,YAAY,QAAgD;AAC3D,SAAK,UAAU;AAAA,EAChB;AAAA,EAEA,IAAI,SAAiD;AACpD,WAAO,KAAK;AAAA,EACb;AACD;AA+BO,SAAS,sBACf,QACmC;AACnC,SAAO;AACR;AAEO,SAAS,MA6Bf,OAqBC;AACD;AAAA,IACE,+BAA6C;AAAA,EAC/C;AACA,QAAM,SAAS,kBAAkB,MAAM,KAAK;AAU5C,SAAO,IAAI,gBAAgB,MAAM;AAClC;AAEO,SAAS,wBACf,YACyC;AACzC,SAAO,sBAAsB;AAC9B;AAEO,SAAS,iBACf,QACA,MACqB;AACrB,QAAM,aAAa,OAAO,IAAI,IAAI;AAClC,MAAI,CAAC,WAAY,OAAM,IAAI,MAAM,iCAAiC,IAAI,EAAE;AACxE,SAAO;AACR;;;ACpLO,SAAS,MACf,SAC8B;AAC9B,SAAQ,WAAW,CAAC;AACrB;AAEO,SAAS,MACf,SACgD;AAChD,SAAQ,WAAW,CAAC;AACrB;AA4EO,SAAS,iBAAiB,OAA2C;AAC3E,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,eAAe;AACtE;AAEO,SAAS,wBACf,OACsC;AACtC,MAAI,wBAAwB,KAAK,GAAG;AACnC,WAAO;AAAA,EACR;AACA,SACC,OAAO,UAAU,YACjB,UAAU,QACV,aAAa,SACZ,MAAgC,YAAY;AAE/C;AAEO,SAAS,wBACf,OACsC;AACtC,SACC,OAAO,UAAU,YACjB,UAAU,QACV,YAAY,SACX,MAA+B,WAAW;AAE7C;AAEO,SAAS,mBACf,SACA,KACU;AACV,MAAI,CAAC,SAAS;AACb,WAAO;AAAA,EACR;AACA,SAAO,OAAO,UAAU,eAAe,KAAK,SAAS,GAAG;AACzD;AAEO,SAAS,qBACf,SACA,KACmC;AACnC,QAAM,SAAS,mCAAU;AACzB,MAAI,CAAC,UAAU,iBAAiB,MAAM,GAAG;AACxC,WAAO;AAAA,EACR;AAEA,QAAM,oBAAqB,OACzB;AACF,SAAO,OAAO,sBAAsB,aAChC,oBACD;AACJ;AAEO,SAAS,mBACf,SACA,KACmC;AACnC,QAAM,SAAS,mCAAU;AACzB,MAAI,CAAC,UAAU,iBAAiB,MAAM,GAAG;AACxC,WAAO;AAAA,EACR;AAEA,QAAM,kBAAmB,OAAoC;AAC7D,SAAO,OAAO,oBAAoB,aAC9B,kBACD;AACJ;AAEA,SAAS,oBACR,QACwC;AACxC,MAAI,CAAC,QAAQ;AACZ,WAAO;AAAA,EACR;AACA,MAAI,wBAAwB,MAAM,GAAG;AACpC,WAAO,OAAO;AAAA,EACf;AACA,MAAI,wBAAwB,MAAM,GAAG;AACpC,WAAO,OAAO;AAAA,EACf;AACA,MACC,OAAO,WAAW,YAClB,WAAW,QACX,YAAY,UACX,OAAgC,WAAW,QAC3C;AACD,WAAQ,OAAiD;AAAA,EAC1D;AACA,MACC,OAAO,WAAW,YAClB,WAAW,QACX,aAAa,UACZ,OAAiC,YAAY,QAC7C;AACD,WAAQ,OAAkD;AAAA,EAC3D;AACA,SAAO;AACR;AAEA,SAAS,cAAc,OAA+C;AACrE,SACC,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,OAAQ,MAA6B,SAAS;AAEhD;AA2BO,SAAS,mBACf,SACA,KACA,MACkD;AAClD,QAAM,SAAS,oBAAoB,mCAAU,IAAI;AAEjD,MAAI,CAAC,QAAQ;AACZ,WAAO,EAAE,SAAS,MAAM,KAA4C;AAAA,EACrE;AAEA,MAAI,iBAAiB,MAAM,GAAG;AAC7B,UAAM,SAAS,OAAO,WAAW,EAAE,SAAS,IAAI;AAChD,QAAI,cAAc,MAAM,GAAG;AAC1B,YAAM,mBAAmB,yBAAyB;AAAA,IACnD;AACA,QAAI,OAAO,QAAQ;AAClB,aAAO,EAAE,SAAS,OAAO,QAAQ,CAAC,GAAG,OAAO,MAAM,EAAE;AAAA,IACrD;AACA,WAAO;AAAA,MACN,SAAS;AAAA,MACT,MAAM,OAAO;AAAA,IACd;AAAA,EACD;AAEA,SAAO,EAAE,SAAS,MAAM,KAA4C;AACrE;;;AC1RA,SAAS,iBAAiB;AAG1B,SAAS,wBAAwB;AAGjC,SAAS,SAAS;AACjB,SAAO,UAAU,0BAA0B;AAC5C;AASO,IAAM,yBAAN,MAA6B;AAAA,EACnC;AAAA,EACA;AAAA,EACA,cAA6B;AAAA,EAC7B;AAAA,EACA,yBAGK,CAAC;AAAA,EAEN;AAAA,EACA;AAAA,EAEA,YACC,SACA,UAEI,CAAC,GACJ;AACD,SAAK,WAAW;AAChB,SAAK,aAAa,QAAQ,aAAa;AAKvC,SAAK,YAAY,IAAI,iBAAiB;AAAA,MACrC,eAAe,MAAM,KAAK;AAAA,MAC1B,QAAQ,CAAC,SAAS,KAAK,kCAAkC,IAAI;AAAA,MAC7D,SAAS,CAAC,MAAM,WAAW,KAAK,OAAO,MAAM,MAAM;AAAA,IACpD,CAAC;AAED,SAAK,WAAW,IAAI,iBAAiB;AAAA,MACpC,eAAe,MAAM,KAAK;AAAA,MAC1B,QAAQ,CAAC,SAAS,KAAK,UAAU,eAAe,IAAI;AAAA,MACpD,SAAS,CAAC,MAAM,WAAW,KAAK,OAAO,MAAM,MAAM;AAAA,IACpD,CAAC;AAGD,SAAK,aAAa,IAAI,UAAU;AAAA,MAC/B,KAAK,KAAK;AAAA,MACV,MAAM,CAAC,SAA4C;AAClD,eAAO,EAAE,MAAM,EAAE,KAAK,wBAAwB,CAAC;AAC/C,aAAK,UAAU,eAAe,IAAI;AAAA,MACnC;AAAA,MACA,OAAO,CAAC,MAAe,WAAoB;AAC1C,eAAO,EAAE,MAAM,EAAE,KAAK,0BAA0B,MAAM,OAAO,CAAC;AAC9D,aAAK,OAAO,QAAQ,KAAM,UAAU,EAAE;AAAA,MACvC;AAAA,MACA,YAAY;AAAA,IACb,CAAC;AAGD,eAAW,MAAM;AAChB,WAAK,YAAY;AAAA,IAClB,GAAG,CAAC;AAAA,EACL;AAAA;AAAA,EAGA,IAAI,kBAAsC;AACzC,WAAO,KAAK;AAAA,EACb;AAAA;AAAA,EAGA,IAAI,iBAAqC;AACxC,WAAO,KAAK;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,kCACC,MACA,mBACO;AACP,QAAI,KAAK,gBAAgB,KAAK,UAAU,YAAY;AACnD,WAAK,uBAAuB,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC5D;AAAA,IACD;AACA,QACC,KAAK,gBAAgB,KAAK,UAAU,WACpC,KAAK,gBAAgB,KAAK,UAAU,QACnC;AACD;AAAA,IACD;AACA,SAAK,uBAAuB,MAAM,iBAAiB;AAAA,EACpD;AAAA,EAEA,uBACC,MACA,mBACO;AACP,QAAI;AACH,WAAK,SAAS;AAAA,QACb,EAAE,MAAM,kBAAkB;AAAA,QAC1B,KAAK;AAAA,MACN;AACA,MAAC,KAAK,SAAiB,cAAc;AAAA,QACpC,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,eAAe,KAAK;AAAA,MACrB,CAAC;AAAA,IACF,SAAS,KAAK;AACb,WAAK,aAAa,GAAG;AACrB,WAAK,OAAO,MAAM,mCAAmC;AAAA,IACtD;AAAA,EACD;AAAA,EAEA,MAAM,cAA6B;AAClC,QAAI;AACH,aAAO,EAAE,MAAM,EAAE,KAAK,yBAAyB,CAAC;AAEhD,WAAK,cAAc;AAEnB,UAAI,KAAK,cAAc,KAAK,SAAS,WAAW;AAC/C,eAAO,EAAE,MAAM;AAAA,UACd,KAAK;AAAA,QACN,CAAC;AACD,aAAK,SAAS,UAAU,KAAK,UAAU;AAAA,MACxC,OAAO;AACN,eAAO,EAAE,MAAM;AAAA,UACd,KAAK;AAAA,QACN,CAAC;AACD,aAAK,SAAS,OAAO,QAAW,KAAK,UAAU;AAAA,MAChD;AAGA,WAAK,UAAU,YAAY;AAC3B,WAAK,SAAS,YAAY;AAC1B,aAAO,KAAK,uBAAuB,SAAS,GAAG;AAC9C,cAAM,OAAO,KAAK,uBAAuB,MAAM;AAC/C,YAAI,CAAC,MAAM;AACV;AAAA,QACD;AACA,aAAK,uBAAuB,KAAK,MAAM,KAAK,iBAAiB;AAAA,MAC9D;AAAA,IACD,SAAS,KAAK;AACb,WAAK,aAAa,GAAG;AACrB,WAAK,OAAO,MAAM,sCAAsC;AAAA,IACzD;AAAA,EACD;AAAA,EAEA,aAAa,KAAoB;AAChC,YAAQ,MAAM,kCAAkC,GAAG;AACnD,WAAO,EAAE,MAAM;AAAA,MACd,KAAK;AAAA,MACL,OAAO;AAAA,MACP,cAAc,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,MAC7D,OAAO,eAAe,QAAQ,IAAI,QAAQ;AAAA,IAC3C,CAAC;AAGD,QAAI;AACH,WAAK,SAAS,QAAQ,KAAK,KAAK,UAAU;AAAA,IAC3C,SAAS,YAAY;AACpB,aAAO,EAAE,MAAM;AAAA,QACd,KAAK;AAAA,QACL,OAAO;AAAA,MACR,CAAC;AAAA,IACF;AAGA,SAAK,UAAU,aAAa,GAAG;AAC/B,SAAK,SAAS,aAAa,GAAG;AAAA,EAC/B;AAAA,EAEA,OAAO,MAAc,QAAsB;AAC1C,QAAI,KAAK,gBAAgB,KAAK,KAAK,gBAAgB,GAAG;AACrD;AAAA,IACD;AAEA,WAAO,EAAE,MAAM,EAAE,KAAK,qBAAqB,MAAM,OAAO,CAAC;AAEzD,SAAK,cAAc;AAEnB,QAAI;AACH,WAAK,SAAS;AAAA,QACb,EAAE,MAAM,QAAQ,UAAU,KAAK;AAAA,QAC/B,KAAK;AAAA,MACN;AAAA,IACD,SAAS,KAAK;AACb,aAAO,EAAE,MAAM,EAAE,KAAK,2BAA2B,OAAO,IAAI,CAAC;AAAA,IAC9D,UAAE;AACD,WAAK,cAAc;AAGnB,WAAK,UAAU,aAAa,MAAM,MAAM;AACxC,WAAK,SAAS,aAAa,MAAM,MAAM;AAAA,IACxC;AAAA,EACD;AACD;;;ACnNO,IAAM,cAAc;AACpB,IAAM,kBAAkB,oBAAoB,WAAW;;;ACCvD,SAASA,UAAS;AACxB,SAAO,UAAU,UAAU;AAC5B;;;ACKA,IAAM,+BAA+B;AACrC,IAAM,2BAA2B;AAEjC,SAAS,MAAM,IAA2B;AACzC,SAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AACxD;AAEA,SAAS,qBAAqB;AAC7B,QAAM,QAAQ,QAAQ,IAAI;AAC1B,MAAI,UAAU,UAAa,UAAU,GAAI,QAAO;AAEhD,QAAM,SAAS,OAAO,KAAK;AAC3B,MAAI,CAAC,OAAO,SAAS,MAAM,KAAK,SAAS,GAAG;AAC3C,UAAM,IAAI,MAAM,4EAA4E;AAAA,EAC7F;AAEA,SAAO;AACR;AAEA,eAAsB,wBACrB,QACgB;AAChB,EAAAC,QAAO,EAAE,MAAM,EAAE,KAAK,8BAA8B,CAAC;AAErD,QAAM,YAAY,KAAK,IAAI;AAC3B,QAAM,YAAY,mBAAmB;AACrC,MAAI,WAAW;AACf,MAAI;AAEJ,SAAO,KAAK,IAAI,IAAI,aAAa,WAAW;AAC3C,gBAAY;AACZ,QAAI;AACH,UAAI,CAAC,OAAO,WAAW;AACtB,cAAM,IAAI,MAAM,oDAAoD;AAAA,MACrE;AACA,UAAI,CAAC,OAAO,UAAU;AACrB,cAAM,IAAI,MAAM,mDAAmD;AAAA,MACpE;AACA,UAAI,CAAC,OAAO,eAAe;AAC1B,cAAM,IAAI,MAAM,wDAAwD;AAAA,MACzE;AAEA,YAAM,eAAe,OAAO;AAC5B,YAAM,eAAe,oCAAoC,MAAM;AAC/D,YAAM,SAAS,MAAM,eAAe,YAAY;AAChD,YAAM,WAAW,aAAa,QAAQ;AACtC,YAAM,kBAAkB,OAAO,SAAS,OAAO;AAC/C,YAAM,UAAU;AAAA,QACf,GAAI,kBAAkB,EAAE,iBAAiB,gBAAgB,IAAI,CAAC;AAAA,QAC9D,GAAI,aAAa,WAAW,CAAC;AAAA,MAC9B;AACA,YAAM,mBAAmB;AAAA,QACxB,YAAY;AAAA,UACX,KAAK,aAAa;AAAA,UAClB;AAAA,UACA,kBAAkB,aAAa,mBAAmB,KAAK;AAAA,UACvD,oBAAoB,aAAa;AAAA,UACjC,wBACC,aAAa,wBAAwB;AAAA,UACtC,aAAa;AAAA,UACb,aAAa;AAAA,UACb,gBAAgB;AAAA,UAChB,kBAAkB;AAAA,QACnB;AAAA,QACA,UAAU,aAAa,YAAY,CAAC;AAAA,QACpC,0BACC,aAAa,yBAAyB;AAAA,MACxC;AAEA,YAAM,mBAAmB,cAAc,UAAU;AAAA,QAChD,aAAa,OAAO;AAAA,UACnB,OAAO,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,gBAAgB,CAAC;AAAA,QAC3D;AAAA,MACD,CAAC;AAED,MAAAA,QAAO,EAAE,KAAK;AAAA,QACb,KAAK;AAAA,QACL;AAAA,QACA,WAAW,OAAO;AAAA,QAClB;AAAA,MACD,CAAC;AACD;AAAA,IACD,SAAS,OAAO;AACf,kBAAY;AACZ,MAAAA,QAAO,EAAE,KAAK;AAAA,QACb,KAAK;AAAA,QACL;AAAA,QACA,OAAO,eAAe,KAAK;AAAA,MAC5B,CAAC;AACD,YAAM,MAAM,wBAAwB;AAAA,IACrC;AAAA,EACD;AAEA,EAAAA,QAAO,EAAE,MAAM;AAAA,IACd,KAAK;AAAA,IACL;AAAA,IACA,OAAO,eAAe,SAAS;AAAA,EAChC,CAAC;AACD,QAAM;AACP;;;AC5GA,SAAS,KAAAC,UAAS;;;ACAlB,SAAS,SAAS;AAUlB,IAAI,uBAAuB;AAEpB,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACzC,UAAU,EAAE,OAAO,EAAE,QAAQ,MAAM,aAAa,KAAK,SAAS;AAAA,EAC9D,SAAS,EAAE,OAAO,EAAE,QAAQ,MAAM;AACjC,UAAM,UAAU,qBAAqB;AACrC,QAAI,YAAY,OAAW,QAAO;AAElC,QAAI,WAAW,MAAM,gBAAgB,CAAC,sBAAsB;AAC3D,6BAAuB;AACvB,gBAAU,UAAU,EAAE;AAAA,QACrB;AAAA,MACD;AAAA,IACD;AAEA,WAAO;AAAA,EACR,CAAC;AAAA;AAAA,EAGD,YAAY,EAAE,OAAO,EAAE,QAAQ,MAAM,mBAAmB,KAAK,GAAM;AAAA,EACnE,UAAU,EAAE,OAAO,EAAE,SAAS;AAC/B,CAAC;;;AC/BD,SAAS,KAAAC,UAAS;AAGX,IAAM,6CAA6C,KAAK,OAAO;AAE/D,IAAM,sBAAsBC,GACjC,OAAO;AAAA,EACP,MAAMA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,KAAKA,GAAE,OAAO;AAAA,EACd,SAASA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACnD,iBAAiBA,GAAE,OAAO,EAAE,SAAS;AAAA,EACrC,kBAAkBA,GAAE,OAAO,EAAE,SAAS;AAAA,EACtC,UAAUA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,EACrD,sBAAsBA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,uBAAuBA,GAAE,QAAQ,EAAE,SAAS;AAC7C,CAAC,EACA,SAAS;AAEJ,IAAM,yBAAyBA,GAAE,OAAO;AAAA;AAAA,EAE9C,UAAUA,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,YAAY;AAAA,EACpD,sBAAsBA,GACpB,OAAO,EACP,SAAS,EACT,QAAQ,0CAA0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBpD,gBAAgBA,GACd,OAAO,EACP,SAAS,EACT,UAAU,CAAC,QAAQ,OAAO,uBAAuB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASpD,aAAaA,GACX,OAAO,EACP,SAAS,EACT,UAAU,CAAC,QAAQ,OAAO,oBAAoB,CAAC;AAAA;AAAA;AAAA;AAKlD,CAAC;;;AF9BM,IAAM,eAAeC,GAAE;AAAA,EAC7BA,GAAE,OAAO;AAAA,EACTA,GAAE,OAEA;AACH;AAGO,IAAM,oBAAoBA,GAAE,KAAK,CAAC,QAAQ,UAAU,MAAM,CAAC;AAM3D,IAAM,sBAAsBA,GAAE,KAAK,CAAC,SAAS,QAAQ,CAAC;AAGtD,IAAM,mBAAmBA,GAAE,OAAO;AAAA,EACxC,SAASA,GAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,EAC7C,eAAe,oBAAoB,SAAS;AAC7C,CAAC;AAGM,IAAM,0BAA0BA,GAAE,OAAO;AAAA,EAC/C,UAAUA,GAAE,OAA4B,EAAE,SAAS;AAAA,EACnD,WAAWA,GAAE,OAA6B,EAAE,SAAS;AACtD,CAAC;AAGM,IAAM,qBAAqBA,GAChC,MAAM;AAAA,EACN;AAAA,EACAA,GAAE,OAAO;AAAA,IACR,SAAS;AAAA,EACV,CAAC;AACF,CAAC,EACA,SAAS,EACT,UAAU,CAAC,WAAW;AACtB,MAAI,WAAW,OAAW,QAAO;AACjC,MAAI,OAAO,WAAW,SAAU,QAAO,EAAE,SAAS,OAAO;AACzD,SAAO;AACR,CAAC;AAIK,IAAM,uBAAuBA,GAClC,OAAO;AAAA;AAAA,EAEP,KAAKA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,OAA2B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASxD,MAAM,iBAAiB,SAAS,EAAE,QAAQ,EAAE,SAAS,MAAM,CAAC;AAAA;AAAA;AAAA,EAI5D,wBAAwBA,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAM;AAAA;AAAA,EAG5D,wBAAwBA,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,OAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ/D,SAAS,kBAAkB,SAAS,EAAE,UAAU,CAAC,KAAK,QAAQ;AAC7D,UAAM,aAAa,OAAO,mBAAmB;AAC7C,QAAI,eAAe,QAAW;AAC7B,aAAO;AAAA,IACR;AAEA,UAAM,SAAS,kBAAkB,UAAU,UAAU;AACrD,QAAI,CAAC,OAAO,SAAS;AACpB,UAAI,SAAS;AAAA,QACZ,MAAM;AAAA,QACN,SACC;AAAA,MACF,CAAC;AACD,aAAO;AAAA,IACR;AAEA,WAAO,OAAO;AAAA,EACf,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,MAAM,wBAAwB,SAAS,EAAE,QAAQ,OAAO,CAAC,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO3D,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOR,WAAWA,GAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA;AAAA;AAAA;AAAA,EAK/C,SAASA,GACP,OAAO;AAAA,IACP,YAAYA,GAAE,OAAe,EAAE,SAAS;AAAA,IACxC,OAAO,eAAe,SAAS;AAAA,EAChC,CAAC,EACA,SAAS,EACT,QAAQ,OAAO,CAAC,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBpB,UAAUA,GACR,OAAO,EACP,SAAS,EACT,UAAU,CAAC,QAAQ,OAAO,eAAe,KAAK,iBAAiB,CAAC;AAAA,EAClE,OAAOA,GACL,OAAO,EACP,SAAS,EACT,UAAU,CAAC,QAAQ,OAAO,cAAc,CAAC;AAAA,EAC3C,WAAWA,GACT,OAAO,EACP,SAAS,EACT,UAAU,CAAC,QAAQ,OAAO,kBAAkB,CAAC;AAAA,EAC/C,SAASA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAc/D,WAAWA,GAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ/B,cAAcA,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM/C,UAAUA,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM5C,UAAUA,GAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ9B,aAAaA,GAAE,QAAQ,EAAE,QAAQ,MAAM,kBAAkB,CAAC;AAAA;AAAA,EAE1D,eAAeA,GACb,OAAO,EACP,SAAS,EACT,QAAQ,MAAM,yBAAyB,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMrD,eAAe,oBAAoB,SAAS;AAAA;AAAA,EAG5C,YAAY,uBAAuB,SAAS,EAAE;AAAA,IAAQ,MACrD,uBAAuB,MAAM,CAAC,CAAC;AAAA,EAChC;AAAA,EACA,OAAO,kBAAkB,SAAS,EAAE;AAAA,IAAQ,MAC3C,kBAAkB,MAAM,CAAC,CAAC;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,UAAUA,GACR,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQP,eAAeA,GACb,OAAO,EACP,IAAI,EACJ,IAAI,GAAK,EACT,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMX,uBAAuBA,GAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,EAC5D,CAAC,EACA,SAAS,EACT,QAAQ,OAAO;AAAA,IACf,uBAAuB;AAAA,EACxB,EAAE;AACJ,CAAC,EACA,UAAU,CAAC,QAAQ,QAAQ;AAhS7B;AAiSE,QAAM,WAAW,MAAM;AACvB,QAAM,kBACL,YAAO,WAAP,mBAAe,cAAW,YAAO,SAAP,mBAAa;AAExC,MAAI,OAAO,YAAY,UAAU,kBAAkB,SAAS;AAC3D,QAAI,SAAS;AAAA,MACZ,MAAM;AAAA,MACN,SACC;AAAA,MACD,QACC,YAAO,WAAP,mBAAe,aAAY,UACxB,CAAC,QAAQ,IACT,CAAC,QAAQ,eAAe;AAAA,IAC7B,CAAC;AAAA,EACF;AAEA,QAAM,SACL,OAAO,YAAY,UAAU,OAAO,WAAW,SAC5C,EAAE,SAAS,SAAkB,IAC7B,OAAO;AAGX,QAAM,iBAAiB,OAAO,WAC3B,iBAAiB,KAAK;AAAA,IACtB,UAAU,OAAO;AAAA,IACjB,MAAM,CAAC,UAAU;AAAA,IACjB,WAAW,OAAO;AAAA,IAClB,OAAO,OAAO;AAAA,EACf,CAAC,IACA;AAGH,MAAI,OAAO,eAAe,gBAAgB;AACzC,QAAI,SAAS;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,IACV,CAAC;AAAA,EACF;AAGA,MAAI,OAAO,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,aAAa;AACnE,QAAI,SAAS;AAAA,MACZ,MAAM;AAAA,MACN,SACC;AAAA,IACF,CAAC;AAAA,EACF;AAIA,QAAM,WAAW,OAAO,cACrB,mBACC,iDAAgB,cACjB,WAAW,kBAAkB;AAChC,QAAM,6BAA6B;AAAA,IAClC,OAAO,eAAe;AAAA,EACvB;AAEA,QAAM,aACL,iDAAgB,cAAa,OAAO,aAAa;AAElD,QAAM,SAAQ,iDAAgB,UAAS,OAAO;AAG9C,QAAM,uBAAuB,OAAO,WAAW,iBAC5C,iBAAiB,KAAK;AAAA,IACtB,UAAU,OAAO,WAAW;AAAA,IAC5B,MAAM,CAAC,cAAc,gBAAgB;AAAA,EACtC,CAAC,IACA;AAGH,OACC,6DAAsB,cACtB,qBAAqB,cAAc,WAClC;AACD,QAAI,SAAS;AAAA,MACZ,MAAM;AAAA,MACN,SAAS,6BAA6B,qBAAqB,SAAS,mCAAmC,SAAS;AAAA,MAChH,MAAM,CAAC,cAAc,gBAAgB;AAAA,IACtC,CAAC;AAAA,EACF;AAGA,QAAM,kBACL,6DAAsB,cACrB,YAAY,OAAO,cAAc,kBAAkB;AAGrD,QAAM,kBAAkB,6DAAsB;AAC9C,QAAM,eACL,6DAAsB,UAAS,OAAO,WAAW;AAGlD,SAAO;AAAA,IACN,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,MACX,GAAG,OAAO;AAAA,MACV;AAAA,IACD;AAAA,EACD;AACD,CAAC;AAQK,SAAS,gBACf,QACwD;AACxD,SAAO,OAAO;AAAA,IACb,OAAO,KAAK,OAAO,GAAG,EAAE,IAAI,CAAC,cAAc;AAC1C,YAAM,aAAa,OAAO,IAAI,SAAS;AACvC,YAAM,UAAU,WAAW,OAAO,WAAW,CAAC;AAC9C,YAAM,UAAU,eAAe,WAAW,OAAO,GAAG;AACpD,YAAM,WAAoC,CAAC;AAE3C,eAAS,OAAO,QAAQ,QAAQ,QAAQ;AACxC,eAAS,OAAO,QAAQ,QAAQ,QAAQ;AACxC,eAAS,UAAU;AAAA,QAClB,MAAM;AAAA,UACL,MAAM,KAAK,KAAK,YAAY;AAAA,UAC5B,MAAM,KAAK,KAAK,eAAe;AAAA,UAC/B,MAAM,KAAK,iBAAiB,CAAC;AAAA,UAC7B,MAAM,KAAK,KAAK,iBAAiB;AAAA,QAClC;AAAA,QACA,UAAU;AAAA,UACT;AAAA,YACC,QAAQ,MAAM,KAAK,sBAAsB,CAAC;AAAA,YAC1C,UAAU,QAAQ,2BAA2B;AAAA,YAC7C,SAAS;AAAA,UACV;AAAA,UACA;AAAA,YACC,QAAQ,MAAM,KAAK,KAAK,WAAW;AAAA,YACnC,UAAU,QAAQ,8BAA8B;AAAA,YAChD,SAAS;AAAA,UACV;AAAA,UACA;AAAA,YACC,QAAQ,MAAM,KAAK,oBAAoB,CAAC;AAAA,YACxC,UAAU;AAAA,YACV,SAAS;AAAA,UACV;AAAA,QACD;AAAA,MACD;AAEA,UAAI,CAAC,SAAS,KAAM,QAAO,SAAS;AACpC,UAAI,CAAC,SAAS,KAAM,QAAO,SAAS;AACpC,aAAO,CAAC,WAAW,EAAE,SAAS,CAAC;AAAA,IAChC,CAAC;AAAA,EACF;AACD;AAMO,IAAM,yBAAyBA,GACpC,OAAO;AAAA,EACP,MAAMA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,0BAA0B;AAAA,EAC/D,KAAKA,GACH,OAAO,EACP,SAAS,sDAAsD;AAAA,EACjE,SAASA,GACP,OAAOA,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC,EAC7B,SAAS,EACT;AAAA,IACA;AAAA,EACD;AAAA,EACD,iBAAiBA,GACf,OAAO,EACP,SAAS,EACT,SAAS,2CAA2C;AAAA,EACtD,kBAAkBA,GAChB,OAAO,EACP,SAAS,EACT;AAAA,IACA;AAAA,EACD;AAAA,EACD,UAAUA,GACR,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,EAC9B,SAAS,EACT;AAAA,IACA;AAAA,EACD;AAAA,EACD,sBAAsBA,GACpB,OAAO,EACP,SAAS,EACT;AAAA,IACA;AAAA,EACD;AAAA,EACD,uBAAuBA,GACrB,QAAQ,EACR,SAAS,EACT;AAAA,IACA;AAAA,EACD;AACF,CAAC,EACA,SAAS;AAEJ,IAAM,4BAA4BA,GACvC,OAAO;AAAA,EACP,UAAUA,GACR,OAAO,EACP,SAAS,EACT;AAAA,IACA;AAAA,EACD;AAAA,EACD,sBAAsBA,GACpB,OAAO,EACP,SAAS,EACT;AAAA,IACA,oDAAoD,0CAA0C;AAAA,EAC/F;AAAA,EACD,gBAAgBA,GACd,OAAO,EACP,SAAS,EACT;AAAA,IACA;AAAA,EACD;AAAA,EACD,aAAaA,GACX,OAAO,EACP,SAAS,EACT;AAAA,IACA;AAAA,EACD;AACF,CAAC,EACA,SAAS,+CAA+C;AAEnD,IAAM,uBAAuBA,GAClC,OAAO;AAAA,EACP,YAAYA,GACV,OAAO,EACP,SAAS,EACT,SAAS,wDAAwD;AAAA,EACnE,UAAUA,GACR,OAAO,EACP,SAAS,EACT,SAAS,6CAA6C;AAAA,EACxD,UAAUA,GACR,OAAO,EACP,SAAS,EACT,SAAS,+CAA+C;AAAA,EAC1D,SAASA,GACP,OAAO,EACP,SAAS,EACT,SAAS,0CAA0C;AACtD,CAAC,EACA,SAAS,+BAA+B;AAEnC,IAAM,wBAAwBA,GACnC,OAAO;AAAA,EACP,SAAS,oBAAoB,SAAS,EAAE;AAAA,IACvC;AAAA,EACD;AACD,CAAC,EACA,SAAS,EACT,SAAS,+BAA+B;AAEnC,IAAM,0BAA0BA,GACrC,OAAO;AAAA,EACP,KAAKA,GACH,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,EAC9B;AAAA,IACA;AAAA,EACD;AAAA,EACD,wBAAwBA,GACtB,OAAO,EACP,SAAS,EACT;AAAA,IACA;AAAA,EACD;AAAA,EACD,wBAAwBA,GACtB,OAAO,EACP,SAAS,EACT;AAAA,IACA;AAAA,EACD;AAAA,EACD,WAAWA,GACT,QAAQ,EACR,SAAS,EACT,SAAS,wDAAwD;AAAA,EACnE,QAAQ;AAAA,EACR,SAASA,GACP,OAAO;AAAA,IACP,OAAO,eAAe,SAAS,EAAE;AAAA,MAChC;AAAA,IACD;AAAA,EACD,CAAC,EACA,SAAS,EACT,SAAS,wBAAwB;AAAA,EACnC,UAAUA,GACR,OAAO,EACP,SAAS,EACT;AAAA,IACA;AAAA,EACD;AAAA,EACD,OAAOA,GACL,OAAO,EACP,SAAS,EACT;AAAA,IACA;AAAA,EACD;AAAA,EACD,WAAWA,GACT,OAAO,EACP,SAAS,EACT;AAAA,IACA;AAAA,EACD;AAAA,EACD,SAASA,GACP,OAAOA,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC,EAC7B,SAAS,EACT;AAAA,IACA;AAAA,EACD;AAAA,EACD,WAAWA,GACT,OAAO,EACP,SAAS,EACT;AAAA,IACA;AAAA,EACD;AAAA,EACD,cAAcA,GACZ,OAAO,EACP,SAAS,EACT,SAAS,oDAAoD;AAAA,EAC/D,UAAUA,GACR,OAAO,EACP,SAAS,EACT,SAAS,qDAAqD;AAAA,EAChE,UAAUA,GACR,OAAO,EACP,SAAS,EACT,SAAS,wCAAwC;AAAA,EACnD,aAAaA,GACX,QAAQ,EACR,SAAS,EACT;AAAA,IACA;AAAA,EACD;AAAA,EACD,eAAeA,GACb,OAAO,EACP,SAAS,EACT;AAAA,IACA;AAAA,EACD;AAAA,EACD,eAAe,uBAAuB;AAAA,IACrC;AAAA,EACD;AAAA,EACA,YAAY,0BAA0B,SAAS;AAAA,EAC/C,OAAO,qBAAqB,SAAS;AACtC,CAAC,EACA,SAAS,kCAAkC;;;AGzoB7C,SAAS,oBAAAC,yBAAwB;;;ACsFjC,SAAS,0BAA0B,SAA0B;AAC5D,SAAO,2CAA2C,KAAK,OAAO;AAC/D;AAEA,SAAS,0BACR,UACA,OACQ;AA7FT;AA8FC,QAAM,eACL,OAAO,UAAU,WACd,QACA,iBAAiB,QAChB,MAAM,UACP;AACJ,QAAM,UACL,iBAAiB,SACd,SACA,uBAAuB,YAAY;AACvC,MAAI,SAAS;AACZ,UAAM;AAAA,EACP;AAEA,QAAM,WAAU,cAAS,oBAAT;AAChB,MACC,iBAAiB,SACjB,WACA,0BAA0B,MAAM,OAAO,KACvC,CAAC,MAAM,QAAQ,SAAS,OAAO,GAC9B;AACD,UAAM,UAAU,GAAG,MAAM,OAAO,6BAA6B,OAAO;AAAA,EACrE;AACA,QAAM;AACP;AAEA,SAAS,gBAAgB,KAA+B;AACvD,MAAI,QAAQ,QAAQ,QAAQ,QAAW;AACtC,WAAO,EAAE,MAAM,OAAO;AAAA,EACvB;AACA,MAAI,OAAO,QAAQ,UAAU;AAC5B,WAAO,EAAE,MAAM,OAAO,UAAU,OAAO,GAAG,EAAE;AAAA,EAC7C;AACA,MAAI,OAAO,QAAQ,UAAU;AAC5B,QAAI,OAAO,UAAU,GAAG,GAAG;AAC1B,aAAO,EAAE,MAAM,OAAO,UAAU,IAAI;AAAA,IACrC;AACA,WAAO,EAAE,MAAM,SAAS,YAAY,IAAI;AAAA,EACzC;AACA,MAAI,OAAO,QAAQ,UAAU;AAC5B,WAAO,EAAE,MAAM,QAAQ,WAAW,IAAI;AAAA,EACvC;AACA,MAAI,OAAO,QAAQ,WAAW;AAC7B,WAAO,EAAE,MAAM,OAAO,UAAU,MAAM,IAAI,EAAE;AAAA,EAC7C;AACA,MAAI,eAAe,YAAY;AAC9B,WAAO,EAAE,MAAM,QAAQ,WAAW,OAAO,KAAK,GAAG,EAAE;AAAA,EACpD;AACA,QAAM,IAAI,MAAM,oCAAoC,OAAO,GAAG,EAAE;AACjE;AAEA,SAAS,6BAA6B,KAAuB;AAC5D,QAAM,eAAyB,CAAC;AAChC,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,UAAU;AAChB,aAAW,SAAS,IAAI,SAAS,OAAO,GAAG;AAC1C,UAAM,OAAO,MAAM,CAAC;AACpB,QAAI,KAAK,IAAI,IAAI,GAAG;AACnB;AAAA,IACD;AACA,SAAK,IAAI,IAAI;AACb,iBAAa,KAAK,IAAI;AAAA,EACvB;AACA,SAAO;AACR;AAEA,SAAS,sBACR,UACA,MACU;AACV,MAAI,QAAQ,UAAU;AACrB,WAAO,SAAS,IAAI;AAAA,EACrB;AAEA,QAAM,WAAW,KAAK,MAAM,CAAC;AAC7B,MAAI,YAAY,UAAU;AACzB,WAAO,SAAS,QAAQ;AAAA,EACzB;AAEA,aAAW,UAAU,CAAC,KAAK,KAAK,GAAG,GAAY;AAC9C,UAAM,YAAY,GAAG,MAAM,GAAG,QAAQ;AACtC,QAAI,aAAa,UAAU;AAC1B,aAAO,SAAS,SAAS;AAAA,IAC1B;AAAA,EACD;AAEA,SAAO;AACR;AAEA,SAAS,iBACR,KACA,QAC2B;AAC3B,MAAI,WAAW,QAAW;AACzB,WAAO;AAAA,EACR;AAEA,MAAI,MAAM,QAAQ,MAAM,GAAG;AAC1B,WAAO,OAAO,IAAI,CAAC,QAAQ,gBAAgB,GAAG,CAAC;AAAA,EAChD;AAEA,QAAM,eAAe,6BAA6B,GAAG;AACrD,MAAI,aAAa,WAAW,GAAG;AAC9B,WAAO,OAAO,OAAO,MAAM,EAAE,IAAI,CAAC,QAAQ,gBAAgB,GAAG,CAAC;AAAA,EAC/D;AAEA,SAAO,aAAa,IAAI,CAAC,SAAS;AACjC,UAAM,QAAQ,sBAAsB,QAAQ,IAAI;AAChD,QAAI,UAAU,QAAW;AACxB,YAAM,IAAI,MAAM,2BAA2B,IAAI,EAAE;AAAA,IAClD;AACA,WAAO,gBAAgB,KAAK;AAAA,EAC7B,CAAC;AACF;AAEA,SAAS,uBACR,SAC6B;AAC7B,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,MAAM;AACZ,QAAM,cAAc,CAAC,OAAe,UACnC,OAAO,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAErC,SAAO;AAAA,IACN,gBAAgB,YAAY,kBAAkB,kBAAkB;AAAA,IAChE,aAAa,YAAY,eAAe,cAAc;AAAA,IACtD,aAAa,YAAY,eAAe,cAAc;AAAA,IACtD,eAAe,YAAY,iBAAiB,iBAAiB;AAAA,IAC7D,SAAS,YAAY,WAAW,UAAU;AAAA,IAC1C,aAAa,YAAY,eAAe,cAAc;AAAA,IACtD,kBAAkB,YAAY,oBAAoB,oBAAoB;AAAA,IACtE,uBAAuB;AAAA,MACtB;AAAA,MACA;AAAA,IACD;AAAA,IACA,wBAAwB;AAAA,MACvB;AAAA,MACA;AAAA,IACD;AAAA,IACA,uBAAuB;AAAA,MACtB;AAAA,MACA;AAAA,IACD;AAAA,IACA,aAAa,YAAY,eAAe,eAAe;AAAA,EACxD;AACD;AAEA,IAAM,kBAAN,MAAsB;AAAA,EACrB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAA2B,CAAC;AAAA,EAE5B,QAAoB;AACnB,QAAI,KAAK,SAAS;AACjB,YAAM,IAAI;AAAA,QACT;AAAA,MACD;AAAA,IACD;AAEA,SAAK;AACL,QAAI,WAAW;AACf,WAAO,MAAM;AACZ,UAAI,UAAU;AACb;AAAA,MACD;AACA,iBAAW;AACX,WAAK;AACL,UAAI,KAAK,YAAY,GAAG;AACvB,cAAM,UAAU,KAAK,SAAS,OAAO,CAAC;AACtC,mBAAW,UAAU,SAAS;AAC7B,iBAAO;AAAA,QACR;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,MAAM,UAA8C;AACzD,QAAI,KAAK,SAAS;AACjB;AAAA,IACD;AACA,SAAK,UAAU;AACf,QAAI,KAAK,UAAU,GAAG;AACrB,YAAM,IAAI,QAAc,CAAC,YAAY,KAAK,SAAS,KAAK,OAAO,CAAC;AAAA,IACjE;AACA,UAAM,SAAS;AAAA,EAChB;AACD;AAEO,SAAS,qBACf,UACiB;AACjB,QAAM,OAAO,IAAI,gBAAgB;AACjC,MAAI;AACJ,MAAI,kBAAiC;AAErC,QAAM,gBAAgB,OACrB,KACA,WACkC;AAClC,UAAM,wBAAwB,0BAA0B,GAAG;AAC3D,QAAI,uBAAuB;AAC1B,aAAO;AAAA,QACN,SAAS,CAAC,qBAAqB;AAAA,QAC/B,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAAA,QAC7B,SAAS;AAAA,QACT;AAAA,MACD;AAAA,IACD;AAEA,UAAM,UAAU,KAAK,MAAM;AAC3B,QAAI;AACH,YAAM,eAAe,iBAAiB,KAAK,MAAM;AACjD,YAAM,SAAS,MAAM,SAAS,QAAQ,KAAK,YAAY;AACvD,UAAI,OAAO,oBAAoB,QAAW;AACzC,0BAAkB,OAAO;AAAA,MAC1B;AACA,aAAO;AAAA,IACR,SAAS,OAAO;AACf,gCAA0B,UAAU,KAAK;AAAA,IAC1C,UAAE;AACD,cAAQ;AAAA,IACT;AAAA,EACD;AAEA,SAAO;AAAA,IACN,MAAM,KACL,KACA,UACgB;AAChB,YAAM,UAAU,KAAK,MAAM;AAC3B,UAAI;AACJ,UAAI;AACH,iBAAS,MAAM,SAAS,KAAK,GAAG;AAAA,MACjC,SAAS,OAAO;AACf,kCAA0B,UAAU,KAAK;AAAA,MAC1C,UAAE;AACD,gBAAQ;AAAA,MACT;AACA,UAAI,CAAC,UAAU;AACd;AAAA,MACD;AACA,iBAAW,OAAO,OAAO,MAAM;AAC9B,iBAAS,KAAK,OAAO,OAAO;AAAA,MAC7B;AAAA,IACD;AAAA,IACA,MAAM,QACL,KACA,QAC+B;AAC/B,aAAO,MAAM,cAAc,KAAK,MAAM;AAAA,IACvC;AAAA,IACA,MAAM,IAAI,KAAa,QAAwC;AAC9D,YAAM,cAAc,KAAK,MAAM;AAAA,IAChC;AAAA,IACA,MAAM,MAAM,KAAa,QAAyB;AACjD,YAAM,EAAE,SAAS,KAAK,IAAI,MAAM,cAAc,KAAK,MAAM;AACzD,aAAO,EAAE,SAAS,KAAK;AAAA,IACxB;AAAA,IACA,gBAA4C;AAhW9C;AAiWG,aAAO,wBAAuB,cAAS,YAAT,iCAAoB;AAAA,IACnD;AAAA,IACA,MAAM,QAAuB;AAC5B,uBAAiB,KAAK,MAAM,MAAM,SAAS,MAAM,CAAC;AAClD,YAAM;AAAA,IACP;AAAA,EACD;AACD;AAEA,SAAS,0BAA0B,KAAiC;AACnE,QAAM,QAAQ,IAAI;AAAA,IACjB;AAAA,EACD;AACA,MAAI,CAAC,OAAO;AACX,WAAO;AAAA,EACR;AAEA,QAAM,QAAQ,MAAM,CAAC;AACrB,MAAI,CAAC,OAAO;AACX,WAAO;AAAA,EACR;AACA,MACE,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG,KAC3C,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG,KAC3C,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG,GAC3C;AACD,WAAO,MAAM,MAAM,GAAG,EAAE;AAAA,EACzB;AACA,SAAO;AACR;;;AC1NO,SAAS,iCACf,QAI0B;AAC1B,SAAO;AACR;;;AC5HA,SAAS,iBAAiB,QAA4C;AACrE,SAAO;AACR;AAEA,SAAS,gBAAgB,QAAgD;AACxE,SAAO;AACR;AAEA,SAAS,qBAAqB,QAAgD;AAC7E,SAAO;AACR;AAEA,SAAS,aAAa,QAAsC;AAC3D,SAAO;AACR;AAEA,SAAS,kBAAkB,QAA0C;AACpE,SAAO;AACR;AAEA,SAAS,0BACR,QAC0B;AAC1B,SAAO;AACR;AAEA,SAAS,iBAAiB,QAA4C;AACrE,SAAO;AACR;AAEA,SAAS,qBAAqB,QAAgD;AAC7E,SAAO;AACR;AAEA,SAAS,mBACR,OACyC;AACzC,UAAQ,MAAM,MAAM;AAAA,IACnB,KAAK;AACJ,aAAO,EAAE,MAAM,OAAO;AAAA,IACvB,KAAK;AACJ,aAAO,EAAE,MAAM,OAAO,UAAU,MAAM,SAAS;AAAA,IAChD,KAAK;AACJ,aAAO,EAAE,MAAM,SAAS,YAAY,MAAM,WAAW;AAAA,IACtD,KAAK;AACJ,aAAO,EAAE,MAAM,QAAQ,WAAW,MAAM,UAAU;AAAA,IACnD,KAAK;AACJ,aAAO,EAAE,MAAM,QAAQ,WAAW,OAAO,KAAK,MAAM,SAAS,EAAE;AAAA,EACjE;AACD;AAEA,SAAS,oBAAoB,QAAkD;AAC9E,MAAI,UAAU,MAAM;AACnB,WAAO;AAAA,EACR;AACA,SAAO,OAAO,IAAI,CAAC,UAAU,mBAAmB,KAAK,CAAC;AACvD;AAEA,SAAS,aAAa,OAA6B;AAClD,SAAO,OAAO,KAAK,KAAK;AACzB;AAEA,SAAS,kBACR,SACmD;AACnD,MAAI,CAAC,SAAS;AACb,WAAO;AAAA,EACR;AACA,SAAO;AAAA,IACN,GAAG;AAAA,IACH,MAAM,QAAQ,OAAO,aAAa,QAAQ,IAAI,IAAI;AAAA,EACnD;AACD;AAEA,SAAS,wBACR,SACiD;AACjD,SAAO;AAAA,IACN,GAAG;AAAA,IACH,OAAO,QAAQ,QAAQ,aAAa,QAAQ,KAAK,IAAI;AAAA,IACrD,iBAAiB,QAAQ,gBAAgB,IAAI,CAAC,UAAU;AAAA,MACvD,GAAG;AAAA,MACH,OAAO,aAAa,KAAK,KAAK;AAAA,IAC/B,EAAE;AAAA,EACH;AACD;AAEA,SAAS,cAAc,OAGrB;AACD,SAAO;AAAA,IACN,KAAK,aAAa,MAAM,GAAG;AAAA,IAC3B,OAAO,aAAa,MAAM,KAAK;AAAA,EAChC;AACD;AAEA,SAAS,mBAAmB,SAAmD;AAC9E,SAAO;AAAA,IACN,IAAI,MAAM,QAAQ,GAAG;AAAA,IACrB,MAAM,MAAM,QAAQ,KAAK;AAAA,IACzB,MAAM,MAAM,QAAQ,KAAK;AAAA,IACzB,WAAW,MAAM,QAAQ,UAAU;AAAA,IACnC,eAAe,MAAM,QAAQ,cAAc;AAAA,IAC3C,UAAU,OAAO,aAA+C;AAC/D,YAAM,QAAQ;AAAA,QACb,aAAa,QAAQ,aAAa,SAC/B,WACA,aAAa,QAAQ;AAAA,MACzB;AAAA,IACD;AAAA,EACD;AACD;AAEO,IAAM,kBAAN,MAA6C;AAAA,EAC1C,OAAO;AAAA,EAEhB;AAAA,EACA,OAAO,oBAAI,QAA6C;AAAA,EAExD,YAAY,UAA0B;AACrC,SAAK,YAAY;AAAA,EAClB;AAAA,EAEA,UAAU,KAA0C;AACnD,UAAM,YAAY,qBAAqB,GAAG;AAC1C,QAAI,WAAW,KAAK,KAAK,IAAI,SAAS;AACtC,QAAI,CAAC,UAAU;AACd,iBAAW,UAAU,IAAI;AACzB,WAAK,KAAK,IAAI,WAAW,QAAQ;AAAA,IAClC;AACA,WAAO;AAAA,EACR;AAAA,EAEA,iBAAiC;AAChC,WAAO,iBAAiB,IAAI,KAAK,UAAU,aAAa,CAAC;AAAA,EAC1D;AAAA,EAEA,cACC,UACA,MACA,SACO;AACP,qBAAiB,QAAQ,EAAE,SAAS,MAAM,gBAAgB,OAAO,CAAC;AAAA,EACnE;AAAA,EAEA,MAAM,cACL,UACA,QACgB;AAChB,UAAM,iBAAiB,QAAQ,EAAE,MAAM,MAAM;AAAA,EAC9C;AAAA,EAEA,MAAM,iBAAiB,UAAyC;AAC/D,UAAM,iBAAiB,QAAQ,EAAE,SAAS;AAAA,EAC3C;AAAA,EAEA,MAAM,6BACL,UAC8B;AAC9B,WACE,MAAM,iBAAiB,QAAQ,EAAE,qBAAqB,KACvD;AAAA,EAEF;AAAA,EAEA,MAAM,eACL,UACwC;AACxC,UAAM,WAAW,MAAM,iBAAiB,QAAQ,EAAE,OAAO;AACzD,WAAO;AAAA,MACN,QAAQ,SAAS;AAAA,MACjB,SAAS,SAAS;AAAA,MAClB,MAAM,SAAS;AAAA,IAChB;AAAA,EACD;AAAA,EAEA,MAAM,iBACL,UACwC;AACxC,UAAM,WAAW,iBAAiB,QAAQ,EAAE,SAAS;AACrD,WAAO;AAAA,MACN,QAAQ,SAAS;AAAA,MACjB,SAAS,SAAS;AAAA,MAClB,MAAM,SAAS;AAAA,IAChB;AAAA,EACD;AAAA,EAEA,MAAM,gBACL,UACwC;AACxC,UAAM,WAAW,iBAAiB,QAAQ,EAAE,QAAQ;AACpD,WAAO;AAAA,MACN,QAAQ,SAAS;AAAA,MACjB,SAAS,SAAS;AAAA,MAClB,MAAM,SAAS;AAAA,IAChB;AAAA,EACD;AAAA,EAEA,MAAM,wBACL,UACA,KACA,eACA,aACA,QACyC;AACzC,WAAO,MAAM,iBAAiB,QAAQ,EAAE;AAAA,MACvC,EAAE,GAAG,KAAK,MAAM,aAAa,IAAI,IAAI,EAAE;AAAA,MACvC;AAAA,MACA,0BAA0B,WAAW;AAAA,MACrC;AAAA,IACD;AAAA,EACD;AAAA,EAEA,mBACC,WACA,QACqB;AACrB,WAAO;AAAA,MACN,IAAI,KAAK,UAAU,iBAAiB,WAAW,MAAM;AAAA,IACtD;AAAA,EACD;AAAA,EAEA,0BAAmD;AAClD,WAAO,IAAI,KAAK,UAAU,kBAAkB;AAAA,EAC7C;AAAA,EAEA,uBACC,SACA,MACA,QACqB;AACrB,WAAO,IAAI,KAAK,UAAU;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,yBAAyB,OAAyC;AACjE,WAAO,0BAA0B,KAAK,EAAE,QAAQ;AAAA,EACjD;AAAA,EAEA,wBAAwB,OAAsC;AAC7D,8BAA0B,KAAK,EAAE,OAAO;AAAA,EACzC;AAAA,EAEA,6BACC,OACA,UACO;AACP,8BAA0B,KAAK,EAAE,YAAY,QAAQ;AAAA,EACtD;AAAA,EAEA,WAAW,KAAiC;AAC3C,WAAO,qBAAqB,GAAG,EAAE,MAAM;AAAA,EACxC;AAAA,EAEA,wBAAwB,KAA+B;AACtD,yBAAqB,GAAG,EAAE,mBAAmB;AAAA,EAC9C;AAAA,EAEA,sBAAsB,KAA+B;AACpD,yBAAqB,GAAG,EAAE,iBAAiB;AAAA,EAC5C;AAAA,EAEA,cACC,KACA,aACO;AACP,yBAAqB,GAAG,EAAE,SAAS,WAAW;AAAA,EAC/C;AAAA,EAEA,iBACC,KACA,MACO;AACP,yBAAqB,GAAG,EAAE,YAAY,IAAI;AAAA,EAC3C;AAAA,EAEA,MAAM,wBACL,KACA,MACgB;AAChB,UAAM,qBAAqB,GAAG,EAAE,mBAAmB,IAAI;AAAA,EACxD;AAAA,EAEA,uBAAuB,KAAyB;AAC/C,WAAO,qBAAqB,GAAG,EAAE,kBAAkB;AAAA,EACpD;AAAA,EAEA,4BACC,KACA,OACA,mBACe;AACf,WAAO,qBAAqB,GAAG,EAAE;AAAA,MAChC,aAAa,KAAK;AAAA,MAClB;AAAA,IACD;AAAA,EACD;AAAA,EAEA,6BACC,KACA,OACA,eACe;AACf,WAAO,qBAAqB,GAAG,EAAE;AAAA,MAChC,aAAa,KAAK;AAAA,MAClB;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,yBACL,KACA,aACgB;AAChB,UAAM,qBAAqB,GAAG,EAAE,oBAAoB,WAAW;AAAA,EAChE;AAAA,EAEA,6BACC,KACA,QACO;AACP,yBAAqB,GAAG,EAAE,wBAAwB,MAAM;AAAA,EACzD;AAAA,EAEA,mCAAmC,KAAmC;AACrE,WAAO,qBAAqB,GAAG,EAAE,8BAA8B;AAAA,EAChE;AAAA,EAEA,4BAA4B,KAAuC;AAClE,WAAO;AAAA,MACN;AAAA,IACD,EAAE,uBAAuB;AAAA,EAC1B;AAAA,EAEA,MAAM,eACL,KACA,SACgB;AAChB,UAAM,qBAAqB,GAAG,EAAE;AAAA,MAC/B,wBAAwB,OAAO;AAAA,IAChC;AAAA,EACD;AAAA,EAEA,QAAQ,KAAiC;AACxC,WAAO,qBAAqB,GAAG,EAAE,QAAQ;AAAA,EAC1C;AAAA,EAEA,UAAU,KAAiC;AAC1C,WAAO,qBAAqB,GAAG,EAAE,KAAK;AAAA,EACvC;AAAA,EAEA,SAAS,KAAyB;AACjC,WAAO,qBAAqB,GAAG,EAAE,IAAI;AAAA,EACtC;AAAA,EAEA,YAAY,KAAiC;AAC5C,WAAO,qBAAqB,GAAG,EAAE,OAAO;AAAA,EACzC;AAAA,EAEA,WAAW,KAA+B;AACzC,yBAAqB,GAAG,EAAE,MAAM;AAAA,EACjC;AAAA,EAEA,aAAa,KAA+B;AAC3C,yBAAqB,GAAG,EAAE,QAAQ;AAAA,EACnC;AAAA,EAEA,iBAAiB,KAAsC;AACtD,WAAO,qBAAqB,GAAG,EAAE,YAAY;AAAA,EAC9C;AAAA,EAEA,WAAW,KAAuC;AACjD,WAAO,qBAAqB,GAAG,EAAE,MAAM;AAAA,EACxC;AAAA,EAEA,MAAM,iBACL,KACA,QACA,SACsB;AACtB,WAAQ,MAAM,qBAAqB,GAAG,EAAE;AAAA,MACvC,aAAa,MAAM;AAAA,MACnB,kBAAkB,OAAO;AAAA,IAC1B;AAAA,EACD;AAAA,EAEA,eACC,KACA,MACA,MACO;AACP,yBAAqB,GAAG,EAAE,UAAU,MAAM,aAAa,IAAI,CAAC;AAAA,EAC7D;AAAA,EAEA,eAAe,KAAyB,SAAiC;AACxE,yBAAqB,GAAG,EAAE,UAAU,OAAO;AAAA,EAC5C;AAAA,EAEA,MAAM,gCACL,KACmB;AACnB,WAAO,MAAM,qBAAqB,GAAG,EAAE,2BAA2B;AAAA,EACnE;AAAA,EAEA,eAAe,KAAyB,SAAiC;AACxE,yBAAqB,GAAG,EAAE,UAAU,OAAO;AAAA,EAC5C;AAAA,EAEA,oBAAoB,KAAiC;AACpD,WAAO,qBAAqB,GAAG,EAAE,eAAe;AAAA,EACjD;AAAA,EAEA,kBAAkB,KAAyB,UAAwB;AAClE,yBAAqB,GAAG,EAAE,aAAa,QAAQ;AAAA,EAChD;AAAA,EAEA,kBACC,KACA,SACO;AACP,yBAAqB,GAAG,EAAE,aAAa,OAAO;AAAA,EAC/C;AAAA,EAEA,kBAAkB,KAAiC;AAClD,WAAO,qBAAqB,GAAG,EAAE,aAAa;AAAA,EAC/C;AAAA,EAEA,uBAAuB,KAA+B;AACrD,yBAAqB,GAAG,EAAE,kBAAkB;AAAA,EAC7C;AAAA,EAEA,uBAAuB,KAA+B;AACrD,yBAAqB,GAAG,EAAE,kBAAkB;AAAA,EAC7C;AAAA,EAEA,4BAA4B,KAAiC;AAC5D,WAAO,qBAAqB,GAAG,EAAE,uBAAuB;AAAA,EACzD;AAAA,EAEA,0BAA0B,KAAyB,UAAwB;AAC1E,yBAAqB,GAAG,EAAE,qBAAqB,QAAQ;AAAA,EACxD;AAAA,EAEA,MAAM,WACL,KACA,KAC+B;AAC/B,WAAO,MAAM,qBAAqB,GAAG,EAAE,GAAG,EAAE,IAAI,aAAa,GAAG,CAAC;AAAA,EAClE;AAAA,EAEA,MAAM,WACL,KACA,KACA,OACgB;AAChB,UAAM,qBAAqB,GAAG,EAC5B,GAAG,EACH,IAAI,aAAa,GAAG,GAAG,aAAa,KAAK,CAAC;AAAA,EAC7C;AAAA,EAEA,MAAM,cACL,KACA,KACgB;AAChB,UAAM,qBAAqB,GAAG,EAAE,GAAG,EAAE,OAAO,aAAa,GAAG,CAAC;AAAA,EAC9D;AAAA,EAEA,MAAM,mBACL,KACA,OACA,KACgB;AAChB,UAAM,qBAAqB,GAAG,EAC5B,GAAG,EACH,YAAY,aAAa,KAAK,GAAG,aAAa,GAAG,CAAC;AAAA,EACrD;AAAA,EAEA,MAAM,kBACL,KACA,QACA,SAC4B;AAC5B,WAAO,MAAM,qBAAqB,GAAG,EACnC,GAAG,EACH,WAAW,aAAa,MAAM,GAAG,OAAO;AAAA,EAC3C;AAAA,EAEA,MAAM,iBACL,KACA,OACA,KACA,SAC4B;AAC5B,WAAO,MAAM,qBAAqB,GAAG,EACnC,GAAG,EACH,UAAU,aAAa,KAAK,GAAG,aAAa,GAAG,GAAG,OAAO;AAAA,EAC5D;AAAA,EAEA,MAAM,gBACL,KACA,MACkD;AAClD,WAAO,MAAM,qBAAqB,GAAG,EACnC,GAAG,EACH,SAAS,KAAK,IAAI,YAAY,CAAC;AAAA,EAClC;AAAA,EAEA,MAAM,gBACL,KACA,SACgB;AAChB,UAAM,qBAAqB,GAAG,EAC5B,GAAG,EACH,SAAS,QAAQ,IAAI,aAAa,CAAC;AAAA,EACtC;AAAA,EAEA,MAAM,mBACL,KACA,MACgB;AAChB,UAAM,qBAAqB,GAAG,EAC5B,GAAG,EACH,YAAY,KAAK,IAAI,YAAY,CAAC;AAAA,EACrC;AAAA,EAEA,MAAM,aACL,KACA,KACgC;AAChC,WAAO,MAAM,KAAK,UAAU,GAAG,EAAE,KAAK,GAAG;AAAA,EAC1C;AAAA,EAEA,MAAM,gBACL,KACA,KACA,QACmC;AACnC,UAAM,SAAS,MAAM,KAAK,UAAU,GAAG,EAAE;AAAA,MACxC;AAAA,MACA,oBAAoB,MAAM;AAAA,IAC3B;AACA,WAAO,iCAAiC,MAAM;AAAA,EAC/C;AAAA,EAEA,MAAM,cACL,KACA,KACA,QACiC;AACjC,WAAO,MAAM,KAAK,UAAU,GAAG,EAAE;AAAA,MAChC;AAAA,MACA,oBAAoB,MAAM;AAAA,IAC3B;AAAA,EACD;AAAA,EAEA,MAAM,YACL,KACA,KACA,QAC+B;AAC/B,WAAO,MAAM,KAAK,UAAU,GAAG,EAAE,IAAI,KAAK,oBAAoB,MAAM,CAAC;AAAA,EACtE;AAAA,EAEA,gBAAgB,KAAyB;AArmB1C;AAsmBE,aAAO,gBAAK,UAAU,GAAG,GAAE,YAApB,gCAAmC;AAAA,EAC3C;AAAA,EAEA,wBAAwB,KAAwC;AAzmBjE;AA0mBE,aAAO,gBAAK,UAAU,GAAG,GAAE,oBAApB,gCAA2C;AAAA,EACnD;AAAA,EAEA,MAAM,cAAc,KAAwC;AAC3D,UAAM,YAAY,qBAAqB,GAAG;AAC1C,UAAM,WAAW,KAAK,KAAK,IAAI,SAAS;AACxC,QAAI,CAAC,UAAU;AACd;AAAA,IACD;AAEA,SAAK,KAAK,OAAO,SAAS;AAC1B,UAAM,SAAS,MAAM;AAAA,EACtB;AAAA,EAEA,MAAM,eACL,KACA,MACA,MAC+B;AAC/B,WAAO;AAAA,MACN,MAAM,qBAAqB,GAAG,EAC5B,MAAM,EACN,KAAK,MAAM,aAAa,IAAI,CAAC;AAAA,IAChC;AAAA,EACD;AAAA,EAEA,MAAM,oBACL,KACA,SACA,QACiC;AACjC,UAAM,WAAW,MAAM,qBAAqB,GAAG,EAC7C,MAAM,EACN;AAAA,MACA;AAAA,MACA,SAAS,0BAA0B,MAAM,IAAI;AAAA,IAC9C;AACD,WAAO,SAAS,IAAI,kBAAkB;AAAA,EACvC;AAAA,EAEA,MAAM,uBACL,KACA,OACA,SACA,QAC+B;AAC/B,WAAO;AAAA,MACN,MAAM,qBAAqB,GAAG,EAC5B,MAAM,EACN;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,0BAA0B,MAAM,IAAI;AAAA,MAC9C;AAAA,IACF;AAAA,EACD;AAAA,EAEA,MAAM,gCACL,KACA,OACA,SACgB;AAChB,UAAM,qBAAqB,GAAG,EAC5B,MAAM,EACN,sBAAsB,OAAO,OAAO;AAAA,EACvC;AAAA,EAEA,MAAM,yBACL,KACA,MACA,MACA,SACA,QAC+B;AAC/B,WAAO,MAAM,qBAAqB,GAAG,EACnC,MAAM,EACN;AAAA,MACA;AAAA,MACA,aAAa,IAAI;AAAA,MACjB;AAAA,MACA,SAAS,0BAA0B,MAAM,IAAI;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,uBACC,KACA,SACwB;AACxB,WAAO,qBAAqB,GAAG,EAC7B,MAAM,EACN,aAAa,OAAO,EACpB,IAAI,kBAAkB;AAAA,EACzB;AAAA,EAEA,kBAAkB,KAAiC;AAClD,WAAO,qBAAqB,GAAG,EAAE,MAAM,EAAE,QAAQ;AAAA,EAClD;AAAA,EAEA,MAAM,0BAA0B,KAAyB;AACxD,WAAO,MAAM,qBAAqB,GAAG,EAAE,MAAM,EAAE,gBAAgB;AAAA,EAChE;AAAA,EAEA,mBACC,KACA,YACA,YACA,MACO;AACP,yBAAqB,GAAG,EACtB,SAAS,EACT,MAAM,YAAY,YAAY,aAAa,IAAI,CAAC;AAAA,EACnD;AAAA,EAEA,gBACC,KACA,aACA,YACA,MACO;AACP,yBAAqB,GAAG,EACtB,SAAS,EACT,GAAG,aAAa,YAAY,aAAa,IAAI,CAAC;AAAA,EACjD;AAAA,EAEA,OAAO,MAA0B;AAChC,WAAO,aAAa,IAAI,EAAE,GAAG;AAAA,EAC9B;AAAA,EAEA,WAAW,MAAgC;AAC1C,WAAO,aAAa,IAAI,EAAE,OAAO;AAAA,EAClC;AAAA,EAEA,UAAU,MAAgC;AACzC,WAAO,aAAa,IAAI,EAAE,MAAM;AAAA,EACjC;AAAA,EAEA,aAAa,MAAkB,OAA2B;AACzD,iBAAa,IAAI,EAAE,SAAS,aAAa,KAAK,CAAC;AAAA,EAChD;AAAA,EAEA,mBAAmB,MAA2B;AAC7C,WAAO,aAAa,IAAI,EAAE,eAAe;AAAA,EAC1C;AAAA,EAEA,SAAS,MAAkB,MAAc,MAA0B;AAClE,iBAAa,IAAI,EAAE,KAAK,MAAM,aAAa,IAAI,CAAC;AAAA,EACjD;AAAA,EAEA,MAAM,eACL,MACA,QACgB;AAChB,UAAM,aAAa,IAAI,EAAE,WAAW,MAAM;AAAA,EAC3C;AAAA,EAEA,cACC,IACA,MACA,QACO;AACP,sBAAkB,EAAE,EAAE,KAAK,aAAa,IAAI,GAAG,MAAM;AAAA,EACtD;AAAA,EAEA,MAAM,eACL,IACA,MACA,QACgB;AAChB,UAAM,kBAAkB,EAAE,EAAE,MAAM,MAAM,MAAM;AAAA,EAC/C;AAAA,EAEA,0BACC,IACA,UACO;AACP,sBAAkB,EAAE,EAAE,iBAAiB,QAAQ;AAAA,EAChD;AACD;AAIA,eAAsB,kBAGnB;AACF,QAAM,WAAW,MAAM,OAAO,CAAC,aAAa,eAAe,EAAE,KAAK,GAAG;AACrE,SAAO;AAAA,IACN;AAAA,IACA,SAAS,IAAI,gBAAgB,QAAQ;AAAA,EACtC;AACD;;;AC7xBA,IAAM,kBAAkB;AASjB,SAAS,mBACf,SACA,MACA,MACY;AACZ,MAAI,EAAC,mCAAU,QAAO;AACrB,WAAO;AAAA,EACR;AAEA,QAAM,SAAS,mBAAmB,SAA8B,MAAM,IAAI;AAC1E,MAAI,CAAC,OAAO,SAAS;AACpB,UAAM,gBAAgB,YAAY,IAAI,gBAAgB,OAAO,MAAM;AAAA,EACpE;AACA,SAAO,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC,OAAO,IAAI;AAC/D;AAEO,SAAS,mBACf,QACA,QACU;AACV,MAAI,CAAC,QAAQ;AACZ,WAAO;AAAA,EACR;AAEA,QAAM,SAAS;AAAA,IACd,EAAE,CAAC,eAAe,GAAG,OAAO;AAAA,IAC5B;AAAA,IACA;AAAA,EACD;AACA,MAAI,CAAC,OAAO,SAAS;AACpB,UAAM,gBAAgB,qBAAqB,OAAO,MAAM;AAAA,EACzD;AACA,SAAO,OAAO;AACf;AAEO,SAAS,kBACf,SACA,MACA,MACY;AACZ,MAAI,EAAC,mCAAU,QAAO;AACrB,WAAO;AAAA,EACR;AAEA,QAAM,UAAU,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI;AAC7C,QAAM,SAAS,mBAAmB,SAAS,MAAM,OAAO;AACxD,MAAI,CAAC,OAAO,SAAS;AACpB,UAAM,gBAAgB,WAAW,IAAI,cAAc,OAAO,MAAM;AAAA,EACjE;AACA,SAAO,KAAK,UAAU,IACnB,CAAC,OAAO,IAAI,IACZ,MAAM,QAAQ,OAAO,IAAI,IACxB,OAAO,OACP,CAAC,OAAO,IAAI;AACjB;AAEO,SAAS,kBACf,SACA,MACA,MACU;AACV,MAAI,EAAC,mCAAU,QAAO;AACrB,WAAO;AAAA,EACR;AAEA,QAAM,SAAS,mBAAmB,SAAS,MAAM,IAAI;AACrD,MAAI,CAAC,OAAO,SAAS;AACpB,UAAM,gBAAgB,WAAW,IAAI,cAAc,OAAO,MAAM;AAAA,EACjE;AACA,SAAO,OAAO;AACf;AAEO,SAAS,sBACf,SACA,MACA,UACU;AACV,QAAM,SAAS,mCAAU;AACzB,MAAI,CAAC,QAAQ;AACZ,WAAO;AAAA,EACR;AAEA,MAAI;AACJ,MAAI,wBAAwB,MAAM,GAAG;AACpC,qBAAiB,OAAO;AAAA,EACzB,WACC,CAAC,iBAAiB,MAAM,KACxB,CAAC,wBAAwB,MAAM,KAC/B,OAAO,WAAW,YAClB,WAAW,QACX,cAAc,QACb;AACD,UAAM,YAAa,OAAkC;AACrD,QAAI,cAAc,QAAW;AAC5B,uBAAiB;AAAA,IAClB;AAAA,EACD;AAEA,MAAI,CAAC,gBAAgB;AACpB,WAAO;AAAA,EACR;AAEA,QAAM,SAAS;AAAA,IACd,EAAE,CAAC,IAAI,GAAG,eAAe;AAAA,IACzB;AAAA,IACA;AAAA,EACD;AACA,MAAI,CAAC,OAAO,SAAS;AACpB,UAAM,gBAAgB,WAAW,IAAI,0BAA0B,OAAO,MAAM;AAAA,EAC7E;AACA,SAAO,OAAO;AACf;AAEA,SAAS,gBAAgB,QAAgB,QAA+B;AACvE,SAAO,IAAI;AAAA,IACV;AAAA,IACA;AAAA,IACA,WAAW,MAAM;AAAA,IACjB;AAAA,MACC,QAAQ;AAAA,MACR,UAAU,EAAE,OAAO;AAAA,IACpB;AAAA,EACD;AACD;;;ACtFA,SAAS,eAAe,QAA0C;AACjE,SAAO;AACR;AAEA,SAAS,cAAc,QAA8C;AACpE,SAAO;AACR;AAEA,SAAS,mBAAmB,QAA8C;AACzE,SAAO;AACR;AAEA,SAAS,WAAW,QAAoC;AACvD,SAAO;AACR;AAEA,SAAS,gBAAgB,QAA8C;AACtE,SAAO;AACR;AAEA,SAAS,wBACR,QACwB;AACxB,SAAO;AACR;AAEA,SAASC,kBAAiB,QAA0C;AACnE,SAAO;AACR;AAEA,SAASC,sBAAqB,QAA8C;AAC3E,SAAO;AACR;AAEA,SAAS,QAAQ,OAAsD;AACtE,SAAO,SAAS,IAAI,WAAW,CAAC;AACjC;AAEA,SAAS,cACR,OACsB;AACtB,MAAI,UAAU,QAAQ,UAAU,QAAW;AAC1C,WAAO;AAAA,EACR;AACA,SAAO,QAAQ,KAAK;AACrB;AAEA,SAAS,mBACR,OAC4B;AAC5B,MAAI,UAAU,QAAQ,UAAU,QAAW;AAC1C,WAAO;AAAA,EACR;AACA,SAAO,OAAO,UAAU,WAAW,OAAO,KAAK,IAAI;AACpD;AAEA,SAAS,WAAW,OAAgC;AACnD,SAAO,OAAO,UAAU,WAAW,OAAO,KAAK,IAAI;AACpD;AAEA,SAAS,iBAAiB,OAAuC;AAChE,SAAO;AAAA,IACN,KAAK,QAAQ,MAAM,GAAG;AAAA,IACtB,OAAO,QAAQ,MAAM,KAAK;AAAA,EAC3B;AACD;AAEA,SAAS,sBACR,SACsB;AACtB,SAAO;AAAA,IACN,IAAI,MAAM,QAAQ,GAAG;AAAA,IACrB,MAAM,MAAM,QAAQ,KAAK;AAAA,IACzB,MAAM,MAAM,QAAQ,QAAQ,KAAK,CAAC;AAAA,IAClC,WAAW,MAAM,QAAQ,UAAU;AAAA,IACnC,eAAe,MAAM,QAAQ,cAAc;AAAA,IAC3C,UAAU,OAAO,aAA+C;AAC/D,YAAM,SAAS,MAAM,QAAQ,SAAS,QAAQ,CAAC;AAAA,IAChD;AAAA,EACD;AACD;AAEA,SAAS,yBAAyB,OAAyB;AAC1D,MAAI,OAAO,UAAU,UAAU;AAC9B,WAAO,uBAAuB,KAAK,KAAK;AAAA,EACzC;AAEA,MAAI,iBAAiB,OAAO;AAC3B,UAAM,UAAU,uBAAuB,MAAM,OAAO;AACpD,QAAI,SAAS;AACZ,aAAO;AAAA,IACR;AAAA,EACD;AAEA,MACC,OAAO,UAAU,YACjB,UAAU,QACV,YAAY,SACZ,OAAO,MAAM,WAAW,UACvB;AACD,UAAM,UAAU,uBAAuB,MAAM,MAAM;AACnD,QAAI,SAAS;AACZ,aAAO;AAAA,IACR;AAAA,EACD;AAEA,SAAO;AACR;AAEA,eAAe,SAAY,QAAsC;AAChE,MAAI;AACH,WAAO,MAAM,OAAO;AAAA,EACrB,SAAS,OAAO;AACf,UAAM,yBAAyB,KAAK;AAAA,EACrC;AACD;AAEA,SAAS,aAAgB,QAAoB;AAC5C,MAAI;AACH,WAAO,OAAO;AAAA,EACf,SAAS,OAAO;AACf,UAAM,yBAAyB,KAAK;AAAA,EACrC;AACD;AAEA,SAAS,sBAAsBC,SAAuB;AACrD,QAAM,IAAI;AAAA,IACT;AAAA,IACA;AAAA,IACA,oCAAoCA,OAAM;AAAA,IAC1C;AAAA,MACC,UAAU;AAAA,QACT,SAAS;AAAA,QACT,QAAAA;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;AAEA,SAAS,OAA8B,QAAiB,MAAiB;AACxE,MACC,OAAO,WAAW,YAClB,WAAW,QACX,QAAQ,UACR,OAAO,OAAO,IAA2B,MAAM,YAC9C;AACD,WAAO,OAAO,IAA2B;AAAA,EAC1C;AACA,SAAO,sBAAsB,IAAI;AAClC;AAEA,SAAS,WAAc,QAAiB,SAAiB,MAAoB;AAC5E,SAAO,aAAa,MAAM,OAAO,QAAQ,IAAI,EAAE,MAAM,QAAQ,IAAI,CAAM;AACxE;AAEA,eAAe,gBACd,QACA,SACG,MACU;AACb,SAAO,MAAM;AAAA,IACZ,YAAa,MAAM,OAAO,QAAQ,IAAI,EAAE,MAAM,QAAQ,IAAI;AAAA,EAC3D;AACD;AAEA,SAAS,YAAe,QAAiB,MAAiB;AACzD,SAAO,WAAc,QAAQ,IAAI;AAClC;AAEO,IAAM,kBAAN,MAA6C;AAAA,EAC1C,OAAO;AAAA,EAEhB;AAAA,EACA,OAAO,oBAAI,QAA8C;AAAA,EAEzD,YAAY,UAAwB;AACnC,SAAK,YAAY;AAAA,EAClB;AAAA,EAEA,UAAU,KAA6C;AACtD,UAAM,UAAU,mBAAmB,GAAG;AACtC,QAAI,WAAW,KAAK,KAAK,IAAI,OAAO;AACpC,QAAI,CAAC,UAAU;AACd,iBAAW,WAA+B,SAAS,KAAK;AACxD,WAAK,KAAK,IAAI,SAAS,QAAQ;AAAA,IAChC;AACA,WAAO;AAAA,EACR;AAAA,EAEA,iBAAiC;AAChC,WAAO;AAAA,MAAa,MACnBF,kBAAiB,IAAI,KAAK,UAAU,aAAa,CAAC;AAAA,IACnD;AAAA,EACD;AAAA,EAEA,cACC,UACA,MACA,SACO;AACP;AAAA,MAAa,MACZ,eAAe,QAAQ,EAAE,SAAS,MAAM,cAAc,OAAO,CAAC;AAAA,IAC/D;AAAA,EACD;AAAA,EAEA,MAAM,cACL,UACA,QACgB;AAChB,UAAM,SAAS,MAAM,eAAe,QAAQ,EAAE,MAAM,MAAM,CAAC;AAAA,EAC5D;AAAA,EAEA,MAAM,iBAAiB,UAAyC;AAC/D,UAAM,SAAS,MAAM,eAAe,QAAQ,EAAE,SAAS,CAAC;AAAA,EACzD;AAAA,EAEA,MAAM,iBAAwD;AAC7D,WAAO;AAAA,MACN,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,IAAI,YAAY,EAAE;AAAA,QACvB,KAAK,UAAU;AAAA,UACd,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,SAAS;AAAA,QACV,CAAC;AAAA,MACF;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,wBACL,UACA,KACA,eACA,aACA,QACyC;AACzC,WAAO,MAAM;AAAA,MACZ,eAAe,QAAQ;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA,wBAAwB,WAAW;AAAA,MACnC;AAAA,IACD;AAAA,EACD;AAAA,EAEA,mBACC,WACA,QACqB;AACrB,WAAO;AAAA,MAAa,MACnBC;AAAA,QACC,IAAI,KAAK,UAAU,aAAa,WAAW,MAAM;AAAA,MAClD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,0BAAmD;AAClD,WAAO;AAAA,MACN,MACC,IAAI,KAAK,UAAU,kBAAkB;AAAA,IACvC;AAAA,EACD;AAAA,EAEA,yBAAyB,OAAyC;AACjE,WAAO,aAAa,MAAM,wBAAwB,KAAK,EAAE,QAAQ,CAAC;AAAA,EACnE;AAAA,EAEA,wBAAwB,OAAsC;AAC7D,iBAAa,MAAM,wBAAwB,KAAK,EAAE,OAAO,CAAC;AAAA,EAC3D;AAAA,EAEA,6BACC,OACA,UACO;AACP;AAAA,MAAa,MACZ,wBAAwB,KAAK,EAAE,YAAY,QAAQ;AAAA,IACpD;AAAA,EACD;AAAA,EAEA,WAAW,KAAuC;AACjD,WAAO;AAAA,MACN;AAAA,QACC,mBAAmB,GAAG;AAAA,QACtB;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,wBAAwB,KAA+B;AACtD,eAAW,mBAAmB,GAAG,GAAG,oBAAoB;AAAA,EACzD;AAAA,EAEA,sBAAsB,KAA+B;AACpD,eAAW,mBAAmB,GAAG,GAAG,kBAAkB;AAAA,EACvD;AAAA,EAEA,cACC,KACA,aACO;AACP;AAAA,MACC,mBAAmB,GAAG;AAAA,MACtB;AAAA,MACA,mBAAmB,WAAW;AAAA,IAC/B;AAAA,EACD;AAAA,EAEA,iBACC,KACA,MACO;AACP,eAAW,mBAAmB,GAAG,GAAG,eAAe,IAAI;AAAA,EACxD;AAAA,EAEA,MAAM,wBACL,KACA,MACgB;AAChB,UAAM;AAAA,MACL,mBAAmB,GAAG;AAAA,MACtB;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,uBAAuB,KAAmD;AACzE,WAAO,WAAW,mBAAmB,GAAG,GAAG,mBAAmB;AAAA,EAC/D;AAAA,EAEA,4BACC,KACA,OACA,mBACe;AACf,WAAO;AAAA,MACN;AAAA,QACC,mBAAmB,GAAG;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,6BACC,KACA,OACA,eACe;AACf,WAAO;AAAA,MACN;AAAA,QACC,mBAAmB,GAAG;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,yBACL,KACA,aACgB;AAChB,UAAM;AAAA,MACL,mBAAmB,GAAG;AAAA,MACtB;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,6BACC,KACA,QACO;AACP,eAAW,mBAAmB,GAAG,GAAG,2BAA2B,MAAM;AAAA,EACtE;AAAA,EAEA,mCAAmC,KAAmC;AACrE,WAAO;AAAA,MACN,mBAAmB,GAAG;AAAA,MACtB;AAAA,IACD;AAAA,EACD;AAAA,EAEA,4BAA4B,KAAuC;AAClE,WAAO,WAAW,mBAAmB,GAAG,GAAG,wBAAwB;AAAA,EACpE;AAAA,EAEA,MAAM,eACL,KACA,SACgB;AAChB,UAAM,gBAAgB,mBAAmB,GAAG,GAAG,aAAa,OAAO;AAAA,EACpE;AAAA,EAEA,QAAQ,KAAiC;AACxC,WAAO,WAAW,mBAAmB,GAAG,GAAG,SAAS;AAAA,EACrD;AAAA,EAEA,UAAU,KAAiC;AAC1C,WAAO,WAAW,mBAAmB,GAAG,GAAG,MAAM;AAAA,EAClD;AAAA,EAEA,SAAS,KAAmD;AAC3D,WAAO,WAAW,mBAAmB,GAAG,GAAG,KAAK;AAAA,EACjD;AAAA,EAEA,YAAY,KAAiC;AAC5C,WAAO,WAAW,mBAAmB,GAAG,GAAG,QAAQ;AAAA,EACpD;AAAA,EAEA,WAAW,KAA+B;AACzC,eAAW,mBAAmB,GAAG,GAAG,OAAO;AAAA,EAC5C;AAAA,EAEA,aAAa,KAA+B;AAC3C,eAAW,mBAAmB,GAAG,GAAG,SAAS;AAAA,EAC9C;AAAA,EAEA,iBAAiB,KAAsC;AACtD,WAAO,WAAW,mBAAmB,GAAG,GAAG,aAAa;AAAA,EACzD;AAAA,EAEA,WAAW,KAAuC;AACjD,WAAO,WAAW,mBAAmB,GAAG,GAAG,OAAO;AAAA,EACnD;AAAA,EAEA,MAAM,iBACL,KACA,QACA,SACsB;AACtB,WAAO,MAAM;AAAA,MACZ,mBAAmB,GAAG;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,eACC,KACA,MACA,MACO;AACP,eAAW,mBAAmB,GAAG,GAAG,aAAa,MAAM,IAAI;AAAA,EAC5D;AAAA,EAEA,eAAe,KAAyB,SAAiC;AACxE,eAAW,mBAAmB,GAAG,GAAG,aAAa,OAAO;AAAA,EACzD;AAAA,EAEA,MAAM,gCACL,KACmB;AACnB,WAAO,MAAM;AAAA,MACZ,mBAAmB,GAAG;AAAA,MACtB;AAAA,IACD;AAAA,EACD;AAAA,EAEA,eAAe,KAAyB,SAAiC;AACxE,UAAM,UAAU,mBAAmB,GAAG;AACtC,UAAM,WAAW,WAAmB,SAAS,gBAAgB;AAC7D,UAAM,iBAAiB,QAAQ,QAAQ,OAAO,EAC5C,QAAQ,MAAM;AACd,iBAAW,SAAS,gBAAgB,QAAQ;AAAA,IAC7C,CAAC,EACA,KAAK,MAAM,IAAI;AACjB,eAAW,SAAS,gBAAgB,cAAc;AAAA,EACnD;AAAA,EAEA,oBAAoB,KAAiC;AACpD,WAAO,WAAmB,mBAAmB,GAAG,GAAG,gBAAgB;AAAA,EACpE;AAAA,EAEA,kBAAkB,KAAyB,UAAwB;AAClE,eAAW,mBAAmB,GAAG,GAAG,gBAAgB,QAAQ;AAAA,EAC7D;AAAA,EAEA,kBACC,KACA,SACO;AACP,eAAW,mBAAmB,GAAG,GAAG,gBAAgB,OAAO;AAAA,EAC5D;AAAA,EAEA,kBAAkB,KAAiC;AAClD,WAAO,WAAW,mBAAmB,GAAG,GAAG,cAAc;AAAA,EAC1D;AAAA,EAEA,uBAAuB,KAA+B;AACrD,UAAM,eAAe,KAAK,kBAAkB,GAAG;AAC/C,eAAW,OAAO,OAAO,KAAK,YAAY,GAAG;AAC5C,aAAQ,aAAyC,GAAG;AAAA,IACrD;AAAA,EACD;AAAA,EAEA,uBAAuB,KAA+B;AACrD,eAAW,mBAAmB,GAAG,GAAG,mBAAmB;AAAA,EACxD;AAAA,EAEA,4BAA4B,KAAiC;AAC5D,WAAO,WAAW,mBAAmB,GAAG,GAAG,wBAAwB;AAAA,EACpE;AAAA,EAEA,0BAA0B,KAAyB,UAAwB;AAC1E,eAAW,mBAAmB,GAAG,GAAG,wBAAwB,QAAQ;AAAA,EACrE;AAAA,EAEA,MAAM,WACL,KACA,KAC+B;AAC/B,UAAM,KAAK,YAAY,mBAAmB,GAAG,GAAG,IAAI;AACpD,WAAO,cAAc,MAAM,gBAAgB,IAAI,OAAO,GAAG,CAAC;AAAA,EAC3D;AAAA,EAEA,MAAM,WACL,KACA,KACA,OACgB;AAChB,UAAM,KAAK,YAAY,mBAAmB,GAAG,GAAG,IAAI;AACpD,UAAM,gBAAgB,IAAI,OAAO,KAAK,KAAK;AAAA,EAC5C;AAAA,EAEA,MAAM,cACL,KACA,KACgB;AAChB,UAAM,KAAK,YAAY,mBAAmB,GAAG,GAAG,IAAI;AACpD,UAAM,gBAAgB,IAAI,UAAU,GAAG;AAAA,EACxC;AAAA,EAEA,MAAM,mBACL,KACA,OACA,KACgB;AAChB,UAAM,KAAK,YAAY,mBAAmB,GAAG,GAAG,IAAI;AACpD,UAAM,gBAAgB,IAAI,eAAe,OAAO,GAAG;AAAA,EACpD;AAAA,EAEA,MAAM,kBACL,KACA,QACA,SAC4B;AAC5B,UAAM,KAAK,YAAY,mBAAmB,GAAG,GAAG,IAAI;AACpD,UAAM,UAAU,MAAM;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AACA,WAAO,QAAQ,IAAI,gBAAgB;AAAA,EACpC;AAAA,EAEA,MAAM,iBACL,KACA,OACA,KACA,SAC4B;AAC5B,UAAM,KAAK,YAAY,mBAAmB,GAAG,GAAG,IAAI;AACpD,UAAM,UAAU,MAAM;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AACA,WAAO,QAAQ,IAAI,gBAAgB;AAAA,EACpC;AAAA,EAEA,MAAM,gBACL,KACA,MACkD;AAClD,UAAM,KAAK,YAAY,mBAAmB,GAAG,GAAG,IAAI;AACpD,UAAM,SAAS,MAAM,gBAEnB,IAAI,YAAY,IAAI;AACtB,WAAO,OAAO;AAAA,MAAI,CAAC,UAClB,UAAU,SAAY,SAAY,cAAc,KAAK;AAAA,IACtD;AAAA,EACD;AAAA,EAEA,MAAM,gBACL,KACA,SACgB;AAChB,UAAM,KAAK,YAAY,mBAAmB,GAAG,GAAG,IAAI;AACpD,UAAM,gBAAgB,IAAI,YAAY,OAAO;AAAA,EAC9C;AAAA,EAEA,MAAM,mBACL,KACA,MACgB;AAChB,UAAM,KAAK,YAAY,mBAAmB,GAAG,GAAG,IAAI;AACpD,UAAM,gBAAgB,IAAI,eAAe,IAAI;AAAA,EAC9C;AAAA,EAEA,MAAM,aACL,KACA,KACgC;AAChC,WAAO,MAAM,SAAS,MAAM,KAAK,UAAU,GAAG,EAAE,KAAK,GAAG,CAAC;AAAA,EAC1D;AAAA,EAEA,MAAM,gBACL,KACA,KACA,QACmC;AACnC,UAAM,SAAS,MAAM;AAAA,MAAS,MAC7B,KAAK,UAAU,GAAG,EAAE,QAAQ,KAAK,MAAM;AAAA,IACxC;AACA,WAAO,iCAAiC,MAAM;AAAA,EAC/C;AAAA,EAEA,MAAM,cACL,KACA,KACA,QACiC;AACjC,WAAO,MAAM,SAAS,MAAM,KAAK,UAAU,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;AAAA,EACnE;AAAA,EAEA,MAAM,YACL,KACA,KACA,QAC+B;AAC/B,WAAO,MAAM,SAAS,MAAM,KAAK,UAAU,GAAG,EAAE,IAAI,KAAK,MAAM,CAAC;AAAA,EACjE;AAAA,EAEA,gBAAgB,KAAyB;AA3rB1C;AA4rBE,aAAO,gBAAK,UAAU,GAAG,GAAE,YAApB,gCAAmC;AAAA,EAC3C;AAAA,EAEA,wBAAwB,KAAwC;AA/rBjE;AAgsBE,aAAO,gBAAK,UAAU,GAAG,GAAE,oBAApB,gCAA2C;AAAA,EACnD;AAAA,EAEA,MAAM,cAAc,KAAwC;AAC3D,UAAM,UAAU,mBAAmB,GAAG;AACtC,UAAM,WAAW,KAAK,KAAK,IAAI,OAAO;AACtC,QAAI,CAAC,UAAU;AACd;AAAA,IACD;AAEA,SAAK,KAAK,OAAO,OAAO;AACxB,UAAM,SAAS,MAAM,SAAS,MAAM,CAAC;AAAA,EACtC;AAAA,EAEA,MAAM,eACL,KACA,MACA,MAC+B;AAC/B,UAAME,SAAQ,YAAY,mBAAmB,GAAG,GAAG,OAAO;AAC1D,WAAO;AAAA,MACN,MAAM,gBAAgBA,QAAO,QAAQ,MAAM,IAAI;AAAA,IAChD;AAAA,EACD;AAAA,EAEA,MAAM,oBACL,KACA,SACA,QACiC;AACjC,UAAMA,SAAQ,YAAY,mBAAmB,GAAG,GAAG,OAAO;AAC1D,UAAM,WAAW,MAAM;AAAA,MACtBA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,wBAAwB,MAAM,IAAI;AAAA,IAC5C;AACA,WAAO,SAAS,IAAI,qBAAqB;AAAA,EAC1C;AAAA,EAEA,MAAM,uBACL,KACA,OACA,SACA,QAC+B;AAC/B,UAAMA,SAAQ,YAAY,mBAAmB,GAAG,GAAG,OAAO;AAC1D,WAAO;AAAA,MACN,MAAM;AAAA,QACLA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,wBAAwB,MAAM,IAAI;AAAA,MAC5C;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,gCACL,KACA,OACA,SACgB;AAChB,UAAMA,SAAQ,YAAY,mBAAmB,GAAG,GAAG,OAAO;AAC1D,UAAM,gBAAgBA,QAAO,yBAAyB,OAAO,OAAO;AAAA,EACrE;AAAA,EAEA,MAAM,yBACL,KACA,MACA,MACA,SACA,QAC+B;AAC/B,UAAMA,SAAQ,YAAY,mBAAmB,GAAG,GAAG,OAAO;AAC1D,WAAO;AAAA,MACN,MAAM;AAAA,QACLA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,wBAAwB,MAAM,IAAI;AAAA,MAC5C;AAAA,IACD;AAAA,EACD;AAAA,EAEA,uBACC,KACA,SACwB;AACxB,UAAMA,SAAQ,YAAY,mBAAmB,GAAG,GAAG,OAAO;AAC1D,WAAO;AAAA,MACNA;AAAA,MACA;AAAA,MACA;AAAA,IACD,EAAE,IAAI,qBAAqB;AAAA,EAC5B;AAAA,EAEA,kBAAkB,KAAiC;AAClD,UAAMA,SAAQ,YAAY,mBAAmB,GAAG,GAAG,OAAO;AAC1D,WAAO,WAAWA,QAAO,SAAS;AAAA,EACnC;AAAA,EAEA,MAAM,0BACL,KACwC;AACxC,UAAMA,SAAQ,YAAY,mBAAmB,GAAG,GAAG,OAAO;AAC1D,WAAO,MAAM,gBAAgBA,QAAO,iBAAiB;AAAA,EACtD;AAAA,EAEA,mBACC,KACA,YACA,YACA,MACO;AACP,UAAM,WAAW,YAAY,mBAAmB,GAAG,GAAG,UAAU;AAChE,eAAW,UAAU,SAAS,WAAW,UAAU,GAAG,YAAY,IAAI;AAAA,EACvE;AAAA,EAEA,gBACC,KACA,aACA,YACA,MACO;AACP,UAAM,WAAW,YAAY,mBAAmB,GAAG,GAAG,UAAU;AAChE,eAAW,UAAU,MAAM,WAAW,WAAW,GAAG,YAAY,IAAI;AAAA,EACrE;AAAA,EAEA,OAAO,MAA0B;AAChC,WAAO,WAAW,WAAW,IAAI,GAAG,IAAI;AAAA,EACzC;AAAA,EAEA,WAAW,MAAgC;AAC1C,WAAO,QAAQ,WAAW,WAAW,IAAI,GAAG,QAAQ,CAAC;AAAA,EACtD;AAAA,EAEA,UAAU,MAAgC;AACzC,WAAO,QAAQ,WAAW,WAAW,IAAI,GAAG,OAAO,CAAC;AAAA,EACrD;AAAA,EAEA,aAAa,MAAkB,OAA2B;AACzD,eAAW,WAAW,IAAI,GAAG,YAAY,KAAK;AAAA,EAC/C;AAAA,EAEA,mBAAmB,MAA2B;AAC7C,WAAO,WAAW,WAAW,IAAI,GAAG,gBAAgB;AAAA,EACrD;AAAA,EAEA,SAAS,MAAkB,MAAc,MAA0B;AAClE,eAAW,WAAW,IAAI,GAAG,QAAQ,MAAM,IAAI;AAAA,EAChD;AAAA,EAEA,MAAM,eACL,MACA,QACgB;AAChB,UAAM,gBAAgB,WAAW,IAAI,GAAG,cAAc,MAAM;AAAA,EAC7D;AAAA,EAEA,cACC,IACA,MACA,QACO;AACP,eAAW,gBAAgB,EAAE,GAAG,QAAQ,MAAM,MAAM;AAAA,EACrD;AAAA,EAEA,MAAM,eACL,IACA,MACA,QACgB;AAChB,UAAM,gBAAgB,gBAAgB,EAAE,GAAG,SAAS,MAAM,MAAM;AAAA,EACjE;AAAA,EAEA,0BACC,IACA,UACO;AACP;AAAA,MACC,gBAAgB,EAAE;AAAA,MAClB;AAAA,MACA,CAACC,WAAiC;AACjC,YAAIA,OAAM,SAAS,aAAaA,OAAM,QAAQ;AAC7C,mBAAS;AAAA,YACR,GAAGA;AAAA,YACH,MAAM,QAAQA,OAAM,IAAiC;AAAA,UACtD,CAAC;AACD;AAAA,QACD;AACA,iBAASA,MAAK;AAAA,MACf;AAAA,IACD;AAAA,EACD;AACD;AAIA,eAAsB,gBAAgB,QAGnC;AACF,QAAM,YACL,iCAAQ,aACP,MAAM,OAAO,CAAC,aAAa,eAAe,EAAE,KAAK,GAAG;AACtD,QAAM,SAAS,QAAQ,iCAAQ,SAAS;AACxC,SAAO;AAAA,IACN;AAAA,IACA,SAAS,IAAI,gBAAgB,QAAQ;AAAA,EACtC;AACD;;;ALn0BA,IAAM,cAAc,IAAI,YAAY;AACpC,IAAM,cAAc,IAAI,YAAY;AAmBpC,IAAM,wBAAwC;AAAA,EAC7C,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,YAAY;AACb;AAEA,SAAS,iBAAiB,KAAa,OAAe;AACrD,MAAI,OAAO,YAAY,YAAa;AACpC,MAAI;AACH,YAAQ,IAAI,GAAG,IAAI;AAAA,EACpB,QAAQ;AAAA,EAER;AACD;AAEO,SAAS,oBAAqC;AArHrD;AAsHC,QAAM,cAAc;AAQpB,MACC,YAAY,SAAS,UACrB,YAAY,QAAQ,UACpB,SAAO,uBAAY,YAAZ,mBAAqB,aAArB,mBAA+B,UAAS,UAC9C;AACD,WAAO;AAAA,EACR;AAEA,SAAO;AACR;AAEO,SAAS,mBACf,SACc;AACd,SAAO,WAAW;AACnB;AAEA,SAAS,kBAAkB,SAA2C;AACrE,UAAQ,QAAQ,MAAM;AAAA,IACrB,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,EACT;AAEA,QAAM,IAAI;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACC,QAAQ;AAAA,MACR,YAAY;AAAA,IACb;AAAA,EACD;AACD;AAEA,eAAsB,gBACrB,QACA,UAA0B,uBACH;AACvB,MAAI,QAAQ,WAAW,MAAM,aAAa;AACzC,YAAQ,MAAM,QAAQ,SAAS,OAAO,IAAI,GAAG;AAAA,EAC9C;AAEA,MAAI;AACH,YAAQ,MAAM,QAAQ,WAAW,GAAG;AAAA,EACrC,QAAQ;AACP,YAAQ,MAAM,QAAQ,SAAS,OAAO,IAAI,GAAG;AAAA,EAC9C;AACD;AAEA,eAAsB,sBACrB,QACA,UAA0B,uBACH;AACvB,QAAM,YAAY,mBAAmB,OAAO,OAAO;AAEnD,MAAI,cAAc,UAAU;AAC3B,YAAQ,MAAM,QAAQ,WAAW,GAAG;AAAA,EACrC;AAEA,MAAI,cAAc,QAAQ;AACzB,YAAQ,MAAM,QAAQ,SAAS,OAAO,IAAI,GAAG;AAAA,EAC9C;AAEA,SAAO,gBAAgB,QAAQ,OAAO;AACvC;AAEA,SAAS,uBACR,QAC4B;AApM7B;AAqMC,WAAO,YAAO,WAAP,mBAAe,cAAW,YAAO,SAAP,mBAAa;AAC/C;AAEO,SAAS,8BACf,QACA,aACiB;AA3MlB;AA4MC,MAAI,gBAAgB,UAAU;AAC7B,WAAO;AAAA,EACR;AAEA,MAAI,uBAAuB,MAAM,MAAM,SAAS;AAC/C,UAAM,IAAI;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACC,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,UAAU,EAAE,SAAS,QAAQ,eAAe,QAAQ;AAAA,MACrD;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AAAA,IACN,GAAG;AAAA,IACH,QAAQ;AAAA,MACP,GAAG,OAAO;AAAA,MACV,SAAS;AAAA,IACV;AAAA,IACA,MAAM;AAAA,MACL,GAAG,OAAO;AAAA,MACV,WAAS,YAAO,SAAP,mBAAa,YAAW;AAAA,MACjC,eAAe;AAAA,IAChB;AAAA,EACD;AACD;AAEO,SAAS,uBACf,QACA,SACiB;AACjB,SAAO,8BAA8B,QAAQ,kBAAkB,OAAO,CAAC;AACxE;AAyBA,SAAS,sBACR,SACA,KAC0B;AAC1B,QAAM,eAAe;AAAA,IAAe,MACnC,QAAQ,kBAAkB,GAAG;AAAA,EAC9B;AACA,MAAI,CAAC,aAAa,aAAa;AAC9B,iBAAa,cAAc,CAAC;AAAA,EAC7B;AACA,MAAI,CAAC,aAAa,cAAc;AAC/B,iBAAa,eAAe;AAAA,MAC3B,OAAO;AAAA,MACP,mBAAmB;AAAA,MACnB,YAAY,oBAAI,IAAI;AAAA,IACrB;AAAA,EACD;AACA,SAAO;AACR;AAEA,SAAS,sBACR,SACA,KAC0B;AAC1B,QAAM,eAAe,sBAAsB,SAAS,GAAG,EAAE;AACzD,MAAI,CAAC,cAAc;AAClB,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC3D;AACA,SAAO;AACR;AAEA,SAASC,eAAc,OAA4C;AAClE,SACC,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,OAAO,MAAM,SAAS;AAExB;AAEA,SAAS,0BACR,SACA,KACA,MACyB;AACzB,QAAM,eAAe,sBAAsB,SAAS,GAAG;AACvD,QAAM,SAAS,eAAe,MAAM,QAAQ,OAAO,IAAI,CAAC;AACxD,MAAI,YAAY,aAAa,WAAW,IAAI,MAAM;AAClD,MAAI,CAAC,WAAW;AACf,gBAAY;AAAA,MACX,OAAO;AAAA,IACR;AACA,iBAAa,WAAW,IAAI,QAAQ,SAAS;AAAA,EAC9C;AACA,SAAO;AACR;AAEA,SAAS,8BAA0C;AAClD,SAAO,IAAI;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;AAEA,SAAS,6BAAyC;AACjD,SAAO,IAAI;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA,EAAE,QAAQ,KAAK;AAAA,EAChB;AACD;AAEA,SAAS,uBAAmC;AAC3C,SAAO,IAAI;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA,EAAE,QAAQ,KAAK;AAAA,EAChB;AACD;AAEA,SAAS,iCAA6C;AACrD,SAAO,IAAI;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA,EAAE,QAAQ,KAAK;AAAA,EAChB;AACD;AAEA,SAAS,mCAA+C;AACvD,SAAO,IAAI;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA,EAAE,QAAQ,KAAK;AAAA,EAChB;AACD;AAEA,SAAS,qBAAqB,SAAsB,KAAyB;AAC5E,QAAM,cAAc,sBAAsB,SAAS,GAAG,EAAE;AACxD,MAAI,CAAC,aAAa;AACjB,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC1D;AACA,SAAO;AACR;AAEA,SAAS,2BACR,SACA,KACC;AACD,QAAM,OAAO,qBAAqB,SAAS,GAAG;AAC9C,MAAI,CAAC,KAAK,mBAAmB;AAC5B,SAAK,oBAAoB,IAAI,QAAc,CAAC,YAAY;AACvD,WAAK,iBAAiB;AAAA,IACvB,CAAC;AAAA,EACF;AACD;AAEA,SAAS,qBAAqB,SAAsB,KAAyB;AAC5E,QAAM,OAAO,sBAAsB,SAAS,GAAG,EAAE;AACjD,MAAI,EAAC,6BAAM,iBAAgB;AAC1B;AAAA,EACD;AAEA,OAAK,eAAe;AACpB,OAAK,iBAAiB;AACtB,OAAK,oBAAoB;AAC1B;AAEA,SAAS,wBACR,SACA,KACC;AACD,iBAAe,MAAM,QAAQ,uBAAuB,GAAG,CAAC;AACzD;AAEA,eAAe,+BACd,SACA,KACgB;AAChB,QAAM,QAAQ,gCAAgC,GAAG;AACjD,QAAM,0BAA0B,SAAS,GAAG;AAC5C,QAAM,uBAAuB,SAAS,GAAG;AACzC,0BAAwB,SAAS,GAAG;AACrC;AAEA,SAAS,uBACR,SACA,KAC4B;AAC5B,QAAM,eAAe,sBAAsB,SAAS,GAAG;AACvD,QAAM,WAAW,aAAa;AAC9B,MAAI,CAAC,UAAU;AACd;AAAA,EACD;AAEA,eAAa,MAAM;AACnB,SAAO,SAAS,MAAM;AACvB;AAEA,eAAe,0BACd,SACA,KACgB;AAChB,QAAM,eAAe,sBAAsB,SAAS,GAAG;AACvD,QAAM,QAAQ,aAAa;AAC3B,MAAI,CAAC,OAAO;AACX;AAAA,EACD;AAEA,eAAa,iBAAiB;AAE9B,MACC,MAAM,UACN,OAAO,MAAM,WAAW,YACxB,WAAW,MAAM,UACjB,OAAO,MAAM,OAAO,UAAU,YAC7B;AACD,UAAM,MAAM,OAAO,MAAM;AAAA,EAC1B;AACD;AAEA,SAAS,6BACR,SACA,KAC0C;AAC1C,QAAM,eAAe,sBAAsB,SAAS,GAAG;AACvD,QAAM,iBAAiB,aAAa;AACpC,MAAI,gBAAgB;AACnB,WAAO;AAAA,EACR;AAEA,QAAM,WAAW,qBAAqB;AAAA,IACrC,MAAM,CAAC,QAAQ,QAAQ,aAAa,KAAK,GAAG;AAAA,IAC5C,SAAS,CAAC,KAAK,WAAW,QAAQ,gBAAgB,KAAK,KAAK,MAAM;AAAA,IAClE,OAAO,CAAC,KAAK,WAAW,QAAQ,cAAc,KAAK,KAAK,MAAM;AAAA,IAC9D,KAAK,CAAC,KAAK,WAAW,QAAQ,YAAY,KAAK,KAAK,MAAM;AAAA,IAC1D,SAAS,MAAM,QAAQ,gBAAgB,GAAG;AAAA,IAC1C,iBAAiB,MAAM,QAAQ,wBAAwB,GAAG;AAAA,IAC1D,OAAO,MAAM,QAAQ,cAAc,GAAG;AAAA,EACvC,CAAC;AACD,eAAa,MAAM;AACnB,SAAO;AACR;AAEA,SAAS,eACR,OACe;AACf,MAAI,OAAO,UAAU,UAAU;AAC9B,WAAO,YAAY,OAAO,KAAK;AAAA,EAChC;AACA,MAAI,iBAAiB,YAAY;AAChC,WAAO;AAAA,EACR;AACA,SAAO,IAAI,WAAW,KAAK;AAC5B;AAEA,SAAS,8BAA8B,OAAsC;AAC5E,SAAO,IAAI,WAAW,MAAM,QAAQ,MAAM,YAAY,MAAM,UAAU;AACvE;AAEA,SAAS,0BAA0B,OAAkC;AACpE,SAAO,MAAM,OAAO;AAAA,IACnB,MAAM;AAAA,IACN,MAAM,aAAa,MAAM;AAAA,EAC1B;AACD;AA6BA,SAAS,kBACR,KACA,SACwB;AACxB,QAAM,kBAAkB,WAAW;AACnC,UAAQ,iBAAiB;AAAA,IACxB,KAAK;AACJ,aAAO,YAAY,OAAO,GAAG;AAAA,IAC9B,KAAK;AACJ,aAAO;AAAA,IACR;AACC,YAAM,IAAI,UAAU,qBAAqB;AAAA,EAC3C;AACD;AAEA,SAAS,sBACR,KACA,SACa;AACb,MAAI,eAAe,YAAY;AAC9B,WAAO;AAAA,EACR;AACA,QAAM,kBAAkB,WAAW;AACnC,MAAI,oBAAoB,UAAU;AACjC,UAAM,IAAI,UAAU,8CAA8C;AAAA,EACnE;AACA,SAAO,YAAY,OAAO,GAAG;AAC9B;AAEA,SAAS,oBACR,OACA,SAC0B;AAC1B,QAAM,QAAO,mCAAS,SAAQ;AAC9B,UAAQ,MAAM;AAAA,IACb,KAAK;AACJ,aAAO,YAAY,OAAO,KAAK;AAAA,IAChC,KAAK,eAAe;AACnB,YAAM,OAAO,IAAI,WAAW,MAAM,UAAU;AAC5C,WAAK,IAAI,KAAK;AACd,aAAO,KAAK;AAAA,IACb;AAAA,IACA,KAAK;AACJ,aAAO;AAAA,IACR;AACC,YAAM,IAAI,UAAU,uBAAuB;AAAA,EAC7C;AACD;AAEA,eAAe,gBAAgE;AAC9E,SAAO,OAAO,CAAC,aAAa,YAAY,EAAE,KAAK,GAAG;AACnD;AAEA,SAAS,YAAe,OAAgC;AACvD,MAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AACjC,WAAO;AAAA,EACR;AAEA,SAAO,qBAAqB,KAAK;AAClC;AAEA,SAAS,YAAY,OAA8B;AAClD,SAAO,iBAAiB,KAAK;AAC9B;AAEA,SAAS,kBAAqB,OAAgB,SAAe;AAC5D,MAAI,UAAU,QAAQ,UAAU,QAAW;AAC1C,UAAM;AAAA,EACP;AAEA,SAAO;AACR;AAEA,SAAS,2BAA2B,OAAyB;AAC5D,MAAI,OAAO,UAAU,UAAU;AAC9B,WAAO,uBAAuB,KAAK,KAAK;AAAA,EACzC;AAEA,MAAI,iBAAiB,OAAO;AAC3B,UAAM,UAAU,uBAAuB,MAAM,OAAO;AACpD,QAAI,SAAS;AACZ,aAAO;AAAA,IACR;AAAA,EACD;AAEA,MACC,OAAO,UAAU,YACjB,UAAU,QACV,YAAY,SACZ,OAAO,MAAM,WAAW,UACvB;AACD,UAAM,UAAU,uBAAuB,MAAM,MAAM;AACnD,QAAI,SAAS;AACZ,aAAO;AAAA,IACR;AAAA,EACD;AAEA,SAAO;AACR;AAEA,SAAS,wBACR,OACuC;AACvC,MAAI,iBAAiB,YAAY;AAChC,WAAO;AAAA,EACR;AAEA,SACC,iBAAiB,KAAK,KACtB,YAAY,UACX,MAAM,WAAW,gBAAgB,MAAM,WAAW;AAErD;AAEA,SAAS,0BAA0B,OAAuB;AACzD,QAAM,kBAAkB,wBAAwB,KAAK,IAClD,QACA,iBAAiB,OAAO,IAAI;AAE/B,QAAM,cAAc,IAAI,MAAM,uBAAuB,eAAe,GAAG;AAAA,IACtE,OAAO,iBAAiB,QAAQ,QAAQ;AAAA,EACzC,CAAC;AACD,SAAO,OAAO,OAAO,aAAa;AAAA,IACjC,OAAO,gBAAgB;AAAA,IACvB,MAAM,gBAAgB;AAAA,IACtB,UAAU,gBAAgB;AAAA,EAC3B,CAAC;AACF;AAEA,eAAe,WAAc,QAAsC;AAClE,MAAI;AACH,WAAO,MAAM,OAAO;AAAA,EACrB,SAAS,OAAO;AACf,UAAM,2BAA2B,KAAK;AAAA,EACvC;AACD;AAEA,SAAS,eAAkB,QAAoB;AAC9C,MAAI;AACH,WAAO,OAAO;AAAA,EACf,SAAS,OAAO;AACf,UAAM,2BAA2B,KAAK;AAAA,EACvC;AACD;AAEA,SAAS,oBAA6D;AACrE,SAAO,OAAO,OAAO,IAAI,MAAM,eAAe,GAAG;AAAA,IAChD,OAAO;AAAA,IACP,MAAM;AAAA,EACP,CAAC;AACF;AAMA,SAAS,8BAA8B,OAAyB;AAC/D,QAAM,WAAW,iBAAiB,aAAa,MAAM,WAAW;AAChE,QAAM,gBACL,YAAY,OAAO,aAAa,YAAY,WAAW,WACpD,SAAS,QACT;AACJ,SACC,iBAAiB,cACjB,MAAM,UAAU,UAChB,MAAM,SAAS,uBACf,OAAO,kBAAkB,YACzB,qDAAqD,KAAK,aAAa;AAEzE;AAEA,eAAe,8BACd,SACA,QAIE;AACF,MAAI,CAAC,QAAQ;AACZ,WAAO,CAAC;AAAA,EACT;AAEA,QAAM,QAAQ,QAAQ,wBAAwB;AAE9C,MAAI,OAAO,SAAS;AACnB,YAAQ,wBAAwB,KAAK;AACrC,WAAO,EAAE,MAAM;AAAA,EAChB;AAEA,QAAM,QAAQ,MAAM,QAAQ,wBAAwB,KAAK;AACzD,SAAO,iBAAiB,SAAS,OAAO,EAAE,MAAM,KAAK,CAAC;AACtD,SAAO;AAAA,IACN;AAAA,IACA,SAAS,MAAM,OAAO,oBAAoB,SAAS,KAAK;AAAA,EACzD;AACD;AAEA,SAAS,mBAAmB,MAA0C;AACrE,MAAI,SAAS,MAAM;AAClB,WAAO;AAAA,EACR;AAEA,MAAI;AACH,WAAO,iBAAiB,IAAI,WAAW,IAAI,CAAC;AAAA,EAC7C,QAAQ;AACP,WAAO;AAAA,EACR;AACD;AAEA,SAAS,0BACR,UASC;AACD,SAAO,SAAS,IAAI,CAAC,YAAY;AAChC,QAAI,QAAQ,QAAQ,qBAAqB;AACxC,aAAO;AAAA,QACN,KAAK,QAAQ;AAAA,QACb,KAAK,QAAQ;AAAA,MACd;AAAA,IACD;AAEA,WAAO;AAAA,MACN,KAAK,QAAQ;AAAA,MACb,KAAK;AAAA,QACJ,MAAM,QAAQ,IAAI;AAAA,QAClB,WAAW,QAAQ,IAAI;AAAA,MACxB;AAAA,IACD;AAAA,EACD,CAAC;AACF;AAEA,SAAS,0BACR,UAsBC;AACD,SAAO,OAAO;AAAA,IACb,MAAM,KAAK,SAAS,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,MAAM,MAAM;AAAA,MACtD;AAAA,MACA;AAAA,QACC,QAAQ,OAAO;AAAA,QACf,QAAQ,mBAAmB,OAAO,MAAM;AAAA,QACxC,OAAO,OAAO;AAAA,MACf;AAAA,IACD,CAAC;AAAA,EACF;AACD;AAEA,SAAS,2BACR,MAoDI;AACJ,UAAQ,KAAK,KAAK;AAAA,IACjB,KAAK;AACJ,aAAO;AAAA,QACN,KAAK,KAAK;AAAA,QACV,KAAK;AAAA,UACJ,QAAQ,mBAAmB,KAAK,IAAI,MAAM;AAAA,UAC1C,OAAO,KAAK,IAAI;AAAA,QACjB;AAAA,MACD;AAAA,IACD,KAAK;AACJ,aAAO;AAAA,QACN,KAAK,KAAK;AAAA,QACV,KAAK;AAAA,UACJ,OAAO,mBAAmB,KAAK,IAAI,KAAK;AAAA,UACxC,WAAW,KAAK,IAAI;AAAA,UACpB,QAAQ,mBAAmB,KAAK,IAAI,MAAM;AAAA,QAC3C;AAAA,MACD;AAAA,IACD,KAAK;AACJ,aAAO;AAAA,QACN,KAAK,KAAK;AAAA,QACV,KAAK;AAAA,UACJ,UAAU,OAAO,KAAK,IAAI,QAAQ;AAAA,UAClC,OAAO,KAAK,IAAI;AAAA,QACjB;AAAA,MACD;AAAA,IACD,KAAK;AACJ,aAAO;AAAA,QACN,KAAK,KAAK;AAAA,QACV,KAAK;AAAA,UACJ,MAAM,KAAK,IAAI;AAAA,UACf,aAAa,mBAAmB,KAAK,IAAI,WAAW;AAAA,QACrD;AAAA,MACD;AAAA,IACD,KAAK;AACJ,aAAO;AAAA,QACN,KAAK,KAAK;AAAA,QACV,KAAK;AAAA,UACJ,MAAM,KAAK,IAAI;AAAA,QAChB;AAAA,MACD;AAAA,IACD,KAAK;AACJ,aAAO;AAAA,QACN,KAAK,KAAK;AAAA,QACV,KAAK;AAAA,UACJ,UAAU,0BAA0B,KAAK,IAAI,QAAQ;AAAA,QACtD;AAAA,MACD;AAAA,IACD,KAAK;AACJ,aAAO;AAAA,QACN,KAAK,KAAK;AAAA,QACV,KAAK;AAAA,UACJ,QAAQ,KAAK,IAAI;AAAA,UACjB,UAAU,0BAA0B,KAAK,IAAI,QAAQ;AAAA,QACtD;AAAA,MACD;AAAA,IACD,KAAK;AACJ,aAAO;AAAA,QACN,KAAK,KAAK;AAAA,QACV,KAAK;AAAA,UACJ,cAAc,KAAK,IAAI;AAAA,UACvB,cAAc,KAAK,IAAI;AAAA,QACxB;AAAA,MACD;AAAA,EACF;AACD;AAEA,SAAS,gCAAgC,MA0BhC;AACR,MAAI,SAAS,MAAM;AAClB,WAAO;AAAA,EACR;AAEA,QAAM,UAAU,+BAA+B,IAAI;AAEnD,SAAO;AAAA,IACN,cAAc,CAAC,GAAG,QAAQ,YAAY;AAAA,IACtC,SAAS,QAAQ,QAAQ,IAAI,CAAC,WAAW;AAAA,MACxC,IAAI,MAAM;AAAA,MACV,UAAU,0BAA0B,MAAM,QAAQ;AAAA,MAClD,MAAM,2BAA2B,MAAM,IAAI;AAAA,IAC5C,EAAE;AAAA,IACF,eAAe,OAAO;AAAA,MACrB,MAAM,KAAK,QAAQ,cAAc,QAAQ,CAAC,EAAE;AAAA,QAC3C,CAAC,CAAC,SAAS,IAAI,MAAM;AAAA,UACpB;AAAA,UACA;AAAA,YACC,QAAQ,KAAK;AAAA,YACb,OAAO,KAAK;AAAA,YACZ,UAAU,KAAK;AAAA,YACf,eAAe,OAAO,KAAK,aAAa;AAAA,YACxC,WAAW,OAAO,KAAK,SAAS;AAAA,YAChC,aACC,KAAK,gBAAgB,OAClB,OACA,OAAO,KAAK,WAAW;AAAA,YAC3B,qBACC,KAAK,wBAAwB,OAC1B,OACA,OAAO,KAAK,mBAAmB;AAAA,YACnC,eAAe,KAAK;AAAA,UACrB;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;AAEA,SAAS,qBAAwB,OAAa;AAC7C,SAAO,KAAK;AAAA,IACX,KAAK;AAAA,MAAU;AAAA,MAAO,CAAC,MAAM,gBAC5B,OAAO,gBAAgB,WACpB,OAAO,WAAW,IAClB,uBAAuB,aACtB,MAAM,KAAK,WAAW,IACtB;AAAA,IACL;AAAA,EACD;AACD;AAEA,SAAS,SAAY,OAAa;AACjC,SAAO,qBAAqB,KAAK;AAClC;AAEA,SAAS,gCACR,YAC0B;AAC1B,QAAM,aAAsC,CAAC;AAC7C,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AACtD,QAAI,SAAS,KAAK,GAAG,GAAG;AACvB,iBAAW,GAAG,IAAI;AAClB;AAAA,IACD;AAEA,eAAW,IAAI,GAAG,EAAE,IAAI;AACxB,eAAW,IAAI,GAAG,EAAE,IAAI;AACxB,eAAW,IAAI,GAAG,EAAE,IAAI;AAAA,EACzB;AACA,SAAO;AACR;AAEA,SAAS,UAAU,QAAiD;AACnE,MAAI,MAAM,QAAQ,MAAM,GAAG;AAC1B,WAAO;AAAA,EACR;AACA,MACC,UACA,OAAO,WAAW,YAClB,aAAa,UACb,UAAU,UACV,MAAM,QAAS,OAAgC,OAAO,KACtD,MAAM,QAAS,OAA6B,IAAI,GAC/C;AACD,UAAM,UAAW,OAAiC;AAClD,YAAS,OAAiC,QAAQ,CAAC,GAAG;AAAA,MAAI,CAAC,QAC1D,OAAO;AAAA,QACN,QAAQ,IAAI,CAAC,QAAQ,UAAU,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC;AAAA,MACpD;AAAA,IACD;AAAA,EACD;AACA,SAAO,CAAC;AACT;AAEA,SAAS,mBACR,UACqC;AACrC,SAAO,UAAU,SAAe;AAC/B,QAAI;AACH,aAAO,MAAM,SAAS,GAAG,IAAI;AAAA,IAC9B,SAAS,OAAO;AACf,YAAM,0BAA0B,KAAK;AAAA,IACtC;AAAA,EACD;AACD;AAEA,SAAS,WAAW,OAAwC;AAC3D,QAAM,UAAU,YAAqB,KAAK;AAC1C,SAAO,MAAM,QAAQ,OAAO,IACzB,UACA,YAAY,SACX,CAAC,IACD,CAAC,OAAO;AACb;AAEA,SAAS,wBACR,OACA,QACA,cACI;AACJ,MAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACxC,WAAO;AAAA,EACR;AAEA,QAAM,UAAU,oBAAI,QAAwB;AAC5C,QAAM,OAAO,CAAC,WAA2B;AACxC,UAAM,SAAS,QAAQ,IAAI,MAAM;AACjC,QAAI,QAAQ;AACX,aAAO;AAAA,IACR;AAEA,UAAM,QAAQ,IAAI,MAAM,QAAQ;AAAA,MAC/B,IAAI,aAAa,UAAU,UAAU;AACpC,cAAM,SAAS,QAAQ,IAAI,aAAa,UAAU,QAAQ;AAC1D,eAAO,UAAU,OAAO,WAAW,WAChC,KAAK,MAAgB,IACrB;AAAA,MACJ;AAAA,MACA,IAAI,aAAa,UAAU,WAAW,UAAU;AAC/C;AACA,cAAM,UAAU,QAAQ;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD;AACA,eAAO,KAAK;AACZ,eAAO;AAAA,MACR;AAAA,MACA,eAAe,aAAa,UAAU;AACrC;AACA,cAAM,UAAU,QAAQ,eAAe,aAAa,QAAQ;AAC5D,eAAO,KAAK;AACZ,eAAO;AAAA,MACR;AAAA,IACD,CAAC;AAED,YAAQ,IAAI,QAAQ,KAAK;AACzB,WAAO;AAAA,EACR;AAEA,SAAO,KAAK,KAAe;AAC5B;AAEA,SAAS,aAAa,MAKV;AACX,QAAM,MAAM,KAAK,IAAI,WAAW,MAAM,IACnC,KAAK,MACL,IAAI,IAAI,KAAK,KAAK,kBAAkB,EAAE,SAAS;AAClD,QAAM,OACL,KAAK,QAAQ,KAAK,KAAK,SAAS,IAC7B,0BAA0B,KAAK,IAAI,IACnC;AACJ,SAAO,IAAI,QAAQ,KAAK;AAAA,IACvB,QAAQ,KAAK;AAAA,IACb,SAAS,KAAK;AAAA,IACd;AAAA,EACD,CAAC;AACF;AAEA,eAAe,sBACd,UAC+B;AAC/B,QAAM,UAAU,OAAO,YAAY,SAAS,QAAQ,QAAQ,CAAC;AAC7D,QAAM,OAAO,IAAI,WAAW,MAAM,SAAS,YAAY,CAAC;AACxD,SAAO;AAAA,IACN,QAAQ,SAAS;AAAA,IACjB;AAAA,IACA;AAAA,EACD;AACD;AAEA,SAAS,WACR,UAKW;AACX,SAAO,SAAS;AAAA,IAAI,CAAC,YACpB,QAAQ,SAAS,WACd,OAAO,QAAQ,eAAe,CAAC,IAC9B,QAAQ,eAAe;AAAA,EAC5B;AACD;AAEA,IAAM,oBAAN,MAAwB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YACC,SACA,MACA,UAAkC,CAAC,GACnC,KACA,yBACC;AACD,SAAK,WAAW;AAChB,SAAK,QAAQ;AACb,SAAK,WAAW;AAChB,SAAK,OAAO;AACZ,SAAK,2BAA2B;AAChC,IACC,KAGC,yBAAyB,IAAI;AAAA,MAC9B,cAAc;AAAA,MACd,IAAI,QAAQ;AACX,eAAO,SAAS;AAAA,MACjB;AAAA,IACD;AACA,UAAM,WAAW;AAAA,EAClB;AAAA,EAEA,IAAI,KAAa;AAChB,WAAO,KAAK,SAAS,OAAO,KAAK,KAAK;AAAA,EACvC;AAAA,EAEA,IAAI,SAAkB;AACrB,WAAO;AAAA,MACN,KAAK,SAAS;AAAA,MACd,YAAY,KAAK,SAAS,WAAW,KAAK,KAAK,CAAC;AAAA,IACjD;AAAA,EACD;AAAA,EAEA,IAAI,QAAiB;AACpB,UAAM,YAAY,KAAK,WAAW;AAClC,WAAO,wBAAwB,WAAW,CAAC,cAAc;AACxD,WAAK,YAAY,WAAW,EAAE,aAAa,KAAK,CAAC;AAAA,IAClD,CAAC;AAAA,EACF;AAAA,EAEA,IAAI,MAAM,OAAgB;AACzB,SAAK,YAAY,OAAO,EAAE,aAAa,KAAK,CAAC;AAAA,EAC9C;AAAA,EAEA,gBAAgB,OAAsB;AACrC,SAAK,YAAY,OAAO,EAAE,aAAa,MAAM,CAAC;AAAA,EAC/C;AAAA,EAEA,IAAI,iBAA0B;AAC7B,WAAO;AAAA,MAAe,MACrB,KAAK,SAAS,mBAAmB,KAAK,KAAK;AAAA,IAC5C;AAAA,EACD;AAAA,EAEA,KAAK,SAAiB,MAAuB;AAC5C,UAAM,gBAAgB;AAAA,MACrB,KAAK,SAAS;AAAA,MACd;AAAA,MACA;AAAA,IACD;AACA;AAAA,MAAe,MACd,KAAK,SAAS;AAAA,QACb,KAAK;AAAA,QACL;AAAA,QACA,YAAY,aAAa;AAAA,MAC1B;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,WAAW,QAAgC;AAltClD;AAmtCE,UAAM,SAAS,KAAK;AACpB,UAAM;AAAA,MAAW,MAChB,KAAK,SAAS,eAAe,KAAK,OAAO,MAAM;AAAA,IAChD;AACA,QAAI,KAAK,gBAAgB;AACxB,iBAAK,6BAAL,8BAAgC;AAAA,IACjC;AAAA,EACD;AAAA,EAEA,aAAsB;AACrB,QAAI,CAAC,KAAK,MAAM;AACf,aAAO,YAAY,KAAK,SAAS,UAAU,KAAK,KAAK,CAAC;AAAA,IACvD;AAEA,UAAM,YAAY;AAAA,MACjB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACN;AACA,QAAI,UAAU,UAAU,QAAW;AAClC,gBAAU,QAAQ,YAAY,KAAK,SAAS,UAAU,KAAK,KAAK,CAAC;AAAA,IAClE;AACA,WAAO,UAAU;AAAA,EAClB;AAAA,EAEA,YACC,OACA,SAGO;AACP,UAAM,UAAU,YAAY,KAAK;AACjC,QAAI,CAAC,KAAK,MAAM;AACf,WAAK,SAAS,aAAa,KAAK,OAAO,OAAO;AAC9C;AAAA,IACD;AAEA,UAAM,YAAY;AAAA,MACjB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACN;AACA,cAAU,QAAQ;AAClB,QAAI,QAAQ,aAAa;AACxB,WAAK,SAAS,aAAa,KAAK,OAAO,OAAO;AAAA,IAC/C;AAAA,EACD;AACD;AAEA,IAAM,wBAAN,MAA4B;AAAA,EAC3B;AAAA,EACA;AAAA,EAEA,YAAY,SAAsB,KAAyB;AAC1D,SAAK,WAAW;AAChB,SAAK,OAAO;AAAA,EACb;AAAA,EAEA,MAAM,MACL,UACA,WACG,MACa;AAChB;AAAA,MAAe,MACd,KAAK,SAAS;AAAA,QACb,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA,YAAY,IAAI;AAAA,MACjB;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,GACL,WACA,WACG,MACa;AAChB;AAAA,MAAe,MACd,KAAK,SAAS;AAAA,QACb,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA,YAAY,IAAI;AAAA,MACjB;AAAA,IACD;AAAA,EACD;AACD;AAEA,IAAM,kBAAN,MAAsB;AAAA,EACrB;AAAA,EACA;AAAA,EAEA,YAAY,SAAsB,KAAyB;AAC1D,SAAK,WAAW;AAChB,SAAK,OAAO;AAAA,EACb;AAAA,EAEA,MAAM,IACL,KACA,SAC0C;AAC1C,UAAM,QAAQ,MAAM;AAAA,MAAW,MAC9B,KAAK,SAAS;AAAA,QACb,KAAK;AAAA,QACL,gBAAgB,sBAAsB,GAAG,CAAC;AAAA,MAC3C;AAAA,IACD;AACA,WAAO,QACJ,oBAAoB,IAAI,WAAW,KAAK,GAAG,OAAO,IAClD;AAAA,EACJ;AAAA,EAEA,MAAM,IACL,KACA,OACA,UACgB;AAChB,UAAM;AAAA,MAAW,MAChB,KAAK,SAAS;AAAA,QACb,KAAK;AAAA,QACL,gBAAgB,sBAAsB,GAAG,CAAC;AAAA,QAC1C,eAAe,KAAK;AAAA,MACrB;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,OAAO,KAAyC;AACrD,UAAM;AAAA,MAAW,MAChB,KAAK,SAAS;AAAA,QACb,KAAK;AAAA,QACL,gBAAgB,sBAAsB,GAAG,CAAC;AAAA,MAC3C;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,YACL,OACA,KACgB;AAChB,UAAM;AAAA,MAAW,MAChB,KAAK,SAAS;AAAA,QACb,KAAK;AAAA,QACL,gBAAgB,sBAAsB,KAAK,CAAC;AAAA,QAC5C,gBAAgB,sBAAsB,GAAG,CAAC;AAAA,MAC3C;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,eAAe,OAAmB,KAAgC;AACvE,UAAM;AAAA,MAAW,MAChB,KAAK,SAAS,mBAAmB,KAAK,MAAM,OAAO,GAAG;AAAA,IACvD;AAAA,EACD;AAAA,EAEA,MAAM,WAIL,QACA,SACmE;AACnE,UAAM,UAAU,MAAM;AAAA,MAAW,MAChC,KAAK,SAAS;AAAA,QACb,KAAK;AAAA,QACL;AAAA,UACC;AAAA,YACC;AAAA,YACA,mCAAS;AAAA,UACV;AAAA,QACD;AAAA,QACA;AAAA,UACC,SAAS,mCAAS;AAAA,UAClB,OAAO,mCAAS;AAAA,QACjB;AAAA,MACD;AAAA,IACD;AACA,WAAO,QAAQ,IAAI,CAAC,UAAU;AAAA,MAC7B;AAAA,QACC,oBAAoB,IAAI,WAAW,MAAM,GAAG,CAAC;AAAA,QAC7C,mCAAS;AAAA,MACV;AAAA,MACA,oBAAoB,IAAI,WAAW,MAAM,KAAK,GAAG,OAAO;AAAA,IACzD,CAAC;AAAA,EACF;AAAA,EAEA,MAAM,cACL,QAC2C;AAC3C,UAAM,UAAU,MAAM;AAAA,MAAW,MAChC,KAAK,SAAS,kBAAkB,KAAK,MAAM,QAAQ,CAAC,CAAC;AAAA,IACtD;AACA,WAAO,QAAQ,IAAI,CAAC,UAAU;AAAA,MAC7B,IAAI,WAAW,MAAM,GAAG;AAAA,MACxB,IAAI,WAAW,MAAM,KAAK;AAAA,IAC3B,CAAC;AAAA,EACF;AAAA,EAEA,MAAM,UAIL,OACA,KACA,SACmE;AACnE,UAAM,UAAU,MAAM;AAAA,MAAW,MAChC,KAAK,SAAS;AAAA,QACb,KAAK;AAAA,QACL;AAAA,UACC;AAAA,YACC;AAAA,YACA,mCAAS;AAAA,UACV;AAAA,QACD;AAAA,QACA;AAAA,UACC;AAAA,YACC;AAAA,YACA,mCAAS;AAAA,UACV;AAAA,QACD;AAAA,QACA;AAAA,UACC,SAAS,mCAAS;AAAA,UAClB,OAAO,mCAAS;AAAA,QACjB;AAAA,MACD;AAAA,IACD;AACA,WAAO,QAAQ,IAAI,CAAC,UAAU;AAAA,MAC7B;AAAA,QACC,oBAAoB,IAAI,WAAW,MAAM,GAAG,CAAC;AAAA,QAC7C,mCAAS;AAAA,MACV;AAAA,MACA,oBAAoB,IAAI,WAAW,MAAM,KAAK,GAAG,OAAO;AAAA,IACzD,CAAC;AAAA,EACF;AAAA,EAEA,MAAM,KAIL,QACA,SACmE;AACnE,WAAO,KAAK,WAAW,QAAQ,OAAO;AAAA,EACvC;AAAA,EAEA,MAAM,SAAS,MAAuD;AACrE,UAAM,SAAS,MAAM;AAAA,MAAW,MAC/B,KAAK,SAAS,gBAAgB,KAAK,MAAM,IAAI;AAAA,IAC9C;AACA,WAAO,OAAO,IAAI,CAAC,UAAW,QAAQ,IAAI,WAAW,KAAK,IAAI,IAAK;AAAA,EACpE;AAAA,EAEA,MAAM,SAAS,SAAoD;AAClE,UAAM;AAAA,MAAW,MAChB,KAAK,SAAS;AAAA,QACb,KAAK;AAAA,QACL,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO;AAAA,UAC9B;AAAA,UACA;AAAA,QACD,EAAE;AAAA,MACH;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,YAAY,MAAmC;AACpD,UAAM;AAAA,MAAW,MAChB,KAAK,SAAS,mBAAmB,KAAK,MAAM,IAAI;AAAA,IACjD;AAAA,EACD;AACD;AAEA,SAAS,iBACR,SACA,SACC;AACD,QAAM,OAAO,eAAe,MAAM,QAAQ,KAAK,CAAC;AAChD,SAAO;AAAA,IACN,IAAI,OAAO,eAAe,MAAM,QAAQ,GAAG,CAAC,CAAC;AAAA,IAC7C;AAAA,IACA,MAAM;AAAA,MACL;AAAA,MACA;AAAA,MACA,YAAY,eAAe,MAAM,QAAQ,KAAK,CAAC,CAAC;AAAA,IACjD;AAAA,IACA,WAAW,eAAe,MAAM,QAAQ,UAAU,CAAC;AAAA,IACnD,UAAU,eAAe,MAAM,QAAQ,cAAc,CAAC,IACnD,OAAO,aACP,MAAM;AAAA,MAAW,MAChB,QAAQ;AAAA,QACP,aAAa,SACV,SACA;AAAA,UACA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,UACD;AAAA,QACD;AAAA,MACH;AAAA,IACD,IACA;AAAA,EACJ;AACD;AAEA,IAAM,qBAAN,MAAyB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA,gCAAgC,oBAAI,IAAY;AAAA,EAEhD,YACC,SACA,KACA,UAA4C,QAC3C;AACD,SAAK,WAAW;AAChB,SAAK,OAAO;AACZ,SAAK,WAAW;AAAA,EACjB;AAAA,EAEA,MAAM,KAAK,MAAc,MAAe;AACvC,UAAM,gBAAgB,kBAAkB,KAAK,UAAU,MAAM,IAAI;AACjE,WAAO;AAAA,MACN,MAAM;AAAA,QAAW,MAChB,KAAK,SAAS;AAAA,UACb,KAAK;AAAA,UACL;AAAA,UACA,YAAY,aAAa;AAAA,QAC1B;AAAA,MACD;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AAAA,EAEA,MAAM,KAAK,SAKR;AACF,UAAM,WAAW,MAAM,KAAK,UAAU;AAAA,MACrC,OAAO,mCAAS;AAAA,MAChB,OAAO;AAAA,MACP,SAAS,mCAAS;AAAA,MAClB,QAAQ,mCAAS;AAAA,MACjB,aAAa,mCAAS;AAAA,IACvB,CAAC;AACD,WAAO,SAAS,CAAC;AAAA,EAClB;AAAA,EAEA,MAAM,UAAU,SAMb;AACF,UAAM,eAAc,mCAAS,iBAAgB;AAC7C,QAAI,KAAK,8BAA8B,OAAO,GAAG;AAChD,YAAM,IAAI;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,UACC,QAAQ;AAAA,UACR,YAAY;AAAA,QACb;AAAA,MACD;AAAA,IACD;AAEA,UAAM,EAAE,OAAO,QAAQ,IAAI,MAAM;AAAA,MAChC,KAAK;AAAA,MACL,mCAAS;AAAA,IACV;AAEA,QAAI;AACH,YAAM,WAAW,MAAM;AAAA,QAAW,MACjC,KAAK,SAAS;AAAA,UACb,KAAK;AAAA,UACL;AAAA,YACC,OAAO,KAAK,gBAAgB,mCAAS,KAAK;AAAA,YAC1C,OAAO,mCAAS;AAAA,YAChB,WAAW,mCAAS;AAAA,YACpB;AAAA,UACD;AAAA,UACA;AAAA,QACD;AAAA,MACD;AACA,YAAM,UAAU,SAAS;AAAA,QAAI,CAAC,YAC7B,iBAAiB,SAAS,KAAK,QAAQ;AAAA,MACxC;AACA,aAAO,cACJ,QAAQ;AAAA,QAAI,CAAC,YACb,KAAK,wBAAwB,OAAO;AAAA,MACrC,IACC;AAAA,IACJ,UAAE;AACD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,aACL,OACA,SAKC;AACD,UAAM,EAAE,OAAO,QAAQ,IAAI,MAAM;AAAA,MAChC,KAAK;AAAA,MACL,mCAAS;AAAA,IACV;AAEA,QAAI;AACH,aAAO;AAAA,QACN,MAAM;AAAA,UAAW,MAChB,KAAK,SAAS;AAAA,YACb,KAAK;AAAA,YACL,CAAC,GAAG,KAAK;AAAA,YACT;AAAA,cACC,WAAW,mCAAS;AAAA,cACpB,aAAa,mCAAS;AAAA,YACvB;AAAA,YACA;AAAA,UACD;AAAA,QACD;AAAA,QACA,KAAK;AAAA,MACN;AAAA,IACD,UAAE;AACD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,sBACL,OACA,SAIC;AACD,QAAI,EAAC,mCAAS,SAAQ;AACrB,YAAM;AAAA,QAAW,MAChB,KAAK,SAAS;AAAA,UACb,KAAK;AAAA,UACL,CAAC,GAAG,KAAK;AAAA,UACT;AAAA,YACC,WAAW,mCAAS;AAAA,UACrB;AAAA,QACD;AAAA,MACD;AACA;AAAA,IACD;AAEA,UAAM,WACL,QAAQ,YAAY,SACjB,SACA,KAAK,IAAI,IAAI,QAAQ;AAEzB,eAAS;AACR,UAAI,QAAQ,OAAO,SAAS;AAC3B,cAAM,kBAAkB;AAAA,MACzB;AAEA,YAAM,mBACL,aAAa,SACV,SACA,KAAK,IAAI,GAAG,WAAW,KAAK,IAAI,CAAC;AACrC,YAAM,eACL,qBAAqB,SAClB,MACA,KAAK,IAAI,kBAAkB,GAAG;AAElC,UAAI;AACH,cAAM;AAAA,UAAW,MAChB,KAAK,SAAS;AAAA,YACb,KAAK;AAAA,YACL,CAAC,GAAG,KAAK;AAAA,YACT;AAAA,cACC,WAAW;AAAA,YACZ;AAAA,UACD;AAAA,QACD;AACA;AAAA,MACD,SAAS,OAAO;AACf,YACE,MAA4C,UAC5C,WACA,MAA4C,SAC5C,aACA;AACD,cACC,qBAAqB,UACrB,mBAAmB,KAClB;AACD;AAAA,UACD;AAAA,QACD;AACA,cAAM;AAAA,MACP;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,eACL,MACA,MACA,SAIC;AACD,UAAM,gBAAgB,kBAAkB,KAAK,UAAU,MAAM,IAAI;AACjE,UAAM,EAAE,OAAO,QAAQ,IAAI,MAAM;AAAA,MAChC,KAAK;AAAA,MACL,mCAAS;AAAA,IACV;AAEA,QAAI;AACH,YAAM,WAAW,MAAM;AAAA,QAAW,MACjC,KAAK,SAAS;AAAA,UACb,KAAK;AAAA,UACL;AAAA,UACA,YAAY,aAAa;AAAA,UACzB;AAAA,YACC,WAAW,mCAAS;AAAA,UACrB;AAAA,UACA;AAAA,QACD;AAAA,MACD;AACA,aAAO,aAAa,UAAa,aAAa,OAC3C,SACA;AAAA,QACA,KAAK;AAAA,QACL;AAAA,QACA,YAAY,QAAQ;AAAA,MACrB;AAAA,IACH,UAAE;AACD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,QAAQ,SAGX;AACF,UAAM,WAAW,MAAM,KAAK,aAAa;AAAA,MACxC,OAAO,mCAAS;AAAA,MAChB,OAAO;AAAA,MACP,aAAa,mCAAS;AAAA,IACvB,CAAC;AACD,WAAO,SAAS,CAAC;AAAA,EAClB;AAAA,EAEA,MAAM,aAAa,SAIhB;AACF,QAAI,mCAAS,aAAa;AACzB,aAAO,MAAM,KAAK,UAAU;AAAA,QAC3B,OAAO,QAAQ;AAAA,QACf,OAAO,QAAQ;AAAA,QACf,SAAS;AAAA,QACT,aAAa;AAAA,MACd,CAAC;AAAA,IACF;AAEA,QAAI;AACH,aAAO,MAAM,KAAK,UAAU;AAAA,QAC3B,OAAO,mCAAS;AAAA,QAChB,OAAO,mCAAS;AAAA,QAChB,SAAS;AAAA,QACT,aAAa;AAAA,MACd,CAAC;AAAA,IACF,SAAS,OAAO;AACf,UACE,MAA4C,UAC5C,WACA,MAA4C,SAC5C,aACA;AACD,eAAO,CAAC;AAAA,MACT;AACA,YAAM;AAAA,IACP;AAAA,EACD;AAAA,EAEA,OAAO,KAAK,SAMV;AACD,eAAS;AACR,UAAI;AACH,cAAM,UAAU,MAAM,KAAK,KAAK,OAAO;AACvC,YAAI,CAAC,SAAS;AACb;AAAA,QACD;AACA,cAAM;AAAA,MACP,SAAS,OAAO;AACf,YACC,iBAAiB,KAAK,KACtB,MAAM,UAAU,WAChB,MAAM,SAAS,WACd;AACD;AAAA,QACD;AACA,cAAM;AAAA,MACP;AAAA,IACD;AAAA,EACD;AAAA,EAEA,gBACC,OACuB;AACvB,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AACjC,aAAO;AAAA,IACR;AACA,WAAO,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC;AAAA,EAC1B;AAAA,EAEA,wBACC,SACC;AACD,UAAM,YAAY,QAAQ,GAAG,SAAS;AACtC,SAAK,8BAA8B,IAAI,SAAS;AAChD,QAAI,YAAY;AAEhB,WAAO;AAAA,MACN,GAAG;AAAA,MACH,UAAU,OAAO,aAAuB;AACvC,YAAI,OAAO,QAAQ,aAAa,YAAY;AAC3C,gBAAM,IAAI;AAAA,YACT;AAAA,YACA;AAAA,YACA,UAAU,QAAQ,IAAI;AAAA,YACtB;AAAA,cACC,QAAQ;AAAA,cACR,YAAY;AAAA,cACZ,UAAU,EAAE,MAAM,QAAQ,KAAK;AAAA,YAChC;AAAA,UACD;AAAA,QACD;AACA,YAAI,WAAW;AACd,gBAAM,IAAI;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,cACC,QAAQ;AAAA,cACR,YAAY;AAAA,YACb;AAAA,UACD;AAAA,QACD;AAEA,cAAM,QAAQ,SAAS,QAAQ;AAC/B,oBAAY;AACZ,aAAK,8BAA8B,OAAO,SAAS;AAAA,MACpD;AAAA,IACD;AAAA,EACD;AACD;AAEA,IAAM,yBAAN,MAA6B;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAA6BC,kBAAiB;AAAA,EAE9C,YAAY,SAAsB,IAAqB;AACtD,SAAK,WAAW;AAChB,SAAK,MAAM;AACX,SAAK,WAAW,IAAIA,kBAAiB;AAAA,MACpC,eAAe,MAAM,KAAK;AAAA,MAC1B,QAAQ,CAAC,SAAS;AACjB,YAAI,OAAO,SAAS,UAAU;AAC7B;AAAA,YAAe,MACd,KAAK,SAAS;AAAA,cACb,KAAK;AAAA,cACL,YAAY,OAAO,IAAI;AAAA,cACvB;AAAA,YACD;AAAA,UACD;AACA;AAAA,QACD;AAEA,cAAM,QAAQ,YAAY,OAAO,IAAI,IAClC,8BAA8B,IAAI,IAClC,IAAI,WAAW,IAAuB;AACzC;AAAA,UAAe,MACd,KAAK,SAAS,cAAc,KAAK,KAAK,OAAO,IAAI;AAAA,QAClD;AAAA,MACD;AAAA,MACA,SAAS,CAAC,MAAM,WAAW;AAC1B,aAAK,cAAcA,kBAAiB;AACpC,aAAK;AAAA,UAAW,MACf,KAAK,SAAS,eAAe,KAAK,KAAK,MAAM,MAAM;AAAA,QACpD;AAAA,MACD;AAAA,IACD,CAAC;AACD,SAAK,SAAS,0BAA0B,KAAK,KAAK,CAACC,WAAU;AAC5D,UAAIA,OAAM,SAAS,WAAW;AAC7B,aAAK,SAAS;AAAA,UACbA,OAAM,SACH,0BAA0BA,OAAM,IAAoB,IACpDA,OAAM;AAAA,UACTA,OAAM;AAAA,QACP;AACA;AAAA,MACD;AAEA,WAAK,cAAcD,kBAAiB;AACpC,WAAK,SAAS;AAAA,QACbC,OAAM;AAAA,QACNA,OAAM;AAAA,QACNA,OAAM;AAAA,MACP;AAAA,IACD,CAAC;AAAA,EACF;AAAA,EAEA,IAAI,aAAa;AAChB,WAAO,KAAK,SAAS;AAAA,EACtB;AAAA,EAEA,IAAI,aAAa;AAChB,WAAO,KAAK,SAAS;AAAA,EACtB;AAAA,EAEA,IAAI,OAAO;AACV,WAAO,KAAK,SAAS;AAAA,EACtB;AAAA,EAEA,IAAI,UAAU;AACb,WAAO,KAAK,SAAS;AAAA,EACtB;AAAA,EAEA,IAAI,SAAS;AACZ,WAAO,KAAK,SAAS;AAAA,EACtB;AAAA,EAEA,IAAI,aAAa;AAChB,WAAO,KAAK,SAAS;AAAA,EACtB;AAAA,EAEA,IAAI,WAAW,OAA+B;AAC7C,SAAK,SAAS,aAAa;AAAA,EAC5B;AAAA,EAEA,IAAI,iBAAiB;AACpB,WAAO,KAAK,SAAS;AAAA,EACtB;AAAA,EAEA,IAAI,aAAa;AAChB,WAAO,KAAK,SAAS;AAAA,EACtB;AAAA,EAEA,IAAI,WAAW;AACd,WAAO,KAAK,SAAS;AAAA,EACtB;AAAA,EAEA,IAAI,MAAM;AACT,WAAO,KAAK,SAAS;AAAA,EACtB;AAAA,EAEA,IAAI,SAAS;AACZ,WAAO,KAAK,SAAS;AAAA,EACtB;AAAA,EAEA,IAAI,OAAO,OAAO;AACjB,SAAK,SAAS,SAAS;AAAA,EACxB;AAAA,EAEA,IAAI,UAAU;AACb,WAAO,KAAK,SAAS;AAAA,EACtB;AAAA,EAEA,IAAI,QAAQ,OAAO;AAClB,SAAK,SAAS,UAAU;AAAA,EACzB;AAAA,EAEA,IAAI,UAAU;AACb,WAAO,KAAK,SAAS;AAAA,EACtB;AAAA,EAEA,IAAI,QAAQ,OAAO;AAClB,SAAK,SAAS,UAAU;AAAA,EACzB;AAAA,EAEA,IAAI,YAAY;AACf,WAAO,KAAK,SAAS;AAAA,EACtB;AAAA,EAEA,IAAI,UAAU,OAAO;AACpB,SAAK,SAAS,YAAY;AAAA,EAC3B;AAAA,EAEA,KAAK,MAAoD;AACxD,SAAK,SAAS,KAAK,IAAI;AAAA,EACxB;AAAA,EAEA,MAAM,MAAe,QAAuB;AAC3C,SAAK,SAAS,MAAM,MAAM,MAAM;AAAA,EACjC;AAAA,EAEA,iBACC,MACA,UACO;AACP,SAAK,SAAS,iBAAiB,MAAM,QAAQ;AAAA,EAC9C;AAAA,EAEA,oBACC,MACA,UACO;AACP,SAAK,SAAS,oBAAoB,MAAM,QAAQ;AAAA,EACjD;AAAA,EAEA,cAAcA,QAIF;AACX,WAAO,KAAK,SAAS,cAAcA,MAAK;AAAA,EACzC;AACD;AAIA,IAAM,gCAAN,MAAkE;AAAA,EACjE;AAAA,EACA;AAAA,EACA,aAAa,oBAAI,IAAwC;AAAA,EACzD,UAAgE;AAAA,EAChE,WAAsE;AAAA,EACtE,WAAiE;AAAA,EACjE,aACC;AAAA,EAED,YAAY,KAAgC,OAA2B;AACtE,SAAK,OAAO;AACZ,SAAK,SAAS;AAEd,UAAM,iBAAiB,QAAQ,CAACA,WAAU;AACzC,WAAK,UAAU,QAAQ,KAAK,aAAa,QAAQA,MAAK,CAAC;AAAA,IACxD,CAAC;AACD,UAAM,iBAAiB,WAAW,CAACA,WAAU;AAC5C,WAAK,UAAU,WAAW,KAAK,aAAa,WAAWA,MAAK,CAAC;AAAA,IAC9D,CAAC;AACD,UAAM,iBAAiB,SAAS,CAACA,WAAU;AAC1C,WAAK,UAAU,SAAS,KAAK,aAAa,SAASA,MAAK,CAAC;AAAA,IAC1D,CAAC;AACD,UAAM,iBAAiB,SAAS,CAACA,WAAU;AAC1C,WAAK,UAAU,SAAS,KAAK,aAAa,SAASA,MAAK,CAAC;AAAA,IAC1D,CAAC;AAAA,EACF;AAAA,EAEA,IAAI,aAAgB;AACnB,WAAO,KAAK,OAAO;AAAA,EACpB;AAAA,EAEA,IAAI,OAAU;AACb,WAAO,KAAK,OAAO;AAAA,EACpB;AAAA,EAEA,IAAI,UAAa;AAChB,WAAO,KAAK,OAAO;AAAA,EACpB;AAAA,EAEA,IAAI,SAAY;AACf,WAAO,KAAK,OAAO;AAAA,EACpB;AAAA,EAEA,IAAI,aAA4B;AAC/B,WAAO,KAAK,OAAO;AAAA,EACpB;AAAA,EAEA,IAAI,aAAqC;AACxC,WAAO,KAAK,OAAO;AAAA,EACpB;AAAA,EAEA,IAAI,WAAW,OAA+B;AAC7C,SAAK,OAAO,aAAa;AAAA,EAC1B;AAAA,EAEA,IAAI,iBAAyB;AAC5B,WAAO,KAAK,OAAO;AAAA,EACpB;AAAA,EAEA,IAAI,aAAqB;AACxB,WAAO,KAAK,OAAO;AAAA,EACpB;AAAA,EAEA,IAAI,WAAmB;AACtB,WAAO,KAAK,OAAO;AAAA,EACpB;AAAA,EAEA,IAAI,MAAc;AACjB,WAAO,KAAK,OAAO;AAAA,EACpB;AAAA,EAEA,KAAK,MAA+D;AACnE,SAAK,OAAO,KAAK,IAAI;AAAA,EACtB;AAAA,EAEA,MAAM,MAAe,QAAuB;AAC3C,SAAK,OAAO,MAAM,MAAM,MAAM;AAAA,EAC/B;AAAA,EAEA,iBAAiB,MAAc,UAA0C;AACxE,QAAI,YAAY,KAAK,WAAW,IAAI,IAAI;AACxC,QAAI,CAAC,WAAW;AACf,kBAAY,CAAC;AACb,WAAK,WAAW,IAAI,MAAM,SAAS;AAAA,IACpC;AACA,cAAU,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,oBACC,MACA,UACO;AACP,UAAM,YAAY,KAAK,WAAW,IAAI,IAAI;AAC1C,QAAI,CAAC,WAAW;AACf;AAAA,IACD;AAEA,UAAM,QAAQ,UAAU,QAAQ,QAAQ;AACxC,QAAI,UAAU,IAAI;AACjB,gBAAU,OAAO,OAAO,CAAC;AAAA,IAC1B;AAAA,EACD;AAAA,EAEA,cAAcA,QAA4B;AACzC,SAAK,UAAUA,OAAM,MAAM,KAAK,aAAaA,OAAM,MAAMA,MAAK,CAAC;AAC/D,WAAO;AAAA,EACR;AAAA,EAEA,IAAI,SAA+D;AAClE,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,IAAI,OAAO,IAA0D;AACpE,SAAK,UAAU;AAAA,EAChB;AAAA,EAEA,IAAI,UAAqE;AACxE,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,IAAI,QAAQ,IAA+D;AAC1E,SAAK,WAAW;AAAA,EACjB;AAAA,EAEA,IAAI,UAAgE;AACnE,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,IAAI,QAAQ,IAA0D;AACrE,SAAK,WAAW;AAAA,EACjB;AAAA,EAEA,IAAI,YAEI;AACP,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,IAAI,UAAU,IAEJ;AACT,SAAK,aAAa;AAAA,EACnB;AAAA,EAEA,aAAa,MAAcA,QAAiB;AAC3C,YAAQ,MAAM;AAAA,MACb,KAAK;AACJ,eAAO;AAAA,UACN;AAAA,UACA,MAAMA,OAAM;AAAA,UACZ,mBAAmBA,OAAM;AAAA,UACzB,QAAQ;AAAA,UACR,eAAe;AAAA,QAChB;AAAA,MACD,KAAK;AACJ,eAAO;AAAA,UACN;AAAA,UACA,MAAMA,OAAM;AAAA,UACZ,QAAQA,OAAM;AAAA,UACd,UAAUA,OAAM;AAAA,UAChB,QAAQ;AAAA,UACR,eAAe;AAAA,QAChB;AAAA,MACD;AACC,eAAO;AAAA,UACN;AAAA,UACA,QAAQ;AAAA,UACR,eAAe;AAAA,UACf,GAAIA,OAAM,YAAY,SACnB,EAAE,SAASA,OAAM,QAAQ,IACzB,CAAC;AAAA,UACJ,GAAIA,OAAM,UAAU,SACjB,EAAE,OAAOA,OAAM,MAAM,IACrB,CAAC;AAAA,QACL;AAAA,IACF;AAAA,EACD;AAAA,EAEA,UAAU,MAAcA,QAAkB;AACzC,UAAM,YAAY,KAAK,WAAW,IAAI,IAAI;AAC1C,QAAI,aAAa,UAAU,SAAS,GAAG;AACtC,iBAAW,YAAY,CAAC,GAAG,SAAS,GAAG;AACtC,aAAK,aAAa,MAAM,UAAUA,MAAK;AAAA,MACxC;AAAA,IACD;AAEA,YAAQ,MAAM;AAAA,MACb,KAAK;AACJ,YAAI,KAAK,QAAS,MAAK,aAAa,MAAM,KAAK,SAASA,MAAK;AAC7D;AAAA,MACD,KAAK;AACJ,YAAI,KAAK;AACR,eAAK,aAAa,MAAM,KAAK,UAAUA,MAAK;AAC7C;AAAA,MACD,KAAK;AACJ,YAAI,KAAK;AACR,eAAK,aAAa,MAAM,KAAK,UAAUA,MAAK;AAC7C;AAAA,MACD,KAAK;AACJ,YAAI,KAAK;AACR,eAAK,aAAa,MAAM,KAAK,YAAYA,MAAK;AAC/C;AAAA,IACF;AAAA,EACD;AAAA,EAEA,aACC,MACA,SACAA,QACO;AACP,QAAI;AACH,YAAM,SAAS,QAAQA,MAAK;AAC5B,UAAI,CAAC,KAAK,eAAe,MAAM,GAAG;AACjC;AAAA,MACD;AACA,YAAM,mBAAmB,KAAK,KAAK,uBAAuB;AAC1D,WAAK,KAAK;AAAA,QACT,QAAQ,QAAQ,MAAM,EACpB,MAAM,CAAC,UAAU;AACjB,UAAAC,QAAO,EAAE,MAAM;AAAA,YACd,KAAK;AAAA,YACL,WAAW;AAAA,YACX;AAAA,UACD,CAAC;AAAA,QACF,CAAC,EACA,QAAQ,MAAM;AACd,eAAK,KAAK,qBAAqB,gBAAgB;AAAA,QAChD,CAAC,EACA,KAAK,MAAM,IAAI;AAAA,MAClB;AAAA,IACD,SAAS,OAAO;AACf,MAAAA,QAAO,EAAE,MAAM;AAAA,QACd,KAAK;AAAA,QACL,WAAW;AAAA,QACX;AAAA,MACD,CAAC;AAAA,IACF;AAAA,EACD;AAAA,EAEA,eAAe,OAA4C;AAC1D,WACC,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,OAAO,MAAM,SAAS;AAAA,EAExB;AACD;AAEO,IAAM,4BAAN,MAAgC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YACC,SACA,KACA,eACA,UAAkC,CAAC,GACnC,kBACA,SACA,eAAe,MACf,0BACA,eACA,qBACC;AACD,SAAK,WAAW;AAChB,SAAK,OAAO;AACZ,SAAK,iBAAiB;AACtB,SAAK,WAAW;AAChB,SAAK,uBAAuB;AAC5B,SAAK,4BAA4B;AACjC,SAAK,iBAAiB;AACtB,SAAK,gBAAgB;AACrB,QAAI,kBAAkB;AACrB,WAAK,oBAAoB;AAAA,IAC1B;AACA,SAAK,WAAW;AAChB,IACC,KAGC,6BAA6B,IAAI,IAAI;AAAA,MACtC;AAAA,IACD;AAAA,EACD;AAAA,EAEA,IAAI,KAAK;AACR,QAAI,CAAC,KAAK,KAAK;AACd,WAAK,MAAM,IAAI,gBAAgB,KAAK,UAAU,KAAK,IAAI;AAAA,IACxD;AACA,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,IAAI,MAAM;AACT,QAAI,CAAC,KAAK,MAAM;AACf,WAAK,OAAO,6BAA6B,KAAK,UAAU,KAAK,IAAI;AAAA,IAClE;AACA,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,IAAI,KAAK;AACR,QAAI,CAAC,KAAK,mBAAmB;AAC5B,YAAM,2BAA2B;AAAA,IAClC;AAEA,QAAI,CAAC,KAAK,UAAU;AACnB,WAAK,WAAW,IAAI;AAAA,QACnB,CAAC;AAAA,QACD;AAAA,UACC,KAAK,CAAC,SAAS,aAAa;AAC3B,gBAAI,aAAa,QAAQ;AACxB,qBAAO;AAAA,YACR;AAEA,mBAAO,UAAU,SAAyB;AACzC,oBAAM,SAAS,MAAM,KAAK,qBAAqB;AAC/C,oBAAM,QAAQ,QAAQ;AAAA,gBACrB;AAAA,gBACA;AAAA,cACD;AACA,kBAAI,OAAO,UAAU,YAAY;AAChC,uBAAO;AAAA,cACR;AACA,qBAAO,MAAM,MAAM,MAAM,QAAQ,IAAI;AAAA,YACtC;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,IAAI,QAAiB;AACpB,QAAI,CAAC,KAAK,eAAe;AACxB,YAAM,qBAAqB;AAAA,IAC5B;AACA,UAAM,YAAY,KAAK,WAAW;AAClC,WAAO;AAAA,MACN;AAAA,MACA,CAAC,cAAc;AACd,aAAK,YAAY,WAAW,EAAE,cAAc,KAAK,CAAC;AAAA,MACnD;AAAA,MACA,MAAM;AACL,aAAK,sBAAsB;AAAA,MAC5B;AAAA,IACD;AAAA,EACD;AAAA,EAEA,IAAI,MAAM,OAAgB;AACzB,QAAI,CAAC,KAAK,eAAe;AACxB,YAAM,qBAAqB;AAAA,IAC5B;AACA,SAAK,sBAAsB;AAC3B,SAAK,YAAY,OAAO,EAAE,cAAc,KAAK,CAAC;AAAA,EAC/C;AAAA,EAEA,gBAAgB,OAAsB;AACrC,QAAI,CAAC,KAAK,eAAe;AACxB;AAAA,IACD;AACA,SAAK,YAAY,OAAO,EAAE,cAAc,MAAM,CAAC;AAAA,EAChD;AAAA,EAEA,IAAI,OAAgB;AACnB,UAAM,eAAe,sBAAsB,KAAK,UAAU,KAAK,IAAI;AACnE,QAAI,aAAa,iBAAiB;AACjC,aAAO,aAAa;AAAA,IACrB;AAEA,iBAAa,kBAAkB;AAC/B,iBAAa,OAAO;AACpB,WAAO;AAAA,EACR;AAAA,EAEA,IAAI,KAAK,OAAgB;AACxB,UAAM,eAAe,sBAAsB,KAAK,UAAU,KAAK,IAAI;AACnE,iBAAa,kBAAkB;AAC/B,iBAAa,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,QAA4B;AAC/B,QAAI,CAAC,KAAK,QAAQ;AACjB,WAAK,SAAS,IAAI;AAAA,QACjB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK,SAAS;AAAA,MACf;AAAA,IACD;AACA,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,IAAI,WAAkC;AACrC,QAAI,CAAC,KAAK,WAAW;AACpB,WAAK,YAAY,IAAI;AAAA,QACpB,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,IACD;AACA,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,IAAI,UAAkB;AACrB,WAAO,eAAe,MAAM,KAAK,SAAS,QAAQ,KAAK,IAAI,CAAC;AAAA,EAC7D;AAAA,EAEA,IAAI,OAAe;AAClB,WAAO,eAAe,MAAM,KAAK,SAAS,UAAU,KAAK,IAAI,CAAC;AAAA,EAC/D;AAAA,EAEA,IAAI,MAAgB;AACnB,WAAO;AAAA,MACN,eAAe,MAAM,KAAK,SAAS,SAAS,KAAK,IAAI,CAAC;AAAA,IACvD;AAAA,EACD;AAAA,EAEA,IAAI,SAAiB;AACpB,WAAO,eAAe,MAAM,KAAK,SAAS,YAAY,KAAK,IAAI,CAAC;AAAA,EACjE;AAAA,EAEA,IAAI,QAAwC;AAC3C,WAAO,IAAI;AAAA,MACV,eAAe,MAAM,KAAK,SAAS,WAAW,KAAK,IAAI,CAAC,EAAE;AAAA,QACzD,CAAC,SAAS;AAAA,UACT,KAAK,SAAS,OAAO,IAAI;AAAA,UACzB,IAAI;AAAA,YACH,KAAK;AAAA,YACL;AAAA,YACA,KAAK;AAAA,YACL,KAAK;AAAA,YACL,CAAC,WACA;AAAA,cAAe,MACd,KAAK,SAAS;AAAA,gBACb,KAAK;AAAA,gBACL;AAAA,cACD;AAAA,YACD;AAAA,UACF;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,IAAI,MAAM;AACT,WAAOA,QAAO;AAAA,EACf;AAAA,EAEA,IAAI,cAA2B;AAC9B,QAAI,CAAC,KAAK,cAAc;AACvB,YAAM,cAAc,KAAK,wBAAwB;AACjD,UAAI,KAAK,yBAAyB,QAAW;AAC5C,aAAK,eAAe;AAAA,MACrB,OAAO;AACN,cAAM,aAAa,IAAI,gBAAgB;AACvC,YAAI,YAAY;AAChB,cAAM,eAAe,MAAM;AAC1B,kBAAQ;AACR,qBAAW,MAAM;AAAA,QAClB;AACA,cAAM,UAAU,MAAM;AACrB,cAAI,WAAW;AACd;AAAA,UACD;AACA,sBAAY;AACZ,sBAAY,oBAAoB,SAAS,YAAY;AACrD,eAAK,sBAAsB;AAAA,QAC5B;AAEA,YACC,YAAY,WACZ,KAAK,SAAS;AAAA,UACb,KAAK;AAAA,QACN,GACC;AACD,qBAAW,MAAM;AAAA,QAClB,OAAO;AACN,gBAAM,sBAAsB,KAAK;AACjC,eAAK,sBAAsB;AAC3B,sBAAY,iBAAiB,SAAS,cAAc;AAAA,YACnD,MAAM;AAAA,UACP,CAAC;AACD;AAAA,YAAe,MACd,KAAK,SAAS;AAAA,cACb;AAAA,cACA,MAAM;AACL,wBAAQ;AACR,2BAAW,MAAM;AAAA,cAClB;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAEA,aAAK,eAAe,WAAW;AAAA,MAChC;AAAA,IACD;AACA,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,IAAI,UAAmB;AACtB,WAAO,KAAK,YAAY;AAAA,EACzB;AAAA,EAEA,IAAI,UAA+B;AAClC,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,MAAc,uBAAyC;AACtD,QAAI,CAAC,KAAK,mBAAmB;AAC5B,YAAM,2BAA2B;AAAA,IAClC;AAEA,QAAI,KAAK,KAAK;AACb,aAAO,KAAK;AAAA,IACb;AAEA,UAAM,eAAe,sBAAsB,KAAK,UAAU,KAAK,IAAI;AACnE,UAAM,eAAe,aAAa;AAClC,QAAI,cAAc;AACjB,WAAK,MAAM,aAAa;AACxB,aAAO,KAAK;AAAA,IACb;AAEA,UAAM,UAAU,KAAK;AACrB,UAAM,SAAS,MAAM,KAAK,kBAAkB,aAAa;AAAA,MACxD;AAAA,MACA,IAAI;AAAA,QACH,UAAU,OAAO,YAAY;AAC5B,gBAAM,KAAK,GAAG;AAAA,YACb,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,KAAK,CAAC;AAAA,UAC3C;AAAA,QACD;AAAA,QACA,UAAU,OAAO,SAAS;AACzB,iBAAO,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;AAAA,QACxC;AAAA,QACA,aAAa,OAAO,SAAS;AAC5B,gBAAM,KAAK,GAAG,YAAY,CAAC,GAAG,IAAI,CAAC;AAAA,QACpC;AAAA,QACA,aAAa,OAAO,OAAO,QAAQ;AAClC,gBAAM,KAAK,GAAG,YAAY,OAAO,GAAG;AAAA,QACrC;AAAA,MACD;AAAA,MACA,KAAK;AAAA,QACJ,OAAO,CAAC,QAAQA,QAAO,EAAE,MAAM,GAAG;AAAA,MACnC;AAAA,MACA,wBAAwB;AAAA,QACvB,MAAM,OAAO,qBAAqB;AACjC,eAAK;AACL,iBAAO;AAAA,YACN,KAAK;AAAA,YACL,KAAK;AAAA,UACN;AAAA,QACD;AAAA,MACD;AAAA,IACD,CAAC;AACD,iBAAa,iBAAiB;AAAA,MAC7B;AAAA,IACD;AACA,SAAK,MAAM;AACX,WAAO;AAAA,EACR;AAAA,EAEA,MAAM,UAAyB;AAC9B,QAAI,CAAC,KAAK,mBAAmB;AAC5B;AAAA,IACD;AAEA,UAAM,KAAK,qBAAqB;AAAA,EACjC;AAAA,EAEA,MAAM,wBAAuC;AAC5C,QAAI,CAAC,KAAK,mBAAmB;AAC5B;AAAA,IACD;AAEA,UAAM,KAAK,kBAAkB;AAAA,MAC3B,MAAM,KAAK,qBAAqB;AAAA,IAClC;AAAA,EACD;AAAA,EAEA,MAAM,gBAA+B;AACpC,SAAK,MAAM;AACX,SAAK,OAAO;AACZ,UAAM,0BAA0B,KAAK,UAAU,KAAK,IAAI;AACxD,UAAM,uBAAuB,KAAK,UAAU,KAAK,IAAI;AAAA,EACtD;AAAA,EAEA,UAAU,SAAiB,MAAuB;AACjD,UAAM,gBAAgB;AAAA,MACrB,KAAK,SAAS;AAAA,MACd;AAAA,MACA;AAAA,IACD;AACA;AAAA,MAAe,MACd,KAAK,SAAS;AAAA,QACb,KAAK;AAAA,QACL;AAAA,QACA,YAAY,aAAa;AAAA,MAC1B;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,UAAU,MAGE;AACjB,QAAI,6BAAM,WAAW;AACpB,YAAM;AAAA,QAAW,MAChB,KAAK,SAAS,wBAAwB,KAAK,MAAM;AAAA,UAChD,WAAW;AAAA,QACZ,CAAC;AAAA,MACF;AACA;AAAA,IACD;AAEA,SAAI,6BAAM,YAAW,MAAM;AAC1B;AAAA,QAAe,MACd,KAAK,SAAS,iBAAiB,KAAK,MAAM;AAAA,UACzC,WAAW,KAAK;AAAA,QACjB,CAAC;AAAA,MACF;AACA;AAAA,IACD;AAEA;AAAA,MAAe,MACd,KAAK,SAAS,iBAAiB,KAAK,MAAM,EAAE,WAAW,MAAM,CAAC;AAAA,IAC/D;AAAA,EACD;AAAA,EAEA,iBAAiB,QAAwD;AACxE,SAAK;AACL,UAAM,aAAa,sBAAsB,KAAK,UAAU,KAAK,IAAI;AACjE,UAAM,yBAAyB;AAAA,MAAe,MAC7C,KAAK,SAAS,mCAAmC,KAAK,IAAI;AAAA,IAC3D;AACA,eAAW,UAAU,wBAAwB;AAC5C,iBAAW,WAAW,OAAO,MAAM;AAAA,IACpC;AACA,UAAM,QACL,KAAK,iBAAiB,KAAK,WAAW,MAAM,SACzC,YAAY,KAAK,WAAW,CAAC,IAC7B;AACJ,UAAM,kBAAkB;AAAA,MAAe,MACtC,KAAK,SAAS,4BAA4B,KAAK,IAAI;AAAA,IACpD,EAAE,IAAI,CAAC,SAAS;AACf,YAAM,SAAS,eAAe,MAAM,KAAK,SAAS,OAAO,IAAI,CAAC;AAC9D,aAAO;AAAA,QACN;AAAA,QACA,OAAO,eAAe,MAAM,KAAK,SAAS,UAAU,IAAI,CAAC;AAAA,MAC1D;AAAA,IACD,CAAC;AAED,WAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,oBAAmC;AACxC,UAAM,WAAW,YAAY;AAC5B,WAAK,SAAS,uBAAuB,KAAK,IAAI;AAAA,IAC/C,CAAC;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,aAAqC;AACnD,UAAM,WAAW,YAAY;AAC5B,WAAK,SAAS,cAAc,KAAK,MAAM,WAAW;AAAA,IACnD,CAAC;AAAA,EACF;AAAA,EAEA,UAAa,SAAiC;AAC7C,UAAM,iBAAiB,QAAQ,QAAQ,OAAO,EAC5C,MAAM,CAAC,UAAU;AACjB,MAAAA,QAAO,EAAE,KAAK;AAAA,QACb,KAAK;AAAA,QACL,OAAO,eAAe,KAAK;AAAA,MAC5B,CAAC;AAAA,IACF,CAAC,EACA,KAAK,MAAM,IAAI;AACjB,QAAI;AACH;AAAA,QAAe,MACd,KAAK,SAAS,eAAe,KAAK,MAAM,cAAc;AAAA,MACvD;AAAA,IACD,SAAS,OAAO;AACf,UAAI,CAAC,8BAA8B,KAAK,GAAG;AAC1C,cAAM;AAAA,MACP;AAAA,IACD;AACA,WAAO;AAAA,EACR;AAAA,EAEA,mBAA4B;AAxtF7B;AAytFE,aAAO,UAAK,8BAAL,kCAAsC;AAAA,EAC9C;AAAA,EAEA,kBAAqB,KAAkD;AACtE,UAAM,UAAU,OAAO,QAAQ,aAAa,IAAI,IAAI;AACpD,UAAM,iBAAiB,QAAQ,KAAK,MAAM,IAAI;AAC9C,QAAI;AACH;AAAA,QAAe,MACd,KAAK,SAAS,kBAAkB,KAAK,MAAM,cAAc;AAAA,MAC1D;AAAA,IACD,SAAS,OAAO;AACf,UAAI,CAAC,8BAA8B,KAAK,GAAG;AAC1C,cAAM;AAAA,MACP;AAAA,IACD;AACA,WAAO;AAAA,EACR;AAAA,EAEA,UAAU,SAAiC;AAC1C,UAAM,iBAAiB,QAAQ,QAAQ,OAAO,EAAE,KAAK,MAAM,IAAI;AAC/D,QAAI;AACH;AAAA,QAAe,MACd,KAAK,SAAS,eAAe,KAAK,MAAM,cAAc;AAAA,MACvD;AAAA,IACD,SAAS,OAAO;AACf,UAAI,CAAC,8BAA8B,KAAK,GAAG;AAC1C,cAAM;AAAA,MACP;AAAA,IACD;AAAA,EACD;AAAA,EAEA,yBAAiC;AAChC,WAAO;AAAA,MAAe,MACrB,KAAK,SAAS,4BAA4B,KAAK,IAAI;AAAA,IACpD;AAAA,EACD;AAAA,EAEA,qBAAqB,kBAAgC;AACpD;AAAA,MAAe,MACd,KAAK,SAAS;AAAA,QACb,KAAK;AAAA,QACL;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAgB,eAA8B;AAC7C,IAAAA,QAAO,EAAE,KAAK;AAAA,MACb,KAAK;AAAA,IACN,CAAC;AAAA,EACF;AAAA;AAAA,EAGA,IAAI,eAAwB;AAC3B,IAAAA,QAAO,EAAE,KAAK;AAAA,MACb,KAAK;AAAA,IACN,CAAC;AACD,WAAO;AAAA,EACR;AAAA,EAEA,QAAc;AACb,mBAAe,MAAM,KAAK,SAAS,WAAW,KAAK,IAAI,CAAC;AAAA,EACzD;AAAA,EAEA,UAAgB;AAIf,mBAAe,MAAM,KAAK,SAAS,aAAa,KAAK,IAAI,CAAC;AAC1D,+BAA2B,KAAK,UAAU,KAAK,IAAI;AAAA,EACpD;AAAA,EAEA,SAAiE;AAChE,QAAI,CAAC,KAAK,SAAS;AAClB,UAAI,CAAC,KAAK,gBAAgB;AACzB,cAAM,+BAA+B;AAAA,MACtC;AACA,WAAK,UAAU,KAAK,eAAe;AAAA,IACpC;AAEA,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,MAAM,UAAyB;AAlzFhC;AAmzFE,eAAK,wBAAL;AACA,SAAK,OAAO;AAAA,EACb;AAAA,EAEA,0BAAuC;AACtC,UAAM,eAAe;AAAA,MAAe,MACnC,KAAK,SAAS,iBAAiB,KAAK,IAAI;AAAA,IACzC;AACA,UAAM,aAAa,IAAI,gBAAgB;AACvC,QAAI,aAAa,SAAS;AACzB,iBAAW,MAAM;AAAA,IAClB,OAAO;AACN,mBAAa,iBAAiB,SAAS,MAAM,WAAW,MAAM,GAAG;AAAA,QAChE,MAAM;AAAA,MACP,CAAC;AAAA,IACF;AACA,WAAO,WAAW;AAAA,EACnB;AAAA,EAEA,aAAsB;AACrB,UAAM,aAAa,sBAAsB,KAAK,UAAU,KAAK,IAAI;AACjE,QAAI,WAAW,UAAU,QAAW;AACnC,iBAAW,QAAQ;AAAA,QAClB,eAAe,MAAM,KAAK,SAAS,WAAW,KAAK,IAAI,CAAC;AAAA,MACzD;AAAA,IACD;AACA,WAAO,WAAW;AAAA,EACnB;AAAA,EAEA,YACC,OACA,SAGO;AACP,gBAAY,KAAK;AACjB,UAAM,aAAa,sBAAsB,KAAK,UAAU,KAAK,IAAI;AACjE,eAAW,QAAQ;AACnB,QAAI,CAAC,QAAQ,cAAc;AAC1B;AAAA,IACD;AACA,SAAK,mBAAmB;AAAA,EACzB;AAAA,EAEA,wBAA8B;AAC7B,UAAM,aAAa,sBAAsB,KAAK,UAAU,KAAK,IAAI;AACjE,QAAI,WAAW,mBAAmB;AACjC,YAAM,4BAA4B;AAAA,IACnC;AAAA,EACD;AAAA,EAEA,qBAA2B;AAC1B,UAAM,aAAa,sBAAsB,KAAK,UAAU,KAAK,IAAI;AACjE,gBAAY,WAAW,KAAK;AAC5B;AAAA,MAAe,MACd,KAAK,SAAS,iBAAiB,KAAK,MAAM,EAAE,WAAW,MAAM,CAAC;AAAA,IAC/D;AAEA,QAAI,CAAC,KAAK,gBAAgB;AACzB;AAAA,IACD;AAEA,eAAW,oBAAoB;AAC/B,mBAAe,MAAM,KAAK,SAAS,wBAAwB,KAAK,IAAI,CAAC;AACrE,QAAI,eAAe;AACnB,QAAI;AACH,YAAM,SAAS,KAAK;AAAA,QACnB;AAAA,QACA,WAAW;AAAA,MACZ;AACA,UAAIH,eAAc,MAAM,GAAG;AAC1B,uBAAe;AACf,aAAK,QAAQ,QAAQ,MAAM,EACzB,MAAM,CAAC,UAAU;AACjB,UAAAG,QAAO,EAAE,MAAM;AAAA,YACd,KAAK;AAAA,YACL;AAAA,UACD,CAAC;AAAA,QACF,CAAC,EACA,QAAQ,MAAM;AACd,qBAAW,oBAAoB;AAC/B;AAAA,YAAe,MACd,KAAK,SAAS,sBAAsB,KAAK,IAAI;AAAA,UAC9C;AAAA,QACD,CAAC;AAAA,MACH;AAAA,IACD,UAAE;AACD,UAAI,cAAc;AACjB,mBAAW,oBAAoB;AAC/B;AAAA,UAAe,MACd,KAAK,SAAS,sBAAsB,KAAK,IAAI;AAAA,QAC9C;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;AAMA,IAAM,+BAAN,MAAmC;AAAA,EAClC;AAAA,EACA,eAAe,oBAAI,IAAmD;AAAA,EAE7D;AAAA,EACA;AAAA,EAqBA;AAAA,EAiCA;AAAA,EAOT,YAAY,KAAgC;AAC3C,SAAK,OAAO;AACZ,SAAK,KAAK,IAAI;AACd,SAAK,SAAS;AAAA,MACb,YAAY,OAAO,SAAS,SAAS;AACpC,aAAK,eAAe,OAAO;AAC3B,eAAO,MAAM,KAAK,KAAK,GAAG,SAAS,IAAI;AAAA,MACxC;AAAA,MACA,YAAY,OAAO,SAAS,YAAY;AACvC,aAAK,eAAe,OAAO;AAC3B,cAAM,KAAK,KAAK,GAAG,SAAS,OAAO;AAAA,MACpC;AAAA,MACA,eAAe,OAAO,SAAS,SAAS;AACvC,aAAK,eAAe,OAAO;AAC3B,cAAM,KAAK,KAAK,GAAG,YAAY,IAAI;AAAA,MACpC;AAAA,MACA,eAAe,OAAO,SAAS,OAAO,QAAQ;AAC7C,aAAK,eAAe,OAAO;AAC3B,cAAM,KAAK,KAAK,GAAG,eAAe,OAAO,GAAG;AAAA,MAC7C;AAAA,MACA,cAAc,OAAO,SAAS,WAAW;AACxC,aAAK,eAAe,OAAO;AAC3B,eAAO,MAAM,KAAK,KAAK,GAAG,cAAc,MAAM;AAAA,MAC/C;AAAA,MACA,UAAU,OAAO,QAAQ,WAAW;AACnC,cAAM,KAAK,KAAK,SAAS,MAAM;AAAA,MAChC;AAAA,IACD;AACA,SAAK,eAAe;AAAA,MACnB,SAAS,OAAO,MAAM,SAAS;AAC9B,eAAO,KAAK;AAAA,UACX,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM,IAAI;AAAA,QACtC;AAAA,MACD;AAAA,MACA,SAAS,OACR,OACA,OACA,SACA,cACA,gBACI;AACJ,cAAM,WAAW,MAAM,KAAK,KAAK,MAAM,UAAU;AAAA,UAChD;AAAA,UACA;AAAA,UACA,SAAS,WAAW;AAAA,UACpB;AAAA,QACD,CAAC;AACD,eAAO,SAAS;AAAA,UAAI,CAAC,YACpB,KAAK,kBAAkB,OAAO;AAAA,QAC/B;AAAA,MACD;AAAA,MACA,iBAAiB,OAAO,SAAS,aAAa;AA7gGjD;AA8gGI,gBAAM,aAAQ,aAAR,iCAAmB;AACzB,aAAK,aAAa,OAAO,QAAQ,GAAG,SAAS,CAAC;AAAA,MAC/C;AAAA,MACA,qBAAqB,OAAO,WAAW,aAAa;AACnD,cAAM,WAAW,KAAK,aAAa,IAAI,UAAU,SAAS,CAAC;AAC3D,YAAI,CAAC,UAAU;AACd;AAAA,QACD;AACA,cAAM,SAAS,QAAQ;AACvB,aAAK,aAAa,OAAO,UAAU,SAAS,CAAC;AAAA,MAC9C;AAAA,MACA,cAAc,OAAO,OAAO,gBAAgB;AAC3C,cAAM,KAAK,KAAK,MAAM,sBAAsB,SAAS,CAAC,GAAG;AAAA,UACxD,QAAQ;AAAA,QACT,CAAC;AAAA,MACF;AAAA,IACD;AACA,SAAK,eAAe;AAAA,MACnB,WAAW,OAAO,SAAS;AAC1B,cAAM,KAAK,KAAK,UAAU,IAAI;AAAA,MAC/B;AAAA,IACD;AAAA,EACD;AAAA,EAEA,qBAA8B;AAC7B,WAAO,KAAK,KAAK,iBAAiB;AAAA,EACnC;AAAA,EAEA,MAAM,oBAAmC;AACxC,UAAM,KAAK,KAAK,kBAAkB;AAAA,EACnC;AAAA,EAEA,eAAe,SAAuB;AACrC,QAAI,YAAY,KAAK,IAAI;AACxB,YAAM,IAAI;AAAA,QACT,gDAAgD,KAAK,EAAE,SAAS,OAAO;AAAA,MACxE;AAAA,IACD;AAAA,EACD;AAAA,EAEA,kBAAkB,SAAqC;AACtD,QAAI,CAAC,SAAS;AACb,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACxD;AAEA,UAAM,KAAK,OAAO,QAAQ,EAAE;AAC5B,QAAI;AACJ,QAAI,QAAQ,UAAU;AACrB,iBAAW,OAAO,aAAuB;AA9jG5C;AA+jGI,gBAAM,aAAQ,aAAR,iCAAmB;AAAA,MAC1B;AACA,WAAK,aAAa,IAAI,GAAG,SAAS,GAAG,QAAQ;AAAA,IAC9C;AAEA,WAAO;AAAA,MACN;AAAA,MACA,MAAM,QAAQ;AAAA,MACd,MAAM,QAAQ;AAAA,MACd,WAAW,QAAQ;AAAA,MACnB;AAAA,IACD;AAAA,EACD;AACD;AAEA,SAAS,gBACR,SACA,KACA,MACA,eACA,UAAkC,CAAC,GACnC,kBACA,SACA,eAAe,MACf,eACA,qBACC;AACD,SAAO,OAAO;AAAA,IACb,IAAI;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACA;AAAA,MACC,MAAM,IAAI;AAAA,QAAkB;AAAA,QAAS;AAAA,QAAM;AAAA,QAAS;AAAA,QAAK,CAAC,WACzD;AAAA,UAAe,MACd,QAAQ,6BAA6B,KAAK,MAAM;AAAA,QACjD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;AAEA,SAAS,iBACR,YACA,gBACqB;AACrB,QAAM,SAAS,WAAW;AAC1B,QAAM,UAAW,OAAO,WAAW,CAAC;AACpC,QAAM,eAAe,QAAQ;AAE7B,SAAO;AAAA,IACN,MAAM,QAAQ;AAAA,IACd,MAAM,QAAQ;AAAA,IACd,aAAa,OAAO,OAAO;AAAA,IAC3B,cACC,OAAO,OAAO,UACd,uBAAuB,cAAc,MAAM;AAAA,IAC5C,UACC,OAAO,UAAU,UACjB,OAAO,OAAO,gBAAgB;AAAA,IAC/B,uBACC,OAAO,iBAAiB,YAAY,eAAe;AAAA,IACpD,qBAAqB,QAAQ;AAAA,IAC7B,qBAAqB,QAAQ;AAAA,IAC7B,0BAA0B,QAAQ;AAAA,IAGlC,0BAA0B,QAAQ;AAAA,IAGlC,oBAAoB,QAAQ;AAAA,IAC5B,oBAAoB,QAAQ;AAAA,IAC5B,iBAAiB,QAAQ;AAAA,IACzB,gBAAgB,QAAQ;AAAA,IACxB,SAAS,QAAQ;AAAA,IACjB,oBAAoB,QAAQ;AAAA,IAC5B,6BAA6B,QAAQ;AAAA,IAGrC,8BAA8B,QAAQ;AAAA,IAGtC,cAAc,QAAQ;AAAA,IACtB,qBAAqB,QAAQ;AAAA,IAC7B,wBAAwB,eAAe;AAAA,IAGvC,wBAAwB,eAAe;AAAA,IAGvC,yBAAyB,QAAQ;AAAA,IAGjC,4BAA4B,QAAQ;AAAA,IAGpC,SAAS,OAAO,KAAM,OAAO,WAAW,CAAC,CAA6B,EACpE,KAAK,EACL,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE;AAAA,EAC3B;AACD;AAEO,SAAS,mBACf,SACA,gBACA,YACqB;AAjrGtB;AAkrGC,QAAM,SAAS,WAAW;AAC1B,QAAM,mBAAmB,OAAO;AAChC,QAAM,eAAuC;AAAA,IAC5C,oBAAoB,OAAO;AAAA,IAC3B,kBAAkB,OAAO;AAAA,IACzB,QAAQ,OAAO;AAAA,IACf,QAAQ,OAAO;AAAA,EAChB;AACA,QAAM,iBAAiB,OAAO;AAAA,IAE5B,OAAO,QAAQ,OAAO,WAAW,CAAC,CAAC,EAGlC,IAAI,CAAC,CAAC,MAAM,OAAO,MAAM,CAAC,MAAM,OAAO,CAAC;AAAA,EAC3C;AACA,QAAM,eAAe,MACpB;AAAA,IACC,IAAI;AAAA,MACH,oCAAoC,cAAc;AAAA,IACnD;AAAA,IACA,EAAE,UAAU,OAAO;AAAA,EACpB;AACD,QAAM,kCAAkC,oBAAI,IAAqB;AACjE,QAAM,2BAA2B,CAAC,QACjC,gCAAgC;AAAA,IAC/B,eAAe,MAAM,QAAQ,QAAQ,GAAG,CAAC;AAAA,EAC1C,KAAK;AACN,QAAM,6BAA6B,CAAC,QAAyB;AA7sG9D,QAAAC;AA8sGE,YAAAA,MAAA;AAAA,MACC,OAAO;AAAA,MACP,eAAe,MAAM,QAAQ,QAAQ,GAAG,CAAC;AAAA,IAC1C,MAHA,gBAAAA,IAGG;AAAA;AACJ,QAAM,gBACL,OAAO,OAAO,kBAAkB,aAC7B,CAAC,UAAqC,cAAuB;AAC7D,WAAO,cAAc,UAAU,SAAS;AAAA,EACzC,IACC;AACJ,QAAM,iBAAiB,WAAW;AAClC,QAAM,gBAAgB,UAAU;AAChC,QAAM,qBAAqB,OAAO,OAAO,QAAQ,WAAW;AAC5D,QAAM,sBAAsB,OAAO,OAAO,oBAAoB;AAC9D,QAAM,UACL,OAAO,OAAO,YAAY,aAAa,OAAO,UAAU;AACzD,QAAM,0BACL,OAAO,OAAO,iBAAiB,cAC/B,sBACA,yBACA,YAAO,YAAP,mBAAgB,2BAA0B;AAC3C,QAAM,eACL,OAAO,UAAU,UAAa,OAAO,OAAO,gBAAgB;AAC7D,QAAM,eAAe,CACpB,KACA,SACA,gBAEA,IAAI;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM,yBAAyB,GAAG;AAAA,IAClC;AAAA,IACA;AAAA,EACD;AACD,QAAM,cAAc,CACnB,KACA,MACA,SACA,gBAEA;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD,QAAM,oCAAoC,OACzC,KACA,aAMA,cACmC;AAjxGrC,QAAAA,KAAA;AAkxGE,UAAM,MAAM,IAAI,IAAI,UAAU,GAAG;AACjC,QAAI,CAAC,IAAI,SAAS,WAAW,aAAa,GAAG;AAC5C,aAAO;AAAA,IACR;AAEA,UAAM,eAAe,CAAC,MAAe,SACpC,IAAI,SAAS,KAAK,UAAU,IAAI,GAAG;AAAA,MAClC,SAAQ,6BAAM,WAAU;AAAA,MACxB,SAAS;AAAA,QACR,gBAAgB;AAAA,QAChB,IAAI,6BAAM,YAAW,CAAC;AAAA,MACvB;AAAA,IACD,CAAC;AACF,UAAM,gBAAgB,CAAC,OAAgB,WAAoB;AAC1D,YAAM,aAAa,aAAa,KAAK;AACrC,aAAO;AAAA,QACN;AAAA,UACC,OAAO,WAAW;AAAA,UAClB,MAAM,WAAW;AAAA,UACjB,SAAS,WAAW;AAAA,UACpB,UAAU,WAAW,YAAY;AAAA,QAClC;AAAA,QACA;AAAA,UACC,QACC,UACA,WAAW,eACV,WAAW,SAAS,MAAM;AAAA,QAC7B;AAAA,MACD;AAAA,IACD;AACA,QAAI;AACH,YAAM,QAAQ;AAAA,QACb;AAAA,UACAA,MAAA,UAAU,QACR,IAAI,eAAe,MADrB,gBAAAA,IAEG,QAAQ,eAAe,QAAO;AAAA,MAClC;AAAA,IACD,SAAS,OAAO;AACf,aAAO,cAAc,OAAO,GAAG;AAAA,IAChC;AAEA,UAAM,kBAAkB,MAAG;AA3zG7B,UAAAA;AA4zGG;AAAA,UACCA,MAAA,2BAA2B,GAAG,MAA9B,gBAAAA,IAAiC,iBAAgB;AAAA,MAClD;AAAA;AACD,UAAM,gBAAgB,YAAS;AA/zGjC,UAAAA,KAAAC;AAg0GI,qBAAMA,OAAAD,MAAA,2BAA2B,GAAG,MAA9B,gBAAAA,IAAiC,aAAjC,gBAAAC,IAAA,KAAAD,SAAkD;AAAA;AAC1D,UAAM,WAAW,aAAa,KAAK,SAAS;AAC5C,QAAI;AACH,UACC,IAAI,aAAa,sBACjB,UAAU,WAAW,OACpB;AACD,eAAO,aAAa;AAAA,UACnB,OAAO,eAAe,SAAS,QAAQ;AAAA,UACvC,gBAAgB;AAAA,QACjB,CAAC;AAAA,MACF;AACA,UACC,IAAI,aAAa,sBACjB,UAAU,WAAW,SACpB;AACD,cAAM,OAAQ,MAAM,UAAU,KAAK;AACnC,iBAAS,QAAQ,KAAK;AACtB,cAAM,SAAS,UAAU,EAAE,WAAW,KAAK,CAAC;AAC5C,eAAO,aAAa,EAAE,IAAI,KAAK,CAAC;AAAA,MACjC;AACA,UACC,IAAI,aAAa,4BACjB,UAAU,WAAW,OACpB;AACD,eAAO,aAAa;AAAA,UACnB,aAAa,MAAM,KAAK,SAAS,MAAM,OAAO,CAAC,EAAE;AAAA,YAChD,CAAC,UAAU;AAAA,cACV,MAAM;AAAA,cACN,IAAI,KAAK;AAAA,cACT,SAAS;AAAA,gBACR,MAAM;AAAA,gBACN,QAAQ,KAAK;AAAA,gBACb,cAAc;AAAA,gBACd,OAAO,KAAK;AAAA,gBACZ,eAAe;AAAA,gBACf,gBAAgB,KAAK;AAAA,cACtB;AAAA,YACD;AAAA,UACD;AAAA,QACD,CAAC;AAAA,MACF;AACA,UACC,IAAI,aAAa,qBACjB,UAAU,WAAW,OACpB;AACD,eAAO,aAAa;AAAA,UACnB,MAAM,OAAO,KAAK,cAAc,EAAE,KAAK;AAAA,QACxC,CAAC;AAAA,MACF;AACA,UACC,IAAI,aAAa,sBACjB,UAAU,WAAW,OACpB;AACD,cAAM,aAAa,IAAI,aAAa,IAAI,OAAO;AAC/C,cAAM,cAAc,aAAa,OAAO,UAAU,IAAI;AACtD,cAAM,QACL,OAAO,SAAS,WAAW,KAAK,cAAc,IAC3C,KAAK,MAAM,WAAW,IACtB;AACJ,cAAM,cACL,MAAM,QAAQ,0BAA0B,GAAG;AAC5C,cAAM,YAAY,YAAY,SAAS;AACvC,cAAM,WAAW,YAAY,MAAM,GAAG,KAAK,EAAE,IAAI,CAAC,OAAO;AAAA,UACxD,IAAI,EAAE;AAAA,UACN,MAAM,EAAE;AAAA,UACR,aAAa,EAAE;AAAA,QAChB,EAAE;AACF,eAAO,aAAa;AAAA,UACnB,MAAM,YAAY;AAAA,UAClB,SAAS,QAAQ,kBAAkB,GAAG;AAAA,UACtC;AAAA,UACA;AAAA,QACD,CAAC;AAAA,MACF;AACA,UACC,IAAI,aAAa,uBACjB,UAAU,WAAW,OACpB;AACD,eAAO,aAAa,EAAE,MAAM,CAAC,GAAG,SAAS,MAAM,CAAC;AAAA,MACjD;AACA,UACC,IAAI,aAAa,iCACjB,UAAU,WAAW,OACpB;AACD,eAAO,aAAa;AAAA,UACnB,SAAS,gBAAgB;AAAA,UACzB,eAAe,MAAM,cAAc;AAAA,UACnC,mBACC,2BAA2B,GAAG,MAAM;AAAA,QACtC,CAAC;AAAA,MACF;AACA,UACC,IAAI,aAAa,gCACjB,UAAU,WAAW,QACpB;AACD,YAAI;AACH,gBAAM,OAAQ,MAAM,UAAU,KAAK;AAGnC,gBAAM,UAAU,QAAM;AAAA,YACrB;AAAA,UACD,MAFsB,mBAEnB,mBAFmB,4BAEF,KAAK;AACzB,iBAAO,aAAa;AAAA,YACnB,SAAS;AAAA,cACR,WAAW;AAAA,YACZ;AAAA,YACA,eAAe,MAAM,cAAc;AAAA,YACnC,mBACC,2BAA2B,GAAG,MAAM;AAAA,UACtC,CAAC;AAAA,QACF,SAAS,OAAO;AACf,iBAAO,cAAc,KAAK;AAAA,QAC3B;AAAA,MACD;AACA,UACC,IAAI,aAAa,gCACjB,UAAU,WAAW,OACpB;AACD,cAAM,KAAK,SAAS;AACpB,cAAM,SAAS;AAAA,UACd,MAAM,GAAG;AAAA,YACR;AAAA,UACD;AAAA,QACD;AACA,cAAM,aAAa,CAAC;AACpB,mBAAW,SAAS,QAAQ;AAC3B,gBAAM,SAAS,IAAI,MAAM,KAAK,QAAQ,MAAM,IAAI,CAAC;AACjD,gBAAM,UAAU;AAAA,YACf,MAAM,GAAG,MAAM,qBAAqB,MAAM,GAAG;AAAA,UAC9C;AACA,gBAAM,cAAc;AAAA,YACnB,MAAM,GAAG,MAAM,2BAA2B,MAAM,GAAG;AAAA,UACpD;AACA,gBAAM,cAAc;AAAA,YACnB,MAAM,GAAG;AAAA,cACR,iCAAiC,MAAM;AAAA,YACxC;AAAA,UACD;AACA,qBAAW,KAAK;AAAA,YACf,OAAO;AAAA,cACN,QAAQ;AAAA,cACR,MAAM,MAAM;AAAA,cACZ,MAAM,MAAM;AAAA,YACb;AAAA,YACA,SAAS,SAAS,OAAO;AAAA,YACzB,aAAa,SAAS,WAAW;AAAA,YACjC,WAAS,iBAAY,CAAC,MAAb,mBAAgB,UAAS;AAAA,UACnC,CAAC;AAAA,QACF;AACA,eAAO,aAAa,EAAE,QAAQ,EAAE,QAAQ,WAAW,EAAE,CAAC;AAAA,MACvD;AACA,UACC,IAAI,aAAa,8BACjB,UAAU,WAAW,OACpB;AACD,cAAM,QAAQ,IAAI,aAAa,IAAI,OAAO;AAC1C,YAAI,CAAC,OAAO;AACX,iBAAO;AAAA,YACN,EAAE,OAAO,yCAAyC;AAAA,YAClD,EAAE,QAAQ,IAAI;AAAA,UACf;AAAA,QACD;AACA,cAAM,QAAQ,OAAO;AAAA,UACpB,IAAI,aAAa,IAAI,OAAO,KAAK;AAAA,UACjC;AAAA,QACD;AACA,cAAM,SAAS,OAAO;AAAA,UACrB,IAAI,aAAa,IAAI,QAAQ,KAAK;AAAA,UAClC;AAAA,QACD;AACA,cAAM,SAAS,IAAI,MAAM,QAAQ,MAAM,IAAI,CAAC;AAC5C,cAAM,OAAO;AAAA,UACZ,MAAM,SAAS,IAAI;AAAA,YAClB,iBAAiB,MAAM;AAAA,YACvB;AAAA,cACC,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,GAAG,CAAC;AAAA,cAChC,KAAK,IAAI,GAAG,MAAM;AAAA,YACnB;AAAA,UACD;AAAA,QACD;AACA,eAAO,aAAa,EAAE,MAAM,SAAS,IAAI,EAAE,CAAC;AAAA,MAC7C;AACA,UACC,IAAI,aAAa,iCACjB,UAAU,WAAW,QACpB;AACD,cAAM,OAAQ,MAAM,UAAU,KAAK;AAKnC,YAAI,OAAO,KAAK,QAAQ,YAAY,KAAK,IAAI,KAAK,MAAM,IAAI;AAC3D,iBAAO;AAAA,YACN,EAAE,OAAO,kBAAkB;AAAA,YAC3B,EAAE,QAAQ,IAAI;AAAA,UACf;AAAA,QACD;AACA,YACC,MAAM,QAAQ,KAAK,IAAI,KACvB,KAAK,cACL,OAAO,KAAK,eAAe,UAC1B;AACD,iBAAO;AAAA,YACN,EAAE,OAAO,0CAA0C;AAAA,YACnD,EAAE,QAAQ,IAAI;AAAA,UACf;AAAA,QACD;AACA,YACC,KAAK,cACL,OAAO,KAAK,eAAe,YAC3B,CAAC,MAAM,QAAQ,KAAK,UAAU,GAC7B;AACD,gBAAM,WAAW;AAAA,YAChB,KAAK;AAAA,UACN;AACA,gBAAME,QAAO;AAAA,YACZ,MAAM,SAAS,IAAI,MAAM,KAAK,KAAK,QAAQ;AAAA,UAC5C;AACA,iBAAO,aAAa,EAAE,MAAM,SAASA,KAAI,EAAE,CAAC;AAAA,QAC7C;AACA,cAAM,OAAO,MAAM,QAAQ,KAAK,IAAI,IAAI,KAAK,OAAO,CAAC;AACrD,cAAM,OAAO;AAAA,UACZ,MAAM,SAAS,IAAI,MAAM,KAAK,KAAK,IAAI;AAAA,QACxC;AACA,eAAO,aAAa,EAAE,MAAM,SAAS,IAAI,EAAE,CAAC;AAAA,MAC7C;AACA,UACC,IAAI,aAAa,wBACjB,UAAU,WAAW,OACpB;AACD,cAAM,oBAAoB;AAAA,UAAe,MACxC,QAAQ,uBAAuB,GAAG;AAAA,QACnC;AACA,eAAO,aAAa;AAAA,UACnB,OAAO,eAAe,SAAS,QAAQ;AAAA,UACvC,aAAa,MAAM,KAAK,SAAS,MAAM,OAAO,CAAC,EAAE;AAAA,YAChD,CAAC,UAAU;AAAA,cACV,MAAM;AAAA,cACN,IAAI,KAAK;AAAA,cACT,SAAS;AAAA,gBACR,MAAM;AAAA,gBACN,QAAQ,KAAK;AAAA,gBACb,cAAc;AAAA,gBACd,OAAO,KAAK;AAAA,gBACZ,eAAe;AAAA,gBACf,gBAAgB,KAAK;AAAA,cACtB;AAAA,YACD;AAAA,UACD;AAAA,UACA,MAAM,OAAO,KAAK,cAAc,EAAE,KAAK;AAAA,UACvC,WAAW,kBAAkB;AAAA,UAC7B,gBAAgB;AAAA,UAChB,mBAAmB,qBAAqB;AAAA,UACxC,mBACC,2BAA2B,GAAG,MAAM;AAAA,UACrC,eAAe,MAAM,cAAc;AAAA,UACnC,iBAAiB,gBAAgB;AAAA,QAClC,CAAC;AAAA,MACF;AACA,UACC,UAAU,WAAW,UACrB,IAAI,SAAS,WAAW,oBAAoB,GAC3C;AACD,cAAM,aAAa,IAAI,SAAS;AAAA,UAC/B;AAAA,UACA;AAAA,QACD;AACA,cAAM,SAAS,eAAe,UAAU;AACxC,YAAI,CAAC,QAAQ;AACZ,iBAAO;AAAA,YACN,IAAI;AAAA,cACH;AAAA,cACA;AAAA,cACA,UAAU,UAAU;AAAA,YACrB;AAAA,YACA;AAAA,UACD;AAAA,QACD;AACA,cAAM,OAAQ,MAAM,UAAU,KAAK;AACnC,YAAI;AACH,gBAAM,SAAS,MAAM;AAAA,YACpB;AAAA,YACA,GAAG;AAAA,cACF,aAAa;AAAA,cACb;AAAA,cACA,KAAK,QAAQ,CAAC;AAAA,YACf;AAAA,UACD;AACA,iBAAO,aAAa,EAAE,OAAO,CAAC;AAAA,QAC/B,SAAS,OAAO;AACf,iBAAO,cAAc,KAAK;AAAA,QAC3B;AAAA,MACD;AAEA,aAAO;AAAA,QACN;AAAA,UACC,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS;AAAA,UACT,UAAU;AAAA,QACX;AAAA,QACA,EAAE,QAAQ,IAAI;AAAA,MACf;AAAA,IACD,SAAS,OAAO;AACf,aAAO,cAAc,KAAK;AAAA,IAC3B,UAAE;AACD,YAAM,SAAS,QAAQ;AAAA,IACxB;AAAA,EACD;AACA,QAAM,YAAY;AAAA,IACjB,aACC,kBAAkB,OAAO,OAAO,gBAAgB,aAC7C;AAAA,MACA,OACC,OACA,YAI2B;AAC3B,cAAM,EAAE,KAAK,MAAM,IAAI;AAAA,UACtB;AAAA,UACA;AAAA,QACD;AACA,cAAM,WAAW,aAAa,GAAG;AACjC,YAAI;AACH,gBAAM,eAAe,YAAY,KAAK;AACtC,gBAAM,YAAY,YAAY,IAAI;AAClC,gBAAM,QAAQ,iBACX,gBAAgB,OAAO,KAAK,IAC5B,MAAM,OAAO;AAAA,YACb;AAAA,YACA;AAAA,UACD;AACF,UAAAH,QAAO,EAAE,MAAM;AAAA,YACd,KAAK;AAAA,YACL,YAAY,YAAY,IAAI,IAAI;AAAA,UACjC,CAAC;AACD,mBAAS,gBAAgB,KAAK;AAC9B,iBAAO,YAAY,KAAK;AAAA,QACzB,UAAE;AACD,gBAAM,SAAS,QAAQ;AAAA,QACxB;AAAA,MACD;AAAA,IACD,IACC;AAAA,IACJ,UACC,OAAO,OAAO,aAAa,aACxB;AAAA,MACA,OACC,OACA,YAImB;AACnB,cAAM,EAAE,KAAK,MAAM,IAAI;AAAA,UACtB;AAAA,UACA;AAAA,QACD;AACA,cAAM,WAAW,aAAa,GAAG;AACjC,YAAI;AACH,gBAAM,OAAO;AAAA,YACZ;AAAA,YACA,YAAY,KAAK;AAAA,UAClB;AAAA,QACD,UAAE;AACD,gBAAM,SAAS,QAAQ;AAAA,QACxB;AAAA,MACD;AAAA,IACD,IACC;AAAA,IACJ,YACC,iBAAiB,OAAO,OAAO,eAAe,aAC3C;AAAA,MACA,OACC,OACA,YACmB;AACnB,cAAM,EAAE,IAAI,IAAI,kBAAkB,OAAO,OAAO;AAChD,cAAM,WAAW,aAAa,GAAG;AACjC,YAAI;AACH,gBAAM,YAAY,YAAY,IAAI;AAClC,gBAAM,OAAO,gBACV,gBAAgB,OAAO,IAAI,IAC3B,MAAM,OAAO;AAAA,YACb;AAAA,YACA;AAAA,UACD;AACF,UAAAA,QAAO,EAAE,MAAM;AAAA,YACd,KAAK;AAAA,YACL,YAAY,YAAY,IAAI,IAAI;AAAA,UACjC,CAAC;AACD,mBAAS,OAAO;AAAA,QACjB,UAAE;AACD,gBAAM,SAAS,QAAQ;AAAA,QACxB;AAAA,MACD;AAAA,IACD,IACC;AAAA,IACJ,WACC,OAAO,OAAO,cAAc,cAC5B,qBAAqB,SAClB;AAAA,MACA,OACC,OACA,YAII;AACJ,cAAM,EAAE,KAAK,MAAM,IAAI;AAAA,UACtB;AAAA,UACA;AAAA,QACD;AACA,cAAM,WAAW,aAAa,GAAG;AACjC,YAAI;AACH,cAAI,CAAC,OAAO;AACX,kBAAM,SAAS,cAAc;AAAA,UAC9B;AACA,gBAAM,SAAS,sBAAsB;AACrC,cAAI,OAAO,OAAO,cAAc,YAAY;AAC3C,kBAAM,OAAO,UAAU,UAAU,KAAK;AAAA,UACvC;AAAA,QACD,SAASI,QAAO;AACf,gBAAM,SAAS,cAAc;AAC7B,gBAAMA;AAAA,QACP,UAAE;AACD,gBAAM,SAAS,QAAQ;AAAA,QACxB;AAAA,MACD;AAAA,IACD,IACC;AAAA,IACJ,QACC,OAAO,OAAO,WAAW,aACtB;AAAA,MACA,OACC,OACA,YACI;AACJ,cAAM,EAAE,IAAI,IAAI,kBAAkB,OAAO,OAAO;AAChD,cAAM,WAAW,aAAa,GAAG;AACjC,YAAI;AACH,gBAAM,YAAY,YAAY,IAAI;AAClC,gBAAM,OAAO,OAAO,QAAQ;AAC5B,UAAAJ,QAAO,EAAE,MAAM;AAAA,YACd,KAAK;AAAA,YACL,YAAY,YAAY,IAAI,IAAI;AAAA,UACjC,CAAC;AAAA,QACF,UAAE;AACD,gBAAM,SAAS,QAAQ;AAAA,QACxB;AAAA,MACD;AAAA,IACD,IACC;AAAA,IACJ,oBACC,OAAO,OAAO,uBAAuB,aAClC;AAAA,MACA,OACC,OACA,YACI;AACJ,cAAM,EAAE,IAAI,IAAI,kBAAkB,OAAO,OAAO;AAChD,cAAM,WAAW,aAAa,GAAG;AACjC,YAAI;AACH,gBAAM,OAAO,mBAAmB,QAAQ;AAAA,QACzC,UAAE;AACD,gBAAM,SAAS,QAAQ;AAAA,QACxB;AAAA,MACD;AAAA,IACD,IACC;AAAA,IACJ,SAAS;AAAA,MACR,OAAO,OAAgB,YAAyC;AAC/D,cAAM,EAAE,IAAI,IAAI,kBAAkB,OAAO,OAAO;AAChD,cAAM,WAAW,aAAa,GAAG;AACjC,YAAI;AACH,cAAI,SAAS;AACZ,gBAAI;AACH,oBAAM,QAAQ,QAAQ;AAAA,YACvB,UAAE;AACD,kBAAI,QAAQ,SAAS,QAAQ;AAG5B,sBAAM,QAAQ;AAAA,kBACb;AAAA,kBACA,SAAS,iBAAiB,MAAM;AAAA,gBACjC;AAAA,cACD,OAAO;AACN,sBAAM,SAAS,UAAU,EAAE,WAAW,KAAK,CAAC;AAAA,cAC7C;AAAA,YACD;AAAA,UACD;AAAA,QACD,UAAE;AACD,cAAI;AACH,kBAAM,+BAA+B,SAAS,GAAG;AAAA,UAClD,UAAE;AACD,kBAAM,SAAS,QAAQ;AAAA,UACxB;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,IACA,WAAW;AAAA,MACV,OAAO,OAAgB,YAAyC;AAC/D,cAAM,EAAE,IAAI,IAAI,kBAAkB,OAAO,OAAO;AAChD,cAAM,WAAW,aAAa,GAAG;AACjC,YAAI;AACH,cAAI,OAAO,OAAO,cAAc,YAAY;AAC3C,kBAAM,OAAO,UAAU,QAAQ;AAAA,UAChC;AAAA,QACD,UAAE;AACD,+BAAqB,SAAS,GAAG;AACjC,gBAAM,SAAS,cAAc;AAC7B,kCAAwB,SAAS,GAAG;AACpC,gBAAM,SAAS,QAAQ;AAAA,QACxB;AAAA,MACD;AAAA,IACD;AAAA,IACA,iBACC,OAAO,OAAO,oBAAoB,aAC/B;AAAA,MACA,OACC,OACA,YAUI;AACJ,cAAM,EAAE,KAAK,QAAQ,QAAQ,IAAI;AAAA,UAChC;AAAA,UACA;AAAA,QACD;AACA,cAAM,WAAW;AAAA,UAChB;AAAA,UACA,UAAU,aAAa,OAAO,IAAI;AAAA,QACnC;AACA,YAAI;AACH,gBAAM,OAAO;AAAA,YACZ;AAAA,YACA;AAAA,cACC,aAAa;AAAA,cACb,YAAY,MAAM;AAAA,YACnB;AAAA,UACD;AAAA,QACD,UAAE;AACD,gBAAM,SAAS,QAAQ;AAAA,QACxB;AAAA,MACD;AAAA,IACD,IACC;AAAA,IACJ,iBACC,sBAAsB,sBACnB;AAAA,MACA,OACC,OACA,YAW2B;AAC3B,cAAM,EAAE,KAAK,MAAM,QAAQ,QAAQ,IAClC,kBAAkB,OAAO,OAAO;AACjC,cAAM,WAAW;AAAA,UAChB;AAAA,UACA,UAAU,aAAa,OAAO,IAAI;AAAA,QACnC;AACA,cAAM,cAAc,IAAI;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,WACA;AAAA,YAAe,MACd,QAAQ;AAAA,cACP;AAAA,cACA;AAAA,YACD;AAAA,UACD;AAAA,QACF;AACA,YAAI;AACH,gBAAM,gBAAgB,qBACnB,gBAAgB,OAAO,SAAS,IAChC,MAAM,OAAO;AAAA,YACb;AAAA,YACA;AAAA,cACC,aAAa;AAAA,cACb,YAAY,MAAM;AAAA,YACnB;AAAA,UACD;AACF,sBAAY,gBAAgB,aAAa;AACzC,iBAAO,YAAY,aAAa;AAAA,QACjC,UAAE;AACD,gBAAM,SAAS,QAAQ;AAAA,QACxB;AAAA,MACD;AAAA,IACD,IACC;AAAA,IACJ,WACC,OAAO,OAAO,cAAc,aACzB;AAAA,MACA,OACC,OACA,YAUI;AACJ,cAAM,EAAE,KAAK,MAAM,QAAQ,IAAI;AAAA,UAC9B;AAAA,UACA;AAAA,QACD;AACA,cAAM,WAAW;AAAA,UAChB;AAAA,UACA,UAAU,aAAa,OAAO,IAAI;AAAA,QACnC;AACA,cAAM,cAAc,IAAI;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,WACA;AAAA,YAAe,MACd,QAAQ;AAAA,cACP;AAAA,cACA;AAAA,YACD;AAAA,UACD;AAAA,QACF;AACA,YAAI;AACH,gBAAM,OAAO;AAAA,YACZ,OAAO,OAAO,UAAU;AAAA,cACvB,MAAM;AAAA,YACP,CAAC;AAAA,YACD;AAAA,UACD;AAAA,QACD,UAAE;AACD,gBAAM,SAAS,QAAQ;AAAA,QACxB;AAAA,MACD;AAAA,IACD,IACC;AAAA,IACJ,mBAAmB,0BAChB;AAAA,MACA,OACC,OACA,YAII;AACJ,cAAM,EAAE,KAAK,KAAK,IAAI,kBAAkB,OAAO,OAAO;AACtD,cAAM,WAAW,YAAY,KAAK,IAAI;AACtC,YAAI;AAGH,cAAI,OAAO,OAAO,iBAAiB,YAAY;AAC9C,kBAAM,OAAO;AAAA,cACZ;AAAA,cACA,IAAI;AAAA,gBACH;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,CAAC,WACA;AAAA,kBAAe,MACd,QAAQ;AAAA,oBACP;AAAA,oBACA;AAAA,kBACD;AAAA,gBACD;AAAA,cACF;AAAA,YACD;AAAA,UACD;AAAA,QACD,UAAE;AACD,gBAAM,SAAS,QAAQ;AAAA,QACxB;AAAA,MACD;AAAA,IACD,IACC;AAAA,IACH,mBACC,aAAa,UACb,OAAO,OAAO,aAAa,MAAM,EAAE;AAAA,MAClC,CAAC,WACA,OAAQ,OACN,iBAAiB;AAAA,IACrB,IACG;AAAA,MACA,OACC,OACA,YAKI;AACJ,cAAM,EAAE,KAAK,MAAM,UAAU,IAAI;AAAA,UAChC;AAAA,UACA;AAAA,QACD;AACA,cAAM,WAAW,YAAY,KAAK,IAAI;AACtC,YAAI;AACH,gBAAM,eAAe;AAAA,YACpB,aAAa;AAAA,YACb;AAAA,UACD;AACA,cAAI,CAAC,cAAc;AAClB;AAAA,UACD;AACA,gBAAM,SAAS,MAAM,aAAa,QAAQ;AAC1C,cAAI,OAAO,WAAW,WAAW;AAChC,kBAAM,IAAI;AAAA,cACT;AAAA,YACD;AAAA,UACD;AACA,cAAI,CAAC,QAAQ;AACZ,kBAAM,eAAe;AAAA,UACtB;AAAA,QACD,UAAE;AACD,gBAAM,SAAS,QAAQ;AAAA,QACxB;AAAA,MACD;AAAA,IACD,IACC;AAAA,IACJ,wBACC,OAAO,OAAO,2BAA2B,aACtC;AAAA,MACA,OACC,OACA,YAMI;AACJ,cAAM,EAAE,KAAK,MAAM,MAAM,OAAO,IAC/B,kBAAkB,OAAO,OAAO;AACjC,cAAM,WAAW,aAAa,GAAG;AACjC,YAAI;AACH,iBAAO;AAAA,YACN,MAAM,OAAO;AAAA,cACZ;AAAA,cACA;AAAA,cACA,WAAW,IAAI;AAAA,cACf,YAAY,MAAM;AAAA,YACnB;AAAA,UACD;AAAA,QACD,UAAE;AACD,gBAAM,SAAS,QAAQ;AAAA,QACxB;AAAA,MACD;AAAA,IACD,IACC;AAAA,IACJ,WAAW;AAAA,MACV,OACC,OACA,YAUI;AACJ,YAAI;AACH,gBAAM,EAAE,KAAK,SAAS,YAAY,IAAI;AAAA,YACrC;AAAA,YACA;AAAA,UACD;AACA,gBAAM,YAAY,aAAa,OAAO;AACtC,gBAAM,oBACL,MAAM;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACD;AACD,cAAI,mBAAmB;AACtB,mBAAO,MAAM,sBAAsB,iBAAiB;AAAA,UACrD;AAEA,cAAI,OAAO,OAAO,cAAc,YAAY;AAC3C,mBAAO,MAAM;AAAA,cACZ,IAAI,SAAS,MAAM,EAAE,QAAQ,IAAI,CAAC;AAAA,YACnC;AAAA,UACD;AAEA,gBAAM,gBACL,UAAU,QAAQ,IAAI,kBAAkB;AACzC,cAAI;AAGJ,cAAI;AACJ,cAAI;AACH,kBAAM,aAAa;AAAA,cAClB,aAAa;AAAA,cACb,gBACG,KAAK,MAAM,aAAa,IACxB;AAAA,YACJ;AACA,mBAAO,MAAM;AAAA,cAAW,MACvB,QAAQ;AAAA,gBACP;AAAA,gBACA,YAAY,UAAU;AAAA,gBACtB;AAAA,cACD;AAAA,YACD;AACA,yBAAa;AAAA,cACZ;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACD;AACA,kBAAM,WAAW,MAAM,OAAO;AAAA,cAC7B;AAAA,cACA;AAAA,YACD;AACA,gBAAI,EAAE,oBAAoB,WAAW;AACpC,oBAAM,IAAI;AAAA,gBACT;AAAA,cACD;AAAA,YACD;AACA,mBAAO,MAAM,sBAAsB,QAAQ;AAAA,UAC5C,UAAE;AACD,mBAAM,yCAAY;AAClB,gBAAI,MAAM;AACT,oBAAM,QAAQ,eAAe,IAAI;AAAA,YAClC;AAAA,UACD;AAAA,QACD,SAASI,QAAO;AACf,UAAAJ,QAAO,EAAE,MAAM;AAAA,YACd,KAAK;AAAA,YACL,OAAAI;AAAA,UACD,CAAC;AACD,gBAAMA;AAAA,QACP;AAAA,MACD;AAAA,IACD;AAAA,IACA,aACC,OAAO,OAAO,gBAAgB,aAC3B;AAAA,MACA,OACC,OACA,YAWI;AACJ,cAAM,EAAE,KAAK,MAAM,IAAI,QAAQ,IAC9B,kBAAkB,OAAO,OAAO;AACjC,cAAM,YAAY,UACf,aAAa,OAAO,IACpB;AACH,cAAM,WAAW,YAAY,KAAK,MAAM,SAAS;AACjD,YAAI;AACH,gBAAM,OAAO;AAAA,YACZ;AAAA,YACA,IAAI;AAAA,cACH;AAAA,cACA,IAAI,uBAAuB,SAAS,EAAE;AAAA,YACvC;AAAA,UACD;AAAA,QACD,UAAE;AACD,gBAAM,SAAS,QAAQ;AAAA,QACxB;AAAA,MACD;AAAA,IACD,IACC;AAAA,IACJ,MAAM,MAAM;AACX,YAAM,MAAM,eAAe,OAAO,GAAG;AACrC,UAAI,CAAC,KAAK;AACT,eAAO;AAAA,MACR;AAEA,aAAO;AAAA,QACN,OACC,OACA,YACI;AACJ,gBAAM,EAAE,IAAI,IAAI,kBAAkB,OAAO,OAAO;AAChD,gBAAM,UAAU,eAAe,MAAM,QAAQ,QAAQ,GAAG,CAAC;AACzD,gBAAM,WAAW,aAAa,GAAG;AACjC,0CAAgC,IAAI,SAAS,IAAI;AACjD,cAAI;AACH,kBAAM,IAAI,QAAQ;AAAA,UACnB,UAAE;AACD,4CAAgC,IAAI,SAAS,KAAK;AAClD,kBAAM,SAAS,QAAQ;AAAA,UACxB;AAAA,QACD;AAAA,MACD;AAAA,IACD,GAAG;AAAA,IACH,oBACC,sBAAsB,OAAO,GAAG,MAAM,SACnC;AAAA,MACA,OACC,OACA,YACI;AA/tIX,YAAAH;AAguIO,cAAM,EAAE,IAAI,IAAI,kBAAkB,OAAO,OAAO;AAChD,cAAM,WACLA,MAAA,2BAA2B,GAAG,MAA9B,gBAAAA,IAAiC;AAClC,eAAO,WAAW,OACf,SACA,YAAY,OAAO;AAAA,MACvB;AAAA,IACD,IACC;AAAA,IACJ,gBACC,sBAAsB,OAAO,GAAG,MAAM,SACnC;AAAA,MACA,OACC,OACA,YAII;AACJ,cAAM,EAAE,KAAK,QAAQ,IAAI;AAAA,UACxB;AAAA,UACA;AAAA,QACD;AACA,cAAM,oBACL,2BAA2B,GAAG;AAC/B,YAAI,EAAC,uDAAmB,iBAAgB;AACvC,iBAAO;AAAA,QACR;AAEA,cAAM,UACJ,MAAM,kBAAkB;AAAA,UACxB;AAAA,QACD,KAAM;AACP,eAAO,WAAW,OACf,SACA,YAAY,OAAO;AAAA,MACvB;AAAA,IACD,IACC;AAAA,IACJ,SAAS,OAAO;AAAA,MACf,OAAO,QAAQ,cAAc,EAAE,IAAI,CAAC,CAAC,MAAM,OAAO,MAAM;AAAA,QACvD;AAAA,QACA;AAAA,UACC,OACC,OACA,YAOI;AACJ,kBAAM,EAAE,KAAK,MAAM,MAAM,YAAY,IACpC,kBAAkB,OAAO,OAAO;AACjC,kBAAM,WACL,QAAQ,OACL,YAAY,KAAK,MAAM,QAAW,WAAW,IAC7C,aAAa,KAAK,QAAW,WAAW;AAC5C,gBAAI;AACH,qBAAO;AAAA,gBACN,MAAM;AAAA,kBACL;AAAA,kBACA,GAAG;AAAA,oBACF,aAAa;AAAA,oBACb;AAAA,oBACA,WAAW,IAAI;AAAA,kBAChB;AAAA,gBACD;AAAA,cACD;AAAA,YACD,UAAE;AACD,oBAAM,SAAS,QAAQ;AAAA,YACxB;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAC;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACZ,OACC,OACA,YAeI;AACJ,cAAM;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD,IAAI,kBAAkB,OAAO,OAAO;AACpC,cAAM,YAAY,aAAa,OAAO;AACtC,cAAM,WAAW;AAAA,UAChB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD;AACA,YAAI;AACH,cACC,CAAC,aAAa,UACd,CAAC,mBAAmB,aAAa,QAAQ,IAAI,GAC5C;AACD,mBAAO,EAAE,QAAQ,YAAY;AAAA,UAC9B;AAEA,gBAAM,aAAa;AAAA,YAClB,aAAa;AAAA,YACb;AAAA,UACD;AACA,cAAI,cAAc,CAAE,MAAM,WAAW,QAAQ,GAAI;AAChD,kBAAM,eAAe;AAAA,UACtB;AAEA,gBAAM,cAAc,YAAY,IAAI;AACpC,cAAI,MAAM;AACT,gBAAI;AACH,oBAAM,WACL,MAAM,SAAS,MAAM;AAAA,gBACpB;AAAA,gBACA;AAAA,gBACA;AAAA,kBACC,SACC,cAAc,UACd,cAAc,OACX,SACA,OAAO,SAAS;AAAA,gBACrB;AAAA,cACD;AACD,qBAAO;AAAA,gBACN,QAAQ;AAAA,gBACR,UACC,aAAa,SACV,SACA,YAAY,QAAQ;AAAA,cACzB;AAAA,YACD,SAASG,QAAO;AACf,kBACEA,OACC,UAAU,WACXA,OACC,SAAS,aACV;AACD,uBAAO,EAAE,QAAQ,WAAW;AAAA,cAC7B;AACA,oBAAMA;AAAA,YACP;AAAA,UACD;AAEA,gBAAM,SAAS,MAAM,KAAK,MAAM,WAAW;AAC3C,iBAAO,EAAE,QAAQ,YAAY;AAAA,QAC9B,UAAE;AACD,gBAAM,SAAS,QAAQ;AAAA,QACxB;AAAA,MACD;AAAA,IACD;AAAA,IACA,gBAAgB;AAAA,MACf,OACC,OACA,YAII;AACJ,cAAM,EAAE,KAAK,OAAO,IAAI,kBAAkB,OAAO,OAAO;AACxD,cAAM,WAAW,aAAa,GAAG;AACjC,YAAI;AACH,iBAAO,SAAS,iBAAiB,MAAM;AAAA,QACxC,UAAE;AACD,gBAAM,SAAS,QAAQ;AAAA,QACxB;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEA,SAAO,QAAQ;AAAA,IACd;AAAA,IACA,iBAAiB,YAAY,cAAc;AAAA,EAC5C;AACD;AAEA,eAAsB,iBACrB,QAC8B;AA56I/B;AA66IC,MAAI,CAAC,OAAO,UAAU;AACrB,UAAM,iCAAiC;AAAA,EACxC;AAEA,QAAM,cAAkC;AAAA,IACvC,SAAS,OAAO,MAAM;AAAA,IACtB,UAAU,OAAO;AAAA,IACjB,OAAO,OAAO;AAAA,IACd,WAAW,OAAO;AAAA,IAClB,UAAU,OAAO,MAAM;AAAA,IACvB,8BAA8B;AAAA,IAC9B,oBAAoB,OAAO,WAAW;AAAA,IACtC,0BAA0B;AAAA,IAC1B,0BAA0B,OAAO;AAAA,IACjC,2BAA2B,OAAO;AAAA,IAClC,uBAAuB,OAAO;AAAA,IAC9B,4BAA4B,OAAO;AAAA,IACnC,gCAAgC,OAAO,WAAW;AAAA,EACnD;AAEA,MAAI,OAAO,aAAa;AACvB,UAAM,EAAE,cAAc,IAAI,MAAM,cAAc;AAC9C,gBAAY,mBAAmB,cAAc;AAAA,EAC9C;AACA,OAAI,YAAO,SAAP,mBAAa,SAAS;AACzB,gBAAY,qBACX,gBAAgB,6BAA6B,KAAK;AAAA,EACpD;AAEA,SAAO;AACR;AAEA,eAAsB,yBACrB,QACA,SAKE;AAp9IH;AAq9IC,QACC,YAAO,SAAP,mBAAa,YACb,gBAAgB,6BAA6B,MAAM,QAClD;AACD,qBAAiB,+BAA+B,OAAO;AAAA,EACxD;AAEA,QAAM,WAAW,QAAQ,eAAe;AAExC,aAAW,CAAC,MAAM,UAAU,KAAK,OAAO,QAAQ,OAAO,GAAG,GAAG;AAC5D,YAAQ;AAAA,MACP;AAAA,MACA;AAAA,MACA,mBAAmB,SAAS,QAAQ,UAAU;AAAA,IAC/C;AAAA,EACD;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,aAAa,MAAM,iBAAiB,MAAM;AAAA,EAC3C;AACD;AAcA,eAAsB,wBAAwB,QAI3C;AACF,QAAM,UAAU,MAAM,sBAAsB,MAAM;AAClD,SAAO;AAAA,IACN,uBAAuB,QAAQ,OAAO;AAAA,IACtC;AAAA,EACD;AACD;;;AMp/IA,SAAS,eAAe,QAAgC;AACvD,UAAQ,QAAQ;AAAA,IACf,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,EACT;AACD;AAEA,SAAS,qBAAqB,QAA8B;AAC3D,MAAI,QAAQ,QAAQ,GAAG;AACtB,YAAQ,KAAK,eAAe,MAAM,CAAC;AAAA,EACpC;AACA,UAAQ,KAAK,QAAQ,KAAK,MAAM;AACjC;AAiBO,IAAM,WAAN,MAAyC;AAAA,EAC/C;AAAA,EACgB;AAAA,EAEhB,IAAI,SAAiC;AACpC,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,cAA8B;AAC7B,WAAO,qBAAqB,MAAM,KAAK,OAAO;AAAA,EAC/C;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EACrB,oBAA0C;AAAA,EAC1C,kBAA+D,CAAC;AAAA,EAEhE,YAAY,QAAgC;AAC3C,SAAK,UAAU;AACf,SAAK,SAAS;AAAA,MACb,QAAQ,MAAM,KAAK,aAAa;AAAA,MAChC,UAAU,MAAM,KAAK,eAAe;AAAA,MACpC,mBAAmB,CAAC,YACnB,KAAK,wBAAwB,OAAO;AAAA,IACtC;AAAA,EACD;AAAA,EAEA,gCAAgC,QAAmD;AAClF,QAAI,CAAC,OAAO,cAAe,QAAO;AAElC,QAAI,CAAC,KAAK,iCAAiC;AAC1C,WAAK,kCAAkC,wBAAwB,MAAM,EAAE;AAAA,QACtE,CAAC,UAAU;AACV,eAAK,kCAAkC;AACvC,gBAAM;AAAA,QACP;AAAA,MACD;AACA,WAAK,gCAAgC,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IACpD;AAEA,WAAO,KAAK;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAa,QAAQ,SAAqC;AAvG3D;AAwGE,UAAM,SAAS,KAAK,YAAY;AAChC,SAAK,cAAc,QAAQ,YAAY;AAEvC,QAAI,CAAC,KAAK,2BAA2B;AACpC,WAAK,4BAA4B,wBAAwB,MAAM;AAAA,IAChE;AAEA,UAAM,EAAE,SAAS,UAAU,YAAY,IACtC,MAAM,KAAK;AACZ,UAAM,iBAAiB;AAAA,MACtB;AAAA,MACA,YAAY,sBAAsB;AAAA,IACnC;AACA,UAAM,oBAAoB;AAAA,MACzB;AAAA,MACA,YAAY,sBAAsB;AAAA,IACnC;AACA,UAAM,4BACL,aAAQ,QAAQ,IAAI,YAAY,MAAhC,mBAAmC,WAAW,oBAAmB;AAElE,QAAI,gBAAgB;AACnB,UAAI;AACH,cAAM,KAAK,gCAAgC,MAAM;AAAA,MAClD,SAAS,OAAO;AACf,eAAO,IAAI;AAAA,UACV,KAAK,UAAU;AAAA,YACd,OAAO;AAAA,YACP,MAAM;AAAA,YACN,SAAS;AAAA,YACT,UAAU;AAAA,UACX,CAAC;AAAA,UACD;AAAA,YACC,QAAQ;AAAA,YACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,UAC/C;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,UAAM,cAAc,QAAQ,wBAAwB;AACpD,UAAM,QAAQ,MAAM,QAAQ,wBAAwB,WAAW;AAC/D,QAAI,QAAQ,OAAO,SAAS;AAC3B,YAAM;AAAA,IACP,OAAO;AACN,cAAQ,OAAO,iBAAiB,SAAS,OAAO,EAAE,MAAM,KAAK,CAAC;AAAA,IAC/D;AAEA,UAAM,cAAc,MAAM,QAAQ,YAAY;AAC9C,QACC,kBACA,YAAY,aAAa,YAAY,gCACpC;AACD,cAAQ,OAAO,oBAAoB,SAAS,KAAK;AACjD,cAAQ,wBAAwB,WAAW;AAC3C,aAAO,IAAI;AAAA,QACV,KAAK,UAAU;AAAA,UACd,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,uCAAuC,YAAY,UAAU,oBAAoB,YAAY,8BAA8B;AAAA,UACpI,UAAU;AAAA,QACX,CAAC;AAAA,QACD;AAAA,UACC,QAAQ;AAAA,UACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAC/C;AAAA,MACD;AAAA,IACD;AAEA,QAAI,UAAU;AACd,QAAI;AAGJ,UAAM,sBAAyC,CAAC;AAChD,UAAM,sBAAsB,MAAM;AAjLpC,UAAAC;AAkLG,aACC,kBACC,cAAc,eAAe,KAAK,KACnC,oBAAoB,SAAS,GAC5B;AACD,SAAAA,MAAA,oBAAoB,MAAM,MAA1B,gBAAAA;AAAA,MACD;AAAA,IACD;AACA,UAAM,sBAAsB,YAAY;AACvC,UAAI,CAAC,kBAAkB,cAAc,eAAe,KAAK,EAAG;AAC5D,YAAM,IAAI,QAAc,CAAC,YAAY;AACpC,4BAAoB,KAAK,OAAO;AAAA,MACjC,CAAC;AAAA,IACF;AACA,UAAM,SAAS,IAAI,eAA2B;AAAA,MAC7C,MAAM,YAAY;AACjB,wBAAgB;AAAA,MACjB;AAAA,MACA,OAAO;AACN,4BAAoB;AAAA,MACrB;AAAA,MACA,SAAS;AACR,kBAAU;AACV,4BAAoB;AACpB,gBAAQ,wBAAwB,WAAW;AAAA,MAC5C;AAAA,IACD,CAAC;AAED,UAAM,UAAkC,CAAC;AACzC,YAAQ,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AACvC,cAAQ,GAAG,IAAI;AAAA,IAChB,CAAC;AAED,QAAI;AACJ,QAAI;AACH,aAAO,MAAM,QAAQ;AAAA,QACpB;AAAA,QACA;AAAA,UACC,QAAQ,QAAQ;AAAA,UAChB,KAAK,QAAQ;AAAA,UACb;AAAA,UACA,MAAM,IAAI,WAAW,WAAW;AAAA,QACjC;AAAA,QACA,OACC,OACAC,WASI;AACJ,cAAI,MAAO,OAAM;AACjB,cAAI,CAACA,UAAS,QAAS;AACvB,cAAIA,OAAM,SAAS,SAAS;AAC3B,kBAAM,oBAAoB;AAC1B,gBAAI,QAAS;AACb,gBAAIA,OAAM,MAAO,gDAAe,QAAQA,OAAM;AAC9C;AAAA,UACD;AAEA,oBAAU;AACV,8BAAoB;AACpB,kBAAQ,OAAO,oBAAoB,SAAS,KAAK;AACjD,cAAIA,OAAM,OAAO;AAChB,2DAAe;AAAA,cACd,IAAI;AAAA,gBACH,GAAGA,OAAM,MAAM,KAAK,IAAIA,OAAM,MAAM,IAAI,KAAKA,OAAM,MAAM,OAAO;AAAA,cACjE;AAAA;AAAA,UAEF,OAAO;AACN,2DAAe;AAAA,UAChB;AAAA,QACD;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD,SAAS,KAAK;AAGb,cAAQ,OAAO,oBAAoB,SAAS,KAAK;AACjD,cAAQ,wBAAwB,WAAW;AAC3C,YAAM;AAAA,IACP;AAEA,QAAI,qBAAqB,CAAC,yBAAyB;AAClD,UAAI;AACH,cAAM,KAAK,gCAAgC,MAAM;AAAA,MAClD,SAAS,OAAO;AACf,eAAO,IAAI;AAAA,UACV,KAAK,UAAU;AAAA,YACd,OAAO;AAAA,YACP,MAAM;AAAA,YACN,SAAS;AAAA,YACT,UAAU;AAAA,UACX,CAAC;AAAA,UACD;AAAA,YACC,QAAQ;AAAA,YACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,UAC/C;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,WAAO,IAAI,SAAS,QAAQ;AAAA,MAC3B,QAAQ,KAAK;AAAA,MACb,SAAS,KAAK;AAAA,IACf,CAAC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUO,QAA2B;AACjC,WAAO;AAAA,MACN,OAAO,CAAC,YAAY,KAAK,QAAQ,OAAO;AAAA,IACzC;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAkC;AACvC,UAAM,aAAa,MAAM,KAAK,0BAA0B;AACxD,QAAI,CAAC,YAAY;AAChB,aAAO,kBAAkB,KAAK;AAAA,QAC7B,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,MACV,CAAC;AAAA,IACF;AAEA,UAAM,EAAE,SAAS,SAAS,IAAI;AAC9B,QAAI,CAAC,QAAQ,gBAAgB;AAC5B,aAAO,kBAAkB,KAAK;AAAA,QAC7B,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,MACV,CAAC;AAAA,IACF;AAEA,UAAM,WAAW,MAAM,QAAQ,eAAe,QAAQ;AACtD,WAAO,IAAI,SAAS,IAAI,WAAW,SAAS,IAAI,GAAG;AAAA,MAClD,QAAQ,SAAS;AAAA,MACjB,SAAS,SAAS;AAAA,IACnB,CAAC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAoC;AACzC,UAAM,aAAa,MAAM,KAAK,0BAA0B;AACxD,QAAI,CAAC,YAAY;AAChB,aAAO,IAAI,SAAS,0BAA0B;AAAA,QAC7C,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,4BAA4B;AAAA,MACxD,CAAC;AAAA,IACF;AAEA,UAAM,EAAE,SAAS,SAAS,IAAI;AAC9B,QAAI,CAAC,QAAQ,kBAAkB;AAC9B,aAAO,IAAI,SAAS,+CAA+C;AAAA,QAClE,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,4BAA4B;AAAA,MACxD,CAAC;AAAA,IACF;AAEA,UAAM,WAAW,MAAM,QAAQ,iBAAiB,QAAQ;AACxD,WAAO,IAAI,SAAS,IAAI,WAAW,SAAS,IAAI,GAAG;AAAA,MAClD,QAAQ,SAAS;AAAA,MACjB,SAAS,SAAS;AAAA,IACnB,CAAC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,wBAAwB,UAAuC;AACpE,UAAM,aAAa,MAAM,KAAK,0BAA0B;AACxD,QAAI,CAAC,YAAY;AAChB,aAAO,IAAI,SAAS,0BAA0B;AAAA,QAC7C,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,4BAA4B;AAAA,MACxD,CAAC;AAAA,IACF;AAEA,UAAM,EAAE,SAAS,SAAS,IAAI;AAC9B,QAAI,CAAC,QAAQ,iBAAiB;AAC7B,aAAO,IAAI,SAAS,+CAA+C;AAAA,QAClE,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,4BAA4B;AAAA,MACxD,CAAC;AAAA,IACF;AAEA,UAAM,WAAW,MAAM,QAAQ,gBAAgB,QAAQ;AACvD,WAAO,IAAI,SAAS,IAAI,WAAW,SAAS,IAAI,GAAG;AAAA,MAClD,QAAQ,SAAS;AAAA,MACjB,SAAS,SAAS;AAAA,IACnB,CAAC;AAAA,EACF;AAAA,EAEA,MAAM,4BAEJ;AACD,UAAM,aAAa;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AAAA,IACN,EAAE;AAAA,MAAO,CAAC,cACT,cAAc;AAAA,IACf;AAEA,QAAI,WAAW,WAAW,EAAG,QAAO;AACpC,WAAO,MAAM,WAAW,CAAC;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,QAAwB,cAAuB;AAC1D,QAAI,CAAC,KAAK,sBAAsB;AAC/B,YAAM,4BAA4B,wBAAwB,MAAM;AAChE,WAAK,iCAAiC;AACtC,WAAK,uBAAuB,0BAC1B,KAAK,OAAO,EAAE,SAAS,UAAU,YAAY,MAAM;AACnD,cAAM,QAAQ,cAAc,UAAU,WAAW;AAAA,MAClD,CAAC,EACA,MAAM,CAAC,QAAQ;AAKf,QAAAC,QAAO,EAAE,KAAK,EAAE,IAAI,GAAG,gCAAgC;AAAA,MACxD,CAAC;AAMF,WAAK,uBAAuB,QAAQ,yBAAyB;AAAA,IAC9D;AACA,QAAI,cAAc;AACjB,WAAK,cAAc,QAAQ,WAAW;AAAA,IACvC;AAAA,EACD;AAAA,EAEA,uBACC,QACA,2BACO;AAnbT;AAobE,QAAI,KAAK,mBAAoB;AAC7B,SAAI,YAAO,aAAP,mBAAiB,sBAAuB;AAG5C,QACC,OAAO,YAAY,eACnB,OAAO,QAAQ,OAAO,cACtB,OAAO,QAAQ,SAAS,YACvB;AACD;AAAA,IACD;AACA,SAAK,qBAAqB;AAE1B,UAAM,UAAU,CAAC,WAA2B;AAC3C,YAAM,UAAU,MACf,KAAK;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,MACD;AACD,WAAK,gBAAgB,MAAM,IAAI;AAC/B,cAAQ,GAAG,QAAQ,OAAO;AAAA,IAC3B;AACA,YAAQ,QAAQ;AAChB,YAAQ,SAAS;AAAA,EAClB;AAAA,EAEA,kBACC,QACA,QACA,2BACO;AACP,QAAI,KAAK,sBAAsB,MAAM;AAKpC,WAAK,sBAAsB;AAC3B,2BAAqB,MAAM;AAC3B;AAAA,IACD;AACA,SAAK,oBAAoB,KAAK;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,IACD,EAAE,MAAM,CAAC,QAAQ;AAChB,MAAAA,QAAO,EAAE,KAAK,EAAE,IAAI,GAAG,gBAAgB;AAAA,IACxC,CAAC;AAAA,EACF;AAAA,EAEA,MAAM,aACL,QACA,QACA,2BACgB;AA1elB;AA2eE,UAAM,kBACL,YAAO,aAAP,mBAAiB,kBAChB,MAAM,KAAK,sBAAsB,yBAAyB,KAC3D,KAAK,KAAK;AAIX,UAAM,QAAQ,YAAY;AAKzB,YAAM,aAA8B;AAAA,SAClC,YAAY;AACZ,cAAI;AACH,kBAAM,EAAE,SAAS,SAAS,IACzB,MAAM;AACP,kBAAM,QAAQ,iBAAiB,QAAQ;AAAA,UACxC,SAAS,KAAK;AACb,YAAAA,QAAO,EAAE;AAAA,cACR,EAAE,IAAI;AAAA,cACN;AAAA,YACD;AAAA,UACD;AAAA,QACD,GAAG;AAAA,MACJ;AACA,YAAM,2BAA2B,KAAK;AACtC,UAAI,6BAA6B,QAAW;AAC3C,mBAAW;AAAA,WACT,YAAY;AACZ,gBAAI;AACH,oBAAM,EAAE,SAAS,SAAS,IACzB,MAAM;AACP,oBAAM,QAAQ,iBAAiB,QAAQ;AAAA,YACxC,SAAS,KAAK;AACb,cAAAA,QAAO,EAAE;AAAA,gBACR,EAAE,IAAI;AAAA,gBACN;AAAA,cACD;AAAA,YACD;AAAA,UACD,GAAG;AAAA,QACJ;AAAA,MACD;AACA,YAAM,QAAQ,IAAI,UAAU;AAE5B,YAAM,sBAAsB,KAAK;AACjC,UAAI,wBAAwB,QAAW;AAItC,cAAM,oBAAoB,MAAM,MAAM,MAAS;AAAA,MAChD;AAAA,IACD;AACA,UAAM,QAAQ,KAAK;AAAA,MAClB,MAAM;AAAA,MACN,IAAI;AAAA,QAAc,CAAC,YAAS;AAliB/B,cAAAF,KAAA;AAmiBI,wBAAAA,MAAA,WAAW,SAAS,aAAa,GAAE,UAAnC,wBAAAA;AAAA;AAAA,MACD;AAAA,IACD,CAAC;AACD,SAAK,sBAAsB;AAC3B,yBAAqB,MAAM;AAAA,EAC5B;AAAA,EAEA,MAAM,sBACL,2BAC8B;AA5iBhC;AA6iBE,QAAI;AACH,YAAM,EAAE,SAAS,SAAS,IAAI,MAAM;AACpC,YAAM,cACL,QAAM,aAAQ,iCAAR,iCAAuC;AAC9C,UACC,gBAAgB,UAChB,OAAO,SAAS,WAAW,KAC3B,cAAc,GACb;AACD,eAAO;AAAA,MACR;AAAA,IACD,SAAS,KAAK;AACb,MAAAE,QAAO,EAAE;AAAA,QACR,EAAE,IAAI;AAAA,QACN;AAAA,MACD;AAAA,IACD;AACA,WAAO;AAAA,EACR;AAAA,EAEA,wBAA8B;AAC7B,eAAW,CAAC,QAAQ,OAAO,KAAK,OAAO;AAAA,MACtC,KAAK;AAAA,IACN,GAAqC;AACpC,UAAI,QAAS,SAAQ,eAAe,QAAQ,OAAO;AAAA,IACpD;AACA,SAAK,kBAAkB,CAAC;AAAA,EACzB;AAAA,EAEO,aAAa;AACnB,SAAK,YAAY,KAAK,YAAY,GAAG,IAAI;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWO,QAAQ;AACd,UAAM,SAAS,KAAK,YAAY;AAChC,SAAK,YAAY,QAAQ,IAAI;AAAA,EAC9B;AAAA,EAEA,cACC,QACA,MACO;AACP,QAAI,OAAO,aAAa,KAAK,gBAAiB;AAC9C,SAAK,kBAAkB;AAEvB,UAAM,UAAU,CAAC,OAAe,UAAkB;AACjD,YAAM,UAAU,IAAI,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,CAAC;AACzD,cAAQ,IAAI,OAAO,KAAK,IAAI,OAAO,GAAG,KAAK,EAAE;AAAA,IAC9C;AAEA,YAAQ,IAAI;AACZ,YAAQ;AAAA,MACP,cAAc,OAAO,cAAc,SAAS,eAAe,eAAe,WAAW;AAAA,IACtF;AAEA,QAAI,OAAO,cAAc,WAAW;AACnC,cAAQ,aAAa,OAAO,SAAS;AAAA,IACtC;AAEA,QAAI,OAAO,UAAU;AACpB,YAAM,eACL,OAAO,aAAa,kBAAkB,iBAAiB;AACxD,cAAQ,YAAY,GAAG,OAAO,QAAQ,KAAK,YAAY,GAAG;AAAA,IAC3D;AAEA,QAAI,SAAS,gBAAgB,OAAO,gBAAgB;AACnD,cAAQ,UAAU,OAAO,cAAc;AAAA,IACxC;AAEA,YAAQ,UAAU,OAAO,KAAK,OAAO,GAAG,EAAE,OAAO,SAAS,CAAC;AAC3D,YAAQ,IAAI;AAAA,EACb;AACD;AAEA,SAAS,yBAAyB,SAAkB,UAA2B;AAC9E,MAAI,QAAQ,WAAW,OAAQ,QAAO;AACtC,QAAM,SAAS,IAAI,IAAI,QAAQ,GAAG;AAClC,QAAM,iBACL,aAAa,MAAM,KAAK,IAAI,SAAS,QAAQ,cAAc,EAAE,CAAC;AAC/D,SAAO,OAAO,aAAa,GAAG,cAAc;AAC7C;AAEA,SAAS,4BAA4B,SAAkB,UAA2B;AACjF,MAAI,QAAQ,WAAW,MAAO,QAAO;AACrC,QAAM,SAAS,IAAI,IAAI,QAAQ,GAAG;AAClC,QAAM,iBACL,aAAa,MAAM,KAAK,IAAI,SAAS,QAAQ,cAAc,EAAE,CAAC;AAC/D,SAAO,OAAO,aAAa,GAAG,cAAc;AAC7C;AAEA,SAAS,kBAAkB,QAAgB,MAAyB;AACnE,SAAO,IAAI,SAAS,KAAK,UAAU,IAAI,GAAG;AAAA,IACzC;AAAA,IACA,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,EAC/C,CAAC;AACF;AAEO,SAAS,MACf,OACc;AACd,SAAO,IAAI,SAAS,KAAK;AAC1B;","names":["logger","logger","z","z","z","z","VirtualWebSocket","asRegistryHandle","asActorFactoryHandle","method","queue","event","isPromiseLike","VirtualWebSocket","event","logger","_a","_b","rows","error","_a","event","logger"]}