@rivetkit/engine 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1392) hide show
  1. package/LICENSE +203 -0
  2. package/artifacts/errors/actor.destroyed_during_creation.json +5 -0
  3. package/artifacts/errors/actor.destroyed_while_waiting_for_ready.json +5 -0
  4. package/artifacts/errors/actor.duplicate_key.json +5 -0
  5. package/artifacts/errors/actor.empty_key.json +5 -0
  6. package/artifacts/errors/actor.input_too_large.json +5 -0
  7. package/artifacts/errors/actor.key_reserved_in_different_datacenter.json +5 -0
  8. package/artifacts/errors/actor.key_too_large.json +5 -0
  9. package/artifacts/errors/actor.kv_key_not_found.json +5 -0
  10. package/artifacts/errors/actor.namespace_not_found.json +5 -0
  11. package/artifacts/errors/actor.no_runners_available.json +5 -0
  12. package/artifacts/errors/actor.not_found.json +5 -0
  13. package/artifacts/errors/api.bad_request.json +5 -0
  14. package/artifacts/errors/api.forbidden.json +5 -0
  15. package/artifacts/errors/api.internal_error.json +5 -0
  16. package/artifacts/errors/api.not_found.json +5 -0
  17. package/artifacts/errors/api.rate_limited.json +5 -0
  18. package/artifacts/errors/api.unauthorized.json +5 -0
  19. package/artifacts/errors/datacenter.not_found.json +5 -0
  20. package/artifacts/errors/guard.actor_destroyed.json +5 -0
  21. package/artifacts/errors/guard.actor_not_found.json +5 -0
  22. package/artifacts/errors/guard.actor_ready_timeout.json +5 -0
  23. package/artifacts/errors/guard.connection_error.json +5 -0
  24. package/artifacts/errors/guard.http_request_build_failed.json +5 -0
  25. package/artifacts/errors/guard.missing_header.json +5 -0
  26. package/artifacts/errors/guard.must_use_regional_host.json +5 -0
  27. package/artifacts/errors/guard.no_route.json +5 -0
  28. package/artifacts/errors/guard.no_route_targets.json +5 -0
  29. package/artifacts/errors/guard.rate_limit.json +5 -0
  30. package/artifacts/errors/guard.request_build_error.json +5 -0
  31. package/artifacts/errors/guard.request_timeout.json +5 -0
  32. package/artifacts/errors/guard.retry_attempts_exceeded.json +5 -0
  33. package/artifacts/errors/guard.service_unavailable.json +5 -0
  34. package/artifacts/errors/guard.target_changed.json +5 -0
  35. package/artifacts/errors/guard.upstream_error.json +5 -0
  36. package/artifacts/errors/guard.uri_parse_error.json +5 -0
  37. package/artifacts/errors/guard.websocket_pending_limit_reached.json +5 -0
  38. package/artifacts/errors/guard.websocket_service_hibernate.json +5 -0
  39. package/artifacts/errors/guard.websocket_service_timeout.json +5 -0
  40. package/artifacts/errors/guard.websocket_service_unavailable.json +5 -0
  41. package/artifacts/errors/guard.wrong_addr_protocol.json +5 -0
  42. package/artifacts/errors/kv.leader_forwarding_failed.json +5 -0
  43. package/artifacts/errors/kv.no_leader_elected.json +5 -0
  44. package/artifacts/errors/kv.not_leader.json +5 -0
  45. package/artifacts/errors/kv.response_channel_closed.json +5 -0
  46. package/artifacts/errors/namespace.failed_to_create.json +5 -0
  47. package/artifacts/errors/namespace.invalid_name.json +5 -0
  48. package/artifacts/errors/namespace.invalid_update.json +5 -0
  49. package/artifacts/errors/namespace.name_not_unique.json +5 -0
  50. package/artifacts/errors/namespace.not_found.json +5 -0
  51. package/artifacts/errors/namespace.not_leader.json +5 -0
  52. package/artifacts/errors/runner.not_found.json +5 -0
  53. package/artifacts/errors/runner_config.invalid.json +5 -0
  54. package/artifacts/errors/runner_config.not_found.json +5 -0
  55. package/artifacts/errors/test.input_too_large.json +5 -0
  56. package/artifacts/errors/test.key_too_large.json +5 -0
  57. package/artifacts/errors/test.meta_error.json +5 -0
  58. package/artifacts/errors/test.not_found.json +5 -0
  59. package/artifacts/errors/test.simple_error.json +5 -0
  60. package/artifacts/errors/test.test_error.json +5 -0
  61. package/artifacts/errors/ups.publish_failed.json +5 -0
  62. package/artifacts/errors/ups.request_timeout.json +5 -0
  63. package/artifacts/errors/validation.invalid_input.json +5 -0
  64. package/artifacts/errors/validation.no_keys.json +5 -0
  65. package/artifacts/errors/validation.race_condition.json +5 -0
  66. package/artifacts/errors/validation.too_many_actor_ids.json +5 -0
  67. package/artifacts/errors/ws.connection_closed.json +5 -0
  68. package/artifacts/errors/ws.eviction.json +5 -0
  69. package/artifacts/errors/ws.invalid_initial_packet.json +5 -0
  70. package/artifacts/errors/ws.invalid_packet.json +5 -0
  71. package/artifacts/errors/ws.invalid_url.json +5 -0
  72. package/artifacts/errors/ws.timed_out_waiting_for_init.json +5 -0
  73. package/artifacts/openapi.json +1833 -0
  74. package/contrib-docs/ACTOR_KEY_RESERVATION.md +101 -0
  75. package/contrib-docs/API.md +11 -0
  76. package/contrib-docs/DOCKER.md +5 -0
  77. package/contrib-docs/ERRORS.md +13 -0
  78. package/contrib-docs/GUARD.md +76 -0
  79. package/contrib-docs/PEGBOARD_TUNNEL_RETRIES.md +83 -0
  80. package/contrib-docs/RUNNER_LIFECYCLE.md +172 -0
  81. package/contrib-docs/SDKS.md +9 -0
  82. package/contrib-docs/TEST_DEPENDENCIES.md +43 -0
  83. package/contrib-docs/design-choicse/EMBEDDED_KV.md +80 -0
  84. package/contrib-docs/operate/TRACING_RECONFIGURE.md +78 -0
  85. package/docker/dev/.gitattributes +1 -0
  86. package/docker/dev/README.md +74 -0
  87. package/docker/dev/clickhouse/client-config.xml +5 -0
  88. package/docker/dev/clickhouse/config.xml +52 -0
  89. package/docker/dev/clickhouse/init/01-create-otel-table.sql +107 -0
  90. package/docker/dev/clickhouse/users.xml +35 -0
  91. package/docker/dev/docker-compose.yml +217 -0
  92. package/docker/dev/grafana/dashboards/api.json +1240 -0
  93. package/docker/dev/grafana/dashboards/cache.json +1075 -0
  94. package/docker/dev/grafana/dashboards/futures.json +230 -0
  95. package/docker/dev/grafana/dashboards/gasoline.json +2477 -0
  96. package/docker/dev/grafana/dashboards/guard.json +1274 -0
  97. package/docker/dev/grafana/dashboards/tokio.json +1005 -0
  98. package/docker/dev/grafana/dashboards/traces.json +957 -0
  99. package/docker/dev/grafana/grafana.ini +14 -0
  100. package/docker/dev/grafana/provisioning/dashboards/dashboards.yaml +10 -0
  101. package/docker/dev/grafana/provisioning/datasources/datasources.yaml +30 -0
  102. package/docker/dev/otel-collector-client/config.yaml +39 -0
  103. package/docker/dev/otel-collector-server/config.yaml +72 -0
  104. package/docker/dev/postgres/init-db.sh +6 -0
  105. package/docker/dev/rivet-engine/config.jsonc +48 -0
  106. package/docker/dev/vector-client/vector.yaml +31 -0
  107. package/docker/dev/vector-server/vector.yaml +61 -0
  108. package/docker/dev-host/.gitattributes +1 -0
  109. package/docker/dev-host/README.md +74 -0
  110. package/docker/dev-host/clickhouse/client-config.xml +5 -0
  111. package/docker/dev-host/clickhouse/config.xml +52 -0
  112. package/docker/dev-host/clickhouse/init/01-create-otel-table.sql +107 -0
  113. package/docker/dev-host/clickhouse/users.xml +35 -0
  114. package/docker/dev-host/docker-compose.yml +190 -0
  115. package/docker/dev-host/grafana/dashboards/api.json +1240 -0
  116. package/docker/dev-host/grafana/dashboards/cache.json +1075 -0
  117. package/docker/dev-host/grafana/dashboards/futures.json +230 -0
  118. package/docker/dev-host/grafana/dashboards/gasoline.json +2477 -0
  119. package/docker/dev-host/grafana/dashboards/guard.json +1274 -0
  120. package/docker/dev-host/grafana/dashboards/tokio.json +1005 -0
  121. package/docker/dev-host/grafana/dashboards/traces.json +957 -0
  122. package/docker/dev-host/grafana/grafana.ini +14 -0
  123. package/docker/dev-host/grafana/provisioning/dashboards/dashboards.yaml +10 -0
  124. package/docker/dev-host/grafana/provisioning/datasources/datasources.yaml +30 -0
  125. package/docker/dev-host/otel-collector-client/config.yaml +39 -0
  126. package/docker/dev-host/otel-collector-server/config.yaml +72 -0
  127. package/docker/dev-host/postgres/init-db.sh +6 -0
  128. package/docker/dev-host/rivet-engine/config.jsonc +48 -0
  129. package/docker/dev-host/vector-client/vector.yaml +31 -0
  130. package/docker/dev-host/vector-server/vector.yaml +61 -0
  131. package/docker/dev-multidc/.gitattributes +1 -0
  132. package/docker/dev-multidc/README.md +86 -0
  133. package/docker/dev-multidc/core/clickhouse/client-config.xml +5 -0
  134. package/docker/dev-multidc/core/clickhouse/config.xml +52 -0
  135. package/docker/dev-multidc/core/clickhouse/init/01-create-otel-table.sql +107 -0
  136. package/docker/dev-multidc/core/clickhouse/users.xml +35 -0
  137. package/docker/dev-multidc/core/grafana/dashboards/api.json +1240 -0
  138. package/docker/dev-multidc/core/grafana/dashboards/cache.json +1075 -0
  139. package/docker/dev-multidc/core/grafana/dashboards/futures.json +230 -0
  140. package/docker/dev-multidc/core/grafana/dashboards/gasoline.json +2477 -0
  141. package/docker/dev-multidc/core/grafana/dashboards/guard.json +1274 -0
  142. package/docker/dev-multidc/core/grafana/dashboards/tokio.json +1005 -0
  143. package/docker/dev-multidc/core/grafana/dashboards/traces.json +957 -0
  144. package/docker/dev-multidc/core/grafana/grafana.ini +14 -0
  145. package/docker/dev-multidc/core/grafana/provisioning/dashboards/dashboards.yaml +10 -0
  146. package/docker/dev-multidc/core/grafana/provisioning/datasources/datasources.yaml +30 -0
  147. package/docker/dev-multidc/datacenters/dc-a/otel-collector-client/config.yaml +39 -0
  148. package/docker/dev-multidc/datacenters/dc-a/otel-collector-server/config.yaml +72 -0
  149. package/docker/dev-multidc/datacenters/dc-a/postgres/init-db.sh +6 -0
  150. package/docker/dev-multidc/datacenters/dc-a/rivet-engine/config.jsonc +62 -0
  151. package/docker/dev-multidc/datacenters/dc-a/vector-client/vector.yaml +31 -0
  152. package/docker/dev-multidc/datacenters/dc-a/vector-server/vector.yaml +61 -0
  153. package/docker/dev-multidc/datacenters/dc-b/otel-collector-client/config.yaml +39 -0
  154. package/docker/dev-multidc/datacenters/dc-b/otel-collector-server/config.yaml +72 -0
  155. package/docker/dev-multidc/datacenters/dc-b/postgres/init-db.sh +6 -0
  156. package/docker/dev-multidc/datacenters/dc-b/rivet-engine/config.jsonc +62 -0
  157. package/docker/dev-multidc/datacenters/dc-b/vector-client/vector.yaml +31 -0
  158. package/docker/dev-multidc/datacenters/dc-b/vector-server/vector.yaml +61 -0
  159. package/docker/dev-multidc/datacenters/dc-c/otel-collector-client/config.yaml +39 -0
  160. package/docker/dev-multidc/datacenters/dc-c/otel-collector-server/config.yaml +72 -0
  161. package/docker/dev-multidc/datacenters/dc-c/postgres/init-db.sh +6 -0
  162. package/docker/dev-multidc/datacenters/dc-c/rivet-engine/config.jsonc +62 -0
  163. package/docker/dev-multidc/datacenters/dc-c/vector-client/vector.yaml +31 -0
  164. package/docker/dev-multidc/datacenters/dc-c/vector-server/vector.yaml +61 -0
  165. package/docker/dev-multidc/docker-compose.yml +546 -0
  166. package/docker/dev-multidc-multinode/.gitattributes +1 -0
  167. package/docker/dev-multidc-multinode/README.md +86 -0
  168. package/docker/dev-multidc-multinode/core/clickhouse/client-config.xml +5 -0
  169. package/docker/dev-multidc-multinode/core/clickhouse/config.xml +52 -0
  170. package/docker/dev-multidc-multinode/core/clickhouse/init/01-create-otel-table.sql +107 -0
  171. package/docker/dev-multidc-multinode/core/clickhouse/users.xml +35 -0
  172. package/docker/dev-multidc-multinode/core/grafana/dashboards/api.json +1240 -0
  173. package/docker/dev-multidc-multinode/core/grafana/dashboards/cache.json +1075 -0
  174. package/docker/dev-multidc-multinode/core/grafana/dashboards/futures.json +230 -0
  175. package/docker/dev-multidc-multinode/core/grafana/dashboards/gasoline.json +2477 -0
  176. package/docker/dev-multidc-multinode/core/grafana/dashboards/guard.json +1274 -0
  177. package/docker/dev-multidc-multinode/core/grafana/dashboards/tokio.json +1005 -0
  178. package/docker/dev-multidc-multinode/core/grafana/dashboards/traces.json +957 -0
  179. package/docker/dev-multidc-multinode/core/grafana/grafana.ini +14 -0
  180. package/docker/dev-multidc-multinode/core/grafana/provisioning/dashboards/dashboards.yaml +10 -0
  181. package/docker/dev-multidc-multinode/core/grafana/provisioning/datasources/datasources.yaml +30 -0
  182. package/docker/dev-multidc-multinode/datacenters/dc-a/otel-collector-client/config.yaml +39 -0
  183. package/docker/dev-multidc-multinode/datacenters/dc-a/otel-collector-server/config.yaml +72 -0
  184. package/docker/dev-multidc-multinode/datacenters/dc-a/postgres/init-db.sh +6 -0
  185. package/docker/dev-multidc-multinode/datacenters/dc-a/rivet-engine/0/config.jsonc +62 -0
  186. package/docker/dev-multidc-multinode/datacenters/dc-a/rivet-engine/1/config.jsonc +62 -0
  187. package/docker/dev-multidc-multinode/datacenters/dc-a/rivet-engine/2/config.jsonc +62 -0
  188. package/docker/dev-multidc-multinode/datacenters/dc-a/vector-client/vector.yaml +31 -0
  189. package/docker/dev-multidc-multinode/datacenters/dc-a/vector-server/vector.yaml +61 -0
  190. package/docker/dev-multidc-multinode/datacenters/dc-b/otel-collector-client/config.yaml +39 -0
  191. package/docker/dev-multidc-multinode/datacenters/dc-b/otel-collector-server/config.yaml +72 -0
  192. package/docker/dev-multidc-multinode/datacenters/dc-b/postgres/init-db.sh +6 -0
  193. package/docker/dev-multidc-multinode/datacenters/dc-b/rivet-engine/0/config.jsonc +62 -0
  194. package/docker/dev-multidc-multinode/datacenters/dc-b/rivet-engine/1/config.jsonc +62 -0
  195. package/docker/dev-multidc-multinode/datacenters/dc-b/rivet-engine/2/config.jsonc +62 -0
  196. package/docker/dev-multidc-multinode/datacenters/dc-b/vector-client/vector.yaml +31 -0
  197. package/docker/dev-multidc-multinode/datacenters/dc-b/vector-server/vector.yaml +61 -0
  198. package/docker/dev-multidc-multinode/datacenters/dc-c/otel-collector-client/config.yaml +39 -0
  199. package/docker/dev-multidc-multinode/datacenters/dc-c/otel-collector-server/config.yaml +72 -0
  200. package/docker/dev-multidc-multinode/datacenters/dc-c/postgres/init-db.sh +6 -0
  201. package/docker/dev-multidc-multinode/datacenters/dc-c/rivet-engine/0/config.jsonc +62 -0
  202. package/docker/dev-multidc-multinode/datacenters/dc-c/rivet-engine/1/config.jsonc +62 -0
  203. package/docker/dev-multidc-multinode/datacenters/dc-c/rivet-engine/2/config.jsonc +62 -0
  204. package/docker/dev-multidc-multinode/datacenters/dc-c/vector-client/vector.yaml +31 -0
  205. package/docker/dev-multidc-multinode/datacenters/dc-c/vector-server/vector.yaml +61 -0
  206. package/docker/dev-multidc-multinode/docker-compose.yml +888 -0
  207. package/docker/dev-multinode/.gitattributes +1 -0
  208. package/docker/dev-multinode/README.md +74 -0
  209. package/docker/dev-multinode/clickhouse/client-config.xml +5 -0
  210. package/docker/dev-multinode/clickhouse/config.xml +52 -0
  211. package/docker/dev-multinode/clickhouse/init/01-create-otel-table.sql +107 -0
  212. package/docker/dev-multinode/clickhouse/users.xml +35 -0
  213. package/docker/dev-multinode/docker-compose.yml +323 -0
  214. package/docker/dev-multinode/grafana/dashboards/api.json +1240 -0
  215. package/docker/dev-multinode/grafana/dashboards/cache.json +1075 -0
  216. package/docker/dev-multinode/grafana/dashboards/futures.json +230 -0
  217. package/docker/dev-multinode/grafana/dashboards/gasoline.json +2477 -0
  218. package/docker/dev-multinode/grafana/dashboards/guard.json +1274 -0
  219. package/docker/dev-multinode/grafana/dashboards/tokio.json +1005 -0
  220. package/docker/dev-multinode/grafana/dashboards/traces.json +957 -0
  221. package/docker/dev-multinode/grafana/grafana.ini +14 -0
  222. package/docker/dev-multinode/grafana/provisioning/dashboards/dashboards.yaml +10 -0
  223. package/docker/dev-multinode/grafana/provisioning/datasources/datasources.yaml +30 -0
  224. package/docker/dev-multinode/otel-collector-client/config.yaml +39 -0
  225. package/docker/dev-multinode/otel-collector-server/config.yaml +72 -0
  226. package/docker/dev-multinode/postgres/init-db.sh +6 -0
  227. package/docker/dev-multinode/rivet-engine/0/config.jsonc +48 -0
  228. package/docker/dev-multinode/rivet-engine/1/config.jsonc +48 -0
  229. package/docker/dev-multinode/rivet-engine/2/config.jsonc +48 -0
  230. package/docker/dev-multinode/vector-client/vector.yaml +31 -0
  231. package/docker/dev-multinode/vector-server/vector.yaml +61 -0
  232. package/docker/engine/build.sh +67 -0
  233. package/docker/engine/linux-aarch64.Dockerfile +97 -0
  234. package/docker/engine/linux-x86_64.Dockerfile +93 -0
  235. package/docker/engine/macos-aarch64.Dockerfile +92 -0
  236. package/docker/engine/macos-x86_64.Dockerfile +92 -0
  237. package/docker/engine/windows.Dockerfile +80 -0
  238. package/docker/prod-file-system/.gitattributes +1 -0
  239. package/docker/prod-file-system/README.md +76 -0
  240. package/docker/prod-file-system/docker-compose.yml +41 -0
  241. package/docker/prod-file-system/rivet-engine/config.jsonc +2 -0
  242. package/docker/template/README.md +20 -0
  243. package/docker/template/grafana-dashboards/api.json +1240 -0
  244. package/docker/template/grafana-dashboards/cache.json +1075 -0
  245. package/docker/template/grafana-dashboards/futures.json +230 -0
  246. package/docker/template/grafana-dashboards/gasoline.json +2477 -0
  247. package/docker/template/grafana-dashboards/guard.json +1274 -0
  248. package/docker/template/grafana-dashboards/tokio.json +1005 -0
  249. package/docker/template/grafana-dashboards/traces.json +957 -0
  250. package/docker/template/node_modules/.bin/js-yaml +21 -0
  251. package/docker/template/node_modules/.bin/tsc +21 -0
  252. package/docker/template/node_modules/.bin/tsserver +21 -0
  253. package/docker/template/node_modules/.bin/tsx +21 -0
  254. package/docker/template/package.json +23 -0
  255. package/docker/template/src/config.ts +104 -0
  256. package/docker/template/src/context.ts +216 -0
  257. package/docker/template/src/docker-compose.ts +368 -0
  258. package/docker/template/src/git.ts +8 -0
  259. package/docker/template/src/main.ts +65 -0
  260. package/docker/template/src/readme.ts +98 -0
  261. package/docker/template/src/services/core/clickhouse.ts +223 -0
  262. package/docker/template/src/services/core/grafana.ts +115 -0
  263. package/docker/template/src/services/edge/otel-collector-client.ts +64 -0
  264. package/docker/template/src/services/edge/otel-collector-server.ts +107 -0
  265. package/docker/template/src/services/edge/postgres.ts +23 -0
  266. package/docker/template/src/services/edge/rivet-engine.ts +87 -0
  267. package/docker/template/src/services/edge/runner.ts +7 -0
  268. package/docker/template/src/services/edge/vector-client.ts +55 -0
  269. package/docker/template/src/services/edge/vector-server.ts +111 -0
  270. package/docker/template/src/utils.ts +19 -0
  271. package/docker/template/tsconfig.json +18 -0
  272. package/docker/universal/Dockerfile +133 -0
  273. package/package.json +10 -0
  274. package/packages/actor-kv/Cargo.toml +31 -0
  275. package/packages/actor-kv/src/entry.rs +147 -0
  276. package/packages/actor-kv/src/key.rs +81 -0
  277. package/packages/actor-kv/src/lib.rs +357 -0
  278. package/packages/actor-kv/src/utils.rs +101 -0
  279. package/packages/actor-kv/tests/kv_operations.rs +294 -0
  280. package/packages/actor-kv/tests/list_edge_cases.rs +370 -0
  281. package/packages/api-builder/Cargo.toml +36 -0
  282. package/packages/api-builder/src/context.rs +98 -0
  283. package/packages/api-builder/src/error_response.rs +116 -0
  284. package/packages/api-builder/src/errors.rs +29 -0
  285. package/packages/api-builder/src/extract.rs +137 -0
  286. package/packages/api-builder/src/global_context.rs +31 -0
  287. package/packages/api-builder/src/lib.rs +19 -0
  288. package/packages/api-builder/src/metrics.rs +29 -0
  289. package/packages/api-builder/src/middleware.rs +232 -0
  290. package/packages/api-builder/src/prelude.rs +18 -0
  291. package/packages/api-builder/src/request_ids.rs +17 -0
  292. package/packages/api-builder/src/router.rs +89 -0
  293. package/packages/api-builder/src/wrappers.rs +138 -0
  294. package/packages/api-builder/tests/basic.rs +215 -0
  295. package/packages/api-builder/tests/errors.rs +104 -0
  296. package/packages/api-peer/Cargo.toml +34 -0
  297. package/packages/api-peer/src/actors/create.rs +40 -0
  298. package/packages/api-peer/src/actors/delete.rs +87 -0
  299. package/packages/api-peer/src/actors/kv_get.rs +67 -0
  300. package/packages/api-peer/src/actors/list.rs +98 -0
  301. package/packages/api-peer/src/actors/list_names.rs +56 -0
  302. package/packages/api-peer/src/actors/mod.rs +5 -0
  303. package/packages/api-peer/src/internal.rs +186 -0
  304. package/packages/api-peer/src/lib.rs +28 -0
  305. package/packages/api-peer/src/namespaces.rs +122 -0
  306. package/packages/api-peer/src/router.rs +51 -0
  307. package/packages/api-peer/src/runner_configs.rs +160 -0
  308. package/packages/api-peer/src/runners.rs +109 -0
  309. package/packages/api-public/Cargo.toml +38 -0
  310. package/packages/api-public/build.rs +45 -0
  311. package/packages/api-public/src/actors/create.rs +99 -0
  312. package/packages/api-public/src/actors/delete.rs +86 -0
  313. package/packages/api-public/src/actors/get_or_create.rs +170 -0
  314. package/packages/api-public/src/actors/kv_get.rs +79 -0
  315. package/packages/api-public/src/actors/list.rs +241 -0
  316. package/packages/api-public/src/actors/list_names.rs +76 -0
  317. package/packages/api-public/src/actors/mod.rs +7 -0
  318. package/packages/api-public/src/actors/utils.rs +216 -0
  319. package/packages/api-public/src/ctx.rs +70 -0
  320. package/packages/api-public/src/datacenters.rs +43 -0
  321. package/packages/api-public/src/errors.rs +30 -0
  322. package/packages/api-public/src/health.rs +166 -0
  323. package/packages/api-public/src/lib.rs +13 -0
  324. package/packages/api-public/src/metadata.rs +24 -0
  325. package/packages/api-public/src/namespaces.rs +89 -0
  326. package/packages/api-public/src/router.rs +182 -0
  327. package/packages/api-public/src/runner_configs/delete.rs +99 -0
  328. package/packages/api-public/src/runner_configs/list.rs +98 -0
  329. package/packages/api-public/src/runner_configs/mod.rs +12 -0
  330. package/packages/api-public/src/runner_configs/refresh_metadata.rs +116 -0
  331. package/packages/api-public/src/runner_configs/serverless_health_check.rs +81 -0
  332. package/packages/api-public/src/runner_configs/upsert.rs +194 -0
  333. package/packages/api-public/src/runner_configs/utils.rs +217 -0
  334. package/packages/api-public/src/runners.rs +144 -0
  335. package/packages/api-public/src/ui.rs +44 -0
  336. package/packages/api-types/Cargo.toml +17 -0
  337. package/packages/api-types/src/actors/create.rs +29 -0
  338. package/packages/api-types/src/actors/list.rs +23 -0
  339. package/packages/api-types/src/actors/list_names.rs +24 -0
  340. package/packages/api-types/src/actors/mod.rs +3 -0
  341. package/packages/api-types/src/datacenters/list.rs +12 -0
  342. package/packages/api-types/src/datacenters/mod.rs +1 -0
  343. package/packages/api-types/src/lib.rs +6 -0
  344. package/packages/api-types/src/namespaces/list.rs +21 -0
  345. package/packages/api-types/src/namespaces/mod.rs +2 -0
  346. package/packages/api-types/src/namespaces/runner_configs.rs +55 -0
  347. package/packages/api-types/src/pagination.rs +8 -0
  348. package/packages/api-types/src/runner_configs/list.rs +29 -0
  349. package/packages/api-types/src/runner_configs/mod.rs +1 -0
  350. package/packages/api-types/src/runners/list.rs +25 -0
  351. package/packages/api-types/src/runners/mod.rs +1 -0
  352. package/packages/api-util/Cargo.toml +22 -0
  353. package/packages/api-util/src/errors.rs +9 -0
  354. package/packages/api-util/src/lib.rs +209 -0
  355. package/packages/bootstrap/Cargo.toml +19 -0
  356. package/packages/bootstrap/src/lib.rs +102 -0
  357. package/packages/cache/Cargo.toml +28 -0
  358. package/packages/cache/src/driver.rs +346 -0
  359. package/packages/cache/src/errors.rs +23 -0
  360. package/packages/cache/src/getter_ctx.rs +138 -0
  361. package/packages/cache/src/inner.rs +60 -0
  362. package/packages/cache/src/key.rs +101 -0
  363. package/packages/cache/src/lib.rs +19 -0
  364. package/packages/cache/src/metrics.rs +34 -0
  365. package/packages/cache/src/purge.rs +13 -0
  366. package/packages/cache/src/rate_limit.rs +109 -0
  367. package/packages/cache/src/req_config.rs +443 -0
  368. package/packages/cache/tests/integration.rs +582 -0
  369. package/packages/cache-purge/Cargo.toml +17 -0
  370. package/packages/cache-purge/src/lib.rs +44 -0
  371. package/packages/cache-result/Cargo.toml +9 -0
  372. package/packages/cache-result/src/lib.rs +61 -0
  373. package/packages/clickhouse-inserter/Cargo.toml +17 -0
  374. package/packages/clickhouse-inserter/src/error.rs +16 -0
  375. package/packages/clickhouse-inserter/src/lib.rs +179 -0
  376. package/packages/clickhouse-user-query/Cargo.toml +16 -0
  377. package/packages/clickhouse-user-query/examples/case_sensitivity_demo.rs +100 -0
  378. package/packages/clickhouse-user-query/examples/group_by_example.rs +53 -0
  379. package/packages/clickhouse-user-query/examples/string_contains_demo.rs +96 -0
  380. package/packages/clickhouse-user-query/src/builder.rs +445 -0
  381. package/packages/clickhouse-user-query/src/error.rs +37 -0
  382. package/packages/clickhouse-user-query/src/lib.rs +61 -0
  383. package/packages/clickhouse-user-query/src/query.rs +143 -0
  384. package/packages/clickhouse-user-query/src/schema.rs +78 -0
  385. package/packages/clickhouse-user-query/tests/builder_tests.rs +619 -0
  386. package/packages/clickhouse-user-query/tests/case_sensitivity_tests.rs +307 -0
  387. package/packages/clickhouse-user-query/tests/integration_tests.rs +540 -0
  388. package/packages/clickhouse-user-query/tests/query_tests.rs +263 -0
  389. package/packages/clickhouse-user-query/tests/schema_tests.rs +44 -0
  390. package/packages/config/Cargo.toml +20 -0
  391. package/packages/config/src/config/api_peer.rs +21 -0
  392. package/packages/config/src/config/api_public.rs +25 -0
  393. package/packages/config/src/config/auth.rs +10 -0
  394. package/packages/config/src/config/cache.rs +24 -0
  395. package/packages/config/src/config/clickhouse.rs +49 -0
  396. package/packages/config/src/config/db.rs +52 -0
  397. package/packages/config/src/config/guard.rs +42 -0
  398. package/packages/config/src/config/logs.rs +10 -0
  399. package/packages/config/src/config/mod.rs +240 -0
  400. package/packages/config/src/config/pegboard.rs +94 -0
  401. package/packages/config/src/config/pubsub.rs +90 -0
  402. package/packages/config/src/config/runtime.rs +31 -0
  403. package/packages/config/src/config/telemetry.rs +14 -0
  404. package/packages/config/src/config/topology.rs +123 -0
  405. package/packages/config/src/config/vector.rs +18 -0
  406. package/packages/config/src/defaults.rs +11 -0
  407. package/packages/config/src/lib.rs +135 -0
  408. package/packages/config/src/paths.rs +25 -0
  409. package/packages/config/src/secret.rs +72 -0
  410. package/packages/dump-openapi/Cargo.toml +11 -0
  411. package/packages/dump-openapi/build.rs +26 -0
  412. package/packages/dump-openapi/src/lib.rs +1 -0
  413. package/packages/engine/Cargo.toml +74 -0
  414. package/packages/engine/src/commands/config.rs +18 -0
  415. package/packages/engine/src/commands/db/mod.rs +80 -0
  416. package/packages/engine/src/commands/mod.rs +7 -0
  417. package/packages/engine/src/commands/start.rs +143 -0
  418. package/packages/engine/src/commands/tracing.rs +86 -0
  419. package/packages/engine/src/commands/udb/cli.rs +562 -0
  420. package/packages/engine/src/commands/udb/mod.rs +132 -0
  421. package/packages/engine/src/commands/udb_keys.rs +200 -0
  422. package/packages/engine/src/commands/wf/mod.rs +125 -0
  423. package/packages/engine/src/commands/wf/signal.rs +80 -0
  424. package/packages/engine/src/keys.rs +47 -0
  425. package/packages/engine/src/lib.rs +55 -0
  426. package/packages/engine/src/main.rs +60 -0
  427. package/packages/engine/src/run_config.rs +53 -0
  428. package/packages/engine/src/util/db.rs +99 -0
  429. package/packages/engine/src/util/format.rs +69 -0
  430. package/packages/engine/src/util/mod.rs +13 -0
  431. package/packages/engine/src/util/udb.rs +687 -0
  432. package/packages/engine/src/util/wf/mod.rs +649 -0
  433. package/packages/engine/src/util/wf/signal.rs +126 -0
  434. package/packages/engine/tests/actors_create.rs +524 -0
  435. package/packages/engine/tests/actors_delete.rs +243 -0
  436. package/packages/engine/tests/actors_general.rs +191 -0
  437. package/packages/engine/tests/actors_get.rs +230 -0
  438. package/packages/engine/tests/actors_get_by_id.rs +170 -0
  439. package/packages/engine/tests/actors_get_or_create.rs +294 -0
  440. package/packages/engine/tests/actors_get_or_create_by_id.rs +147 -0
  441. package/packages/engine/tests/actors_lifecycle.rs +165 -0
  442. package/packages/engine/tests/actors_list.rs +798 -0
  443. package/packages/engine/tests/actors_list_names.rs +353 -0
  444. package/packages/engine/tests/common/actors.rs +554 -0
  445. package/packages/engine/tests/common/ctx.rs +201 -0
  446. package/packages/engine/tests/common/mod.rs +30 -0
  447. package/packages/engine/tests/common/ns.rs +36 -0
  448. package/packages/engine/tests/common/runner.rs +134 -0
  449. package/packages/engine/tests/common/test_helpers.rs +226 -0
  450. package/packages/engine/tests/runners_dupe_key.rs +27 -0
  451. package/packages/engine/tests/runners_version.rs +50 -0
  452. package/packages/env/Cargo.toml +14 -0
  453. package/packages/env/build.rs +8 -0
  454. package/packages/env/src/lib.rs +30 -0
  455. package/packages/epoxy/Cargo.toml +45 -0
  456. package/packages/epoxy/README.md +158 -0
  457. package/packages/epoxy/spec/KEYS.md +33 -0
  458. package/packages/epoxy/spec/PROPOSAL.md +125 -0
  459. package/packages/epoxy/spec/RECONFIGURE.md +40 -0
  460. package/packages/epoxy/src/consts.rs +42 -0
  461. package/packages/epoxy/src/errors.rs +21 -0
  462. package/packages/epoxy/src/http_client.rs +192 -0
  463. package/packages/epoxy/src/http_routes.rs +34 -0
  464. package/packages/epoxy/src/keys/keys.rs +99 -0
  465. package/packages/epoxy/src/keys/mod.rs +9 -0
  466. package/packages/epoxy/src/keys/replica.rs +283 -0
  467. package/packages/epoxy/src/lib.rs +25 -0
  468. package/packages/epoxy/src/ops/explicit_prepare.rs +342 -0
  469. package/packages/epoxy/src/ops/kv/get_local.rs +44 -0
  470. package/packages/epoxy/src/ops/kv/get_optimistic.rs +150 -0
  471. package/packages/epoxy/src/ops/kv/mod.rs +3 -0
  472. package/packages/epoxy/src/ops/kv/purge_local.rs +28 -0
  473. package/packages/epoxy/src/ops/mod.rs +4 -0
  474. package/packages/epoxy/src/ops/propose.rs +352 -0
  475. package/packages/epoxy/src/ops/read_cluster_config.rs +24 -0
  476. package/packages/epoxy/src/replica/ballot.rs +130 -0
  477. package/packages/epoxy/src/replica/commit_kv.rs +80 -0
  478. package/packages/epoxy/src/replica/decide_path.rs +51 -0
  479. package/packages/epoxy/src/replica/lead_consensus.rs +65 -0
  480. package/packages/epoxy/src/replica/log.rs +84 -0
  481. package/packages/epoxy/src/replica/message_request.rs +166 -0
  482. package/packages/epoxy/src/replica/messages/accept.rs +50 -0
  483. package/packages/epoxy/src/replica/messages/accepted.rs +35 -0
  484. package/packages/epoxy/src/replica/messages/commit.rs +46 -0
  485. package/packages/epoxy/src/replica/messages/committed.rs +41 -0
  486. package/packages/epoxy/src/replica/messages/download_instances.rs +69 -0
  487. package/packages/epoxy/src/replica/messages/mod.rs +15 -0
  488. package/packages/epoxy/src/replica/messages/pre_accept.rs +69 -0
  489. package/packages/epoxy/src/replica/messages/prepare.rs +89 -0
  490. package/packages/epoxy/src/replica/mod.rs +11 -0
  491. package/packages/epoxy/src/replica/update_config.rs +24 -0
  492. package/packages/epoxy/src/replica/utils.rs +111 -0
  493. package/packages/epoxy/src/types.rs +117 -0
  494. package/packages/epoxy/src/utils.rs +65 -0
  495. package/packages/epoxy/src/workflows/coordinator/mod.rs +121 -0
  496. package/packages/epoxy/src/workflows/coordinator/reconfigure.rs +291 -0
  497. package/packages/epoxy/src/workflows/coordinator/replica_status_change.rs +193 -0
  498. package/packages/epoxy/src/workflows/mod.rs +3 -0
  499. package/packages/epoxy/src/workflows/purger.rs +81 -0
  500. package/packages/epoxy/src/workflows/replica/mod.rs +39 -0
  501. package/packages/epoxy/src/workflows/replica/setup.rs +823 -0
  502. package/packages/epoxy/tests/common/api.rs +25 -0
  503. package/packages/epoxy/tests/common/mod.rs +301 -0
  504. package/packages/epoxy/tests/common/utils.rs +23 -0
  505. package/packages/epoxy/tests/kv.rs +187 -0
  506. package/packages/epoxy/tests/kv_get_optimistic.rs +179 -0
  507. package/packages/epoxy/tests/proposal.rs +38 -0
  508. package/packages/epoxy/tests/reconfigure.rs +618 -0
  509. package/packages/error/Cargo.toml +16 -0
  510. package/packages/error/src/error.rs +90 -0
  511. package/packages/error/src/lib.rs +13 -0
  512. package/packages/error/src/schema.rs +86 -0
  513. package/packages/error/tests/basic.rs +338 -0
  514. package/packages/error-macros/Cargo.toml +19 -0
  515. package/packages/error-macros/src/lib.rs +632 -0
  516. package/packages/gasoline/Cargo.toml +55 -0
  517. package/packages/gasoline/src/activity.rs +24 -0
  518. package/packages/gasoline/src/builder/common/message.rs +104 -0
  519. package/packages/gasoline/src/builder/common/mod.rs +5 -0
  520. package/packages/gasoline/src/builder/common/signal.rs +193 -0
  521. package/packages/gasoline/src/builder/common/workflow.rs +196 -0
  522. package/packages/gasoline/src/builder/mod.rs +60 -0
  523. package/packages/gasoline/src/builder/workflow/message.rs +147 -0
  524. package/packages/gasoline/src/builder/workflow/mod.rs +5 -0
  525. package/packages/gasoline/src/builder/workflow/signal.rs +227 -0
  526. package/packages/gasoline/src/builder/workflow/sub_workflow.rs +318 -0
  527. package/packages/gasoline/src/ctx/activity.rs +192 -0
  528. package/packages/gasoline/src/ctx/common.rs +153 -0
  529. package/packages/gasoline/src/ctx/listen.rs +121 -0
  530. package/packages/gasoline/src/ctx/message.rs +346 -0
  531. package/packages/gasoline/src/ctx/mod.rs +18 -0
  532. package/packages/gasoline/src/ctx/operation.rs +191 -0
  533. package/packages/gasoline/src/ctx/standalone.rs +228 -0
  534. package/packages/gasoline/src/ctx/test.rs +251 -0
  535. package/packages/gasoline/src/ctx/versioned_workflow.rs +198 -0
  536. package/packages/gasoline/src/ctx/workflow.rs +1459 -0
  537. package/packages/gasoline/src/db/debug.rs +199 -0
  538. package/packages/gasoline/src/db/kv/debug.rs +1493 -0
  539. package/packages/gasoline/src/db/kv/keys/history.rs +1780 -0
  540. package/packages/gasoline/src/db/kv/keys/metric.rs +170 -0
  541. package/packages/gasoline/src/db/kv/keys/mod.rs +6 -0
  542. package/packages/gasoline/src/db/kv/keys/signal.rs +401 -0
  543. package/packages/gasoline/src/db/kv/keys/wake.rs +310 -0
  544. package/packages/gasoline/src/db/kv/keys/worker.rs +185 -0
  545. package/packages/gasoline/src/db/kv/keys/workflow.rs +1175 -0
  546. package/packages/gasoline/src/db/kv/mod.rs +3044 -0
  547. package/packages/gasoline/src/db/kv/subjects.rs +13 -0
  548. package/packages/gasoline/src/db/kv/system.rs +33 -0
  549. package/packages/gasoline/src/db/mod.rs +344 -0
  550. package/packages/gasoline/src/error.rs +258 -0
  551. package/packages/gasoline/src/executable.rs +186 -0
  552. package/packages/gasoline/src/history/cursor.rs +779 -0
  553. package/packages/gasoline/src/history/event.rs +210 -0
  554. package/packages/gasoline/src/history/location.rs +185 -0
  555. package/packages/gasoline/src/history/mod.rs +8 -0
  556. package/packages/gasoline/src/history/removed.rs +94 -0
  557. package/packages/gasoline/src/lib.rs +18 -0
  558. package/packages/gasoline/src/listen.rs +24 -0
  559. package/packages/gasoline/src/message.rs +103 -0
  560. package/packages/gasoline/src/metrics.rs +156 -0
  561. package/packages/gasoline/src/operation.rs +21 -0
  562. package/packages/gasoline/src/prelude.rs +53 -0
  563. package/packages/gasoline/src/registry.rs +111 -0
  564. package/packages/gasoline/src/signal.rs +117 -0
  565. package/packages/gasoline/src/stub.rs +118 -0
  566. package/packages/gasoline/src/utils/mod.rs +20 -0
  567. package/packages/gasoline/src/utils/tags.rs +82 -0
  568. package/packages/gasoline/src/utils/time.rs +85 -0
  569. package/packages/gasoline/src/worker.rs +336 -0
  570. package/packages/gasoline/src/workflow.rs +64 -0
  571. package/packages/gasoline/tests/activity_ctx.rs +83 -0
  572. package/packages/gasoline/tests/workflow_ctx.rs +288 -0
  573. package/packages/gasoline/tests/workflows/activity_test.rs +33 -0
  574. package/packages/gasoline/tests/workflows/basic.rs +13 -0
  575. package/packages/gasoline/tests/workflows/eviction_test.rs +45 -0
  576. package/packages/gasoline/tests/workflows/listen_timeout.rs +27 -0
  577. package/packages/gasoline/tests/workflows/loop_test.rs +30 -0
  578. package/packages/gasoline/tests/workflows/mod.rs +11 -0
  579. package/packages/gasoline/tests/workflows/properties_test.rs +56 -0
  580. package/packages/gasoline/tests/workflows/signal_test.rs +24 -0
  581. package/packages/gasoline/tests/workflows/sleep_test.rs +15 -0
  582. package/packages/gasoline/tests/workflows/state_test.rs +69 -0
  583. package/packages/gasoline/tests/workflows/sub_test.rs +21 -0
  584. package/packages/gasoline/tests/workflows/tags_test.rs +40 -0
  585. package/packages/gasoline-macros/Cargo.toml +14 -0
  586. package/packages/gasoline-macros/src/lib.rs +527 -0
  587. package/packages/guard/Cargo.toml +56 -0
  588. package/packages/guard/src/cache/actor.rs +43 -0
  589. package/packages/guard/src/cache/mod.rs +69 -0
  590. package/packages/guard/src/errors.rs +62 -0
  591. package/packages/guard/src/lib.rs +58 -0
  592. package/packages/guard/src/middleware.rs +42 -0
  593. package/packages/guard/src/routing/api_public.rs +70 -0
  594. package/packages/guard/src/routing/mod.rs +245 -0
  595. package/packages/guard/src/routing/pegboard_gateway.rs +260 -0
  596. package/packages/guard/src/routing/runner.rs +129 -0
  597. package/packages/guard/src/shared_state.rs +31 -0
  598. package/packages/guard/src/tls.rs +224 -0
  599. package/packages/guard/tests/parse_actor_path.rs +240 -0
  600. package/packages/guard-core/Cargo.toml +58 -0
  601. package/packages/guard-core/src/analytics.rs +46 -0
  602. package/packages/guard-core/src/cert_resolver.rs +61 -0
  603. package/packages/guard-core/src/custom_serve.rs +52 -0
  604. package/packages/guard-core/src/errors.rs +113 -0
  605. package/packages/guard-core/src/lib.rs +25 -0
  606. package/packages/guard-core/src/metrics.rs +64 -0
  607. package/packages/guard-core/src/proxy_service.rs +2699 -0
  608. package/packages/guard-core/src/request_context.rs +184 -0
  609. package/packages/guard-core/src/server.rs +289 -0
  610. package/packages/guard-core/src/task_group.rs +57 -0
  611. package/packages/guard-core/src/types.rs +19 -0
  612. package/packages/guard-core/src/websocket_handle.rs +47 -0
  613. package/packages/guard-core/tests/common/mod.rs +678 -0
  614. package/packages/guard-core/tests/custom_serve.rs +392 -0
  615. package/packages/guard-core/tests/fixtures/tls/README.md +6 -0
  616. package/packages/guard-core/tests/fixtures/tls/api_cert.pem +51 -0
  617. package/packages/guard-core/tests/fixtures/tls/api_key.pem +7 -0
  618. package/packages/guard-core/tests/fixtures/tls/job_cert.pem +55 -0
  619. package/packages/guard-core/tests/fixtures/tls/job_key.pem +7 -0
  620. package/packages/guard-core/tests/https.rs +400 -0
  621. package/packages/guard-core/tests/metrics.rs +247 -0
  622. package/packages/guard-core/tests/proxy.rs +842 -0
  623. package/packages/guard-core/tests/simple_websocket.rs +258 -0
  624. package/packages/guard-core/tests/simple_websocket_echo.rs +318 -0
  625. package/packages/guard-core/tests/simple_websocket_test2.rs +120 -0
  626. package/packages/guard-core/tests/streaming_response.rs +265 -0
  627. package/packages/guard-core/tests/websocket.rs +1113 -0
  628. package/packages/internal/Cargo.toml +13 -0
  629. package/packages/internal/README.md +1 -0
  630. package/packages/internal/src/lib.rs +1 -0
  631. package/packages/internal/src/ops/bump_serverless_autoscaler_global.rs +64 -0
  632. package/packages/internal/src/ops/cache/mod.rs +1 -0
  633. package/packages/internal/src/ops/cache/purge_global.rs +81 -0
  634. package/packages/internal/src/ops/mod.rs +2 -0
  635. package/packages/logs/Cargo.toml +20 -0
  636. package/packages/logs/src/lib.rs +9 -0
  637. package/packages/logs/src/unix.rs +201 -0
  638. package/packages/logs/src/windows.rs +240 -0
  639. package/packages/metrics/Cargo.toml +20 -0
  640. package/packages/metrics/src/buckets.rs +32 -0
  641. package/packages/metrics/src/lib.rs +8 -0
  642. package/packages/metrics/src/providers.rs +183 -0
  643. package/packages/namespace/Cargo.toml +28 -0
  644. package/packages/namespace/src/errors.rs +39 -0
  645. package/packages/namespace/src/keys/mod.rs +190 -0
  646. package/packages/namespace/src/keys/runner_config.rs +211 -0
  647. package/packages/namespace/src/lib.rs +16 -0
  648. package/packages/namespace/src/ops/get_global.rs +58 -0
  649. package/packages/namespace/src/ops/get_local.rs +69 -0
  650. package/packages/namespace/src/ops/list.rs +69 -0
  651. package/packages/namespace/src/ops/mod.rs +6 -0
  652. package/packages/namespace/src/ops/resolve_for_name_global.rs +57 -0
  653. package/packages/namespace/src/ops/resolve_for_name_local.rs +41 -0
  654. package/packages/namespace/src/ops/runner_config/delete.rs +53 -0
  655. package/packages/namespace/src/ops/runner_config/get.rs +94 -0
  656. package/packages/namespace/src/ops/runner_config/list.rs +94 -0
  657. package/packages/namespace/src/ops/runner_config/mod.rs +4 -0
  658. package/packages/namespace/src/ops/runner_config/upsert.rs +148 -0
  659. package/packages/namespace/src/utils.rs +11 -0
  660. package/packages/namespace/src/workflows/mod.rs +1 -0
  661. package/packages/namespace/src/workflows/namespace.rs +178 -0
  662. package/packages/pegboard/Cargo.toml +34 -0
  663. package/packages/pegboard/src/errors.rs +76 -0
  664. package/packages/pegboard/src/keys/actor.rs +443 -0
  665. package/packages/pegboard/src/keys/epoxy/mod.rs +1 -0
  666. package/packages/pegboard/src/keys/epoxy/ns.rs +68 -0
  667. package/packages/pegboard/src/keys/hibernating_request.rs +72 -0
  668. package/packages/pegboard/src/keys/mod.rs +15 -0
  669. package/packages/pegboard/src/keys/ns.rs +1367 -0
  670. package/packages/pegboard/src/keys/runner.rs +818 -0
  671. package/packages/pegboard/src/lib.rs +19 -0
  672. package/packages/pegboard/src/metrics.rs +19 -0
  673. package/packages/pegboard/src/ops/actor/create.rs +159 -0
  674. package/packages/pegboard/src/ops/actor/get.rs +100 -0
  675. package/packages/pegboard/src/ops/actor/get_for_gateway.rs +70 -0
  676. package/packages/pegboard/src/ops/actor/get_for_key.rs +93 -0
  677. package/packages/pegboard/src/ops/actor/get_reservation_for_key.rs +46 -0
  678. package/packages/pegboard/src/ops/actor/get_runner.rs +64 -0
  679. package/packages/pegboard/src/ops/actor/hibernating_request/delete.rs +41 -0
  680. package/packages/pegboard/src/ops/actor/hibernating_request/list.rs +65 -0
  681. package/packages/pegboard/src/ops/actor/hibernating_request/mod.rs +3 -0
  682. package/packages/pegboard/src/ops/actor/hibernating_request/upsert.rs +51 -0
  683. package/packages/pegboard/src/ops/actor/list_for_ns.rs +207 -0
  684. package/packages/pegboard/src/ops/actor/list_names.rs +62 -0
  685. package/packages/pegboard/src/ops/actor/mod.rs +9 -0
  686. package/packages/pegboard/src/ops/mod.rs +2 -0
  687. package/packages/pegboard/src/ops/runner/find_dc_with_runner.rs +222 -0
  688. package/packages/pegboard/src/ops/runner/get.rs +143 -0
  689. package/packages/pegboard/src/ops/runner/get_by_key.rs +51 -0
  690. package/packages/pegboard/src/ops/runner/list_for_ns.rs +209 -0
  691. package/packages/pegboard/src/ops/runner/list_names.rs +60 -0
  692. package/packages/pegboard/src/ops/runner/mod.rs +6 -0
  693. package/packages/pegboard/src/ops/runner/update_alloc_idx.rs +208 -0
  694. package/packages/pegboard/src/pubsub_subjects.rs +80 -0
  695. package/packages/pegboard/src/utils.rs +29 -0
  696. package/packages/pegboard/src/workflows/actor/destroy.rs +264 -0
  697. package/packages/pegboard/src/workflows/actor/keys.rs +283 -0
  698. package/packages/pegboard/src/workflows/actor/mod.rs +804 -0
  699. package/packages/pegboard/src/workflows/actor/runtime.rs +909 -0
  700. package/packages/pegboard/src/workflows/actor/setup.rs +175 -0
  701. package/packages/pegboard/src/workflows/mod.rs +2 -0
  702. package/packages/pegboard/src/workflows/runner.rs +1182 -0
  703. package/packages/pegboard-gateway/Cargo.toml +35 -0
  704. package/packages/pegboard-gateway/src/keepalive_task.rs +61 -0
  705. package/packages/pegboard-gateway/src/lib.rs +698 -0
  706. package/packages/pegboard-gateway/src/metrics.rs +14 -0
  707. package/packages/pegboard-gateway/src/ping_task.rs +23 -0
  708. package/packages/pegboard-gateway/src/shared_state.rs +588 -0
  709. package/packages/pegboard-gateway/src/tunnel_to_ws_task.rs +85 -0
  710. package/packages/pegboard-gateway/src/ws_to_tunnel_task.rs +65 -0
  711. package/packages/pegboard-runner/Cargo.toml +38 -0
  712. package/packages/pegboard-runner/src/conn.rs +183 -0
  713. package/packages/pegboard-runner/src/errors.rs +33 -0
  714. package/packages/pegboard-runner/src/lib.rs +249 -0
  715. package/packages/pegboard-runner/src/ping_task.rs +66 -0
  716. package/packages/pegboard-runner/src/tunnel_to_ws_task.rs +137 -0
  717. package/packages/pegboard-runner/src/utils.rs +40 -0
  718. package/packages/pegboard-runner/src/ws_to_tunnel_task.rs +443 -0
  719. package/packages/pegboard-serverless/Cargo.toml +25 -0
  720. package/packages/pegboard-serverless/src/lib.rs +523 -0
  721. package/packages/pools/Cargo.toml +38 -0
  722. package/packages/pools/src/db/clickhouse.rs +37 -0
  723. package/packages/pools/src/db/mod.rs +3 -0
  724. package/packages/pools/src/db/udb.rs +37 -0
  725. package/packages/pools/src/db/ups.rs +91 -0
  726. package/packages/pools/src/error.rs +41 -0
  727. package/packages/pools/src/lib.rs +16 -0
  728. package/packages/pools/src/metrics.rs +32 -0
  729. package/packages/pools/src/pools.rs +114 -0
  730. package/packages/pools/src/prelude.rs +3 -0
  731. package/packages/pools/src/reqwest.rs +25 -0
  732. package/packages/runtime/Cargo.lock +1394 -0
  733. package/packages/runtime/Cargo.toml +29 -0
  734. package/packages/runtime/src/lib.rs +154 -0
  735. package/packages/runtime/src/metrics.rs +34 -0
  736. package/packages/runtime/src/term_signal.rs +113 -0
  737. package/packages/runtime/src/traces.rs +158 -0
  738. package/packages/service-manager/Cargo.toml +19 -0
  739. package/packages/service-manager/src/lib.rs +359 -0
  740. package/packages/telemetry/Cargo.toml +13 -0
  741. package/packages/telemetry/README.md +12 -0
  742. package/packages/telemetry/src/lib.rs +39 -0
  743. package/packages/test-deps/Cargo.toml +19 -0
  744. package/packages/test-deps/src/datacenter.rs +109 -0
  745. package/packages/test-deps/src/lib.rs +131 -0
  746. package/packages/test-deps-docker/Cargo.toml +14 -0
  747. package/packages/test-deps-docker/src/database.rs +135 -0
  748. package/packages/test-deps-docker/src/lib.rs +280 -0
  749. package/packages/test-deps-docker/src/pubsub.rs +76 -0
  750. package/packages/tracing-reconfigure/Cargo.toml +18 -0
  751. package/packages/tracing-reconfigure/src/lib.rs +78 -0
  752. package/packages/tracing-utils/Cargo.toml +12 -0
  753. package/packages/tracing-utils/src/lib.rs +91 -0
  754. package/packages/types/Cargo.toml +19 -0
  755. package/packages/types/README.md +3 -0
  756. package/packages/types/src/actors.rs +79 -0
  757. package/packages/types/src/datacenters.rs +10 -0
  758. package/packages/types/src/keys/mod.rs +2 -0
  759. package/packages/types/src/keys/namespace/mod.rs +1 -0
  760. package/packages/types/src/keys/namespace/runner_config.rs +28 -0
  761. package/packages/types/src/keys/pegboard/mod.rs +7 -0
  762. package/packages/types/src/keys/pegboard/ns.rs +109 -0
  763. package/packages/types/src/lib.rs +7 -0
  764. package/packages/types/src/msgs/mod.rs +1 -0
  765. package/packages/types/src/msgs/pegboard.rs +5 -0
  766. package/packages/types/src/namespaces.rs +10 -0
  767. package/packages/types/src/runner_configs.rs +96 -0
  768. package/packages/types/src/runners.rs +24 -0
  769. package/packages/universaldb/Cargo.toml +32 -0
  770. package/packages/universaldb/src/atomic.rs +190 -0
  771. package/packages/universaldb/src/database.rs +56 -0
  772. package/packages/universaldb/src/driver/mod.rs +87 -0
  773. package/packages/universaldb/src/driver/postgres/database.rs +244 -0
  774. package/packages/universaldb/src/driver/postgres/mod.rs +5 -0
  775. package/packages/universaldb/src/driver/postgres/transaction.rs +337 -0
  776. package/packages/universaldb/src/driver/postgres/transaction_task.rs +538 -0
  777. package/packages/universaldb/src/driver/rocksdb/database.rs +129 -0
  778. package/packages/universaldb/src/driver/rocksdb/mod.rs +6 -0
  779. package/packages/universaldb/src/driver/rocksdb/transaction.rs +354 -0
  780. package/packages/universaldb/src/driver/rocksdb/transaction_conflict_tracker.rs +109 -0
  781. package/packages/universaldb/src/driver/rocksdb/transaction_task.rs +526 -0
  782. package/packages/universaldb/src/error.rs +30 -0
  783. package/packages/universaldb/src/key_selector.rs +97 -0
  784. package/packages/universaldb/src/lib.rs +24 -0
  785. package/packages/universaldb/src/metrics.rs +27 -0
  786. package/packages/universaldb/src/options.rs +284 -0
  787. package/packages/universaldb/src/prelude.rs +8 -0
  788. package/packages/universaldb/src/range_option.rs +159 -0
  789. package/packages/universaldb/src/transaction.rs +378 -0
  790. package/packages/universaldb/src/tx_ops.rs +425 -0
  791. package/packages/universaldb/src/utils/cherry_pick.rs +88 -0
  792. package/packages/universaldb/src/utils/codes.rs +9 -0
  793. package/packages/universaldb/src/utils/ext.rs +58 -0
  794. package/packages/universaldb/src/utils/formal_key.rs +23 -0
  795. package/packages/universaldb/src/utils/keys.rs +134 -0
  796. package/packages/universaldb/src/utils/mod.rs +92 -0
  797. package/packages/universaldb/src/utils/subspace.rs +95 -0
  798. package/packages/universaldb/src/value.rs +159 -0
  799. package/packages/universaldb/src/versionstamp.rs +173 -0
  800. package/packages/universaldb/tests/integration.rs +2733 -0
  801. package/packages/universaldb/tests/integration_gas.rs +264 -0
  802. package/packages/universaldb/tests/rocksdb.rs +141 -0
  803. package/packages/universaldb/tests/versionstamp.rs +184 -0
  804. package/packages/universalpubsub/Cargo.toml +38 -0
  805. package/packages/universalpubsub/benches/simple.rs +932 -0
  806. package/packages/universalpubsub/src/chunking.rs +226 -0
  807. package/packages/universalpubsub/src/driver/memory/mod.rs +91 -0
  808. package/packages/universalpubsub/src/driver/mod.rs +58 -0
  809. package/packages/universalpubsub/src/driver/nats/mod.rs +79 -0
  810. package/packages/universalpubsub/src/driver/postgres/mod.rs +443 -0
  811. package/packages/universalpubsub/src/errors.rs +11 -0
  812. package/packages/universalpubsub/src/lib.rs +7 -0
  813. package/packages/universalpubsub/src/pubsub.rs +415 -0
  814. package/packages/universalpubsub/tests/integration.rs +441 -0
  815. package/packages/universalpubsub/tests/reconnect.rs +359 -0
  816. package/packages/util/Cargo.toml +41 -0
  817. package/packages/util/build.rs +13 -0
  818. package/packages/util/src/backoff.rs +109 -0
  819. package/packages/util/src/billing.rs +3 -0
  820. package/packages/util/src/build_meta.rs +33 -0
  821. package/packages/util/src/check.rs +222 -0
  822. package/packages/util/src/duration.rs +77 -0
  823. package/packages/util/src/faker.rs +81 -0
  824. package/packages/util/src/format.rs +185 -0
  825. package/packages/util/src/future.rs +1 -0
  826. package/packages/util/src/geo.rs +5 -0
  827. package/packages/util/src/lib.rs +40 -0
  828. package/packages/util/src/math.rs +35 -0
  829. package/packages/util/src/req.rs +41 -0
  830. package/packages/util/src/serde.rs +516 -0
  831. package/packages/util/src/size.rs +27 -0
  832. package/packages/util/src/sort.rs +13 -0
  833. package/packages/util/src/timestamp.rs +58 -0
  834. package/packages/util/src/url.rs +3 -0
  835. package/packages/util-id/Cargo.toml +13 -0
  836. package/packages/util-id/src/lib.rs +329 -0
  837. package/packages/workflow-worker/Cargo.toml +16 -0
  838. package/packages/workflow-worker/src/lib.rs +15 -0
  839. package/sdks/api/fern/fern.config.json +4 -0
  840. package/sdks/api/fern/generators.yml +25 -0
  841. package/sdks/go/api-full/client/client.go +459 -0
  842. package/sdks/go/api-full/client/client_test.go +43 -0
  843. package/sdks/go/api-full/client/options.go +39 -0
  844. package/sdks/go/api-full/core/client_option.go +44 -0
  845. package/sdks/go/api-full/core/core.go +220 -0
  846. package/sdks/go/api-full/core/core_test.go +219 -0
  847. package/sdks/go/api-full/core/stringer.go +13 -0
  848. package/sdks/go/api-full/datacenters/client.go +50 -0
  849. package/sdks/go/api-full/go.mod +8 -0
  850. package/sdks/go/api-full/go.sum +12 -0
  851. package/sdks/go/api-full/health/client.go +50 -0
  852. package/sdks/go/api-full/namespaces/client.go +92 -0
  853. package/sdks/go/api-full/namespaces.go +15 -0
  854. package/sdks/go/api-full/pointer.go +103 -0
  855. package/sdks/go/api-full/runners/client.go +111 -0
  856. package/sdks/go/api-full/runners.go +18 -0
  857. package/sdks/go/api-full/types.go +1638 -0
  858. package/sdks/rust/api-full/.openapi-generator/FILES +28 -0
  859. package/sdks/rust/api-full/.openapi-generator/VERSION +1 -0
  860. package/sdks/rust/api-full/.openapi-generator-ignore +23 -0
  861. package/sdks/rust/api-full/.travis.yml +1 -0
  862. package/sdks/rust/api-full/Cargo.toml +15 -0
  863. package/sdks/rust/api-full/README.md +53 -0
  864. package/sdks/rust/api-full/docs/Actor.md +19 -0
  865. package/sdks/rust/api-full/docs/ActorLifecycle.md +12 -0
  866. package/sdks/rust/api-full/docs/ActorsApi.md +37 -0
  867. package/sdks/rust/api-full/docs/ActorsCreateRequest.md +13 -0
  868. package/sdks/rust/api-full/docs/ActorsCreateResponse.md +11 -0
  869. package/sdks/rust/api-full/docs/Namespace.md +14 -0
  870. package/sdks/rust/api-full/docs/NamespacesCreateRequest.md +12 -0
  871. package/sdks/rust/api-full/docs/NamespacesCreateResponse.md +11 -0
  872. package/sdks/rust/api-full/docs/NsApi.md +37 -0
  873. package/sdks/rust/api-full/git_push.sh +57 -0
  874. package/sdks/rust/api-full/rust/.openapi-generator/FILES +140 -0
  875. package/sdks/rust/api-full/rust/.openapi-generator/VERSION +1 -0
  876. package/sdks/rust/api-full/rust/.openapi-generator-ignore +23 -0
  877. package/sdks/rust/api-full/rust/.travis.yml +1 -0
  878. package/sdks/rust/api-full/rust/Cargo.toml +15 -0
  879. package/sdks/rust/api-full/rust/README.md +111 -0
  880. package/sdks/rust/api-full/rust/docs/Actor.md +24 -0
  881. package/sdks/rust/api-full/rust/docs/ActorName.md +11 -0
  882. package/sdks/rust/api-full/rust/docs/ActorsCreateApi.md +40 -0
  883. package/sdks/rust/api-full/rust/docs/ActorsCreateRequest.md +16 -0
  884. package/sdks/rust/api-full/rust/docs/ActorsCreateResponse.md +11 -0
  885. package/sdks/rust/api-full/rust/docs/ActorsDeleteApi.md +40 -0
  886. package/sdks/rust/api-full/rust/docs/ActorsGetOrCreateApi.md +40 -0
  887. package/sdks/rust/api-full/rust/docs/ActorsGetOrCreateRequest.md +16 -0
  888. package/sdks/rust/api-full/rust/docs/ActorsGetOrCreateResponse.md +12 -0
  889. package/sdks/rust/api-full/rust/docs/ActorsKvGetApi.md +38 -0
  890. package/sdks/rust/api-full/rust/docs/ActorsKvGetResponse.md +12 -0
  891. package/sdks/rust/api-full/rust/docs/ActorsListApi.md +45 -0
  892. package/sdks/rust/api-full/rust/docs/ActorsListNamesApi.md +41 -0
  893. package/sdks/rust/api-full/rust/docs/ActorsListNamesResponse.md +12 -0
  894. package/sdks/rust/api-full/rust/docs/ActorsListResponse.md +12 -0
  895. package/sdks/rust/api-full/rust/docs/CrashPolicy.md +14 -0
  896. package/sdks/rust/api-full/rust/docs/Datacenter.md +13 -0
  897. package/sdks/rust/api-full/rust/docs/DatacenterHealth.md +16 -0
  898. package/sdks/rust/api-full/rust/docs/DatacentersApi.md +34 -0
  899. package/sdks/rust/api-full/rust/docs/DatacentersListResponse.md +12 -0
  900. package/sdks/rust/api-full/rust/docs/HealthApi.md +34 -0
  901. package/sdks/rust/api-full/rust/docs/HealthFanoutResponse.md +11 -0
  902. package/sdks/rust/api-full/rust/docs/HealthResponse.md +13 -0
  903. package/sdks/rust/api-full/rust/docs/HealthStatus.md +13 -0
  904. package/sdks/rust/api-full/rust/docs/Namespace.md +14 -0
  905. package/sdks/rust/api-full/rust/docs/NamespaceListResponse.md +12 -0
  906. package/sdks/rust/api-full/rust/docs/NamespacesApi.md +69 -0
  907. package/sdks/rust/api-full/rust/docs/NamespacesCreateRequest.md +12 -0
  908. package/sdks/rust/api-full/rust/docs/NamespacesCreateResponse.md +11 -0
  909. package/sdks/rust/api-full/rust/docs/Pagination.md +11 -0
  910. package/sdks/rust/api-full/rust/docs/Runner.md +25 -0
  911. package/sdks/rust/api-full/rust/docs/RunnerConfig.md +13 -0
  912. package/sdks/rust/api-full/rust/docs/RunnerConfigKind.md +12 -0
  913. package/sdks/rust/api-full/rust/docs/RunnerConfigKindOneOf.md +11 -0
  914. package/sdks/rust/api-full/rust/docs/RunnerConfigKindOneOf1.md +11 -0
  915. package/sdks/rust/api-full/rust/docs/RunnerConfigKindOneOf1Serverless.md +17 -0
  916. package/sdks/rust/api-full/rust/docs/RunnerConfigVariant.md +13 -0
  917. package/sdks/rust/api-full/rust/docs/RunnerConfigsDeleteApi.md +38 -0
  918. package/sdks/rust/api-full/rust/docs/RunnerConfigsListApi.md +41 -0
  919. package/sdks/rust/api-full/rust/docs/RunnerConfigsListResponse.md +12 -0
  920. package/sdks/rust/api-full/rust/docs/RunnerConfigsListResponseRunnerConfigsValue.md +11 -0
  921. package/sdks/rust/api-full/rust/docs/RunnerConfigsRefreshMetadataApi.md +39 -0
  922. package/sdks/rust/api-full/rust/docs/RunnerConfigsServerlessHealthCheckApi.md +38 -0
  923. package/sdks/rust/api-full/rust/docs/RunnerConfigsServerlessHealthCheckRequest.md +12 -0
  924. package/sdks/rust/api-full/rust/docs/RunnerConfigsServerlessHealthCheckResponse.md +12 -0
  925. package/sdks/rust/api-full/rust/docs/RunnerConfigsServerlessHealthCheckResponseOneOf.md +11 -0
  926. package/sdks/rust/api-full/rust/docs/RunnerConfigsServerlessHealthCheckResponseOneOf1.md +11 -0
  927. package/sdks/rust/api-full/rust/docs/RunnerConfigsServerlessHealthCheckResponseOneOf1Failure.md +11 -0
  928. package/sdks/rust/api-full/rust/docs/RunnerConfigsServerlessHealthCheckResponseOneOfSuccess.md +11 -0
  929. package/sdks/rust/api-full/rust/docs/RunnerConfigsServerlessMetadataError.md +16 -0
  930. package/sdks/rust/api-full/rust/docs/RunnerConfigsServerlessMetadataErrorOneOf.md +11 -0
  931. package/sdks/rust/api-full/rust/docs/RunnerConfigsServerlessMetadataErrorOneOf1.md +11 -0
  932. package/sdks/rust/api-full/rust/docs/RunnerConfigsServerlessMetadataErrorOneOf2.md +11 -0
  933. package/sdks/rust/api-full/rust/docs/RunnerConfigsServerlessMetadataErrorOneOf3.md +11 -0
  934. package/sdks/rust/api-full/rust/docs/RunnerConfigsServerlessMetadataErrorOneOf3NonSuccessStatus.md +12 -0
  935. package/sdks/rust/api-full/rust/docs/RunnerConfigsServerlessMetadataErrorOneOf4.md +11 -0
  936. package/sdks/rust/api-full/rust/docs/RunnerConfigsServerlessMetadataErrorOneOf4InvalidResponseJson.md +11 -0
  937. package/sdks/rust/api-full/rust/docs/RunnerConfigsServerlessMetadataErrorOneOf5.md +11 -0
  938. package/sdks/rust/api-full/rust/docs/RunnerConfigsServerlessMetadataErrorOneOf5InvalidResponseSchema.md +12 -0
  939. package/sdks/rust/api-full/rust/docs/RunnerConfigsUpsertApi.md +39 -0
  940. package/sdks/rust/api-full/rust/docs/RunnerConfigsUpsertRequestBody.md +11 -0
  941. package/sdks/rust/api-full/rust/docs/RunnerConfigsUpsertResponse.md +11 -0
  942. package/sdks/rust/api-full/rust/docs/RunnersApi.md +75 -0
  943. package/sdks/rust/api-full/rust/docs/RunnersListNamesResponse.md +12 -0
  944. package/sdks/rust/api-full/rust/docs/RunnersListResponse.md +12 -0
  945. package/sdks/rust/api-full/rust/git_push.sh +57 -0
  946. package/sdks/rust/api-full/rust/src/apis/actors_create_api.rs +68 -0
  947. package/sdks/rust/api-full/rust/src/apis/actors_delete_api.rs +69 -0
  948. package/sdks/rust/api-full/rust/src/apis/actors_get_or_create_api.rs +68 -0
  949. package/sdks/rust/api-full/rust/src/apis/actors_kv_get_api.rs +65 -0
  950. package/sdks/rust/api-full/rust/src/apis/actors_list_api.rs +90 -0
  951. package/sdks/rust/api-full/rust/src/apis/actors_list_names_api.rs +74 -0
  952. package/sdks/rust/api-full/rust/src/apis/configuration.rs +51 -0
  953. package/sdks/rust/api-full/rust/src/apis/datacenters_api.rs +62 -0
  954. package/sdks/rust/api-full/rust/src/apis/health_api.rs +62 -0
  955. package/sdks/rust/api-full/rust/src/apis/mod.rs +130 -0
  956. package/sdks/rust/api-full/rust/src/apis/namespaces_api.rs +126 -0
  957. package/sdks/rust/api-full/rust/src/apis/runner_configs_delete_api.rs +66 -0
  958. package/sdks/rust/api-full/rust/src/apis/runner_configs_list_api.rs +81 -0
  959. package/sdks/rust/api-full/rust/src/apis/runner_configs_refresh_metadata_api.rs +68 -0
  960. package/sdks/rust/api-full/rust/src/apis/runner_configs_serverless_health_check_api.rs +67 -0
  961. package/sdks/rust/api-full/rust/src/apis/runner_configs_upsert_api.rs +68 -0
  962. package/sdks/rust/api-full/rust/src/apis/runners_api.rs +141 -0
  963. package/sdks/rust/api-full/rust/src/lib.rs +11 -0
  964. package/sdks/rust/api-full/rust/src/models/actor.rs +73 -0
  965. package/sdks/rust/api-full/rust/src/models/actor_name.rs +27 -0
  966. package/sdks/rust/api-full/rust/src/models/actors_create_request.rs +42 -0
  967. package/sdks/rust/api-full/rust/src/models/actors_create_response.rs +27 -0
  968. package/sdks/rust/api-full/rust/src/models/actors_get_or_create_request.rs +42 -0
  969. package/sdks/rust/api-full/rust/src/models/actors_get_or_create_response.rs +30 -0
  970. package/sdks/rust/api-full/rust/src/models/actors_kv_get_response.rs +30 -0
  971. package/sdks/rust/api-full/rust/src/models/actors_list_names_response.rs +30 -0
  972. package/sdks/rust/api-full/rust/src/models/actors_list_response.rs +30 -0
  973. package/sdks/rust/api-full/rust/src/models/crash_policy.rs +41 -0
  974. package/sdks/rust/api-full/rust/src/models/datacenter.rs +33 -0
  975. package/sdks/rust/api-full/rust/src/models/datacenter_health.rs +42 -0
  976. package/sdks/rust/api-full/rust/src/models/datacenters_list_response.rs +30 -0
  977. package/sdks/rust/api-full/rust/src/models/health_fanout_response.rs +27 -0
  978. package/sdks/rust/api-full/rust/src/models/health_response.rs +33 -0
  979. package/sdks/rust/api-full/rust/src/models/health_status.rs +38 -0
  980. package/sdks/rust/api-full/rust/src/models/mod.rs +100 -0
  981. package/sdks/rust/api-full/rust/src/models/namespace.rs +36 -0
  982. package/sdks/rust/api-full/rust/src/models/namespace_list_response.rs +30 -0
  983. package/sdks/rust/api-full/rust/src/models/namespaces_create_request.rs +30 -0
  984. package/sdks/rust/api-full/rust/src/models/namespaces_create_response.rs +27 -0
  985. package/sdks/rust/api-full/rust/src/models/pagination.rs +27 -0
  986. package/sdks/rust/api-full/rust/src/models/runner.rs +69 -0
  987. package/sdks/rust/api-full/rust/src/models/runner_config.rs +33 -0
  988. package/sdks/rust/api-full/rust/src/models/runner_config_kind.rs +26 -0
  989. package/sdks/rust/api-full/rust/src/models/runner_config_kind_one_of.rs +27 -0
  990. package/sdks/rust/api-full/rust/src/models/runner_config_kind_one_of_1.rs +27 -0
  991. package/sdks/rust/api-full/rust/src/models/runner_config_kind_one_of_1_serverless.rs +46 -0
  992. package/sdks/rust/api-full/rust/src/models/runner_config_variant.rs +38 -0
  993. package/sdks/rust/api-full/rust/src/models/runner_configs_list_response.rs +30 -0
  994. package/sdks/rust/api-full/rust/src/models/runner_configs_list_response_runner_configs_value.rs +27 -0
  995. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_health_check_request.rs +30 -0
  996. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_health_check_response.rs +26 -0
  997. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_health_check_response_one_of.rs +27 -0
  998. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_health_check_response_one_of_1.rs +27 -0
  999. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_health_check_response_one_of_1_failure.rs +27 -0
  1000. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_health_check_response_one_of_success.rs +27 -0
  1001. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error.rs +30 -0
  1002. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error_one_of.rs +27 -0
  1003. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error_one_of_1.rs +27 -0
  1004. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error_one_of_2.rs +27 -0
  1005. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error_one_of_3.rs +27 -0
  1006. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error_one_of_3_non_success_status.rs +30 -0
  1007. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error_one_of_4.rs +27 -0
  1008. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error_one_of_4_invalid_response_json.rs +27 -0
  1009. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error_one_of_5.rs +27 -0
  1010. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error_one_of_5_invalid_response_schema.rs +30 -0
  1011. package/sdks/rust/api-full/rust/src/models/runner_configs_upsert_request_body.rs +27 -0
  1012. package/sdks/rust/api-full/rust/src/models/runner_configs_upsert_response.rs +27 -0
  1013. package/sdks/rust/api-full/rust/src/models/runners_list_names_response.rs +30 -0
  1014. package/sdks/rust/api-full/rust/src/models/runners_list_response.rs +30 -0
  1015. package/sdks/rust/api-full/src/apis/actors_api.rs +67 -0
  1016. package/sdks/rust/api-full/src/apis/configuration.rs +48 -0
  1017. package/sdks/rust/api-full/src/apis/mod.rs +119 -0
  1018. package/sdks/rust/api-full/src/apis/ns_api.rs +67 -0
  1019. package/sdks/rust/api-full/src/lib.rs +11 -0
  1020. package/sdks/rust/api-full/src/models/actor.rs +72 -0
  1021. package/sdks/rust/api-full/src/models/actor_lifecycle.rs +29 -0
  1022. package/sdks/rust/api-full/src/models/actors_create_request.rs +36 -0
  1023. package/sdks/rust/api-full/src/models/actors_create_response.rs +26 -0
  1024. package/sdks/rust/api-full/src/models/mod.rs +14 -0
  1025. package/sdks/rust/api-full/src/models/namespace.rs +40 -0
  1026. package/sdks/rust/api-full/src/models/namespaces_create_request.rs +26 -0
  1027. package/sdks/rust/api-full/src/models/namespaces_create_response.rs +26 -0
  1028. package/sdks/rust/data/Cargo.toml +18 -0
  1029. package/sdks/rust/data/build.rs +15 -0
  1030. package/sdks/rust/data/src/converted.rs +137 -0
  1031. package/sdks/rust/data/src/generated.rs +1 -0
  1032. package/sdks/rust/data/src/lib.rs +11 -0
  1033. package/sdks/rust/data/src/versioned/mod.rs +178 -0
  1034. package/sdks/rust/data/src/versioned/namespace_runner_config.rs +125 -0
  1035. package/sdks/rust/epoxy-protocol/Cargo.toml +17 -0
  1036. package/sdks/rust/epoxy-protocol/build.rs +18 -0
  1037. package/sdks/rust/epoxy-protocol/src/generated.rs +1 -0
  1038. package/sdks/rust/epoxy-protocol/src/lib.rs +7 -0
  1039. package/sdks/rust/epoxy-protocol/src/versioned.rs +206 -0
  1040. package/sdks/rust/runner-protocol/Cargo.toml +23 -0
  1041. package/sdks/rust/runner-protocol/build.rs +115 -0
  1042. package/sdks/rust/runner-protocol/src/compat.rs +7 -0
  1043. package/sdks/rust/runner-protocol/src/generated.rs +1 -0
  1044. package/sdks/rust/runner-protocol/src/lib.rs +10 -0
  1045. package/sdks/rust/runner-protocol/src/util.rs +14 -0
  1046. package/sdks/rust/runner-protocol/src/uuid_compat.rs +209 -0
  1047. package/sdks/rust/runner-protocol/src/versioned.rs +1734 -0
  1048. package/sdks/rust/ups-protocol/Cargo.toml +17 -0
  1049. package/sdks/rust/ups-protocol/build.rs +18 -0
  1050. package/sdks/rust/ups-protocol/src/generated.rs +1 -0
  1051. package/sdks/rust/ups-protocol/src/lib.rs +7 -0
  1052. package/sdks/rust/ups-protocol/src/versioned.rs +48 -0
  1053. package/sdks/schemas/README.md +6 -0
  1054. package/sdks/schemas/data/namespace.runner_config.v1.bare +13 -0
  1055. package/sdks/schemas/data/namespace.runner_config.v2.bare +23 -0
  1056. package/sdks/schemas/data/pegboard.namespace.actor_by_key.v1.bare +6 -0
  1057. package/sdks/schemas/data/pegboard.namespace.actor_name.v1.bare +5 -0
  1058. package/sdks/schemas/data/pegboard.namespace.runner_alloc_idx.v1.bare +7 -0
  1059. package/sdks/schemas/data/pegboard.namespace.runner_by_key.v1.bare +6 -0
  1060. package/sdks/schemas/data/pegboard.runner.metadata.v1.bare +5 -0
  1061. package/sdks/schemas/epoxy-protocol/v1.bare +260 -0
  1062. package/sdks/schemas/runner-protocol/v1.bare +393 -0
  1063. package/sdks/schemas/runner-protocol/v2.bare +403 -0
  1064. package/sdks/schemas/runner-protocol/v3.bare +436 -0
  1065. package/sdks/schemas/ups-protocol/v1.bare +23 -0
  1066. package/sdks/typescript/api-full/.turbo/turbo-build.log +42 -0
  1067. package/sdks/typescript/api-full/build.js +69 -0
  1068. package/sdks/typescript/api-full/package.json +59 -0
  1069. package/sdks/typescript/api-full/rivetkit-engine-api-full-25.5.3.tgz +0 -0
  1070. package/sdks/typescript/api-full/src/Client.ts +984 -0
  1071. package/sdks/typescript/api-full/src/api/client/index.ts +1 -0
  1072. package/sdks/typescript/api-full/src/api/client/requests/ActorsCreateRequest.ts +24 -0
  1073. package/sdks/typescript/api-full/src/api/client/requests/ActorsDeleteRequest.ts +11 -0
  1074. package/sdks/typescript/api-full/src/api/client/requests/ActorsGetOrCreateRequest.ts +25 -0
  1075. package/sdks/typescript/api-full/src/api/client/requests/ActorsListNamesRequest.ts +15 -0
  1076. package/sdks/typescript/api-full/src/api/client/requests/ActorsListRequest.ts +19 -0
  1077. package/sdks/typescript/api-full/src/api/client/requests/RunnerConfigsDeleteRequest.ts +13 -0
  1078. package/sdks/typescript/api-full/src/api/client/requests/RunnerConfigsListRequest.ts +19 -0
  1079. package/sdks/typescript/api-full/src/api/client/requests/RunnerConfigsRefreshMetadataRequest.ts +19 -0
  1080. package/sdks/typescript/api-full/src/api/client/requests/RunnerConfigsServerlessHealthCheckRequest.ts +16 -0
  1081. package/sdks/typescript/api-full/src/api/client/requests/RunnerConfigsUpsertRequestBody.ts +19 -0
  1082. package/sdks/typescript/api-full/src/api/client/requests/index.ts +10 -0
  1083. package/sdks/typescript/api-full/src/api/index.ts +3 -0
  1084. package/sdks/typescript/api-full/src/api/resources/datacenters/client/Client.ts +97 -0
  1085. package/sdks/typescript/api-full/src/api/resources/datacenters/client/index.ts +1 -0
  1086. package/sdks/typescript/api-full/src/api/resources/datacenters/index.ts +1 -0
  1087. package/sdks/typescript/api-full/src/api/resources/health/client/Client.ts +97 -0
  1088. package/sdks/typescript/api-full/src/api/resources/health/client/index.ts +1 -0
  1089. package/sdks/typescript/api-full/src/api/resources/health/index.ts +1 -0
  1090. package/sdks/typescript/api-full/src/api/resources/index.ts +6 -0
  1091. package/sdks/typescript/api-full/src/api/resources/namespaces/client/Client.ts +187 -0
  1092. package/sdks/typescript/api-full/src/api/resources/namespaces/client/index.ts +1 -0
  1093. package/sdks/typescript/api-full/src/api/resources/namespaces/client/requests/NamespacesCreateRequest.ts +15 -0
  1094. package/sdks/typescript/api-full/src/api/resources/namespaces/client/requests/NamespacesListRequest.ts +14 -0
  1095. package/sdks/typescript/api-full/src/api/resources/namespaces/client/requests/index.ts +2 -0
  1096. package/sdks/typescript/api-full/src/api/resources/namespaces/index.ts +1 -0
  1097. package/sdks/typescript/api-full/src/api/resources/runners/client/Client.ts +209 -0
  1098. package/sdks/typescript/api-full/src/api/resources/runners/client/index.ts +1 -0
  1099. package/sdks/typescript/api-full/src/api/resources/runners/client/requests/RunnersListNamesRequest.ts +15 -0
  1100. package/sdks/typescript/api-full/src/api/resources/runners/client/requests/RunnersListRequest.ts +18 -0
  1101. package/sdks/typescript/api-full/src/api/resources/runners/client/requests/index.ts +2 -0
  1102. package/sdks/typescript/api-full/src/api/resources/runners/index.ts +1 -0
  1103. package/sdks/typescript/api-full/src/api/types/Actor.ts +32 -0
  1104. package/sdks/typescript/api-full/src/api/types/ActorName.ts +7 -0
  1105. package/sdks/typescript/api-full/src/api/types/ActorsCreateResponse.ts +9 -0
  1106. package/sdks/typescript/api-full/src/api/types/ActorsDeleteResponse.ts +5 -0
  1107. package/sdks/typescript/api-full/src/api/types/ActorsGetOrCreateResponse.ts +10 -0
  1108. package/sdks/typescript/api-full/src/api/types/ActorsKvGetResponse.ts +8 -0
  1109. package/sdks/typescript/api-full/src/api/types/ActorsListNamesResponse.ts +10 -0
  1110. package/sdks/typescript/api-full/src/api/types/ActorsListResponse.ts +10 -0
  1111. package/sdks/typescript/api-full/src/api/types/CrashPolicy.ts +10 -0
  1112. package/sdks/typescript/api-full/src/api/types/Datacenter.ts +9 -0
  1113. package/sdks/typescript/api-full/src/api/types/DatacenterHealth.ts +14 -0
  1114. package/sdks/typescript/api-full/src/api/types/DatacentersListResponse.ts +10 -0
  1115. package/sdks/typescript/api-full/src/api/types/HealthFanoutResponse.ts +9 -0
  1116. package/sdks/typescript/api-full/src/api/types/HealthResponse.ts +9 -0
  1117. package/sdks/typescript/api-full/src/api/types/HealthStatus.ts +9 -0
  1118. package/sdks/typescript/api-full/src/api/types/Namespace.ts +12 -0
  1119. package/sdks/typescript/api-full/src/api/types/NamespaceListResponse.ts +10 -0
  1120. package/sdks/typescript/api-full/src/api/types/NamespacesCreateResponse.ts +9 -0
  1121. package/sdks/typescript/api-full/src/api/types/Pagination.ts +7 -0
  1122. package/sdks/typescript/api-full/src/api/types/RivetId.ts +5 -0
  1123. package/sdks/typescript/api-full/src/api/types/Runner.ts +23 -0
  1124. package/sdks/typescript/api-full/src/api/types/RunnerConfig.ts +11 -0
  1125. package/sdks/typescript/api-full/src/api/types/RunnerConfigKind.ts +7 -0
  1126. package/sdks/typescript/api-full/src/api/types/RunnerConfigKindNormal.ts +7 -0
  1127. package/sdks/typescript/api-full/src/api/types/RunnerConfigKindServerless.ts +9 -0
  1128. package/sdks/typescript/api-full/src/api/types/RunnerConfigKindServerlessServerless.ts +14 -0
  1129. package/sdks/typescript/api-full/src/api/types/RunnerConfigServerless.ts +14 -0
  1130. package/sdks/typescript/api-full/src/api/types/RunnerConfigVariant.ts +9 -0
  1131. package/sdks/typescript/api-full/src/api/types/RunnerConfigsDeleteResponse.ts +5 -0
  1132. package/sdks/typescript/api-full/src/api/types/RunnerConfigsListResponse.ts +10 -0
  1133. package/sdks/typescript/api-full/src/api/types/RunnerConfigsListResponseRunnerConfigsValue.ts +9 -0
  1134. package/sdks/typescript/api-full/src/api/types/RunnerConfigsRefreshMetadataRequestBody.ts +5 -0
  1135. package/sdks/typescript/api-full/src/api/types/RunnerConfigsRefreshMetadataResponse.ts +5 -0
  1136. package/sdks/typescript/api-full/src/api/types/RunnerConfigsServerlessHealthCheckResponse.ts +9 -0
  1137. package/sdks/typescript/api-full/src/api/types/RunnerConfigsServerlessHealthCheckResponseFailure.ts +9 -0
  1138. package/sdks/typescript/api-full/src/api/types/RunnerConfigsServerlessHealthCheckResponseFailureFailure.ts +9 -0
  1139. package/sdks/typescript/api-full/src/api/types/RunnerConfigsServerlessHealthCheckResponseSuccess.ts +9 -0
  1140. package/sdks/typescript/api-full/src/api/types/RunnerConfigsServerlessHealthCheckResponseSuccessSuccess.ts +7 -0
  1141. package/sdks/typescript/api-full/src/api/types/RunnerConfigsServerlessMetadataError.ts +13 -0
  1142. package/sdks/typescript/api-full/src/api/types/RunnerConfigsServerlessMetadataErrorInvalidRequest.ts +7 -0
  1143. package/sdks/typescript/api-full/src/api/types/RunnerConfigsServerlessMetadataErrorInvalidResponseJson.ts +9 -0
  1144. package/sdks/typescript/api-full/src/api/types/RunnerConfigsServerlessMetadataErrorInvalidResponseJsonInvalidResponseJson.ts +7 -0
  1145. package/sdks/typescript/api-full/src/api/types/RunnerConfigsServerlessMetadataErrorInvalidResponseSchema.ts +9 -0
  1146. package/sdks/typescript/api-full/src/api/types/RunnerConfigsServerlessMetadataErrorInvalidResponseSchemaInvalidResponseSchema.ts +8 -0
  1147. package/sdks/typescript/api-full/src/api/types/RunnerConfigsServerlessMetadataErrorNonSuccessStatus.ts +9 -0
  1148. package/sdks/typescript/api-full/src/api/types/RunnerConfigsServerlessMetadataErrorNonSuccessStatusNonSuccessStatus.ts +8 -0
  1149. package/sdks/typescript/api-full/src/api/types/RunnerConfigsServerlessMetadataErrorRequestFailed.ts +7 -0
  1150. package/sdks/typescript/api-full/src/api/types/RunnerConfigsServerlessMetadataErrorRequestTimedOut.ts +7 -0
  1151. package/sdks/typescript/api-full/src/api/types/RunnerConfigsUpsertResponse.ts +7 -0
  1152. package/sdks/typescript/api-full/src/api/types/RunnersListNamesResponse.ts +10 -0
  1153. package/sdks/typescript/api-full/src/api/types/RunnersListResponse.ts +10 -0
  1154. package/sdks/typescript/api-full/src/api/types/index.ts +51 -0
  1155. package/sdks/typescript/api-full/src/core/auth/BasicAuth.ts +31 -0
  1156. package/sdks/typescript/api-full/src/core/auth/BearerToken.ts +15 -0
  1157. package/sdks/typescript/api-full/src/core/auth/index.ts +2 -0
  1158. package/sdks/typescript/api-full/src/core/fetcher/APIResponse.ts +12 -0
  1159. package/sdks/typescript/api-full/src/core/fetcher/Fetcher.ts +144 -0
  1160. package/sdks/typescript/api-full/src/core/fetcher/Supplier.ts +11 -0
  1161. package/sdks/typescript/api-full/src/core/fetcher/createRequestUrl.ts +10 -0
  1162. package/sdks/typescript/api-full/src/core/fetcher/getFetchFn.ts +25 -0
  1163. package/sdks/typescript/api-full/src/core/fetcher/getHeader.ts +8 -0
  1164. package/sdks/typescript/api-full/src/core/fetcher/getRequestBody.ts +16 -0
  1165. package/sdks/typescript/api-full/src/core/fetcher/getResponseBody.ts +34 -0
  1166. package/sdks/typescript/api-full/src/core/fetcher/index.ts +5 -0
  1167. package/sdks/typescript/api-full/src/core/fetcher/makeRequest.ts +44 -0
  1168. package/sdks/typescript/api-full/src/core/fetcher/requestWithRetries.ts +33 -0
  1169. package/sdks/typescript/api-full/src/core/fetcher/signals.ts +38 -0
  1170. package/sdks/typescript/api-full/src/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.ts +257 -0
  1171. package/sdks/typescript/api-full/src/core/fetcher/stream-wrappers/NodePre18StreamWrapper.ts +107 -0
  1172. package/sdks/typescript/api-full/src/core/fetcher/stream-wrappers/UndiciStreamWrapper.ts +243 -0
  1173. package/sdks/typescript/api-full/src/core/fetcher/stream-wrappers/chooseStreamWrapper.ts +34 -0
  1174. package/sdks/typescript/api-full/src/core/index.ts +4 -0
  1175. package/sdks/typescript/api-full/src/core/json.ts +27 -0
  1176. package/sdks/typescript/api-full/src/core/runtime/index.ts +1 -0
  1177. package/sdks/typescript/api-full/src/core/runtime/runtime.ts +131 -0
  1178. package/sdks/typescript/api-full/src/core/schemas/Schema.ts +101 -0
  1179. package/sdks/typescript/api-full/src/core/schemas/builders/bigint/bigint.ts +55 -0
  1180. package/sdks/typescript/api-full/src/core/schemas/builders/bigint/index.ts +1 -0
  1181. package/sdks/typescript/api-full/src/core/schemas/builders/date/date.ts +65 -0
  1182. package/sdks/typescript/api-full/src/core/schemas/builders/date/index.ts +1 -0
  1183. package/sdks/typescript/api-full/src/core/schemas/builders/enum/enum.ts +43 -0
  1184. package/sdks/typescript/api-full/src/core/schemas/builders/enum/index.ts +1 -0
  1185. package/sdks/typescript/api-full/src/core/schemas/builders/index.ts +14 -0
  1186. package/sdks/typescript/api-full/src/core/schemas/builders/lazy/index.ts +3 -0
  1187. package/sdks/typescript/api-full/src/core/schemas/builders/lazy/lazy.ts +32 -0
  1188. package/sdks/typescript/api-full/src/core/schemas/builders/lazy/lazyObject.ts +20 -0
  1189. package/sdks/typescript/api-full/src/core/schemas/builders/list/index.ts +1 -0
  1190. package/sdks/typescript/api-full/src/core/schemas/builders/list/list.ts +73 -0
  1191. package/sdks/typescript/api-full/src/core/schemas/builders/literals/booleanLiteral.ts +29 -0
  1192. package/sdks/typescript/api-full/src/core/schemas/builders/literals/index.ts +2 -0
  1193. package/sdks/typescript/api-full/src/core/schemas/builders/literals/stringLiteral.ts +29 -0
  1194. package/sdks/typescript/api-full/src/core/schemas/builders/object/index.ts +22 -0
  1195. package/sdks/typescript/api-full/src/core/schemas/builders/object/object.ts +366 -0
  1196. package/sdks/typescript/api-full/src/core/schemas/builders/object/objectWithoutOptionalProperties.ts +18 -0
  1197. package/sdks/typescript/api-full/src/core/schemas/builders/object/property.ts +23 -0
  1198. package/sdks/typescript/api-full/src/core/schemas/builders/object/types.ts +58 -0
  1199. package/sdks/typescript/api-full/src/core/schemas/builders/object-like/getObjectLikeUtils.ts +79 -0
  1200. package/sdks/typescript/api-full/src/core/schemas/builders/object-like/index.ts +2 -0
  1201. package/sdks/typescript/api-full/src/core/schemas/builders/object-like/types.ts +11 -0
  1202. package/sdks/typescript/api-full/src/core/schemas/builders/primitives/any.ts +4 -0
  1203. package/sdks/typescript/api-full/src/core/schemas/builders/primitives/boolean.ts +25 -0
  1204. package/sdks/typescript/api-full/src/core/schemas/builders/primitives/index.ts +5 -0
  1205. package/sdks/typescript/api-full/src/core/schemas/builders/primitives/number.ts +25 -0
  1206. package/sdks/typescript/api-full/src/core/schemas/builders/primitives/string.ts +25 -0
  1207. package/sdks/typescript/api-full/src/core/schemas/builders/primitives/unknown.ts +4 -0
  1208. package/sdks/typescript/api-full/src/core/schemas/builders/record/index.ts +2 -0
  1209. package/sdks/typescript/api-full/src/core/schemas/builders/record/record.ts +129 -0
  1210. package/sdks/typescript/api-full/src/core/schemas/builders/record/types.ts +17 -0
  1211. package/sdks/typescript/api-full/src/core/schemas/builders/schema-utils/JsonError.ts +9 -0
  1212. package/sdks/typescript/api-full/src/core/schemas/builders/schema-utils/ParseError.ts +9 -0
  1213. package/sdks/typescript/api-full/src/core/schemas/builders/schema-utils/getSchemaUtils.ts +181 -0
  1214. package/sdks/typescript/api-full/src/core/schemas/builders/schema-utils/index.ts +4 -0
  1215. package/sdks/typescript/api-full/src/core/schemas/builders/schema-utils/stringifyValidationErrors.ts +8 -0
  1216. package/sdks/typescript/api-full/src/core/schemas/builders/set/index.ts +1 -0
  1217. package/sdks/typescript/api-full/src/core/schemas/builders/set/set.ts +43 -0
  1218. package/sdks/typescript/api-full/src/core/schemas/builders/undiscriminated-union/index.ts +6 -0
  1219. package/sdks/typescript/api-full/src/core/schemas/builders/undiscriminated-union/types.ts +10 -0
  1220. package/sdks/typescript/api-full/src/core/schemas/builders/undiscriminated-union/undiscriminatedUnion.ts +60 -0
  1221. package/sdks/typescript/api-full/src/core/schemas/builders/union/discriminant.ts +14 -0
  1222. package/sdks/typescript/api-full/src/core/schemas/builders/union/index.ts +10 -0
  1223. package/sdks/typescript/api-full/src/core/schemas/builders/union/types.ts +26 -0
  1224. package/sdks/typescript/api-full/src/core/schemas/builders/union/union.ts +170 -0
  1225. package/sdks/typescript/api-full/src/core/schemas/index.ts +2 -0
  1226. package/sdks/typescript/api-full/src/core/schemas/utils/MaybePromise.ts +1 -0
  1227. package/sdks/typescript/api-full/src/core/schemas/utils/addQuestionMarksToNullableProperties.ts +9 -0
  1228. package/sdks/typescript/api-full/src/core/schemas/utils/createIdentitySchemaCreator.ts +21 -0
  1229. package/sdks/typescript/api-full/src/core/schemas/utils/entries.ts +3 -0
  1230. package/sdks/typescript/api-full/src/core/schemas/utils/filterObject.ts +13 -0
  1231. package/sdks/typescript/api-full/src/core/schemas/utils/getErrorMessageForIncorrectType.ts +25 -0
  1232. package/sdks/typescript/api-full/src/core/schemas/utils/isPlainObject.ts +17 -0
  1233. package/sdks/typescript/api-full/src/core/schemas/utils/keys.ts +3 -0
  1234. package/sdks/typescript/api-full/src/core/schemas/utils/maybeSkipValidation.ts +38 -0
  1235. package/sdks/typescript/api-full/src/core/schemas/utils/partition.ts +12 -0
  1236. package/sdks/typescript/api-full/src/errors/RivetError.ts +47 -0
  1237. package/sdks/typescript/api-full/src/errors/RivetTimeoutError.ts +10 -0
  1238. package/sdks/typescript/api-full/src/errors/index.ts +2 -0
  1239. package/sdks/typescript/api-full/src/index.ts +4 -0
  1240. package/sdks/typescript/api-full/src/serialization/client/index.ts +1 -0
  1241. package/sdks/typescript/api-full/src/serialization/client/requests/ActorsCreateRequest.ts +31 -0
  1242. package/sdks/typescript/api-full/src/serialization/client/requests/ActorsGetOrCreateRequest.ts +31 -0
  1243. package/sdks/typescript/api-full/src/serialization/client/requests/RunnerConfigsServerlessHealthCheckRequest.ts +22 -0
  1244. package/sdks/typescript/api-full/src/serialization/client/requests/RunnerConfigsUpsertRequestBody.ts +21 -0
  1245. package/sdks/typescript/api-full/src/serialization/client/requests/index.ts +4 -0
  1246. package/sdks/typescript/api-full/src/serialization/index.ts +3 -0
  1247. package/sdks/typescript/api-full/src/serialization/resources/index.ts +2 -0
  1248. package/sdks/typescript/api-full/src/serialization/resources/namespaces/client/index.ts +1 -0
  1249. package/sdks/typescript/api-full/src/serialization/resources/namespaces/client/requests/NamespacesCreateRequest.ts +22 -0
  1250. package/sdks/typescript/api-full/src/serialization/resources/namespaces/client/requests/index.ts +1 -0
  1251. package/sdks/typescript/api-full/src/serialization/resources/namespaces/index.ts +1 -0
  1252. package/sdks/typescript/api-full/src/serialization/types/Actor.ts +45 -0
  1253. package/sdks/typescript/api-full/src/serialization/types/ActorName.ts +18 -0
  1254. package/sdks/typescript/api-full/src/serialization/types/ActorsCreateResponse.ts +21 -0
  1255. package/sdks/typescript/api-full/src/serialization/types/ActorsDeleteResponse.ts +16 -0
  1256. package/sdks/typescript/api-full/src/serialization/types/ActorsGetOrCreateResponse.ts +23 -0
  1257. package/sdks/typescript/api-full/src/serialization/types/ActorsKvGetResponse.ts +22 -0
  1258. package/sdks/typescript/api-full/src/serialization/types/ActorsListNamesResponse.ts +24 -0
  1259. package/sdks/typescript/api-full/src/serialization/types/ActorsListResponse.ts +24 -0
  1260. package/sdks/typescript/api-full/src/serialization/types/CrashPolicy.ts +14 -0
  1261. package/sdks/typescript/api-full/src/serialization/types/Datacenter.ts +22 -0
  1262. package/sdks/typescript/api-full/src/serialization/types/DatacenterHealth.ts +32 -0
  1263. package/sdks/typescript/api-full/src/serialization/types/DatacentersListResponse.ts +24 -0
  1264. package/sdks/typescript/api-full/src/serialization/types/HealthFanoutResponse.ts +21 -0
  1265. package/sdks/typescript/api-full/src/serialization/types/HealthResponse.ts +22 -0
  1266. package/sdks/typescript/api-full/src/serialization/types/HealthStatus.ts +14 -0
  1267. package/sdks/typescript/api-full/src/serialization/types/Namespace.ts +25 -0
  1268. package/sdks/typescript/api-full/src/serialization/types/NamespaceListResponse.ts +24 -0
  1269. package/sdks/typescript/api-full/src/serialization/types/NamespacesCreateResponse.ts +21 -0
  1270. package/sdks/typescript/api-full/src/serialization/types/Pagination.ts +18 -0
  1271. package/sdks/typescript/api-full/src/serialization/types/RivetId.ts +13 -0
  1272. package/sdks/typescript/api-full/src/serialization/types/Runner.ts +46 -0
  1273. package/sdks/typescript/api-full/src/serialization/types/RunnerConfig.ts +23 -0
  1274. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigKind.ts +16 -0
  1275. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigKindNormal.ts +20 -0
  1276. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigKindServerless.ts +21 -0
  1277. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigKindServerlessServerless.ts +32 -0
  1278. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigServerless.ts +32 -0
  1279. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigVariant.ts +16 -0
  1280. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsDeleteResponse.ts +16 -0
  1281. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsListResponse.ts +27 -0
  1282. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsListResponseRunnerConfigsValue.ts +21 -0
  1283. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsRefreshMetadataRequestBody.ts +16 -0
  1284. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsRefreshMetadataResponse.ts +16 -0
  1285. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsServerlessHealthCheckResponse.ts +23 -0
  1286. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsServerlessHealthCheckResponseFailure.ts +21 -0
  1287. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsServerlessHealthCheckResponseFailureFailure.ts +21 -0
  1288. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsServerlessHealthCheckResponseSuccess.ts +21 -0
  1289. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsServerlessHealthCheckResponseSuccessSuccess.ts +20 -0
  1290. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsServerlessMetadataError.ts +35 -0
  1291. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsServerlessMetadataErrorInvalidRequest.ts +23 -0
  1292. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsServerlessMetadataErrorInvalidResponseJson.ts +24 -0
  1293. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsServerlessMetadataErrorInvalidResponseJsonInvalidResponseJson.ts +20 -0
  1294. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsServerlessMetadataErrorInvalidResponseSchema.ts +24 -0
  1295. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsServerlessMetadataErrorInvalidResponseSchemaInvalidResponseSchema.ts +22 -0
  1296. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsServerlessMetadataErrorNonSuccessStatus.ts +24 -0
  1297. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsServerlessMetadataErrorNonSuccessStatusNonSuccessStatus.ts +22 -0
  1298. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsServerlessMetadataErrorRequestFailed.ts +23 -0
  1299. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsServerlessMetadataErrorRequestTimedOut.ts +23 -0
  1300. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsUpsertResponse.ts +20 -0
  1301. package/sdks/typescript/api-full/src/serialization/types/RunnersListNamesResponse.ts +23 -0
  1302. package/sdks/typescript/api-full/src/serialization/types/RunnersListResponse.ts +24 -0
  1303. package/sdks/typescript/api-full/src/serialization/types/index.ts +51 -0
  1304. package/sdks/typescript/api-full/tsconfig.json +24 -0
  1305. package/sdks/typescript/runner/.turbo/turbo-build.log +22 -0
  1306. package/sdks/typescript/runner/benches/actor-lifecycle.bench.ts +190 -0
  1307. package/sdks/typescript/runner/benches/utils.ts +143 -0
  1308. package/sdks/typescript/runner/dist/mod.cjs +2951 -0
  1309. package/sdks/typescript/runner/dist/mod.cjs.map +1 -0
  1310. package/sdks/typescript/runner/dist/mod.d.cts +326 -0
  1311. package/sdks/typescript/runner/dist/mod.d.ts +326 -0
  1312. package/sdks/typescript/runner/dist/mod.js +2951 -0
  1313. package/sdks/typescript/runner/dist/mod.js.map +1 -0
  1314. package/sdks/typescript/runner/node_modules/.bin/pino +21 -0
  1315. package/sdks/typescript/runner/node_modules/.bin/tsc +21 -0
  1316. package/sdks/typescript/runner/node_modules/.bin/tsserver +21 -0
  1317. package/sdks/typescript/runner/node_modules/.bin/tsup +21 -0
  1318. package/sdks/typescript/runner/node_modules/.bin/tsup-node +21 -0
  1319. package/sdks/typescript/runner/node_modules/.bin/tsx +21 -0
  1320. package/sdks/typescript/runner/node_modules/.bin/uuid +21 -0
  1321. package/sdks/typescript/runner/node_modules/.bin/vitest +21 -0
  1322. package/sdks/typescript/runner/package.json +37 -0
  1323. package/sdks/typescript/runner/src/actor.ts +196 -0
  1324. package/sdks/typescript/runner/src/log.ts +11 -0
  1325. package/sdks/typescript/runner/src/mod.ts +1755 -0
  1326. package/sdks/typescript/runner/src/stringify.ts +354 -0
  1327. package/sdks/typescript/runner/src/tunnel.ts +1178 -0
  1328. package/sdks/typescript/runner/src/utils.ts +159 -0
  1329. package/sdks/typescript/runner/src/websocket-tunnel-adapter.ts +567 -0
  1330. package/sdks/typescript/runner/src/websocket.ts +43 -0
  1331. package/sdks/typescript/runner/tests/lifecycle.test.ts +596 -0
  1332. package/sdks/typescript/runner/tests/utils.test.ts +194 -0
  1333. package/sdks/typescript/runner/tsconfig.json +11 -0
  1334. package/sdks/typescript/runner/tsup.config.ts +4 -0
  1335. package/sdks/typescript/runner/turbo.json +4 -0
  1336. package/sdks/typescript/runner/vitest.config.ts +16 -0
  1337. package/sdks/typescript/runner-protocol/.turbo/turbo-build.log +22 -0
  1338. package/sdks/typescript/runner-protocol/dist/index.cjs +1632 -0
  1339. package/sdks/typescript/runner-protocol/dist/index.cjs.map +1 -0
  1340. package/sdks/typescript/runner-protocol/dist/index.d.cts +666 -0
  1341. package/sdks/typescript/runner-protocol/dist/index.d.ts +666 -0
  1342. package/sdks/typescript/runner-protocol/dist/index.js +1632 -0
  1343. package/sdks/typescript/runner-protocol/dist/index.js.map +1 -0
  1344. package/sdks/typescript/runner-protocol/node_modules/.bin/tsc +21 -0
  1345. package/sdks/typescript/runner-protocol/node_modules/.bin/tsserver +21 -0
  1346. package/sdks/typescript/runner-protocol/node_modules/.bin/tsup +21 -0
  1347. package/sdks/typescript/runner-protocol/node_modules/.bin/tsup-node +21 -0
  1348. package/sdks/typescript/runner-protocol/package.json +34 -0
  1349. package/sdks/typescript/runner-protocol/src/index.ts +2121 -0
  1350. package/sdks/typescript/runner-protocol/tsconfig.json +17 -0
  1351. package/sdks/typescript/runner-protocol/tsup.config.ts +4 -0
  1352. package/sdks/typescript/runner-protocol/turbo.json +4 -0
  1353. package/sdks/typescript/test-runner/.turbo/turbo-build.log +17 -0
  1354. package/sdks/typescript/test-runner/Dockerfile +26 -0
  1355. package/sdks/typescript/test-runner/dist/index.d.ts +6 -0
  1356. package/sdks/typescript/test-runner/dist/index.js +345 -0
  1357. package/sdks/typescript/test-runner/dist/index.js.map +1 -0
  1358. package/sdks/typescript/test-runner/node_modules/.bin/pino +21 -0
  1359. package/sdks/typescript/test-runner/node_modules/.bin/tsc +21 -0
  1360. package/sdks/typescript/test-runner/node_modules/.bin/tsserver +21 -0
  1361. package/sdks/typescript/test-runner/node_modules/.bin/tsup +21 -0
  1362. package/sdks/typescript/test-runner/node_modules/.bin/tsup-node +21 -0
  1363. package/sdks/typescript/test-runner/node_modules/.bin/tsx +21 -0
  1364. package/sdks/typescript/test-runner/node_modules/.bin/vitest +21 -0
  1365. package/sdks/typescript/test-runner/package.json +27 -0
  1366. package/sdks/typescript/test-runner/src/index.ts +287 -0
  1367. package/sdks/typescript/test-runner/src/log.ts +194 -0
  1368. package/sdks/typescript/test-runner/tsconfig.json +11 -0
  1369. package/sdks/typescript/test-runner/tsup.config.ts +7 -0
  1370. package/sdks/typescript/test-runner/turbo.json +4 -0
  1371. package/sdks/typescript/test-runner/vitest.config.ts +16 -0
  1372. package/tests/load/README.md +28 -0
  1373. package/tests/load/actor-lifecycle/README.md +26 -0
  1374. package/tests/load/actor-lifecycle/actor.ts +41 -0
  1375. package/tests/load/actor-lifecycle/config.ts +14 -0
  1376. package/tests/load/actor-lifecycle/index.ts +62 -0
  1377. package/tests/load/actor-lifecycle/rivet_api.ts +140 -0
  1378. package/tests/load/actor-lifecycle/types.ts +17 -0
  1379. package/tests/load/node_modules/.bin/biome +21 -0
  1380. package/tests/load/node_modules/.bin/tsc +21 -0
  1381. package/tests/load/node_modules/.bin/tsserver +21 -0
  1382. package/tests/load/package.json +15 -0
  1383. package/tests/load/tsconfig.json +20 -0
  1384. package/tests/smoke/README.md +32 -0
  1385. package/tests/smoke/package.json +19 -0
  1386. package/tests/smoke/scripts/connect.ts +41 -0
  1387. package/tests/smoke/src/server/registry.ts +32 -0
  1388. package/tests/smoke/src/server/server.ts +7 -0
  1389. package/tests/smoke/src/smoke-test/index.ts +161 -0
  1390. package/tests/smoke/src/smoke-test/spawn-actor.ts +109 -0
  1391. package/tests/smoke/tsconfig.json +43 -0
  1392. package/tests/smoke/turbo.json +4 -0
@@ -0,0 +1,2951 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } var _class; var _class2;// src/mod.ts
2
+ var _enginerunnerprotocol = require('@rivetkit/engine-runner-protocol'); var protocol = _interopRequireWildcard(_enginerunnerprotocol);
3
+
4
+ // src/log.ts
5
+ var LOGGER;
6
+ function setLogger(logger2) {
7
+ LOGGER = logger2;
8
+ }
9
+ function logger() {
10
+ return LOGGER;
11
+ }
12
+
13
+ // src/utils.ts
14
+ function unreachable(x) {
15
+ throw `Unreachable: ${x}`;
16
+ }
17
+ function calculateBackoff(attempt, options = {}) {
18
+ const {
19
+ initialDelay = 1e3,
20
+ maxDelay = 3e4,
21
+ multiplier = 2,
22
+ jitter = true
23
+ } = options;
24
+ let delay = Math.min(initialDelay * multiplier ** attempt, maxDelay);
25
+ if (jitter) {
26
+ delay = delay * (1 + Math.random() * 0.25);
27
+ }
28
+ return Math.floor(delay);
29
+ }
30
+ function parseWebSocketCloseReason(reason) {
31
+ var _a;
32
+ const [mainPart, rayId] = reason.split("#");
33
+ const [group, error] = mainPart.split(".");
34
+ if (!group || !error) {
35
+ (_a = logger()) == null ? void 0 : _a.warn({ msg: "failed to parse close reason", reason });
36
+ return void 0;
37
+ }
38
+ return {
39
+ group,
40
+ error,
41
+ rayId
42
+ };
43
+ }
44
+ var U16_MAX = 65535;
45
+ function wrappingLtU16(a, b) {
46
+ return a !== b && wrappingSub(b, a, U16_MAX) < U16_MAX / 2;
47
+ }
48
+ function wrappingLteU16(a, b) {
49
+ return a === b || wrappingLtU16(a, b);
50
+ }
51
+ function wrappingAddU16(a, b) {
52
+ return (a + b) % (U16_MAX + 1);
53
+ }
54
+ function wrappingSubU16(a, b) {
55
+ return wrappingSub(a, b, U16_MAX);
56
+ }
57
+ function wrappingSub(a, b, max) {
58
+ const result = a - b;
59
+ if (result < 0) {
60
+ return result + max + 1;
61
+ }
62
+ return result;
63
+ }
64
+ function arraysEqual(a, b) {
65
+ const ua = new Uint8Array(a);
66
+ const ub = new Uint8Array(b);
67
+ if (ua.length !== ub.length) return false;
68
+ for (let i = 0; i < ua.length; i++) {
69
+ if (ua[i] !== ub[i]) return false;
70
+ }
71
+ return true;
72
+ }
73
+ function promiseWithResolvers() {
74
+ let resolve;
75
+ let reject;
76
+ const promise = new Promise((res, rej) => {
77
+ resolve = res;
78
+ reject = rej;
79
+ });
80
+ return { promise, resolve, reject };
81
+ }
82
+ function idToStr(id) {
83
+ const bytes = new Uint8Array(id);
84
+ return Array.from(bytes).map((byte) => byte.toString(16).padStart(2, "0")).join("");
85
+ }
86
+
87
+ // src/actor.ts
88
+ var RunnerActor = (_class = class {
89
+ constructor(actorId, generation, config, hibernatingRequests) {;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);_class.prototype.__init3.call(this);
90
+ this.hibernatingRequests = hibernatingRequests;
91
+ this.actorId = actorId;
92
+ this.generation = generation;
93
+ this.config = config;
94
+ this.actorStartPromise = promiseWithResolvers();
95
+ }
96
+
97
+
98
+
99
+ __init() {this.pendingRequests = []}
100
+ __init2() {this.webSockets = []}
101
+
102
+ /**
103
+ * If restoreHibernatingRequests has been called. This is used to assert
104
+ * that the caller is implemented correctly.
105
+ **/
106
+ __init3() {this.hibernationRestored = false}
107
+ // Pending request methods
108
+ getPendingRequest(gatewayId, requestId) {
109
+ var _a;
110
+ return (_a = this.pendingRequests.find(
111
+ (entry) => arraysEqual(entry.gatewayId, gatewayId) && arraysEqual(entry.requestId, requestId)
112
+ )) == null ? void 0 : _a.request;
113
+ }
114
+ createPendingRequest(gatewayId, requestId, clientMessageIndex) {
115
+ var _a, _b;
116
+ const exists = this.getPendingRequest(gatewayId, requestId) !== void 0;
117
+ if (exists) {
118
+ (_a = logger()) == null ? void 0 : _a.warn({
119
+ msg: "attempting to set pending request twice, replacing existing",
120
+ gatewayId: idToStr(gatewayId),
121
+ requestId: idToStr(requestId)
122
+ });
123
+ this.deletePendingRequest(gatewayId, requestId);
124
+ }
125
+ this.pendingRequests.push({
126
+ gatewayId,
127
+ requestId,
128
+ request: {
129
+ resolve: () => {
130
+ },
131
+ reject: () => {
132
+ },
133
+ actorId: this.actorId,
134
+ gatewayId,
135
+ requestId,
136
+ clientMessageIndex
137
+ }
138
+ });
139
+ (_b = logger()) == null ? void 0 : _b.debug({
140
+ msg: "added pending request",
141
+ gatewayId: idToStr(gatewayId),
142
+ requestId: idToStr(requestId),
143
+ length: this.pendingRequests.length
144
+ });
145
+ }
146
+ createPendingRequestWithStreamController(gatewayId, requestId, clientMessageIndex, streamController) {
147
+ var _a, _b;
148
+ const exists = this.getPendingRequest(gatewayId, requestId) !== void 0;
149
+ if (exists) {
150
+ (_a = logger()) == null ? void 0 : _a.warn({
151
+ msg: "attempting to set pending request twice, replacing existing",
152
+ gatewayId: idToStr(gatewayId),
153
+ requestId: idToStr(requestId)
154
+ });
155
+ this.deletePendingRequest(gatewayId, requestId);
156
+ }
157
+ this.pendingRequests.push({
158
+ gatewayId,
159
+ requestId,
160
+ request: {
161
+ resolve: () => {
162
+ },
163
+ reject: () => {
164
+ },
165
+ actorId: this.actorId,
166
+ gatewayId,
167
+ requestId,
168
+ clientMessageIndex,
169
+ streamController
170
+ }
171
+ });
172
+ (_b = logger()) == null ? void 0 : _b.debug({
173
+ msg: "added pending request with stream controller",
174
+ gatewayId: idToStr(gatewayId),
175
+ requestId: idToStr(requestId),
176
+ length: this.pendingRequests.length
177
+ });
178
+ }
179
+ deletePendingRequest(gatewayId, requestId) {
180
+ var _a;
181
+ const index = this.pendingRequests.findIndex(
182
+ (entry) => arraysEqual(entry.gatewayId, gatewayId) && arraysEqual(entry.requestId, requestId)
183
+ );
184
+ if (index !== -1) {
185
+ this.pendingRequests.splice(index, 1);
186
+ (_a = logger()) == null ? void 0 : _a.debug({
187
+ msg: "removed pending request",
188
+ gatewayId: idToStr(gatewayId),
189
+ requestId: idToStr(requestId),
190
+ length: this.pendingRequests.length
191
+ });
192
+ }
193
+ }
194
+ // WebSocket methods
195
+ getWebSocket(gatewayId, requestId) {
196
+ var _a;
197
+ return (_a = this.webSockets.find(
198
+ (entry) => arraysEqual(entry.gatewayId, gatewayId) && arraysEqual(entry.requestId, requestId)
199
+ )) == null ? void 0 : _a.ws;
200
+ }
201
+ setWebSocket(gatewayId, requestId, ws) {
202
+ var _a;
203
+ const exists = this.getWebSocket(gatewayId, requestId) !== void 0;
204
+ if (exists) {
205
+ (_a = logger()) == null ? void 0 : _a.warn({ msg: "attempting to set websocket twice" });
206
+ return;
207
+ }
208
+ this.webSockets.push({ gatewayId, requestId, ws });
209
+ }
210
+ deleteWebSocket(gatewayId, requestId) {
211
+ const index = this.webSockets.findIndex(
212
+ (entry) => arraysEqual(entry.gatewayId, gatewayId) && arraysEqual(entry.requestId, requestId)
213
+ );
214
+ if (index !== -1) {
215
+ this.webSockets.splice(index, 1);
216
+ }
217
+ }
218
+ }, _class);
219
+
220
+ // src/stringify.ts
221
+ function stringifyArrayBuffer(buffer) {
222
+ return `ArrayBuffer(${buffer.byteLength})`;
223
+ }
224
+ function stringifyBigInt(value) {
225
+ return `${value}n`;
226
+ }
227
+ function stringifyMap(map) {
228
+ const entries = Array.from(map.entries()).map(([k, v]) => `"${k}": "${v}"`).join(", ");
229
+ return `Map(${map.size}){${entries}}`;
230
+ }
231
+ function stringifyMessageId(messageId) {
232
+ return `MessageId{gatewayId: ${idToStr(messageId.gatewayId)}, requestId: ${idToStr(messageId.requestId)}, messageIndex: ${messageId.messageIndex}}`;
233
+ }
234
+ function stringifyToServerTunnelMessageKind(kind) {
235
+ switch (kind.tag) {
236
+ case "DeprecatedTunnelAck":
237
+ return "DeprecatedTunnelAck";
238
+ case "ToServerResponseStart": {
239
+ const { status, headers, body, stream } = kind.val;
240
+ const bodyStr = body === null ? "null" : stringifyArrayBuffer(body);
241
+ return `ToServerResponseStart{status: ${status}, headers: ${stringifyMap(headers)}, body: ${bodyStr}, stream: ${stream}}`;
242
+ }
243
+ case "ToServerResponseChunk": {
244
+ const { body, finish } = kind.val;
245
+ return `ToServerResponseChunk{body: ${stringifyArrayBuffer(body)}, finish: ${finish}}`;
246
+ }
247
+ case "ToServerResponseAbort":
248
+ return "ToServerResponseAbort";
249
+ case "ToServerWebSocketOpen": {
250
+ const { canHibernate } = kind.val;
251
+ return `ToServerWebSocketOpen{canHibernate: ${canHibernate}}`;
252
+ }
253
+ case "ToServerWebSocketMessage": {
254
+ const { data, binary } = kind.val;
255
+ return `ToServerWebSocketMessage{data: ${stringifyArrayBuffer(data)}, binary: ${binary}}`;
256
+ }
257
+ case "ToServerWebSocketMessageAck": {
258
+ const { index } = kind.val;
259
+ return `ToServerWebSocketMessageAck{index: ${index}}`;
260
+ }
261
+ case "ToServerWebSocketClose": {
262
+ const { code, reason, hibernate } = kind.val;
263
+ const codeStr = code === null ? "null" : code.toString();
264
+ const reasonStr = reason === null ? "null" : `"${reason}"`;
265
+ return `ToServerWebSocketClose{code: ${codeStr}, reason: ${reasonStr}, hibernate: ${hibernate}}`;
266
+ }
267
+ }
268
+ }
269
+ function stringifyToClientTunnelMessageKind(kind) {
270
+ switch (kind.tag) {
271
+ case "DeprecatedTunnelAck":
272
+ return "DeprecatedTunnelAck";
273
+ case "ToClientRequestStart": {
274
+ const { actorId, method, path, headers, body, stream } = kind.val;
275
+ const bodyStr = body === null ? "null" : stringifyArrayBuffer(body);
276
+ return `ToClientRequestStart{actorId: "${actorId}", method: "${method}", path: "${path}", headers: ${stringifyMap(headers)}, body: ${bodyStr}, stream: ${stream}}`;
277
+ }
278
+ case "ToClientRequestChunk": {
279
+ const { body, finish } = kind.val;
280
+ return `ToClientRequestChunk{body: ${stringifyArrayBuffer(body)}, finish: ${finish}}`;
281
+ }
282
+ case "ToClientRequestAbort":
283
+ return "ToClientRequestAbort";
284
+ case "ToClientWebSocketOpen": {
285
+ const { actorId, path, headers } = kind.val;
286
+ return `ToClientWebSocketOpen{actorId: "${actorId}", path: "${path}", headers: ${stringifyMap(headers)}}`;
287
+ }
288
+ case "ToClientWebSocketMessage": {
289
+ const { data, binary } = kind.val;
290
+ return `ToClientWebSocketMessage{data: ${stringifyArrayBuffer(data)}, binary: ${binary}}`;
291
+ }
292
+ case "ToClientWebSocketClose": {
293
+ const { code, reason } = kind.val;
294
+ const codeStr = code === null ? "null" : code.toString();
295
+ const reasonStr = reason === null ? "null" : `"${reason}"`;
296
+ return `ToClientWebSocketClose{code: ${codeStr}, reason: ${reasonStr}}`;
297
+ }
298
+ }
299
+ }
300
+ function stringifyCommand(command) {
301
+ switch (command.tag) {
302
+ case "CommandStartActor": {
303
+ const { actorId, generation, config, hibernatingRequests } = command.val;
304
+ const keyStr = config.key === null ? "null" : `"${config.key}"`;
305
+ const inputStr = config.input === null ? "null" : stringifyArrayBuffer(config.input);
306
+ const hibernatingRequestsStr = hibernatingRequests.length > 0 ? `[${hibernatingRequests.map((hr) => `{gatewayId: ${idToStr(hr.gatewayId)}, requestId: ${idToStr(hr.requestId)}}`).join(", ")}]` : "[]";
307
+ return `CommandStartActor{actorId: "${actorId}", generation: ${generation}, config: {name: "${config.name}", key: ${keyStr}, createTs: ${stringifyBigInt(config.createTs)}, input: ${inputStr}}, hibernatingRequests: ${hibernatingRequestsStr}}`;
308
+ }
309
+ case "CommandStopActor": {
310
+ const { actorId, generation } = command.val;
311
+ return `CommandStopActor{actorId: "${actorId}", generation: ${generation}}`;
312
+ }
313
+ }
314
+ }
315
+ function stringifyCommandWrapper(wrapper) {
316
+ return `CommandWrapper{index: ${stringifyBigInt(wrapper.index)}, inner: ${stringifyCommand(wrapper.inner)}}`;
317
+ }
318
+ function stringifyEvent(event) {
319
+ switch (event.tag) {
320
+ case "EventActorIntent": {
321
+ const { actorId, generation, intent } = event.val;
322
+ const intentStr = intent.tag === "ActorIntentSleep" ? "Sleep" : intent.tag === "ActorIntentStop" ? "Stop" : "Unknown";
323
+ return `EventActorIntent{actorId: "${actorId}", generation: ${generation}, intent: ${intentStr}}`;
324
+ }
325
+ case "EventActorStateUpdate": {
326
+ const { actorId, generation, state } = event.val;
327
+ let stateStr;
328
+ if (state.tag === "ActorStateRunning") {
329
+ stateStr = "Running";
330
+ } else if (state.tag === "ActorStateStopped") {
331
+ const { code, message } = state.val;
332
+ const messageStr = message === null ? "null" : `"${message}"`;
333
+ stateStr = `Stopped{code: ${code}, message: ${messageStr}}`;
334
+ } else {
335
+ stateStr = "Unknown";
336
+ }
337
+ return `EventActorStateUpdate{actorId: "${actorId}", generation: ${generation}, state: ${stateStr}}`;
338
+ }
339
+ case "EventActorSetAlarm": {
340
+ const { actorId, generation, alarmTs } = event.val;
341
+ const alarmTsStr = alarmTs === null ? "null" : stringifyBigInt(alarmTs);
342
+ return `EventActorSetAlarm{actorId: "${actorId}", generation: ${generation}, alarmTs: ${alarmTsStr}}`;
343
+ }
344
+ }
345
+ }
346
+ function stringifyEventWrapper(wrapper) {
347
+ return `EventWrapper{index: ${stringifyBigInt(wrapper.index)}, inner: ${stringifyEvent(wrapper.inner)}}`;
348
+ }
349
+ function stringifyToServer(message) {
350
+ switch (message.tag) {
351
+ case "ToServerInit": {
352
+ const {
353
+ name,
354
+ version,
355
+ totalSlots,
356
+ lastCommandIdx,
357
+ prepopulateActorNames,
358
+ metadata
359
+ } = message.val;
360
+ const lastCommandIdxStr = lastCommandIdx === null ? "null" : stringifyBigInt(lastCommandIdx);
361
+ const prepopulateActorNamesStr = prepopulateActorNames === null ? "null" : `Map(${prepopulateActorNames.size})`;
362
+ const metadataStr = metadata === null ? "null" : `"${metadata}"`;
363
+ return `ToServerInit{name: "${name}", version: ${version}, totalSlots: ${totalSlots}, lastCommandIdx: ${lastCommandIdxStr}, prepopulateActorNames: ${prepopulateActorNamesStr}, metadata: ${metadataStr}}`;
364
+ }
365
+ case "ToServerEvents": {
366
+ const events = message.val;
367
+ return `ToServerEvents{count: ${events.length}, events: [${events.map((e) => stringifyEventWrapper(e)).join(", ")}]}`;
368
+ }
369
+ case "ToServerAckCommands": {
370
+ const { lastCommandIdx } = message.val;
371
+ return `ToServerAckCommands{lastCommandIdx: ${stringifyBigInt(lastCommandIdx)}}`;
372
+ }
373
+ case "ToServerStopping":
374
+ return "ToServerStopping";
375
+ case "ToServerPing": {
376
+ const { ts } = message.val;
377
+ return `ToServerPing{ts: ${stringifyBigInt(ts)}}`;
378
+ }
379
+ case "ToServerKvRequest": {
380
+ const { actorId, requestId, data } = message.val;
381
+ const dataStr = stringifyKvRequestData(data);
382
+ return `ToServerKvRequest{actorId: "${actorId}", requestId: ${requestId}, data: ${dataStr}}`;
383
+ }
384
+ case "ToServerTunnelMessage": {
385
+ const { messageId, messageKind } = message.val;
386
+ return `ToServerTunnelMessage{messageId: ${stringifyMessageId(messageId)}, messageKind: ${stringifyToServerTunnelMessageKind(messageKind)}}`;
387
+ }
388
+ }
389
+ }
390
+ function stringifyToClient(message) {
391
+ switch (message.tag) {
392
+ case "ToClientInit": {
393
+ const { runnerId, lastEventIdx, metadata } = message.val;
394
+ const metadataStr = `{runnerLostThreshold: ${stringifyBigInt(metadata.runnerLostThreshold)}}`;
395
+ return `ToClientInit{runnerId: "${runnerId}", lastEventIdx: ${stringifyBigInt(lastEventIdx)}, metadata: ${metadataStr}}`;
396
+ }
397
+ case "ToClientClose":
398
+ return "ToClientClose";
399
+ case "ToClientCommands": {
400
+ const commands = message.val;
401
+ return `ToClientCommands{count: ${commands.length}, commands: [${commands.map((c) => stringifyCommandWrapper(c)).join(", ")}]}`;
402
+ }
403
+ case "ToClientAckEvents": {
404
+ const { lastEventIdx } = message.val;
405
+ return `ToClientAckEvents{lastEventIdx: ${stringifyBigInt(lastEventIdx)}}`;
406
+ }
407
+ case "ToClientKvResponse": {
408
+ const { requestId, data } = message.val;
409
+ const dataStr = stringifyKvResponseData(data);
410
+ return `ToClientKvResponse{requestId: ${requestId}, data: ${dataStr}}`;
411
+ }
412
+ case "ToClientTunnelMessage": {
413
+ const { messageId, messageKind } = message.val;
414
+ return `ToClientTunnelMessage{messageId: ${stringifyMessageId(messageId)}, messageKind: ${stringifyToClientTunnelMessageKind(messageKind)}}`;
415
+ }
416
+ }
417
+ }
418
+ function stringifyKvRequestData(data) {
419
+ switch (data.tag) {
420
+ case "KvGetRequest": {
421
+ const { keys } = data.val;
422
+ return `KvGetRequest{keys: ${keys.length}}`;
423
+ }
424
+ case "KvListRequest": {
425
+ const { query, reverse, limit } = data.val;
426
+ const reverseStr = reverse === null ? "null" : reverse.toString();
427
+ const limitStr = limit === null ? "null" : stringifyBigInt(limit);
428
+ return `KvListRequest{query: ${stringifyKvListQuery(query)}, reverse: ${reverseStr}, limit: ${limitStr}}`;
429
+ }
430
+ case "KvPutRequest": {
431
+ const { keys, values } = data.val;
432
+ return `KvPutRequest{keys: ${keys.length}, values: ${values.length}}`;
433
+ }
434
+ case "KvDeleteRequest": {
435
+ const { keys } = data.val;
436
+ return `KvDeleteRequest{keys: ${keys.length}}`;
437
+ }
438
+ case "KvDropRequest":
439
+ return "KvDropRequest";
440
+ }
441
+ }
442
+ function stringifyKvListQuery(query) {
443
+ switch (query.tag) {
444
+ case "KvListAllQuery":
445
+ return "KvListAllQuery";
446
+ case "KvListRangeQuery": {
447
+ const { start, end, exclusive } = query.val;
448
+ return `KvListRangeQuery{start: ${stringifyArrayBuffer(start)}, end: ${stringifyArrayBuffer(end)}, exclusive: ${exclusive}}`;
449
+ }
450
+ case "KvListPrefixQuery": {
451
+ const { key } = query.val;
452
+ return `KvListPrefixQuery{key: ${stringifyArrayBuffer(key)}}`;
453
+ }
454
+ }
455
+ }
456
+ function stringifyKvResponseData(data) {
457
+ switch (data.tag) {
458
+ case "KvErrorResponse": {
459
+ const { message } = data.val;
460
+ return `KvErrorResponse{message: "${message}"}`;
461
+ }
462
+ case "KvGetResponse": {
463
+ const { keys, values, metadata } = data.val;
464
+ return `KvGetResponse{keys: ${keys.length}, values: ${values.length}, metadata: ${metadata.length}}`;
465
+ }
466
+ case "KvListResponse": {
467
+ const { keys, values, metadata } = data.val;
468
+ return `KvListResponse{keys: ${keys.length}, values: ${values.length}, metadata: ${metadata.length}}`;
469
+ }
470
+ case "KvPutResponse":
471
+ return "KvPutResponse";
472
+ case "KvDeleteResponse":
473
+ return "KvDeleteResponse";
474
+ case "KvDropResponse":
475
+ return "KvDropResponse";
476
+ }
477
+ }
478
+
479
+ // src/websocket-tunnel-adapter.ts
480
+ var HIBERNATABLE_SYMBOL = Symbol("hibernatable");
481
+ var WebSocketTunnelAdapter = (_class2 = class {
482
+ constructor(tunnel, actorId, requestId, serverMessageIndex, hibernatable, isRestoringHibernatable, request, sendCallback, closeCallback) {;_class2.prototype.__init4.call(this);_class2.prototype.__init5.call(this);_class2.prototype.__init6.call(this);_class2.prototype.__init7.call(this);
483
+ this.request = request;
484
+ var _a;
485
+ this.#tunnel = tunnel;
486
+ this.#actorId = actorId;
487
+ this.#requestId = requestId;
488
+ this.#hibernatable = hibernatable;
489
+ this.#serverMessageIndex = serverMessageIndex;
490
+ this.#sendCallback = sendCallback;
491
+ this.#closeCallback = closeCallback;
492
+ if (isRestoringHibernatable) {
493
+ (_a = this.#log) == null ? void 0 : _a.debug({
494
+ msg: "setting WebSocket to OPEN state for restored connection",
495
+ actorId: this.#actorId,
496
+ requestId: this.#requestId,
497
+ hibernatable: this.#hibernatable
498
+ });
499
+ this.#readyState = 1;
500
+ }
501
+ }
502
+ // MARK: - WebSocket Compat Variables
503
+ #readyState = 0;
504
+ // CONNECTING
505
+ #eventListeners = /* @__PURE__ */ new Map();
506
+ #onopen = null;
507
+ #onclose = null;
508
+ #onerror = null;
509
+ #onmessage = null;
510
+ #bufferedAmount = 0;
511
+ #binaryType = "nodebuffer";
512
+ #extensions = "";
513
+ #protocol = "";
514
+ #url = "";
515
+ // mARK: - Internal State
516
+ #tunnel;
517
+ #actorId;
518
+ #requestId;
519
+ #hibernatable;
520
+ #serverMessageIndex;
521
+ get [HIBERNATABLE_SYMBOL]() {
522
+ return this.#hibernatable;
523
+ }
524
+ /**
525
+ * Called when sending a message from this WebSocket.
526
+ *
527
+ * Used to send a tunnel message from Tunnel.
528
+ */
529
+ #sendCallback;
530
+ /**
531
+ * Called when closing this WebSocket.
532
+ *
533
+ * Used to send a tunnel message from Tunnel
534
+ */
535
+ #closeCallback;
536
+ get #log() {
537
+ return this.#tunnel.log;
538
+ }
539
+ // MARK: - Lifecycle
540
+ get bufferedAmount() {
541
+ return this.#bufferedAmount;
542
+ }
543
+ _handleOpen(requestId) {
544
+ if (this.#readyState !== 0) {
545
+ return;
546
+ }
547
+ this.#readyState = 1;
548
+ const event = {
549
+ type: "open",
550
+ rivetRequestId: requestId,
551
+ target: this
552
+ };
553
+ this.#fireEvent("open", event);
554
+ }
555
+ _handleMessage(requestId, data, serverMessageIndex, isBinary) {
556
+ var _a, _b, _c;
557
+ if (this.#readyState !== 1) {
558
+ (_a = this.#log) == null ? void 0 : _a.warn({
559
+ msg: "WebSocket message ignored - not in OPEN state",
560
+ requestId: this.#requestId,
561
+ actorId: this.#actorId,
562
+ currentReadyState: this.#readyState,
563
+ expectedReadyState: 1,
564
+ serverMessageIndex,
565
+ hibernatable: this.#hibernatable
566
+ });
567
+ return true;
568
+ }
569
+ if (this.#hibernatable) {
570
+ const previousIndex = this.#serverMessageIndex;
571
+ if (wrappingLteU16(serverMessageIndex, previousIndex)) {
572
+ (_b = this.#log) == null ? void 0 : _b.info({
573
+ msg: "received duplicate hibernating websocket message, this indicates the actor failed to ack the message index before restarting",
574
+ requestId,
575
+ actorId: this.#actorId,
576
+ previousIndex,
577
+ expectedIndex: wrappingAddU16(previousIndex, 1),
578
+ receivedIndex: serverMessageIndex
579
+ });
580
+ return true;
581
+ }
582
+ const expectedIndex = wrappingAddU16(previousIndex, 1);
583
+ if (serverMessageIndex !== expectedIndex) {
584
+ const closeReason = "ws.message_index_skip";
585
+ (_c = this.#log) == null ? void 0 : _c.warn({
586
+ msg: "hibernatable websocket message index out of sequence, closing connection",
587
+ requestId,
588
+ actorId: this.#actorId,
589
+ previousIndex,
590
+ expectedIndex,
591
+ receivedIndex: serverMessageIndex,
592
+ closeReason,
593
+ gap: wrappingSubU16(
594
+ wrappingSubU16(serverMessageIndex, previousIndex),
595
+ 1
596
+ )
597
+ });
598
+ this.close(1008, closeReason);
599
+ return true;
600
+ }
601
+ this.#serverMessageIndex = serverMessageIndex;
602
+ }
603
+ let messageData;
604
+ if (isBinary) {
605
+ if (this.#binaryType === "nodebuffer") {
606
+ messageData = Buffer.from(data);
607
+ } else if (this.#binaryType === "arraybuffer") {
608
+ if (data instanceof Uint8Array) {
609
+ messageData = data.buffer.slice(
610
+ data.byteOffset,
611
+ data.byteOffset + data.byteLength
612
+ );
613
+ } else {
614
+ messageData = data;
615
+ }
616
+ } else {
617
+ throw new Error(
618
+ "Blob binaryType not supported in tunnel adapter"
619
+ );
620
+ }
621
+ } else {
622
+ messageData = data;
623
+ }
624
+ const event = {
625
+ type: "message",
626
+ data: messageData,
627
+ rivetRequestId: requestId,
628
+ rivetMessageIndex: serverMessageIndex,
629
+ target: this
630
+ };
631
+ this.#fireEvent("message", event);
632
+ return false;
633
+ }
634
+ _handleClose(_requestId, code, reason) {
635
+ this.#closeInner(code, reason, true);
636
+ }
637
+ _handleError(error) {
638
+ const event = {
639
+ type: "error",
640
+ target: this,
641
+ error
642
+ };
643
+ this.#fireEvent("error", event);
644
+ }
645
+ _closeWithoutCallback(code, reason) {
646
+ this.#closeInner(code, reason, false);
647
+ }
648
+ #fireEvent(type, event) {
649
+ var _a, _b, _c, _d, _e;
650
+ const listeners = this.#eventListeners.get(type);
651
+ if (listeners && listeners.size > 0) {
652
+ for (const listener of listeners) {
653
+ try {
654
+ listener.call(this, event);
655
+ } catch (error) {
656
+ (_a = logger()) == null ? void 0 : _a.error({
657
+ msg: "error in websocket event listener",
658
+ error,
659
+ type
660
+ });
661
+ }
662
+ }
663
+ }
664
+ switch (type) {
665
+ case "open":
666
+ if (this.#onopen) {
667
+ try {
668
+ this.#onopen.call(this, event);
669
+ } catch (error) {
670
+ (_b = logger()) == null ? void 0 : _b.error({
671
+ msg: "error in onopen handler",
672
+ error
673
+ });
674
+ }
675
+ }
676
+ break;
677
+ case "close":
678
+ if (this.#onclose) {
679
+ try {
680
+ this.#onclose.call(this, event);
681
+ } catch (error) {
682
+ (_c = logger()) == null ? void 0 : _c.error({
683
+ msg: "error in onclose handler",
684
+ error
685
+ });
686
+ }
687
+ }
688
+ break;
689
+ case "error":
690
+ if (this.#onerror) {
691
+ try {
692
+ this.#onerror.call(this, event);
693
+ } catch (error) {
694
+ (_d = logger()) == null ? void 0 : _d.error({
695
+ msg: "error in onerror handler",
696
+ error
697
+ });
698
+ }
699
+ }
700
+ break;
701
+ case "message":
702
+ if (this.#onmessage) {
703
+ try {
704
+ this.#onmessage.call(this, event);
705
+ } catch (error) {
706
+ (_e = logger()) == null ? void 0 : _e.error({
707
+ msg: "error in onmessage handler",
708
+ error
709
+ });
710
+ }
711
+ }
712
+ break;
713
+ }
714
+ }
715
+ #closeInner(code, reason, callback) {
716
+ if (this.#readyState === 2 || // CLOSING
717
+ this.#readyState === 3) {
718
+ return;
719
+ }
720
+ this.#readyState = 2;
721
+ if (callback) {
722
+ this.#closeCallback(code, reason);
723
+ }
724
+ this.#readyState = 3;
725
+ const closeEvent = {
726
+ wasClean: true,
727
+ code: code || 1e3,
728
+ reason: reason || "",
729
+ type: "close",
730
+ target: this
731
+ };
732
+ this.#fireEvent("close", closeEvent);
733
+ }
734
+ // MARK: - WebSocket Compatible API
735
+ get readyState() {
736
+ return this.#readyState;
737
+ }
738
+ get binaryType() {
739
+ return this.#binaryType;
740
+ }
741
+ set binaryType(value) {
742
+ if (value === "nodebuffer" || value === "arraybuffer" || value === "blob") {
743
+ this.#binaryType = value;
744
+ }
745
+ }
746
+ get extensions() {
747
+ return this.#extensions;
748
+ }
749
+ get protocol() {
750
+ return this.#protocol;
751
+ }
752
+ get url() {
753
+ return this.#url;
754
+ }
755
+ get onopen() {
756
+ return this.#onopen;
757
+ }
758
+ set onopen(value) {
759
+ this.#onopen = value;
760
+ }
761
+ get onclose() {
762
+ return this.#onclose;
763
+ }
764
+ set onclose(value) {
765
+ this.#onclose = value;
766
+ }
767
+ get onerror() {
768
+ return this.#onerror;
769
+ }
770
+ set onerror(value) {
771
+ this.#onerror = value;
772
+ }
773
+ get onmessage() {
774
+ return this.#onmessage;
775
+ }
776
+ set onmessage(value) {
777
+ this.#onmessage = value;
778
+ }
779
+ send(data) {
780
+ if (this.#readyState === 0) {
781
+ throw new DOMException(
782
+ "WebSocket is still in CONNECTING state",
783
+ "InvalidStateError"
784
+ );
785
+ }
786
+ if (this.#readyState === 2 || this.#readyState === 3) {
787
+ return;
788
+ }
789
+ let isBinary = false;
790
+ let messageData;
791
+ if (typeof data === "string") {
792
+ messageData = data;
793
+ } else if (data instanceof ArrayBuffer) {
794
+ isBinary = true;
795
+ messageData = data;
796
+ } else if (ArrayBuffer.isView(data)) {
797
+ isBinary = true;
798
+ const view = data;
799
+ if (view.buffer instanceof SharedArrayBuffer) {
800
+ const bytes = new Uint8Array(
801
+ view.buffer,
802
+ view.byteOffset,
803
+ view.byteLength
804
+ );
805
+ messageData = bytes.buffer.slice(
806
+ bytes.byteOffset,
807
+ bytes.byteOffset + bytes.byteLength
808
+ );
809
+ } else {
810
+ messageData = view.buffer.slice(
811
+ view.byteOffset,
812
+ view.byteOffset + view.byteLength
813
+ );
814
+ }
815
+ } else if (data instanceof Blob) {
816
+ throw new Error("Blob sending not implemented in tunnel adapter");
817
+ } else if (typeof Buffer !== "undefined" && Buffer.isBuffer(data)) {
818
+ isBinary = true;
819
+ const buf = data;
820
+ if (buf.buffer instanceof SharedArrayBuffer) {
821
+ const bytes = new Uint8Array(
822
+ buf.buffer,
823
+ buf.byteOffset,
824
+ buf.byteLength
825
+ );
826
+ messageData = bytes.buffer.slice(
827
+ bytes.byteOffset,
828
+ bytes.byteOffset + bytes.byteLength
829
+ );
830
+ } else {
831
+ messageData = buf.buffer.slice(
832
+ buf.byteOffset,
833
+ buf.byteOffset + buf.byteLength
834
+ );
835
+ }
836
+ } else {
837
+ throw new Error("Invalid data type");
838
+ }
839
+ this.#sendCallback(messageData, isBinary);
840
+ }
841
+ close(code, reason) {
842
+ this.#closeInner(code, reason, true);
843
+ }
844
+ addEventListener(type, listener, options) {
845
+ if (typeof listener === "function") {
846
+ let listeners = this.#eventListeners.get(type);
847
+ if (!listeners) {
848
+ listeners = /* @__PURE__ */ new Set();
849
+ this.#eventListeners.set(type, listeners);
850
+ }
851
+ listeners.add(listener);
852
+ }
853
+ }
854
+ removeEventListener(type, listener, options) {
855
+ if (typeof listener === "function") {
856
+ const listeners = this.#eventListeners.get(type);
857
+ if (listeners) {
858
+ listeners.delete(listener);
859
+ }
860
+ }
861
+ }
862
+ dispatchEvent(event) {
863
+ return true;
864
+ }
865
+ static __initStatic() {this.CONNECTING = 0}
866
+ static __initStatic2() {this.OPEN = 1}
867
+ static __initStatic3() {this.CLOSING = 2}
868
+ static __initStatic4() {this.CLOSED = 3}
869
+ __init4() {this.CONNECTING = 0}
870
+ __init5() {this.OPEN = 1}
871
+ __init6() {this.CLOSING = 2}
872
+ __init7() {this.CLOSED = 3}
873
+ // Additional methods for compatibility
874
+ ping(data, mask, cb) {
875
+ if (cb) cb(new Error("Ping not supported in tunnel adapter"));
876
+ }
877
+ pong(data, mask, cb) {
878
+ if (cb) cb(new Error("Pong not supported in tunnel adapter"));
879
+ }
880
+ /** @experimental */
881
+ terminate() {
882
+ this.#readyState = 3;
883
+ this.#closeCallback(1006, "Abnormal Closure");
884
+ const event = {
885
+ wasClean: false,
886
+ code: 1006,
887
+ reason: "Abnormal Closure",
888
+ type: "close",
889
+ target: this
890
+ };
891
+ this.#fireEvent("close", event);
892
+ }
893
+ }, _class2.__initStatic(), _class2.__initStatic2(), _class2.__initStatic3(), _class2.__initStatic4(), _class2);
894
+
895
+ // src/tunnel.ts
896
+ var RunnerShutdownError = class extends Error {
897
+ constructor() {
898
+ super("Runner shut down");
899
+ }
900
+ };
901
+ var Tunnel = class {
902
+ #runner;
903
+ /** Maps request IDs to actor IDs for lookup */
904
+ #requestToActor = [];
905
+ /** Buffer for messages when not connected */
906
+ #bufferedMessages = [];
907
+ get log() {
908
+ return this.#runner.log;
909
+ }
910
+ constructor(runner) {
911
+ this.#runner = runner;
912
+ }
913
+ start() {
914
+ }
915
+ resendBufferedEvents() {
916
+ var _a;
917
+ if (this.#bufferedMessages.length === 0) {
918
+ return;
919
+ }
920
+ (_a = this.log) == null ? void 0 : _a.info({
921
+ msg: "resending buffered tunnel messages",
922
+ count: this.#bufferedMessages.length
923
+ });
924
+ const messages = this.#bufferedMessages;
925
+ this.#bufferedMessages = [];
926
+ for (const { gatewayId, requestId, messageKind } of messages) {
927
+ this.#sendMessage(gatewayId, requestId, messageKind);
928
+ }
929
+ }
930
+ shutdown() {
931
+ for (const [_actorId, actor] of this.#runner.actors) {
932
+ for (const entry of actor.pendingRequests) {
933
+ entry.request.reject(new RunnerShutdownError());
934
+ }
935
+ actor.pendingRequests = [];
936
+ for (const entry of actor.webSockets) {
937
+ if (!entry.ws[HIBERNATABLE_SYMBOL]) {
938
+ entry.ws._closeWithoutCallback(1e3, "ws.tunnel_shutdown");
939
+ }
940
+ }
941
+ actor.webSockets = [];
942
+ }
943
+ this.#requestToActor = [];
944
+ }
945
+ async restoreHibernatingRequests(actorId, metaEntries) {
946
+ var _a, _b, _c, _d;
947
+ const actor = this.#runner.getActor(actorId);
948
+ if (!actor) {
949
+ throw new Error(
950
+ `Actor ${actorId} not found for restoring hibernating requests`
951
+ );
952
+ }
953
+ if (actor.hibernationRestored) {
954
+ throw new Error(
955
+ `Actor ${actorId} already restored hibernating requests`
956
+ );
957
+ }
958
+ (_a = this.log) == null ? void 0 : _a.debug({
959
+ msg: "restoring hibernating requests",
960
+ actorId,
961
+ requests: actor.hibernatingRequests.length
962
+ });
963
+ const backgroundOperations = [];
964
+ let connectedButNotLoadedCount = 0;
965
+ let restoredCount = 0;
966
+ for (const { gatewayId, requestId } of actor.hibernatingRequests) {
967
+ const requestIdStr = idToStr(requestId);
968
+ const meta = metaEntries.find(
969
+ (entry) => arraysEqual(entry.gatewayId, gatewayId) && arraysEqual(entry.requestId, requestId)
970
+ );
971
+ if (!meta) {
972
+ (_b = this.log) == null ? void 0 : _b.warn({
973
+ msg: "closing websocket that is not persisted",
974
+ requestId: requestIdStr
975
+ });
976
+ this.#sendMessage(gatewayId, requestId, {
977
+ tag: "ToServerWebSocketClose",
978
+ val: {
979
+ code: 1e3,
980
+ reason: "ws.meta_not_found_during_restore",
981
+ hibernate: false
982
+ }
983
+ });
984
+ connectedButNotLoadedCount++;
985
+ } else {
986
+ const request = buildRequestForWebSocket(
987
+ meta.path,
988
+ meta.headers
989
+ );
990
+ const restoreOperation = this.#createWebSocket(
991
+ actorId,
992
+ gatewayId,
993
+ requestId,
994
+ requestIdStr,
995
+ meta.serverMessageIndex,
996
+ true,
997
+ true,
998
+ request,
999
+ meta.path,
1000
+ meta.headers,
1001
+ false
1002
+ ).then(() => {
1003
+ var _a2;
1004
+ const actor2 = this.#runner.getActor(actorId);
1005
+ if (actor2) {
1006
+ actor2.createPendingRequest(
1007
+ gatewayId,
1008
+ requestId,
1009
+ meta.clientMessageIndex
1010
+ );
1011
+ }
1012
+ (_a2 = this.log) == null ? void 0 : _a2.info({
1013
+ msg: "connection successfully restored",
1014
+ actorId,
1015
+ requestId: requestIdStr
1016
+ });
1017
+ }).catch((err) => {
1018
+ var _a2;
1019
+ (_a2 = this.log) == null ? void 0 : _a2.error({
1020
+ msg: "error creating websocket during restore",
1021
+ requestId: requestIdStr,
1022
+ err
1023
+ });
1024
+ this.#sendMessage(gatewayId, requestId, {
1025
+ tag: "ToServerWebSocketClose",
1026
+ val: {
1027
+ code: 1011,
1028
+ reason: "ws.restore_error",
1029
+ hibernate: false
1030
+ }
1031
+ });
1032
+ });
1033
+ backgroundOperations.push(restoreOperation);
1034
+ restoredCount++;
1035
+ }
1036
+ }
1037
+ let loadedButNotConnectedCount = 0;
1038
+ for (const meta of metaEntries) {
1039
+ const requestIdStr = idToStr(meta.requestId);
1040
+ const isConnected = actor.hibernatingRequests.some(
1041
+ (req) => arraysEqual(req.gatewayId, meta.gatewayId) && arraysEqual(req.requestId, meta.requestId)
1042
+ );
1043
+ if (!isConnected) {
1044
+ (_c = this.log) == null ? void 0 : _c.warn({
1045
+ msg: "removing stale persisted websocket",
1046
+ requestId: requestIdStr
1047
+ });
1048
+ const request = buildRequestForWebSocket(
1049
+ meta.path,
1050
+ meta.headers
1051
+ );
1052
+ const cleanupOperation = this.#createWebSocket(
1053
+ actorId,
1054
+ meta.gatewayId,
1055
+ meta.requestId,
1056
+ requestIdStr,
1057
+ meta.serverMessageIndex,
1058
+ true,
1059
+ true,
1060
+ request,
1061
+ meta.path,
1062
+ meta.headers,
1063
+ true
1064
+ ).then((adapter) => {
1065
+ adapter.close(1e3, "ws.stale_metadata");
1066
+ }).catch((err) => {
1067
+ var _a2;
1068
+ (_a2 = this.log) == null ? void 0 : _a2.error({
1069
+ msg: "error creating stale websocket during restore",
1070
+ requestId: requestIdStr,
1071
+ err
1072
+ });
1073
+ });
1074
+ backgroundOperations.push(cleanupOperation);
1075
+ loadedButNotConnectedCount++;
1076
+ }
1077
+ }
1078
+ await Promise.allSettled(backgroundOperations);
1079
+ actor.hibernationRestored = true;
1080
+ (_d = this.log) == null ? void 0 : _d.info({
1081
+ msg: "restored hibernatable websockets",
1082
+ actorId,
1083
+ restoredCount,
1084
+ connectedButNotLoadedCount,
1085
+ loadedButNotConnectedCount
1086
+ });
1087
+ }
1088
+ /**
1089
+ * Called from WebSocketOpen message and when restoring hibernatable WebSockets.
1090
+ *
1091
+ * engineAlreadyClosed will be true if this is only being called to trigger
1092
+ * the close callback and not to send a close message to the server. This
1093
+ * is used specifically to clean up zombie WebSocket connections.
1094
+ */
1095
+ async #createWebSocket(actorId, gatewayId, requestId, requestIdStr, serverMessageIndex, isHibernatable, isRestoringHibernatable, request, path, headers, engineAlreadyClosed) {
1096
+ var _a;
1097
+ (_a = this.log) == null ? void 0 : _a.debug({
1098
+ msg: "createWebSocket creating adapter",
1099
+ actorId,
1100
+ requestIdStr,
1101
+ isHibernatable,
1102
+ path
1103
+ });
1104
+ const adapter = new WebSocketTunnelAdapter(
1105
+ this,
1106
+ actorId,
1107
+ requestIdStr,
1108
+ serverMessageIndex,
1109
+ isHibernatable,
1110
+ isRestoringHibernatable,
1111
+ request,
1112
+ (data, isBinary) => {
1113
+ const dataBuffer = typeof data === "string" ? new TextEncoder().encode(data).buffer : data;
1114
+ this.#sendMessage(gatewayId, requestId, {
1115
+ tag: "ToServerWebSocketMessage",
1116
+ val: {
1117
+ data: dataBuffer,
1118
+ binary: isBinary
1119
+ }
1120
+ });
1121
+ },
1122
+ (code, reason) => {
1123
+ if (!engineAlreadyClosed) {
1124
+ this.#sendMessage(gatewayId, requestId, {
1125
+ tag: "ToServerWebSocketClose",
1126
+ val: {
1127
+ code: code || null,
1128
+ reason: reason || null,
1129
+ hibernate: false
1130
+ }
1131
+ });
1132
+ }
1133
+ const actor2 = this.#runner.getActor(actorId);
1134
+ if (actor2) {
1135
+ actor2.deleteWebSocket(gatewayId, requestId);
1136
+ actor2.deletePendingRequest(gatewayId, requestId);
1137
+ }
1138
+ this.#removeRequestToActor(gatewayId, requestId);
1139
+ }
1140
+ );
1141
+ const actor = this.#runner.getActor(actorId);
1142
+ if (!actor) {
1143
+ throw new Error(`Actor ${actorId} not found`);
1144
+ }
1145
+ actor.setWebSocket(gatewayId, requestId, adapter);
1146
+ this.addRequestToActor(gatewayId, requestId, actorId);
1147
+ await this.#runner.config.websocket(
1148
+ this.#runner,
1149
+ actorId,
1150
+ adapter,
1151
+ gatewayId,
1152
+ requestId,
1153
+ request,
1154
+ path,
1155
+ headers,
1156
+ isHibernatable,
1157
+ isRestoringHibernatable
1158
+ );
1159
+ return adapter;
1160
+ }
1161
+ addRequestToActor(gatewayId, requestId, actorId) {
1162
+ this.#requestToActor.push({ gatewayId, requestId, actorId });
1163
+ }
1164
+ #removeRequestToActor(gatewayId, requestId) {
1165
+ const index = this.#requestToActor.findIndex(
1166
+ (entry) => arraysEqual(entry.gatewayId, gatewayId) && arraysEqual(entry.requestId, requestId)
1167
+ );
1168
+ if (index !== -1) {
1169
+ this.#requestToActor.splice(index, 1);
1170
+ }
1171
+ }
1172
+ getRequestActor(gatewayId, requestId) {
1173
+ var _a, _b;
1174
+ const entry = this.#requestToActor.find(
1175
+ (entry2) => arraysEqual(entry2.gatewayId, gatewayId) && arraysEqual(entry2.requestId, requestId)
1176
+ );
1177
+ if (!entry) {
1178
+ (_a = this.log) == null ? void 0 : _a.warn({
1179
+ msg: "missing requestToActor entry",
1180
+ requestId: idToStr(requestId)
1181
+ });
1182
+ return void 0;
1183
+ }
1184
+ const actor = this.#runner.getActor(entry.actorId);
1185
+ if (!actor) {
1186
+ (_b = this.log) == null ? void 0 : _b.warn({
1187
+ msg: "missing actor for requestToActor lookup",
1188
+ requestId: idToStr(requestId),
1189
+ actorId: entry.actorId
1190
+ });
1191
+ return void 0;
1192
+ }
1193
+ return actor;
1194
+ }
1195
+ async getAndWaitForRequestActor(gatewayId, requestId) {
1196
+ const actor = this.getRequestActor(gatewayId, requestId);
1197
+ if (!actor) return;
1198
+ await actor.actorStartPromise.promise;
1199
+ return actor;
1200
+ }
1201
+ #sendMessage(gatewayId, requestId, messageKind) {
1202
+ var _a, _b, _c, _d;
1203
+ if (!this.#runner.__webSocketReady()) {
1204
+ (_a = this.log) == null ? void 0 : _a.debug({
1205
+ msg: "buffering tunnel message, socket not connected to engine",
1206
+ requestId: idToStr(requestId),
1207
+ message: stringifyToServerTunnelMessageKind(messageKind)
1208
+ });
1209
+ this.#bufferedMessages.push({ gatewayId, requestId, messageKind });
1210
+ return;
1211
+ }
1212
+ const gatewayIdStr = idToStr(gatewayId);
1213
+ const requestIdStr = idToStr(requestId);
1214
+ const actor = this.getRequestActor(gatewayId, requestId);
1215
+ if (!actor) {
1216
+ (_b = this.log) == null ? void 0 : _b.warn({
1217
+ msg: "cannot send tunnel message, actor not found",
1218
+ gatewayId: gatewayIdStr,
1219
+ requestId: requestIdStr
1220
+ });
1221
+ return;
1222
+ }
1223
+ let clientMessageIndex;
1224
+ const pending = actor.getPendingRequest(gatewayId, requestId);
1225
+ if (pending) {
1226
+ clientMessageIndex = pending.clientMessageIndex;
1227
+ pending.clientMessageIndex++;
1228
+ } else {
1229
+ (_c = this.log) == null ? void 0 : _c.warn({
1230
+ msg: "missing pending request for send message, defaulting to message index 0",
1231
+ gatewayId: gatewayIdStr,
1232
+ requestId: requestIdStr
1233
+ });
1234
+ clientMessageIndex = 0;
1235
+ }
1236
+ const messageId = {
1237
+ gatewayId,
1238
+ requestId,
1239
+ messageIndex: clientMessageIndex
1240
+ };
1241
+ const messageIdStr = `${idToStr(messageId.gatewayId)}-${idToStr(messageId.requestId)}-${messageId.messageIndex}`;
1242
+ (_d = this.log) == null ? void 0 : _d.debug({
1243
+ msg: "sending tunnel msg",
1244
+ messageId: messageIdStr,
1245
+ gatewayId: gatewayIdStr,
1246
+ requestId: requestIdStr,
1247
+ messageIndex: clientMessageIndex,
1248
+ message: stringifyToServerTunnelMessageKind(messageKind)
1249
+ });
1250
+ const message = {
1251
+ tag: "ToServerTunnelMessage",
1252
+ val: {
1253
+ messageId,
1254
+ messageKind
1255
+ }
1256
+ };
1257
+ this.#runner.__sendToServer(message);
1258
+ }
1259
+ closeActiveRequests(actor) {
1260
+ const actorId = actor.actorId;
1261
+ for (const entry of actor.pendingRequests) {
1262
+ entry.request.reject(new Error(`Actor ${actorId} stopped`));
1263
+ if (entry.gatewayId && entry.requestId) {
1264
+ this.#removeRequestToActor(entry.gatewayId, entry.requestId);
1265
+ }
1266
+ }
1267
+ for (const entry of actor.webSockets) {
1268
+ const isHibernatable = entry.ws[HIBERNATABLE_SYMBOL];
1269
+ if (!isHibernatable) {
1270
+ entry.ws._closeWithoutCallback(1e3, "actor.stopped");
1271
+ }
1272
+ }
1273
+ }
1274
+ async #fetch(actorId, gatewayId, requestId, request) {
1275
+ var _a;
1276
+ if (!this.#runner.hasActor(actorId)) {
1277
+ (_a = this.log) == null ? void 0 : _a.warn({
1278
+ msg: "ignoring request for unknown actor",
1279
+ actorId
1280
+ });
1281
+ return new Response("Actor not found", {
1282
+ status: 503,
1283
+ headers: { "x-rivet-error": "runner.actor_not_found" }
1284
+ });
1285
+ }
1286
+ const fetchHandler = this.#runner.config.fetch(
1287
+ this.#runner,
1288
+ actorId,
1289
+ gatewayId,
1290
+ requestId,
1291
+ request
1292
+ );
1293
+ if (!fetchHandler) {
1294
+ return new Response("Not Implemented", { status: 501 });
1295
+ }
1296
+ return fetchHandler;
1297
+ }
1298
+ async handleTunnelMessage(message) {
1299
+ var _a;
1300
+ const { gatewayId, requestId, messageIndex } = message.messageId;
1301
+ const gatewayIdStr = idToStr(gatewayId);
1302
+ const requestIdStr = idToStr(requestId);
1303
+ (_a = this.log) == null ? void 0 : _a.debug({
1304
+ msg: "receive tunnel msg",
1305
+ gatewayId: gatewayIdStr,
1306
+ requestId: requestIdStr,
1307
+ messageIndex: message.messageId.messageIndex,
1308
+ message: stringifyToClientTunnelMessageKind(message.messageKind)
1309
+ });
1310
+ switch (message.messageKind.tag) {
1311
+ case "ToClientRequestStart":
1312
+ await this.#handleRequestStart(
1313
+ gatewayId,
1314
+ requestId,
1315
+ message.messageKind.val
1316
+ );
1317
+ break;
1318
+ case "ToClientRequestChunk":
1319
+ await this.#handleRequestChunk(
1320
+ gatewayId,
1321
+ requestId,
1322
+ message.messageKind.val
1323
+ );
1324
+ break;
1325
+ case "ToClientRequestAbort":
1326
+ await this.#handleRequestAbort(gatewayId, requestId);
1327
+ break;
1328
+ case "ToClientWebSocketOpen":
1329
+ await this.#handleWebSocketOpen(
1330
+ gatewayId,
1331
+ requestId,
1332
+ message.messageKind.val
1333
+ );
1334
+ break;
1335
+ case "ToClientWebSocketMessage": {
1336
+ await this.#handleWebSocketMessage(
1337
+ gatewayId,
1338
+ requestId,
1339
+ messageIndex,
1340
+ message.messageKind.val
1341
+ );
1342
+ break;
1343
+ }
1344
+ case "ToClientWebSocketClose":
1345
+ await this.#handleWebSocketClose(
1346
+ gatewayId,
1347
+ requestId,
1348
+ message.messageKind.val
1349
+ );
1350
+ break;
1351
+ case "DeprecatedTunnelAck":
1352
+ break;
1353
+ default:
1354
+ unreachable(message.messageKind);
1355
+ }
1356
+ }
1357
+ async #handleRequestStart(gatewayId, requestId, req) {
1358
+ var _a, _b, _c;
1359
+ const requestIdStr = idToStr(requestId);
1360
+ const actor = await this.#runner.getAndWaitForActor(req.actorId);
1361
+ if (!actor) {
1362
+ (_a = this.log) == null ? void 0 : _a.warn({
1363
+ msg: "actor does not exist in handleRequestStart, request will leak",
1364
+ actorId: req.actorId,
1365
+ requestId: requestIdStr
1366
+ });
1367
+ return;
1368
+ }
1369
+ this.addRequestToActor(gatewayId, requestId, req.actorId);
1370
+ try {
1371
+ const headers = new Headers();
1372
+ for (const [key, value] of req.headers) {
1373
+ headers.append(key, value);
1374
+ }
1375
+ const request = new Request(`http://localhost${req.path}`, {
1376
+ method: req.method,
1377
+ headers,
1378
+ body: req.body ? new Uint8Array(req.body) : void 0
1379
+ });
1380
+ if (req.stream) {
1381
+ const stream = new ReadableStream({
1382
+ start: (controller) => {
1383
+ const existing = actor.getPendingRequest(
1384
+ gatewayId,
1385
+ requestId
1386
+ );
1387
+ if (existing) {
1388
+ existing.streamController = controller;
1389
+ existing.actorId = req.actorId;
1390
+ existing.gatewayId = gatewayId;
1391
+ existing.requestId = requestId;
1392
+ } else {
1393
+ actor.createPendingRequestWithStreamController(
1394
+ gatewayId,
1395
+ requestId,
1396
+ 0,
1397
+ controller
1398
+ );
1399
+ }
1400
+ }
1401
+ });
1402
+ const streamingRequest = new Request(request, {
1403
+ body: stream,
1404
+ duplex: "half"
1405
+ });
1406
+ const response = await this.#fetch(
1407
+ req.actorId,
1408
+ gatewayId,
1409
+ requestId,
1410
+ streamingRequest
1411
+ );
1412
+ await this.#sendResponse(
1413
+ actor.actorId,
1414
+ actor.generation,
1415
+ gatewayId,
1416
+ requestId,
1417
+ response
1418
+ );
1419
+ } else {
1420
+ actor.createPendingRequest(gatewayId, requestId, 0);
1421
+ const response = await this.#fetch(
1422
+ req.actorId,
1423
+ gatewayId,
1424
+ requestId,
1425
+ request
1426
+ );
1427
+ await this.#sendResponse(
1428
+ actor.actorId,
1429
+ actor.generation,
1430
+ gatewayId,
1431
+ requestId,
1432
+ response
1433
+ );
1434
+ }
1435
+ } catch (error) {
1436
+ if (error instanceof RunnerShutdownError) {
1437
+ (_b = this.log) == null ? void 0 : _b.debug({ msg: "catught runner shutdown error" });
1438
+ } else {
1439
+ (_c = this.log) == null ? void 0 : _c.error({ msg: "error handling request", error });
1440
+ this.#sendResponseError(
1441
+ actor.actorId,
1442
+ actor.generation,
1443
+ gatewayId,
1444
+ requestId,
1445
+ 500,
1446
+ "Internal Server Error"
1447
+ );
1448
+ }
1449
+ } finally {
1450
+ if (this.#runner.hasActor(req.actorId, actor.generation)) {
1451
+ actor.deletePendingRequest(gatewayId, requestId);
1452
+ this.#removeRequestToActor(gatewayId, requestId);
1453
+ }
1454
+ }
1455
+ }
1456
+ async #handleRequestChunk(gatewayId, requestId, chunk) {
1457
+ const actor = await this.getAndWaitForRequestActor(
1458
+ gatewayId,
1459
+ requestId
1460
+ );
1461
+ if (actor) {
1462
+ const pending = actor.getPendingRequest(gatewayId, requestId);
1463
+ if (pending == null ? void 0 : pending.streamController) {
1464
+ pending.streamController.enqueue(new Uint8Array(chunk.body));
1465
+ if (chunk.finish) {
1466
+ pending.streamController.close();
1467
+ actor.deletePendingRequest(gatewayId, requestId);
1468
+ this.#removeRequestToActor(gatewayId, requestId);
1469
+ }
1470
+ }
1471
+ }
1472
+ }
1473
+ async #handleRequestAbort(gatewayId, requestId) {
1474
+ const actor = await this.getAndWaitForRequestActor(
1475
+ gatewayId,
1476
+ requestId
1477
+ );
1478
+ if (actor) {
1479
+ const pending = actor.getPendingRequest(gatewayId, requestId);
1480
+ if (pending == null ? void 0 : pending.streamController) {
1481
+ pending.streamController.error(new Error("Request aborted"));
1482
+ }
1483
+ actor.deletePendingRequest(gatewayId, requestId);
1484
+ this.#removeRequestToActor(gatewayId, requestId);
1485
+ }
1486
+ }
1487
+ async #sendResponse(actorId, generation, gatewayId, requestId, response) {
1488
+ var _a;
1489
+ if (!this.#runner.hasActor(actorId, generation)) {
1490
+ (_a = this.log) == null ? void 0 : _a.warn({
1491
+ msg: "actor not loaded to send response, assuming gateway has closed request",
1492
+ actorId,
1493
+ generation,
1494
+ requestId
1495
+ });
1496
+ return;
1497
+ }
1498
+ const body = response.body ? await response.arrayBuffer() : null;
1499
+ const headers = /* @__PURE__ */ new Map();
1500
+ response.headers.forEach((value, key) => {
1501
+ headers.set(key, value);
1502
+ });
1503
+ if (body && !headers.has("content-length")) {
1504
+ headers.set("content-length", String(body.byteLength));
1505
+ }
1506
+ this.#sendMessage(gatewayId, requestId, {
1507
+ tag: "ToServerResponseStart",
1508
+ val: {
1509
+ status: response.status,
1510
+ headers,
1511
+ body: body || null,
1512
+ stream: false
1513
+ }
1514
+ });
1515
+ }
1516
+ #sendResponseError(actorId, generation, gatewayId, requestId, status, message) {
1517
+ var _a;
1518
+ if (!this.#runner.hasActor(actorId, generation)) {
1519
+ (_a = this.log) == null ? void 0 : _a.warn({
1520
+ msg: "actor not loaded to send response, assuming gateway has closed request",
1521
+ actorId,
1522
+ generation,
1523
+ requestId
1524
+ });
1525
+ return;
1526
+ }
1527
+ const headers = /* @__PURE__ */ new Map();
1528
+ headers.set("content-type", "text/plain");
1529
+ this.#sendMessage(gatewayId, requestId, {
1530
+ tag: "ToServerResponseStart",
1531
+ val: {
1532
+ status,
1533
+ headers,
1534
+ body: new TextEncoder().encode(message).buffer,
1535
+ stream: false
1536
+ }
1537
+ });
1538
+ }
1539
+ async #handleWebSocketOpen(gatewayId, requestId, open) {
1540
+ var _a, _b, _c;
1541
+ const requestIdStr = idToStr(requestId);
1542
+ const actor = await this.#runner.getAndWaitForActor(open.actorId);
1543
+ if (!actor) {
1544
+ (_a = this.log) == null ? void 0 : _a.warn({
1545
+ msg: "ignoring websocket for unknown actor",
1546
+ actorId: open.actorId
1547
+ });
1548
+ this.#sendMessage(gatewayId, requestId, {
1549
+ tag: "ToServerWebSocketClose",
1550
+ val: {
1551
+ code: 1011,
1552
+ reason: "Actor not found",
1553
+ hibernate: false
1554
+ }
1555
+ });
1556
+ return;
1557
+ }
1558
+ const existingAdapter = actor.getWebSocket(gatewayId, requestId);
1559
+ if (existingAdapter) {
1560
+ (_b = this.log) == null ? void 0 : _b.warn({
1561
+ msg: "closing existing websocket for duplicate open event for the same request id",
1562
+ requestId: requestIdStr
1563
+ });
1564
+ existingAdapter._closeWithoutCallback(1e3, "ws.duplicate_open");
1565
+ }
1566
+ try {
1567
+ const request = buildRequestForWebSocket(
1568
+ open.path,
1569
+ Object.fromEntries(open.headers)
1570
+ );
1571
+ const canHibernate = this.#runner.config.hibernatableWebSocket.canHibernate(
1572
+ actor.actorId,
1573
+ gatewayId,
1574
+ requestId,
1575
+ request
1576
+ );
1577
+ const adapter = await this.#createWebSocket(
1578
+ actor.actorId,
1579
+ gatewayId,
1580
+ requestId,
1581
+ requestIdStr,
1582
+ 0,
1583
+ canHibernate,
1584
+ false,
1585
+ request,
1586
+ open.path,
1587
+ Object.fromEntries(open.headers),
1588
+ false
1589
+ );
1590
+ actor.createPendingRequest(gatewayId, requestId, 0);
1591
+ this.#sendMessage(gatewayId, requestId, {
1592
+ tag: "ToServerWebSocketOpen",
1593
+ val: {
1594
+ canHibernate
1595
+ }
1596
+ });
1597
+ adapter._handleOpen(requestId);
1598
+ } catch (error) {
1599
+ (_c = this.log) == null ? void 0 : _c.error({ msg: "error handling websocket open", error });
1600
+ this.#sendMessage(gatewayId, requestId, {
1601
+ tag: "ToServerWebSocketClose",
1602
+ val: {
1603
+ code: 1011,
1604
+ reason: "Server Error",
1605
+ hibernate: false
1606
+ }
1607
+ });
1608
+ actor.deleteWebSocket(gatewayId, requestId);
1609
+ actor.deletePendingRequest(gatewayId, requestId);
1610
+ this.#removeRequestToActor(gatewayId, requestId);
1611
+ }
1612
+ }
1613
+ async #handleWebSocketMessage(gatewayId, requestId, serverMessageIndex, msg) {
1614
+ var _a;
1615
+ const actor = await this.getAndWaitForRequestActor(
1616
+ gatewayId,
1617
+ requestId
1618
+ );
1619
+ if (actor) {
1620
+ const adapter = actor.getWebSocket(gatewayId, requestId);
1621
+ if (adapter) {
1622
+ const data = msg.binary ? new Uint8Array(msg.data) : new TextDecoder().decode(new Uint8Array(msg.data));
1623
+ adapter._handleMessage(
1624
+ requestId,
1625
+ data,
1626
+ serverMessageIndex,
1627
+ msg.binary
1628
+ );
1629
+ return;
1630
+ }
1631
+ }
1632
+ (_a = this.log) == null ? void 0 : _a.warn({
1633
+ msg: "missing websocket for incoming websocket message, this may indicate the actor stopped before processing a message",
1634
+ requestId
1635
+ });
1636
+ }
1637
+ sendHibernatableWebSocketMessageAck(gatewayId, requestId, clientMessageIndex) {
1638
+ var _a, _b, _c;
1639
+ const requestIdStr = idToStr(requestId);
1640
+ (_a = this.log) == null ? void 0 : _a.debug({
1641
+ msg: "ack ws msg",
1642
+ requestId: requestIdStr,
1643
+ index: clientMessageIndex
1644
+ });
1645
+ if (clientMessageIndex < 0 || clientMessageIndex > 65535)
1646
+ throw new Error("invalid websocket ack index");
1647
+ const actor = this.getRequestActor(gatewayId, requestId);
1648
+ if (!actor) {
1649
+ (_b = this.log) == null ? void 0 : _b.warn({
1650
+ msg: "cannot send websocket ack, actor not found",
1651
+ requestId: requestIdStr
1652
+ });
1653
+ return;
1654
+ }
1655
+ const pending = actor.getPendingRequest(gatewayId, requestId);
1656
+ if (!(pending == null ? void 0 : pending.gatewayId)) {
1657
+ (_c = this.log) == null ? void 0 : _c.warn({
1658
+ msg: "cannot send websocket ack, gatewayId not found in pending request",
1659
+ requestId: requestIdStr
1660
+ });
1661
+ return;
1662
+ }
1663
+ this.#sendMessage(pending.gatewayId, requestId, {
1664
+ tag: "ToServerWebSocketMessageAck",
1665
+ val: {
1666
+ index: clientMessageIndex
1667
+ }
1668
+ });
1669
+ }
1670
+ async #handleWebSocketClose(gatewayId, requestId, close) {
1671
+ const actor = await this.getAndWaitForRequestActor(
1672
+ gatewayId,
1673
+ requestId
1674
+ );
1675
+ if (actor) {
1676
+ const adapter = actor.getWebSocket(gatewayId, requestId);
1677
+ if (adapter) {
1678
+ adapter._handleClose(
1679
+ requestId,
1680
+ close.code || void 0,
1681
+ close.reason || void 0
1682
+ );
1683
+ actor.deleteWebSocket(gatewayId, requestId);
1684
+ actor.deletePendingRequest(gatewayId, requestId);
1685
+ this.#removeRequestToActor(gatewayId, requestId);
1686
+ }
1687
+ }
1688
+ }
1689
+ };
1690
+ function buildRequestForWebSocket(path, headers) {
1691
+ const fullHeaders = {
1692
+ ...headers,
1693
+ Upgrade: "websocket",
1694
+ Connection: "Upgrade"
1695
+ };
1696
+ if (!path.startsWith("/")) {
1697
+ throw new Error("path must start with leading slash");
1698
+ }
1699
+ const request = new Request(`http://actor${path}`, {
1700
+ method: "GET",
1701
+ headers: fullHeaders
1702
+ });
1703
+ return request;
1704
+ }
1705
+
1706
+ // src/websocket.ts
1707
+ var webSocketPromise = null;
1708
+ async function importWebSocket() {
1709
+ if (webSocketPromise !== null) {
1710
+ return webSocketPromise;
1711
+ }
1712
+ webSocketPromise = (async () => {
1713
+ var _a, _b, _c;
1714
+ let _WebSocket;
1715
+ if (typeof WebSocket !== "undefined") {
1716
+ _WebSocket = WebSocket;
1717
+ (_a = logger()) == null ? void 0 : _a.debug({ msg: "using native websocket" });
1718
+ } else {
1719
+ try {
1720
+ const ws = await Promise.resolve().then(() => _interopRequireWildcard(require("ws")));
1721
+ _WebSocket = ws.default;
1722
+ (_b = logger()) == null ? void 0 : _b.debug({ msg: "using websocket from npm" });
1723
+ } catch (e2) {
1724
+ _WebSocket = class MockWebSocket {
1725
+ constructor() {
1726
+ throw new Error(
1727
+ 'WebSocket support requires installing the "ws" peer dependency.'
1728
+ );
1729
+ }
1730
+ };
1731
+ (_c = logger()) == null ? void 0 : _c.debug({ msg: "using mock websocket" });
1732
+ }
1733
+ }
1734
+ return _WebSocket;
1735
+ })();
1736
+ return webSocketPromise;
1737
+ }
1738
+
1739
+ // src/mod.ts
1740
+ var KV_EXPIRE = 3e4;
1741
+ var PROTOCOL_VERSION = 3;
1742
+ var RUNNER_PING_INTERVAL = 3e3;
1743
+ var EVENT_BACKLOG_WARN_THRESHOLD = 1e4;
1744
+ var SIGNAL_HANDLERS = [];
1745
+ var Runner = class {
1746
+ #config;
1747
+ get config() {
1748
+ return this.#config;
1749
+ }
1750
+ #actors = /* @__PURE__ */ new Map();
1751
+ // WebSocket
1752
+
1753
+
1754
+ #lastCommandIdx = -1;
1755
+ #pingLoop;
1756
+ #nextEventIdx = 0n;
1757
+ #started = false;
1758
+ #shutdown = false;
1759
+ #shuttingDown = false;
1760
+ #reconnectAttempt = 0;
1761
+ #reconnectTimeout;
1762
+ // Runner lost threshold management
1763
+ #runnerLostThreshold;
1764
+ #runnerLostTimeout;
1765
+ // Event storage for resending
1766
+ #eventHistory = [];
1767
+ #eventBacklogWarned = false;
1768
+ // Command acknowledgment
1769
+ #ackInterval;
1770
+ // KV operations
1771
+ #nextKvRequestId = 0;
1772
+ #kvRequests = /* @__PURE__ */ new Map();
1773
+ #kvCleanupInterval;
1774
+ // Tunnel for HTTP/WebSocket forwarding
1775
+ #tunnel;
1776
+ // Cached child logger with runner-specific attributes
1777
+ #logCached;
1778
+ get log() {
1779
+ if (this.#logCached) return this.#logCached;
1780
+ const l = logger();
1781
+ if (l) {
1782
+ if (this.runnerId) {
1783
+ this.#logCached = l.child({
1784
+ runnerId: this.runnerId
1785
+ });
1786
+ return this.#logCached;
1787
+ } else {
1788
+ return l;
1789
+ }
1790
+ }
1791
+ return void 0;
1792
+ }
1793
+ constructor(config) {
1794
+ this.#config = config;
1795
+ if (this.#config.logger) setLogger(this.#config.logger);
1796
+ this.#kvCleanupInterval = setInterval(() => {
1797
+ this.#cleanupOldKvRequests();
1798
+ }, 15e3);
1799
+ }
1800
+ // MARK: Manage actors
1801
+ sleepActor(actorId, generation) {
1802
+ const actor = this.getActor(actorId, generation);
1803
+ if (!actor) return;
1804
+ this.#sendActorIntent(actorId, actor.generation, "sleep");
1805
+ }
1806
+ async stopActor(actorId, generation) {
1807
+ const actor = this.getActor(actorId, generation);
1808
+ if (!actor) return;
1809
+ this.#sendActorIntent(actorId, actor.generation, "stop");
1810
+ }
1811
+ async forceStopActor(actorId, generation) {
1812
+ var _a;
1813
+ const actor = this.getActor(actorId, generation);
1814
+ if (!actor) return;
1815
+ try {
1816
+ await this.#config.onActorStop(actorId, actor.generation);
1817
+ } catch (err) {
1818
+ console.error(`Error in onActorStop for actor ${actorId}:`, err);
1819
+ }
1820
+ (_a = this.#tunnel) == null ? void 0 : _a.closeActiveRequests(actor);
1821
+ this.#removeActor(actorId, generation);
1822
+ this.#sendActorStateUpdate(actorId, actor.generation, "stopped");
1823
+ }
1824
+ #stopAllActors() {
1825
+ var _a;
1826
+ (_a = this.log) == null ? void 0 : _a.info({
1827
+ msg: "stopping all actors due to runner lost threshold exceeded"
1828
+ });
1829
+ const actorIds = Array.from(this.#actors.keys());
1830
+ for (const actorId of actorIds) {
1831
+ this.forceStopActor(actorId);
1832
+ }
1833
+ }
1834
+ getActor(actorId, generation) {
1835
+ var _a, _b;
1836
+ const actor = this.#actors.get(actorId);
1837
+ if (!actor) {
1838
+ (_a = this.log) == null ? void 0 : _a.warn({
1839
+ msg: "actor not found",
1840
+ actorId
1841
+ });
1842
+ return void 0;
1843
+ }
1844
+ if (generation !== void 0 && actor.generation !== generation) {
1845
+ (_b = this.log) == null ? void 0 : _b.warn({
1846
+ msg: "actor generation mismatch",
1847
+ actorId,
1848
+ generation
1849
+ });
1850
+ return void 0;
1851
+ }
1852
+ return actor;
1853
+ }
1854
+ async getAndWaitForActor(actorId, generation) {
1855
+ const actor = this.getActor(actorId, generation);
1856
+ if (!actor) return;
1857
+ await actor.actorStartPromise.promise;
1858
+ return actor;
1859
+ }
1860
+ hasActor(actorId, generation) {
1861
+ const actor = this.#actors.get(actorId);
1862
+ return !!actor && (generation === void 0 || actor.generation === generation);
1863
+ }
1864
+ get actors() {
1865
+ return this.#actors;
1866
+ }
1867
+ // IMPORTANT: Make sure to call stopActiveRequests if calling #removeActor
1868
+ #removeActor(actorId, generation) {
1869
+ var _a, _b, _c;
1870
+ const actor = this.#actors.get(actorId);
1871
+ if (!actor) {
1872
+ (_a = this.log) == null ? void 0 : _a.error({
1873
+ msg: "actor not found for removal",
1874
+ actorId
1875
+ });
1876
+ return void 0;
1877
+ }
1878
+ if (generation !== void 0 && actor.generation !== generation) {
1879
+ (_b = this.log) == null ? void 0 : _b.error({
1880
+ msg: "actor generation mismatch",
1881
+ actorId,
1882
+ generation
1883
+ });
1884
+ return void 0;
1885
+ }
1886
+ this.#actors.delete(actorId);
1887
+ (_c = this.log) == null ? void 0 : _c.info({
1888
+ msg: "removed actor",
1889
+ actorId,
1890
+ actors: this.#actors.size
1891
+ });
1892
+ return actor;
1893
+ }
1894
+ // MARK: Start
1895
+ async start() {
1896
+ var _a, _b;
1897
+ if (this.#started) throw new Error("Cannot call runner.start twice");
1898
+ this.#started = true;
1899
+ (_a = this.log) == null ? void 0 : _a.info({ msg: "starting runner" });
1900
+ this.#tunnel = new Tunnel(this);
1901
+ this.#tunnel.start();
1902
+ try {
1903
+ await this.#openPegboardWebSocket();
1904
+ } catch (error) {
1905
+ this.#started = false;
1906
+ throw error;
1907
+ }
1908
+ if (!this.#config.noAutoShutdown) {
1909
+ if (!SIGNAL_HANDLERS.length) {
1910
+ process.on("SIGTERM", async () => {
1911
+ var _a2;
1912
+ (_a2 = this.log) == null ? void 0 : _a2.debug("received SIGTERM");
1913
+ for (const handler of SIGNAL_HANDLERS) {
1914
+ await handler();
1915
+ }
1916
+ });
1917
+ process.on("SIGINT", async () => {
1918
+ var _a2;
1919
+ (_a2 = this.log) == null ? void 0 : _a2.debug("received SIGINT");
1920
+ for (const handler of SIGNAL_HANDLERS) {
1921
+ await handler();
1922
+ }
1923
+ });
1924
+ (_b = this.log) == null ? void 0 : _b.debug({
1925
+ msg: "added SIGTERM listeners"
1926
+ });
1927
+ }
1928
+ SIGNAL_HANDLERS.push(async () => {
1929
+ var _a2;
1930
+ const weak = new WeakRef(this);
1931
+ await ((_a2 = weak.deref()) == null ? void 0 : _a2.shutdown(false, false));
1932
+ });
1933
+ }
1934
+ }
1935
+ // MARK: Shutdown
1936
+ async shutdown(immediate, exit = false) {
1937
+ var _a, _b, _c, _d, _e, _f, _g, _h;
1938
+ if (this.#shuttingDown) {
1939
+ (_a = this.log) == null ? void 0 : _a.debug({
1940
+ msg: "shutdown already in progress, ignoring"
1941
+ });
1942
+ return;
1943
+ }
1944
+ this.#shuttingDown = true;
1945
+ (_b = this.log) == null ? void 0 : _b.info({
1946
+ msg: "starting shutdown",
1947
+ immediate,
1948
+ exit
1949
+ });
1950
+ this.#shutdown = true;
1951
+ if (this.#reconnectTimeout) {
1952
+ clearTimeout(this.#reconnectTimeout);
1953
+ this.#reconnectTimeout = void 0;
1954
+ }
1955
+ if (this.#runnerLostTimeout) {
1956
+ clearTimeout(this.#runnerLostTimeout);
1957
+ this.#runnerLostTimeout = void 0;
1958
+ }
1959
+ if (this.#pingLoop) {
1960
+ clearInterval(this.#pingLoop);
1961
+ this.#pingLoop = void 0;
1962
+ }
1963
+ if (this.#ackInterval) {
1964
+ clearInterval(this.#ackInterval);
1965
+ this.#ackInterval = void 0;
1966
+ }
1967
+ if (this.#kvCleanupInterval) {
1968
+ clearInterval(this.#kvCleanupInterval);
1969
+ this.#kvCleanupInterval = void 0;
1970
+ }
1971
+ for (const request of this.#kvRequests.values()) {
1972
+ request.reject(
1973
+ new Error("WebSocket connection closed during shutdown")
1974
+ );
1975
+ }
1976
+ this.#kvRequests.clear();
1977
+ if (this.__webSocketReady()) {
1978
+ const pegboardWebSocket = this.__pegboardWebSocket;
1979
+ if (immediate) {
1980
+ pegboardWebSocket.close(1e3, "pegboard.runner_shutdown");
1981
+ } else {
1982
+ try {
1983
+ (_c = this.log) == null ? void 0 : _c.info({
1984
+ msg: "sending stopping message",
1985
+ readyState: pegboardWebSocket.readyState
1986
+ });
1987
+ this.__sendToServer({
1988
+ tag: "ToServerStopping",
1989
+ val: null
1990
+ });
1991
+ const closePromise = new Promise((resolve) => {
1992
+ if (!pegboardWebSocket)
1993
+ throw new Error("missing pegboardWebSocket");
1994
+ pegboardWebSocket.addEventListener("close", (ev) => {
1995
+ var _a2;
1996
+ (_a2 = this.log) == null ? void 0 : _a2.info({
1997
+ msg: "connection closed",
1998
+ code: ev.code,
1999
+ reason: ev.reason.toString()
2000
+ });
2001
+ resolve();
2002
+ });
2003
+ });
2004
+ await this.#waitForActorsToStop(pegboardWebSocket);
2005
+ (_d = this.log) == null ? void 0 : _d.info({
2006
+ msg: "closing WebSocket"
2007
+ });
2008
+ pegboardWebSocket.close(1e3, "pegboard.runner_shutdown");
2009
+ await closePromise;
2010
+ (_e = this.log) == null ? void 0 : _e.info({
2011
+ msg: "websocket shutdown completed"
2012
+ });
2013
+ } catch (error) {
2014
+ (_f = this.log) == null ? void 0 : _f.error({
2015
+ msg: "error during websocket shutdown:",
2016
+ error
2017
+ });
2018
+ pegboardWebSocket.close();
2019
+ }
2020
+ }
2021
+ } else {
2022
+ (_h = this.log) == null ? void 0 : _h.debug({
2023
+ msg: "no runner WebSocket to shutdown or already closed",
2024
+ readyState: (_g = this.__pegboardWebSocket) == null ? void 0 : _g.readyState
2025
+ });
2026
+ }
2027
+ if (this.#tunnel) {
2028
+ this.#tunnel.shutdown();
2029
+ this.#tunnel = void 0;
2030
+ }
2031
+ this.#config.onShutdown();
2032
+ if (exit) process.exit(0);
2033
+ }
2034
+ /**
2035
+ * Wait for all actors to stop before proceeding with shutdown.
2036
+ *
2037
+ * This method polls every 100ms to check if all actors have been stopped.
2038
+ *
2039
+ * It will resolve early if:
2040
+ * - All actors are stopped
2041
+ * - The WebSocket connection is closed
2042
+ * - The shutdown timeout is reached (120 seconds)
2043
+ */
2044
+ async #waitForActorsToStop(ws) {
2045
+ const shutdownTimeout = 12e4;
2046
+ const shutdownCheckInterval = 100;
2047
+ const progressLogInterval = 5e3;
2048
+ const shutdownStartTs = Date.now();
2049
+ let lastProgressLogTs = 0;
2050
+ return new Promise((resolve) => {
2051
+ var _a, _b;
2052
+ const checkActors = () => {
2053
+ var _a2, _b2, _c, _d;
2054
+ const now = Date.now();
2055
+ const elapsed = now - shutdownStartTs;
2056
+ const wsIsClosed = ws.readyState === 2 || ws.readyState === 3;
2057
+ if (this.#actors.size === 0) {
2058
+ (_a2 = this.log) == null ? void 0 : _a2.info({
2059
+ msg: "all actors stopped",
2060
+ elapsed
2061
+ });
2062
+ return true;
2063
+ } else if (wsIsClosed) {
2064
+ (_b2 = this.log) == null ? void 0 : _b2.warn({
2065
+ msg: "websocket closed before all actors stopped",
2066
+ remainingActors: this.#actors.size,
2067
+ elapsed
2068
+ });
2069
+ return true;
2070
+ } else if (elapsed >= shutdownTimeout) {
2071
+ (_c = this.log) == null ? void 0 : _c.warn({
2072
+ msg: "shutdown timeout reached, forcing close",
2073
+ remainingActors: this.#actors.size,
2074
+ elapsed
2075
+ });
2076
+ return true;
2077
+ } else {
2078
+ if (now - lastProgressLogTs >= progressLogInterval) {
2079
+ (_d = this.log) == null ? void 0 : _d.info({
2080
+ msg: "waiting for actors to stop",
2081
+ remainingActors: this.#actors.size,
2082
+ elapsed
2083
+ });
2084
+ lastProgressLogTs = now;
2085
+ }
2086
+ return false;
2087
+ }
2088
+ };
2089
+ if (checkActors()) {
2090
+ (_a = this.log) == null ? void 0 : _a.debug({
2091
+ msg: "actors check completed immediately"
2092
+ });
2093
+ resolve();
2094
+ return;
2095
+ }
2096
+ (_b = this.log) == null ? void 0 : _b.debug({
2097
+ msg: "starting actor wait interval",
2098
+ checkInterval: shutdownCheckInterval
2099
+ });
2100
+ const interval = setInterval(() => {
2101
+ var _a2, _b2;
2102
+ (_a2 = this.log) == null ? void 0 : _a2.debug({
2103
+ msg: "actor wait interval tick",
2104
+ actorCount: this.#actors.size
2105
+ });
2106
+ if (checkActors()) {
2107
+ (_b2 = this.log) == null ? void 0 : _b2.debug({
2108
+ msg: "actors check completed, clearing interval"
2109
+ });
2110
+ clearInterval(interval);
2111
+ resolve();
2112
+ }
2113
+ }, shutdownCheckInterval);
2114
+ });
2115
+ }
2116
+ // MARK: Networking
2117
+ get pegboardEndpoint() {
2118
+ return this.#config.pegboardEndpoint || this.#config.endpoint;
2119
+ }
2120
+ get pegboardUrl() {
2121
+ const wsEndpoint = this.pegboardEndpoint.replace("http://", "ws://").replace("https://", "wss://");
2122
+ const baseUrl = wsEndpoint.endsWith("/") ? wsEndpoint.slice(0, -1) : wsEndpoint;
2123
+ return `${baseUrl}/runners/connect?protocol_version=${PROTOCOL_VERSION}&namespace=${encodeURIComponent(this.#config.namespace)}&runner_key=${encodeURIComponent(this.#config.runnerKey)}`;
2124
+ }
2125
+ // MARK: Runner protocol
2126
+ async #openPegboardWebSocket() {
2127
+ var _a;
2128
+ const protocols = ["rivet"];
2129
+ if (this.config.token)
2130
+ protocols.push(`rivet_token.${this.config.token}`);
2131
+ const WS = await importWebSocket();
2132
+ const ws = new WS(this.pegboardUrl, protocols);
2133
+ this.__pegboardWebSocket = ws;
2134
+ (_a = this.log) == null ? void 0 : _a.info({
2135
+ msg: "connecting",
2136
+ endpoint: this.pegboardEndpoint,
2137
+ namespace: this.#config.namespace,
2138
+ runnerKey: this.#config.runnerKey,
2139
+ hasToken: !!this.config.token
2140
+ });
2141
+ ws.addEventListener("open", () => {
2142
+ var _a2, _b;
2143
+ if (this.#reconnectAttempt > 0) {
2144
+ (_a2 = this.log) == null ? void 0 : _a2.info({
2145
+ msg: "runner reconnected",
2146
+ namespace: this.#config.namespace,
2147
+ runnerName: this.#config.runnerName,
2148
+ reconnectAttempt: this.#reconnectAttempt
2149
+ });
2150
+ } else {
2151
+ (_b = this.log) == null ? void 0 : _b.debug({
2152
+ msg: "runner connected",
2153
+ namespace: this.#config.namespace,
2154
+ runnerName: this.#config.runnerName
2155
+ });
2156
+ }
2157
+ this.#reconnectAttempt = 0;
2158
+ if (this.#reconnectTimeout) {
2159
+ clearTimeout(this.#reconnectTimeout);
2160
+ this.#reconnectTimeout = void 0;
2161
+ }
2162
+ if (this.#runnerLostTimeout) {
2163
+ clearTimeout(this.#runnerLostTimeout);
2164
+ this.#runnerLostTimeout = void 0;
2165
+ }
2166
+ const init = {
2167
+ name: this.#config.runnerName,
2168
+ version: this.#config.version,
2169
+ totalSlots: this.#config.totalSlots,
2170
+ lastCommandIdx: this.#lastCommandIdx >= 0 ? BigInt(this.#lastCommandIdx) : null,
2171
+ prepopulateActorNames: new Map(
2172
+ Object.entries(this.#config.prepopulateActorNames).map(
2173
+ ([name, data]) => [
2174
+ name,
2175
+ { metadata: JSON.stringify(data.metadata) }
2176
+ ]
2177
+ )
2178
+ ),
2179
+ metadata: JSON.stringify(this.#config.metadata)
2180
+ };
2181
+ this.__sendToServer({
2182
+ tag: "ToServerInit",
2183
+ val: init
2184
+ });
2185
+ const pingLoop = setInterval(() => {
2186
+ var _a3;
2187
+ if (ws.readyState === 1) {
2188
+ this.__sendToServer({
2189
+ tag: "ToServerPing",
2190
+ val: {
2191
+ ts: BigInt(Date.now())
2192
+ }
2193
+ });
2194
+ } else {
2195
+ clearInterval(pingLoop);
2196
+ (_a3 = this.log) == null ? void 0 : _a3.info({
2197
+ msg: "WebSocket not open, stopping ping loop"
2198
+ });
2199
+ }
2200
+ }, RUNNER_PING_INTERVAL);
2201
+ this.#pingLoop = pingLoop;
2202
+ const ackInterval = 5 * 60 * 1e3;
2203
+ const ackLoop = setInterval(() => {
2204
+ var _a3;
2205
+ if (ws.readyState === 1) {
2206
+ this.#sendCommandAcknowledgment();
2207
+ } else {
2208
+ clearInterval(ackLoop);
2209
+ (_a3 = this.log) == null ? void 0 : _a3.info({
2210
+ msg: "WebSocket not open, stopping ack loop"
2211
+ });
2212
+ }
2213
+ }, ackInterval);
2214
+ this.#ackInterval = ackLoop;
2215
+ });
2216
+ ws.addEventListener("message", async (ev) => {
2217
+ var _a2, _b, _c, _d, _e, _f;
2218
+ let buf;
2219
+ if (ev.data instanceof Blob) {
2220
+ buf = new Uint8Array(await ev.data.arrayBuffer());
2221
+ } else if (Buffer.isBuffer(ev.data)) {
2222
+ buf = new Uint8Array(ev.data);
2223
+ } else {
2224
+ throw new Error(`expected binary data, got ${typeof ev.data}`);
2225
+ }
2226
+ const message = protocol.decodeToClient(buf);
2227
+ (_a2 = this.log) == null ? void 0 : _a2.debug({
2228
+ msg: "received runner message",
2229
+ data: stringifyToClient(message)
2230
+ });
2231
+ if (message.tag === "ToClientInit") {
2232
+ const init = message.val;
2233
+ if (this.runnerId !== init.runnerId) {
2234
+ this.runnerId = init.runnerId;
2235
+ this.#eventHistory.length = 0;
2236
+ }
2237
+ this.#runnerLostThreshold = ((_b = init.metadata) == null ? void 0 : _b.runnerLostThreshold) ? Number(init.metadata.runnerLostThreshold) : void 0;
2238
+ (_c = this.log) == null ? void 0 : _c.info({
2239
+ msg: "received init",
2240
+ lastEventIdx: init.lastEventIdx,
2241
+ runnerLostThreshold: this.#runnerLostThreshold
2242
+ });
2243
+ this.#processUnsentKvRequests();
2244
+ this.#resendUnacknowledgedEvents(init.lastEventIdx);
2245
+ (_d = this.#tunnel) == null ? void 0 : _d.resendBufferedEvents();
2246
+ this.#config.onConnected();
2247
+ } else if (message.tag === "ToClientCommands") {
2248
+ const commands = message.val;
2249
+ this.#handleCommands(commands);
2250
+ } else if (message.tag === "ToClientAckEvents") {
2251
+ this.#handleAckEvents(message.val);
2252
+ } else if (message.tag === "ToClientKvResponse") {
2253
+ const kvResponse = message.val;
2254
+ this.#handleKvResponse(kvResponse);
2255
+ } else if (message.tag === "ToClientTunnelMessage") {
2256
+ (_e = this.#tunnel) == null ? void 0 : _e.handleTunnelMessage(message.val);
2257
+ } else if (message.tag === "ToClientClose") {
2258
+ (_f = this.#tunnel) == null ? void 0 : _f.shutdown();
2259
+ ws.close(1e3, "manual closure");
2260
+ } else {
2261
+ unreachable(message);
2262
+ }
2263
+ });
2264
+ ws.addEventListener("error", (ev) => {
2265
+ var _a2, _b;
2266
+ (_a2 = this.log) == null ? void 0 : _a2.error({
2267
+ msg: `WebSocket error: ${ev.error}`
2268
+ });
2269
+ if (!this.#shutdown) {
2270
+ if (!this.#runnerLostTimeout && this.#runnerLostThreshold && this.#runnerLostThreshold > 0) {
2271
+ (_b = this.log) == null ? void 0 : _b.info({
2272
+ msg: "starting runner lost timeout",
2273
+ seconds: this.#runnerLostThreshold / 1e3
2274
+ });
2275
+ this.#runnerLostTimeout = setTimeout(() => {
2276
+ this.#stopAllActors();
2277
+ }, this.#runnerLostThreshold);
2278
+ }
2279
+ this.#scheduleReconnect();
2280
+ }
2281
+ });
2282
+ ws.addEventListener("close", async (ev) => {
2283
+ var _a2, _b, _c, _d;
2284
+ const closeError = parseWebSocketCloseReason(ev.reason);
2285
+ if ((closeError == null ? void 0 : closeError.group) === "ws" && (closeError == null ? void 0 : closeError.error) === "eviction") {
2286
+ (_a2 = this.log) == null ? void 0 : _a2.info("runner websocket evicted");
2287
+ this.#config.onDisconnected(ev.code, ev.reason);
2288
+ await this.shutdown(true);
2289
+ } else {
2290
+ if ((closeError == null ? void 0 : closeError.group) === "pegboard" && (closeError == null ? void 0 : closeError.error) === "runner_shutdown") {
2291
+ (_b = this.log) == null ? void 0 : _b.info("runner shutdown");
2292
+ } else {
2293
+ (_c = this.log) == null ? void 0 : _c.warn({
2294
+ msg: "runner disconnected",
2295
+ code: ev.code,
2296
+ reason: ev.reason.toString(),
2297
+ closeError
2298
+ });
2299
+ }
2300
+ this.#config.onDisconnected(ev.code, ev.reason);
2301
+ }
2302
+ if (this.#pingLoop) {
2303
+ clearInterval(this.#pingLoop);
2304
+ this.#pingLoop = void 0;
2305
+ }
2306
+ if (this.#ackInterval) {
2307
+ clearInterval(this.#ackInterval);
2308
+ this.#ackInterval = void 0;
2309
+ }
2310
+ if (!this.#shutdown) {
2311
+ if (!this.#runnerLostTimeout && this.#runnerLostThreshold && this.#runnerLostThreshold > 0) {
2312
+ (_d = this.log) == null ? void 0 : _d.info({
2313
+ msg: "starting runner lost timeout",
2314
+ seconds: this.#runnerLostThreshold / 1e3
2315
+ });
2316
+ this.#runnerLostTimeout = setTimeout(() => {
2317
+ this.#stopAllActors();
2318
+ }, this.#runnerLostThreshold);
2319
+ }
2320
+ this.#scheduleReconnect();
2321
+ }
2322
+ });
2323
+ }
2324
+ #handleCommands(commands) {
2325
+ var _a;
2326
+ (_a = this.log) == null ? void 0 : _a.info({
2327
+ msg: "received commands",
2328
+ commandCount: commands.length
2329
+ });
2330
+ for (const commandWrapper of commands) {
2331
+ if (commandWrapper.inner.tag === "CommandStartActor") {
2332
+ this.#handleCommandStartActor(commandWrapper);
2333
+ } else if (commandWrapper.inner.tag === "CommandStopActor") {
2334
+ this.#handleCommandStopActor(commandWrapper);
2335
+ } else {
2336
+ unreachable(commandWrapper.inner);
2337
+ }
2338
+ this.#lastCommandIdx = Number(commandWrapper.index);
2339
+ }
2340
+ }
2341
+ #handleAckEvents(ack) {
2342
+ var _a;
2343
+ const lastAckedIdx = ack.lastEventIdx;
2344
+ const originalLength = this.#eventHistory.length;
2345
+ this.#eventHistory = this.#eventHistory.filter(
2346
+ (event) => event.index > lastAckedIdx
2347
+ );
2348
+ const prunedCount = originalLength - this.#eventHistory.length;
2349
+ if (prunedCount > 0) {
2350
+ (_a = this.log) == null ? void 0 : _a.info({
2351
+ msg: "pruned acknowledged events",
2352
+ lastAckedIdx: lastAckedIdx.toString(),
2353
+ prunedCount
2354
+ });
2355
+ }
2356
+ if (this.#eventHistory.length <= EVENT_BACKLOG_WARN_THRESHOLD) {
2357
+ this.#eventBacklogWarned = false;
2358
+ }
2359
+ }
2360
+ /** Track events to send to the server in case we need to resend it on disconnect. */
2361
+ #recordEvent(eventWrapper) {
2362
+ var _a;
2363
+ this.#eventHistory.push(eventWrapper);
2364
+ if (this.#eventHistory.length > EVENT_BACKLOG_WARN_THRESHOLD && !this.#eventBacklogWarned) {
2365
+ this.#eventBacklogWarned = true;
2366
+ (_a = this.log) == null ? void 0 : _a.warn({
2367
+ msg: "unacknowledged event backlog exceeds threshold",
2368
+ backlogSize: this.#eventHistory.length,
2369
+ threshold: EVENT_BACKLOG_WARN_THRESHOLD
2370
+ });
2371
+ }
2372
+ }
2373
+ async #handleCommandStartActor(commandWrapper) {
2374
+ var _a, _b, _c, _d;
2375
+ if (!this.#tunnel) throw new Error("missing tunnel on actor start");
2376
+ const startCommand = commandWrapper.inner.val;
2377
+ const actorId = startCommand.actorId;
2378
+ const generation = startCommand.generation;
2379
+ const config = startCommand.config;
2380
+ const actorConfig = {
2381
+ name: config.name,
2382
+ key: config.key,
2383
+ createTs: config.createTs,
2384
+ input: config.input ? new Uint8Array(config.input) : null
2385
+ };
2386
+ const instance = new RunnerActor(
2387
+ actorId,
2388
+ generation,
2389
+ actorConfig,
2390
+ startCommand.hibernatingRequests
2391
+ );
2392
+ const existingActor = this.#actors.get(actorId);
2393
+ if (existingActor) {
2394
+ (_a = this.log) == null ? void 0 : _a.warn({
2395
+ msg: "replacing existing actor in actors map",
2396
+ actorId,
2397
+ existingGeneration: existingActor.generation,
2398
+ newGeneration: generation,
2399
+ existingPendingRequests: existingActor.pendingRequests.length
2400
+ });
2401
+ }
2402
+ this.#actors.set(actorId, instance);
2403
+ for (const hr of startCommand.hibernatingRequests) {
2404
+ this.#tunnel.addRequestToActor(hr.gatewayId, hr.requestId, actorId);
2405
+ }
2406
+ (_b = this.log) == null ? void 0 : _b.info({
2407
+ msg: "created actor",
2408
+ actors: this.#actors.size,
2409
+ actorId,
2410
+ name: config.name,
2411
+ key: config.key,
2412
+ generation,
2413
+ hibernatingRequests: startCommand.hibernatingRequests.length
2414
+ });
2415
+ this.#sendActorStateUpdate(actorId, generation, "running");
2416
+ try {
2417
+ (_c = this.log) == null ? void 0 : _c.debug({
2418
+ msg: "calling onActorStart",
2419
+ actorId,
2420
+ generation
2421
+ });
2422
+ await this.#config.onActorStart(actorId, generation, actorConfig);
2423
+ instance.actorStartPromise.resolve();
2424
+ } catch (err) {
2425
+ (_d = this.log) == null ? void 0 : _d.error({
2426
+ msg: "error starting runner actor",
2427
+ actorId,
2428
+ err
2429
+ });
2430
+ instance.actorStartPromise.reject(err);
2431
+ await this.forceStopActor(actorId, generation);
2432
+ }
2433
+ }
2434
+ async #handleCommandStopActor(commandWrapper) {
2435
+ const stopCommand = commandWrapper.inner.val;
2436
+ const actorId = stopCommand.actorId;
2437
+ const generation = stopCommand.generation;
2438
+ await this.forceStopActor(actorId, generation);
2439
+ }
2440
+ #sendActorIntent(actorId, generation, intentType) {
2441
+ let actorIntent;
2442
+ if (intentType === "sleep") {
2443
+ actorIntent = { tag: "ActorIntentSleep", val: null };
2444
+ } else if (intentType === "stop") {
2445
+ actorIntent = {
2446
+ tag: "ActorIntentStop",
2447
+ val: null
2448
+ };
2449
+ } else {
2450
+ unreachable(intentType);
2451
+ }
2452
+ const intentEvent = {
2453
+ actorId,
2454
+ generation,
2455
+ intent: actorIntent
2456
+ };
2457
+ const eventIndex = this.#nextEventIdx++;
2458
+ const eventWrapper = {
2459
+ index: eventIndex,
2460
+ inner: {
2461
+ tag: "EventActorIntent",
2462
+ val: intentEvent
2463
+ }
2464
+ };
2465
+ this.#recordEvent(eventWrapper);
2466
+ this.__sendToServer({
2467
+ tag: "ToServerEvents",
2468
+ val: [eventWrapper]
2469
+ });
2470
+ }
2471
+ #sendActorStateUpdate(actorId, generation, stateType) {
2472
+ let actorState;
2473
+ if (stateType === "running") {
2474
+ actorState = { tag: "ActorStateRunning", val: null };
2475
+ } else if (stateType === "stopped") {
2476
+ actorState = {
2477
+ tag: "ActorStateStopped",
2478
+ val: {
2479
+ code: protocol.StopCode.Ok,
2480
+ message: null
2481
+ }
2482
+ };
2483
+ } else {
2484
+ unreachable(stateType);
2485
+ }
2486
+ const stateUpdateEvent = {
2487
+ actorId,
2488
+ generation,
2489
+ state: actorState
2490
+ };
2491
+ const eventIndex = this.#nextEventIdx++;
2492
+ const eventWrapper = {
2493
+ index: eventIndex,
2494
+ inner: {
2495
+ tag: "EventActorStateUpdate",
2496
+ val: stateUpdateEvent
2497
+ }
2498
+ };
2499
+ this.#recordEvent(eventWrapper);
2500
+ this.__sendToServer({
2501
+ tag: "ToServerEvents",
2502
+ val: [eventWrapper]
2503
+ });
2504
+ }
2505
+ #sendCommandAcknowledgment() {
2506
+ if (this.#lastCommandIdx < 0) {
2507
+ return;
2508
+ }
2509
+ this.__sendToServer({
2510
+ tag: "ToServerAckCommands",
2511
+ val: {
2512
+ lastCommandIdx: BigInt(this.#lastCommandIdx)
2513
+ }
2514
+ });
2515
+ }
2516
+ #handleKvResponse(response) {
2517
+ var _a;
2518
+ const requestId = response.requestId;
2519
+ const request = this.#kvRequests.get(requestId);
2520
+ if (!request) {
2521
+ (_a = this.log) == null ? void 0 : _a.error({
2522
+ msg: "received kv response for unknown request id",
2523
+ requestId
2524
+ });
2525
+ return;
2526
+ }
2527
+ this.#kvRequests.delete(requestId);
2528
+ if (response.data.tag === "KvErrorResponse") {
2529
+ request.reject(
2530
+ new Error(response.data.val.message || "Unknown KV error")
2531
+ );
2532
+ } else {
2533
+ request.resolve(response.data.val);
2534
+ }
2535
+ }
2536
+ #parseGetResponseSimple(response, requestedKeys) {
2537
+ const responseKeys = [];
2538
+ const responseValues = [];
2539
+ for (const key of response.keys) {
2540
+ responseKeys.push(new Uint8Array(key));
2541
+ }
2542
+ for (const value of response.values) {
2543
+ responseValues.push(new Uint8Array(value));
2544
+ }
2545
+ const result = [];
2546
+ for (const requestedKey of requestedKeys) {
2547
+ let found = false;
2548
+ for (let i = 0; i < responseKeys.length; i++) {
2549
+ if (this.#keysEqual(requestedKey, responseKeys[i])) {
2550
+ result.push(responseValues[i]);
2551
+ found = true;
2552
+ break;
2553
+ }
2554
+ }
2555
+ if (!found) {
2556
+ result.push(null);
2557
+ }
2558
+ }
2559
+ return result;
2560
+ }
2561
+ #keysEqual(key1, key2) {
2562
+ if (key1.length !== key2.length) return false;
2563
+ for (let i = 0; i < key1.length; i++) {
2564
+ if (key1[i] !== key2[i]) return false;
2565
+ }
2566
+ return true;
2567
+ }
2568
+ //#parseGetResponse(response: protocol.KvGetResponse) {
2569
+ // const keys: string[] = [];
2570
+ // const values: Uint8Array[] = [];
2571
+ // const metadata: { version: Uint8Array; createTs: bigint }[] = [];
2572
+ //
2573
+ // for (const key of response.keys) {
2574
+ // keys.push(new TextDecoder().decode(key));
2575
+ // }
2576
+ //
2577
+ // for (const value of response.values) {
2578
+ // values.push(new Uint8Array(value));
2579
+ // }
2580
+ //
2581
+ // for (const meta of response.metadata) {
2582
+ // metadata.push({
2583
+ // version: new Uint8Array(meta.version),
2584
+ // createTs: meta.createTs,
2585
+ // });
2586
+ // }
2587
+ //
2588
+ // return { keys, values, metadata };
2589
+ //}
2590
+ #parseListResponseSimple(response) {
2591
+ const result = [];
2592
+ for (let i = 0; i < response.keys.length; i++) {
2593
+ const key = response.keys[i];
2594
+ const value = response.values[i];
2595
+ if (key && value) {
2596
+ const keyBytes = new Uint8Array(key);
2597
+ const valueBytes = new Uint8Array(value);
2598
+ result.push([keyBytes, valueBytes]);
2599
+ }
2600
+ }
2601
+ return result;
2602
+ }
2603
+ //#parseListResponse(response: protocol.KvListResponse) {
2604
+ // const keys: string[] = [];
2605
+ // const values: Uint8Array[] = [];
2606
+ // const metadata: { version: Uint8Array; createTs: bigint }[] = [];
2607
+ //
2608
+ // for (const key of response.keys) {
2609
+ // keys.push(new TextDecoder().decode(key));
2610
+ // }
2611
+ //
2612
+ // for (const value of response.values) {
2613
+ // values.push(new Uint8Array(value));
2614
+ // }
2615
+ //
2616
+ // for (const meta of response.metadata) {
2617
+ // metadata.push({
2618
+ // version: new Uint8Array(meta.version),
2619
+ // createTs: meta.createTs,
2620
+ // });
2621
+ // }
2622
+ //
2623
+ // return { keys, values, metadata };
2624
+ //}
2625
+ // MARK: KV Operations
2626
+ async kvGet(actorId, keys) {
2627
+ const kvKeys = keys.map(
2628
+ (key) => key.buffer.slice(
2629
+ key.byteOffset,
2630
+ key.byteOffset + key.byteLength
2631
+ )
2632
+ );
2633
+ const requestData = {
2634
+ tag: "KvGetRequest",
2635
+ val: { keys: kvKeys }
2636
+ };
2637
+ const response = await this.#sendKvRequest(actorId, requestData);
2638
+ return this.#parseGetResponseSimple(response, keys);
2639
+ }
2640
+ async kvListAll(actorId, options) {
2641
+ const requestData = {
2642
+ tag: "KvListRequest",
2643
+ val: {
2644
+ query: { tag: "KvListAllQuery", val: null },
2645
+ reverse: (options == null ? void 0 : options.reverse) || null,
2646
+ limit: (options == null ? void 0 : options.limit) !== void 0 ? BigInt(options.limit) : null
2647
+ }
2648
+ };
2649
+ const response = await this.#sendKvRequest(actorId, requestData);
2650
+ return this.#parseListResponseSimple(response);
2651
+ }
2652
+ async kvListRange(actorId, start, end, exclusive, options) {
2653
+ const startKey = start.buffer.slice(
2654
+ start.byteOffset,
2655
+ start.byteOffset + start.byteLength
2656
+ );
2657
+ const endKey = end.buffer.slice(
2658
+ end.byteOffset,
2659
+ end.byteOffset + end.byteLength
2660
+ );
2661
+ const requestData = {
2662
+ tag: "KvListRequest",
2663
+ val: {
2664
+ query: {
2665
+ tag: "KvListRangeQuery",
2666
+ val: {
2667
+ start: startKey,
2668
+ end: endKey,
2669
+ exclusive: exclusive || false
2670
+ }
2671
+ },
2672
+ reverse: (options == null ? void 0 : options.reverse) || null,
2673
+ limit: (options == null ? void 0 : options.limit) !== void 0 ? BigInt(options.limit) : null
2674
+ }
2675
+ };
2676
+ const response = await this.#sendKvRequest(actorId, requestData);
2677
+ return this.#parseListResponseSimple(response);
2678
+ }
2679
+ async kvListPrefix(actorId, prefix, options) {
2680
+ const prefixKey = prefix.buffer.slice(
2681
+ prefix.byteOffset,
2682
+ prefix.byteOffset + prefix.byteLength
2683
+ );
2684
+ const requestData = {
2685
+ tag: "KvListRequest",
2686
+ val: {
2687
+ query: {
2688
+ tag: "KvListPrefixQuery",
2689
+ val: { key: prefixKey }
2690
+ },
2691
+ reverse: (options == null ? void 0 : options.reverse) || null,
2692
+ limit: (options == null ? void 0 : options.limit) !== void 0 ? BigInt(options.limit) : null
2693
+ }
2694
+ };
2695
+ const response = await this.#sendKvRequest(actorId, requestData);
2696
+ return this.#parseListResponseSimple(response);
2697
+ }
2698
+ async kvPut(actorId, entries) {
2699
+ const keys = entries.map(
2700
+ ([key, _value]) => key.buffer.slice(
2701
+ key.byteOffset,
2702
+ key.byteOffset + key.byteLength
2703
+ )
2704
+ );
2705
+ const values = entries.map(
2706
+ ([_key, value]) => value.buffer.slice(
2707
+ value.byteOffset,
2708
+ value.byteOffset + value.byteLength
2709
+ )
2710
+ );
2711
+ const requestData = {
2712
+ tag: "KvPutRequest",
2713
+ val: { keys, values }
2714
+ };
2715
+ await this.#sendKvRequest(actorId, requestData);
2716
+ }
2717
+ async kvDelete(actorId, keys) {
2718
+ const kvKeys = keys.map(
2719
+ (key) => key.buffer.slice(
2720
+ key.byteOffset,
2721
+ key.byteOffset + key.byteLength
2722
+ )
2723
+ );
2724
+ const requestData = {
2725
+ tag: "KvDeleteRequest",
2726
+ val: { keys: kvKeys }
2727
+ };
2728
+ await this.#sendKvRequest(actorId, requestData);
2729
+ }
2730
+ async kvDrop(actorId) {
2731
+ const requestData = {
2732
+ tag: "KvDropRequest",
2733
+ val: null
2734
+ };
2735
+ await this.#sendKvRequest(actorId, requestData);
2736
+ }
2737
+ // MARK: Alarm Operations
2738
+ setAlarm(actorId, alarmTs, generation) {
2739
+ const actor = this.getActor(actorId, generation);
2740
+ if (!actor) return;
2741
+ const alarmEvent = {
2742
+ actorId,
2743
+ generation: actor.generation,
2744
+ alarmTs: alarmTs !== null ? BigInt(alarmTs) : null
2745
+ };
2746
+ const eventIndex = this.#nextEventIdx++;
2747
+ const eventWrapper = {
2748
+ index: eventIndex,
2749
+ inner: {
2750
+ tag: "EventActorSetAlarm",
2751
+ val: alarmEvent
2752
+ }
2753
+ };
2754
+ this.#recordEvent(eventWrapper);
2755
+ this.__sendToServer({
2756
+ tag: "ToServerEvents",
2757
+ val: [eventWrapper]
2758
+ });
2759
+ }
2760
+ clearAlarm(actorId, generation) {
2761
+ this.setAlarm(actorId, null, generation);
2762
+ }
2763
+ #sendKvRequest(actorId, requestData) {
2764
+ return new Promise((resolve, reject) => {
2765
+ const requestId = this.#nextKvRequestId++;
2766
+ const requestEntry = {
2767
+ actorId,
2768
+ data: requestData,
2769
+ resolve,
2770
+ reject,
2771
+ sent: false,
2772
+ timestamp: Date.now()
2773
+ };
2774
+ this.#kvRequests.set(requestId, requestEntry);
2775
+ if (this.__webSocketReady()) {
2776
+ this.#sendSingleKvRequest(requestId);
2777
+ }
2778
+ });
2779
+ }
2780
+ #sendSingleKvRequest(requestId) {
2781
+ const request = this.#kvRequests.get(requestId);
2782
+ if (!request || request.sent) return;
2783
+ try {
2784
+ const kvRequest = {
2785
+ actorId: request.actorId,
2786
+ requestId,
2787
+ data: request.data
2788
+ };
2789
+ this.__sendToServer({
2790
+ tag: "ToServerKvRequest",
2791
+ val: kvRequest
2792
+ });
2793
+ request.sent = true;
2794
+ request.timestamp = Date.now();
2795
+ } catch (error) {
2796
+ this.#kvRequests.delete(requestId);
2797
+ request.reject(error);
2798
+ }
2799
+ }
2800
+ #processUnsentKvRequests() {
2801
+ if (!this.__webSocketReady()) {
2802
+ return;
2803
+ }
2804
+ let processedCount = 0;
2805
+ for (const [requestId, request] of this.#kvRequests.entries()) {
2806
+ if (!request.sent) {
2807
+ this.#sendSingleKvRequest(requestId);
2808
+ processedCount++;
2809
+ }
2810
+ }
2811
+ if (processedCount > 0) {
2812
+ }
2813
+ }
2814
+ /** Asserts WebSocket exists and is ready. */
2815
+ __webSocketReady() {
2816
+ return !!this.__pegboardWebSocket && this.__pegboardWebSocket.readyState === 1;
2817
+ }
2818
+ __sendToServer(message) {
2819
+ var _a, _b;
2820
+ (_a = this.log) == null ? void 0 : _a.debug({
2821
+ msg: "sending runner message",
2822
+ data: stringifyToServer(message)
2823
+ });
2824
+ const encoded = protocol.encodeToServer(message);
2825
+ if (this.__webSocketReady()) {
2826
+ this.__pegboardWebSocket.send(encoded);
2827
+ } else {
2828
+ (_b = this.log) == null ? void 0 : _b.error({
2829
+ msg: "WebSocket not available or not open for sending data"
2830
+ });
2831
+ }
2832
+ }
2833
+ sendHibernatableWebSocketMessageAck(gatewayId, requestId, index) {
2834
+ if (!this.#tunnel)
2835
+ throw new Error("missing tunnel to send message ack");
2836
+ this.#tunnel.sendHibernatableWebSocketMessageAck(
2837
+ gatewayId,
2838
+ requestId,
2839
+ index
2840
+ );
2841
+ }
2842
+ /**
2843
+ * Restores hibernatable WebSocket connections for an actor.
2844
+ *
2845
+ * This method should be called at the end of `onActorStart` after the
2846
+ * actor instance is fully initialized.
2847
+ *
2848
+ * This method will:
2849
+ * - Restore all provided hibernatable WebSocket connections
2850
+ * - Attach event listeners to the restored WebSockets
2851
+ * - Close any WebSocket connections that failed to restore
2852
+ *
2853
+ * The provided metadata list should include all hibernatable WebSockets
2854
+ * that were persisted for this actor. The gateway will automatically
2855
+ * close any connections that are not restored (i.e., not included in
2856
+ * this list).
2857
+ *
2858
+ * **Important:** This method must be called after `onActorStart` completes
2859
+ * and before marking the actor as "ready" to ensure all hibernatable
2860
+ * connections are fully restored.
2861
+ *
2862
+ * @param actorId - The ID of the actor to restore connections for
2863
+ * @param metaEntries - Array of hibernatable WebSocket metadata to restore
2864
+ */
2865
+ async restoreHibernatingRequests(actorId, metaEntries) {
2866
+ if (!this.#tunnel)
2867
+ throw new Error("missing tunnel to restore hibernating requests");
2868
+ await this.#tunnel.restoreHibernatingRequests(actorId, metaEntries);
2869
+ }
2870
+ getServerlessInitPacket() {
2871
+ if (!this.runnerId) return void 0;
2872
+ const data = protocol.encodeToServerlessServer({
2873
+ tag: "ToServerlessServerInit",
2874
+ val: {
2875
+ runnerId: this.runnerId
2876
+ }
2877
+ });
2878
+ const buffer = Buffer.alloc(data.length + 2);
2879
+ buffer.writeUInt16LE(PROTOCOL_VERSION, 0);
2880
+ Buffer.from(data).copy(buffer, 2);
2881
+ return buffer.toString("base64");
2882
+ }
2883
+ #scheduleReconnect() {
2884
+ var _a, _b;
2885
+ if (this.#shutdown) {
2886
+ (_a = this.log) == null ? void 0 : _a.debug({
2887
+ msg: "Runner is shut down, not attempting reconnect"
2888
+ });
2889
+ return;
2890
+ }
2891
+ const delay = calculateBackoff(this.#reconnectAttempt, {
2892
+ initialDelay: 1e3,
2893
+ maxDelay: 3e4,
2894
+ multiplier: 2,
2895
+ jitter: true
2896
+ });
2897
+ (_b = this.log) == null ? void 0 : _b.debug({
2898
+ msg: `Scheduling reconnect attempt ${this.#reconnectAttempt + 1} in ${delay}ms`
2899
+ });
2900
+ this.#reconnectTimeout = setTimeout(async () => {
2901
+ var _a2;
2902
+ if (!this.#shutdown) {
2903
+ this.#reconnectAttempt++;
2904
+ (_a2 = this.log) == null ? void 0 : _a2.debug({
2905
+ msg: `Attempting to reconnect (attempt ${this.#reconnectAttempt})...`
2906
+ });
2907
+ await this.#openPegboardWebSocket();
2908
+ }
2909
+ }, delay);
2910
+ }
2911
+ #resendUnacknowledgedEvents(lastEventIdx) {
2912
+ var _a;
2913
+ const eventsToResend = this.#eventHistory.filter(
2914
+ (event) => event.index > lastEventIdx
2915
+ );
2916
+ if (eventsToResend.length === 0) return;
2917
+ (_a = this.log) == null ? void 0 : _a.info({
2918
+ msg: "resending unacknowledged events",
2919
+ fromIndex: lastEventIdx + 1n
2920
+ });
2921
+ this.__sendToServer({
2922
+ tag: "ToServerEvents",
2923
+ val: eventsToResend
2924
+ });
2925
+ }
2926
+ #cleanupOldKvRequests() {
2927
+ const thirtySecondsAgo = Date.now() - KV_EXPIRE;
2928
+ const toDelete = [];
2929
+ for (const [requestId, request] of this.#kvRequests.entries()) {
2930
+ if (request.timestamp < thirtySecondsAgo) {
2931
+ request.reject(
2932
+ new Error(
2933
+ "KV request timed out waiting for WebSocket connection"
2934
+ )
2935
+ );
2936
+ toDelete.push(requestId);
2937
+ }
2938
+ }
2939
+ for (const requestId of toDelete) {
2940
+ this.#kvRequests.delete(requestId);
2941
+ }
2942
+ if (toDelete.length > 0) {
2943
+ }
2944
+ }
2945
+ };
2946
+
2947
+
2948
+
2949
+
2950
+ exports.Runner = Runner; exports.RunnerActor = RunnerActor; exports.idToStr = idToStr;
2951
+ //# sourceMappingURL=mod.cjs.map