durable-actors 0.2.4

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 (377) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +206 -0
  3. package/dist/actor/actor.d.ts +66 -0
  4. package/dist/actor/actor.d.ts.map +1 -0
  5. package/dist/actor/actor.js +144 -0
  6. package/dist/actor/actor.js.map +1 -0
  7. package/dist/actor/decorators.d.ts +6 -0
  8. package/dist/actor/decorators.d.ts.map +1 -0
  9. package/dist/actor/decorators.js +24 -0
  10. package/dist/actor/decorators.js.map +1 -0
  11. package/dist/actor/identity.d.ts +16 -0
  12. package/dist/actor/identity.d.ts.map +1 -0
  13. package/dist/actor/identity.js +29 -0
  14. package/dist/actor/identity.js.map +1 -0
  15. package/dist/actor/invocationContext.d.ts +4 -0
  16. package/dist/actor/invocationContext.d.ts.map +1 -0
  17. package/dist/actor/invocationContext.js +10 -0
  18. package/dist/actor/invocationContext.js.map +1 -0
  19. package/dist/actor/schema.d.ts +22 -0
  20. package/dist/actor/schema.d.ts.map +1 -0
  21. package/dist/actor/schema.js +8 -0
  22. package/dist/actor/schema.js.map +1 -0
  23. package/dist/actor/socket.d.ts +88 -0
  24. package/dist/actor/socket.d.ts.map +1 -0
  25. package/dist/actor/socket.js +216 -0
  26. package/dist/actor/socket.js.map +1 -0
  27. package/dist/actor/socketProtocol.d.ts +85 -0
  28. package/dist/actor/socketProtocol.d.ts.map +1 -0
  29. package/dist/actor/socketProtocol.js +95 -0
  30. package/dist/actor/socketProtocol.js.map +1 -0
  31. package/dist/actor/socketValidation.d.ts +29 -0
  32. package/dist/actor/socketValidation.d.ts.map +1 -0
  33. package/dist/actor/socketValidation.js +73 -0
  34. package/dist/actor/socketValidation.js.map +1 -0
  35. package/dist/backend.d.ts +13 -0
  36. package/dist/backend.d.ts.map +1 -0
  37. package/dist/backend.js +45 -0
  38. package/dist/backend.js.map +1 -0
  39. package/dist/cli/actor-source-watcher.d.ts +11 -0
  40. package/dist/cli/actor-source-watcher.d.ts.map +1 -0
  41. package/dist/cli/actor-source-watcher.js +55 -0
  42. package/dist/cli/actor-source-watcher.js.map +1 -0
  43. package/dist/cli/connection.d.ts +14 -0
  44. package/dist/cli/connection.d.ts.map +1 -0
  45. package/dist/cli/connection.js +16 -0
  46. package/dist/cli/connection.js.map +1 -0
  47. package/dist/cli/control-plane.d.ts +34 -0
  48. package/dist/cli/control-plane.d.ts.map +1 -0
  49. package/dist/cli/control-plane.js +99 -0
  50. package/dist/cli/control-plane.js.map +1 -0
  51. package/dist/cli/deploy.d.ts +4 -0
  52. package/dist/cli/deploy.d.ts.map +1 -0
  53. package/dist/cli/deploy.js +39 -0
  54. package/dist/cli/deploy.js.map +1 -0
  55. package/dist/cli/dev.d.ts +4 -0
  56. package/dist/cli/dev.d.ts.map +1 -0
  57. package/dist/cli/dev.js +121 -0
  58. package/dist/cli/dev.js.map +1 -0
  59. package/dist/cli/generate.d.ts +4 -0
  60. package/dist/cli/generate.d.ts.map +1 -0
  61. package/dist/cli/generate.js +59 -0
  62. package/dist/cli/generate.js.map +1 -0
  63. package/dist/cli/objects.d.ts +4 -0
  64. package/dist/cli/objects.d.ts.map +1 -0
  65. package/dist/cli/objects.js +68 -0
  66. package/dist/cli/objects.js.map +1 -0
  67. package/dist/cli/observe.d.ts +23 -0
  68. package/dist/cli/observe.d.ts.map +1 -0
  69. package/dist/cli/observe.js +245 -0
  70. package/dist/cli/observe.js.map +1 -0
  71. package/dist/cli/rust-runtime.d.ts +10 -0
  72. package/dist/cli/rust-runtime.d.ts.map +1 -0
  73. package/dist/cli/rust-runtime.js +62 -0
  74. package/dist/cli/rust-runtime.js.map +1 -0
  75. package/dist/cli.d.ts +3 -0
  76. package/dist/cli.d.ts.map +1 -0
  77. package/dist/cli.js +131 -0
  78. package/dist/cli.js.map +1 -0
  79. package/dist/client/actorHostGrpc.d.ts +50 -0
  80. package/dist/client/actorHostGrpc.d.ts.map +1 -0
  81. package/dist/client/actorHostGrpc.js +111 -0
  82. package/dist/client/actorHostGrpc.js.map +1 -0
  83. package/dist/client/client.d.ts +12 -0
  84. package/dist/client/client.d.ts.map +1 -0
  85. package/dist/client/client.js +20 -0
  86. package/dist/client/client.js.map +1 -0
  87. package/dist/client/clientSettings.d.ts +8 -0
  88. package/dist/client/clientSettings.d.ts.map +1 -0
  89. package/dist/client/clientSettings.js +45 -0
  90. package/dist/client/clientSettings.js.map +1 -0
  91. package/dist/client/remoteClient.d.ts +49 -0
  92. package/dist/client/remoteClient.d.ts.map +1 -0
  93. package/dist/client/remoteClient.js +286 -0
  94. package/dist/client/remoteClient.js.map +1 -0
  95. package/dist/client/socketConnection.d.ts +18 -0
  96. package/dist/client/socketConnection.d.ts.map +1 -0
  97. package/dist/client/socketConnection.js +48 -0
  98. package/dist/client/socketConnection.js.map +1 -0
  99. package/dist/client/telemetry.d.ts +14 -0
  100. package/dist/client/telemetry.d.ts.map +1 -0
  101. package/dist/client/telemetry.js +23 -0
  102. package/dist/client/telemetry.js.map +1 -0
  103. package/dist/compiler/actor-build.d.ts +4 -0
  104. package/dist/compiler/actor-build.d.ts.map +1 -0
  105. package/dist/compiler/actor-build.js +36 -0
  106. package/dist/compiler/actor-build.js.map +1 -0
  107. package/dist/compiler/actor-compiler.d.ts +30 -0
  108. package/dist/compiler/actor-compiler.d.ts.map +1 -0
  109. package/dist/compiler/actor-compiler.js +300 -0
  110. package/dist/compiler/actor-compiler.js.map +1 -0
  111. package/dist/compiler/deployment-build.d.ts +2 -0
  112. package/dist/compiler/deployment-build.d.ts.map +1 -0
  113. package/dist/compiler/deployment-build.js +23 -0
  114. package/dist/compiler/deployment-build.js.map +1 -0
  115. package/dist/compiler/features/persistence.d.ts +11 -0
  116. package/dist/compiler/features/persistence.d.ts.map +1 -0
  117. package/dist/compiler/features/persistence.js +102 -0
  118. package/dist/compiler/features/persistence.js.map +1 -0
  119. package/dist/compiler/features/reentrancy.d.ts +9 -0
  120. package/dist/compiler/features/reentrancy.d.ts.map +1 -0
  121. package/dist/compiler/features/reentrancy.js +44 -0
  122. package/dist/compiler/features/reentrancy.js.map +1 -0
  123. package/dist/compiler/generators/backend-generator.d.ts +5 -0
  124. package/dist/compiler/generators/backend-generator.d.ts.map +1 -0
  125. package/dist/compiler/generators/backend-generator.js +181 -0
  126. package/dist/compiler/generators/backend-generator.js.map +1 -0
  127. package/dist/compiler/generators/client-generator.d.ts +5 -0
  128. package/dist/compiler/generators/client-generator.d.ts.map +1 -0
  129. package/dist/compiler/generators/client-generator.js +28 -0
  130. package/dist/compiler/generators/client-generator.js.map +1 -0
  131. package/dist/compiler/generators/typescript-generator.d.ts +8 -0
  132. package/dist/compiler/generators/typescript-generator.d.ts.map +1 -0
  133. package/dist/compiler/generators/typescript-generator.js +154 -0
  134. package/dist/compiler/generators/typescript-generator.js.map +1 -0
  135. package/dist/compiler/generators/usage-comment.d.ts +3 -0
  136. package/dist/compiler/generators/usage-comment.d.ts.map +1 -0
  137. package/dist/compiler/generators/usage-comment.js +6 -0
  138. package/dist/compiler/generators/usage-comment.js.map +1 -0
  139. package/dist/compiler/json-schema.d.ts +7 -0
  140. package/dist/compiler/json-schema.d.ts.map +1 -0
  141. package/dist/compiler/json-schema.js +122 -0
  142. package/dist/compiler/json-schema.js.map +1 -0
  143. package/dist/compiler/public-schema.d.ts +4 -0
  144. package/dist/compiler/public-schema.d.ts.map +1 -0
  145. package/dist/compiler/public-schema.js +46 -0
  146. package/dist/compiler/public-schema.js.map +1 -0
  147. package/dist/compiler/rpc-contract.d.ts +5 -0
  148. package/dist/compiler/rpc-contract.d.ts.map +1 -0
  149. package/dist/compiler/rpc-contract.js +95 -0
  150. package/dist/compiler/rpc-contract.js.map +1 -0
  151. package/dist/compiler/socket-contract.d.ts +6 -0
  152. package/dist/compiler/socket-contract.d.ts.map +1 -0
  153. package/dist/compiler/socket-contract.js +36 -0
  154. package/dist/compiler/socket-contract.js.map +1 -0
  155. package/dist/compiler/types.d.ts +51 -0
  156. package/dist/compiler/types.d.ts.map +1 -0
  157. package/dist/compiler/types.js +9 -0
  158. package/dist/compiler/types.js.map +1 -0
  159. package/dist/compiler/validate-public-contract.d.ts +4 -0
  160. package/dist/compiler/validate-public-contract.d.ts.map +1 -0
  161. package/dist/compiler/validate-public-contract.js +155 -0
  162. package/dist/compiler/validate-public-contract.js.map +1 -0
  163. package/dist/environment.d.ts +2 -0
  164. package/dist/environment.d.ts.map +1 -0
  165. package/dist/environment.js +18 -0
  166. package/dist/environment.js.map +1 -0
  167. package/dist/errors.d.ts +27 -0
  168. package/dist/errors.d.ts.map +1 -0
  169. package/dist/errors.js +52 -0
  170. package/dist/errors.js.map +1 -0
  171. package/dist/generated/durable_object/v1/ActivateActorReply.d.ts +8 -0
  172. package/dist/generated/durable_object/v1/ActivateActorReply.d.ts.map +1 -0
  173. package/dist/generated/durable_object/v1/ActivateActorReply.js +3 -0
  174. package/dist/generated/durable_object/v1/ActivateActorReply.js.map +1 -0
  175. package/dist/generated/durable_object/v1/ActivateActorRequest.d.ts +8 -0
  176. package/dist/generated/durable_object/v1/ActivateActorRequest.d.ts.map +1 -0
  177. package/dist/generated/durable_object/v1/ActivateActorRequest.js +3 -0
  178. package/dist/generated/durable_object/v1/ActivateActorRequest.js.map +1 -0
  179. package/dist/generated/durable_object/v1/ActorCompleted.d.ts +9 -0
  180. package/dist/generated/durable_object/v1/ActorCompleted.d.ts.map +1 -0
  181. package/dist/generated/durable_object/v1/ActorCompleted.js +3 -0
  182. package/dist/generated/durable_object/v1/ActorCompleted.js.map +1 -0
  183. package/dist/generated/durable_object/v1/ActorControlPlaneService.d.ts +21 -0
  184. package/dist/generated/durable_object/v1/ActorControlPlaneService.d.ts.map +1 -0
  185. package/dist/generated/durable_object/v1/ActorControlPlaneService.js +3 -0
  186. package/dist/generated/durable_object/v1/ActorControlPlaneService.js.map +1 -0
  187. package/dist/generated/durable_object/v1/ActorFailed.d.ts +9 -0
  188. package/dist/generated/durable_object/v1/ActorFailed.d.ts.map +1 -0
  189. package/dist/generated/durable_object/v1/ActorFailed.js +3 -0
  190. package/dist/generated/durable_object/v1/ActorFailed.js.map +1 -0
  191. package/dist/generated/durable_object/v1/ActorHostService.d.ts +56 -0
  192. package/dist/generated/durable_object/v1/ActorHostService.d.ts.map +1 -0
  193. package/dist/generated/durable_object/v1/ActorHostService.js +3 -0
  194. package/dist/generated/durable_object/v1/ActorHostService.js.map +1 -0
  195. package/dist/generated/durable_object/v1/ActorKey.d.ts +11 -0
  196. package/dist/generated/durable_object/v1/ActorKey.d.ts.map +1 -0
  197. package/dist/generated/durable_object/v1/ActorKey.js +3 -0
  198. package/dist/generated/durable_object/v1/ActorKey.js.map +1 -0
  199. package/dist/generated/durable_object/v1/ControlPlaneReply.d.ts +7 -0
  200. package/dist/generated/durable_object/v1/ControlPlaneReply.d.ts.map +1 -0
  201. package/dist/generated/durable_object/v1/ControlPlaneReply.js +3 -0
  202. package/dist/generated/durable_object/v1/ControlPlaneReply.js.map +1 -0
  203. package/dist/generated/durable_object/v1/ControlPlaneRequest.d.ts +7 -0
  204. package/dist/generated/durable_object/v1/ControlPlaneRequest.d.ts.map +1 -0
  205. package/dist/generated/durable_object/v1/ControlPlaneRequest.js +3 -0
  206. package/dist/generated/durable_object/v1/ControlPlaneRequest.js.map +1 -0
  207. package/dist/generated/durable_object/v1/Empty.d.ts +5 -0
  208. package/dist/generated/durable_object/v1/Empty.d.ts.map +1 -0
  209. package/dist/generated/durable_object/v1/Empty.js +3 -0
  210. package/dist/generated/durable_object/v1/Empty.js.map +1 -0
  211. package/dist/generated/durable_object/v1/HostInvokeActorRequest.d.ts +11 -0
  212. package/dist/generated/durable_object/v1/HostInvokeActorRequest.d.ts.map +1 -0
  213. package/dist/generated/durable_object/v1/HostInvokeActorRequest.js +3 -0
  214. package/dist/generated/durable_object/v1/HostInvokeActorRequest.js.map +1 -0
  215. package/dist/generated/durable_object/v1/HostSocketEventRequest.d.ts +17 -0
  216. package/dist/generated/durable_object/v1/HostSocketEventRequest.d.ts.map +1 -0
  217. package/dist/generated/durable_object/v1/HostSocketEventRequest.js +3 -0
  218. package/dist/generated/durable_object/v1/HostSocketEventRequest.js.map +1 -0
  219. package/dist/generated/durable_object/v1/InvokeActorReply.d.ts +16 -0
  220. package/dist/generated/durable_object/v1/InvokeActorReply.d.ts.map +1 -0
  221. package/dist/generated/durable_object/v1/InvokeActorReply.js +3 -0
  222. package/dist/generated/durable_object/v1/InvokeActorReply.js.map +1 -0
  223. package/dist/generated/durable_object/v1/InvokeActorRequest.d.ts +14 -0
  224. package/dist/generated/durable_object/v1/InvokeActorRequest.d.ts.map +1 -0
  225. package/dist/generated/durable_object/v1/InvokeActorRequest.js +3 -0
  226. package/dist/generated/durable_object/v1/InvokeActorRequest.js.map +1 -0
  227. package/dist/generated/durable_object/v1/PublishSocketEffectsRequest.d.ts +13 -0
  228. package/dist/generated/durable_object/v1/PublishSocketEffectsRequest.d.ts.map +1 -0
  229. package/dist/generated/durable_object/v1/PublishSocketEffectsRequest.js +3 -0
  230. package/dist/generated/durable_object/v1/PublishSocketEffectsRequest.js.map +1 -0
  231. package/dist/generated/durable_object/v1/ReplicaService.d.ts +42 -0
  232. package/dist/generated/durable_object/v1/ReplicaService.d.ts.map +1 -0
  233. package/dist/generated/durable_object/v1/ReplicaService.js +3 -0
  234. package/dist/generated/durable_object/v1/ReplicaService.js.map +1 -0
  235. package/dist/generated/durable_object/v1/ReplicaSessionHead.d.ts +14 -0
  236. package/dist/generated/durable_object/v1/ReplicaSessionHead.d.ts.map +1 -0
  237. package/dist/generated/durable_object/v1/ReplicaSessionHead.js +3 -0
  238. package/dist/generated/durable_object/v1/ReplicaSessionHead.js.map +1 -0
  239. package/dist/generated/durable_object/v1/ReplicaSnapshotRef.d.ts +14 -0
  240. package/dist/generated/durable_object/v1/ReplicaSnapshotRef.d.ts.map +1 -0
  241. package/dist/generated/durable_object/v1/ReplicaSnapshotRef.js +3 -0
  242. package/dist/generated/durable_object/v1/ReplicaSnapshotRef.js.map +1 -0
  243. package/dist/generated/durable_object/v1/ReplicaStreamHead.d.ts +11 -0
  244. package/dist/generated/durable_object/v1/ReplicaStreamHead.d.ts.map +1 -0
  245. package/dist/generated/durable_object/v1/ReplicaStreamHead.js +3 -0
  246. package/dist/generated/durable_object/v1/ReplicaStreamHead.js.map +1 -0
  247. package/dist/generated/durable_object/v1/ReplicaStreamIdentity.d.ts +14 -0
  248. package/dist/generated/durable_object/v1/ReplicaStreamIdentity.d.ts.map +1 -0
  249. package/dist/generated/durable_object/v1/ReplicaStreamIdentity.js +3 -0
  250. package/dist/generated/durable_object/v1/ReplicaStreamIdentity.js.map +1 -0
  251. package/dist/generated/durable_object/v1/Reroute.d.ts +5 -0
  252. package/dist/generated/durable_object/v1/Reroute.d.ts.map +1 -0
  253. package/dist/generated/durable_object/v1/Reroute.js +3 -0
  254. package/dist/generated/durable_object/v1/Reroute.js.map +1 -0
  255. package/dist/generated/durable_object/v1/SnapshotData.d.ts +7 -0
  256. package/dist/generated/durable_object/v1/SnapshotData.d.ts.map +1 -0
  257. package/dist/generated/durable_object/v1/SnapshotData.js +3 -0
  258. package/dist/generated/durable_object/v1/SnapshotData.js.map +1 -0
  259. package/dist/generated/durable_object/v1/SnapshotService.d.ts +32 -0
  260. package/dist/generated/durable_object/v1/SnapshotService.d.ts.map +1 -0
  261. package/dist/generated/durable_object/v1/SnapshotService.js +3 -0
  262. package/dist/generated/durable_object/v1/SnapshotService.js.map +1 -0
  263. package/dist/generated/durable_object/v1/SnapshotWriteReply.d.ts +7 -0
  264. package/dist/generated/durable_object/v1/SnapshotWriteReply.d.ts.map +1 -0
  265. package/dist/generated/durable_object/v1/SnapshotWriteReply.js +3 -0
  266. package/dist/generated/durable_object/v1/SnapshotWriteReply.js.map +1 -0
  267. package/dist/generated/durable_object.d.ts +69 -0
  268. package/dist/generated/durable_object.d.ts.map +1 -0
  269. package/dist/generated/durable_object.js +2 -0
  270. package/dist/generated/durable_object.js.map +1 -0
  271. package/dist/generated/durable_object.proto +117 -0
  272. package/dist/generated.browser.d.ts +6 -0
  273. package/dist/generated.browser.d.ts.map +1 -0
  274. package/dist/generated.browser.js +10 -0
  275. package/dist/generated.browser.js.map +1 -0
  276. package/dist/generated.d.ts +3 -0
  277. package/dist/generated.d.ts.map +1 -0
  278. package/dist/generated.js +3 -0
  279. package/dist/generated.js.map +1 -0
  280. package/dist/host/actor-host.d.ts +22 -0
  281. package/dist/host/actor-host.d.ts.map +1 -0
  282. package/dist/host/actor-host.js +392 -0
  283. package/dist/host/actor-host.js.map +1 -0
  284. package/dist/host/actor-runtime.d.ts +34 -0
  285. package/dist/host/actor-runtime.d.ts.map +1 -0
  286. package/dist/host/actor-runtime.js +279 -0
  287. package/dist/host/actor-runtime.js.map +1 -0
  288. package/dist/host/actor-worker.d.ts +2 -0
  289. package/dist/host/actor-worker.d.ts.map +1 -0
  290. package/dist/host/actor-worker.js +154 -0
  291. package/dist/host/actor-worker.js.map +1 -0
  292. package/dist/host/generic-host.d.ts +3 -0
  293. package/dist/host/generic-host.d.ts.map +1 -0
  294. package/dist/host/generic-host.js +87 -0
  295. package/dist/host/generic-host.js.map +1 -0
  296. package/dist/host/protocol.d.ts +347 -0
  297. package/dist/host/protocol.d.ts.map +1 -0
  298. package/dist/host/protocol.js +76 -0
  299. package/dist/host/protocol.js.map +1 -0
  300. package/dist/host/types.d.ts +42 -0
  301. package/dist/host/types.d.ts.map +1 -0
  302. package/dist/host/types.js +2 -0
  303. package/dist/host/types.js.map +1 -0
  304. package/dist/host/worker-supervisor.d.ts +85 -0
  305. package/dist/host/worker-supervisor.d.ts.map +1 -0
  306. package/dist/host/worker-supervisor.js +423 -0
  307. package/dist/host/worker-supervisor.js.map +1 -0
  308. package/dist/host.d.ts +3 -0
  309. package/dist/host.d.ts.map +1 -0
  310. package/dist/host.js +3 -0
  311. package/dist/host.js.map +1 -0
  312. package/dist/index.d.ts +7 -0
  313. package/dist/index.d.ts.map +1 -0
  314. package/dist/index.js +4 -0
  315. package/dist/index.js.map +1 -0
  316. package/dist/json.d.ts +13 -0
  317. package/dist/json.d.ts.map +1 -0
  318. package/dist/json.js +34 -0
  319. package/dist/json.js.map +1 -0
  320. package/dist/localRuntime.d.ts +27 -0
  321. package/dist/localRuntime.d.ts.map +1 -0
  322. package/dist/localRuntime.js +112 -0
  323. package/dist/localRuntime.js.map +1 -0
  324. package/dist/proxy.d.ts +43 -0
  325. package/dist/proxy.d.ts.map +1 -0
  326. package/dist/proxy.js +76 -0
  327. package/dist/proxy.js.map +1 -0
  328. package/dist/runtimeInstaller.d.ts +16 -0
  329. package/dist/runtimeInstaller.d.ts.map +1 -0
  330. package/dist/runtimeInstaller.js +95 -0
  331. package/dist/runtimeInstaller.js.map +1 -0
  332. package/dist/templates/actor/LICENSE.md +9 -0
  333. package/dist/templates/actor/README.md +33 -0
  334. package/dist/templates/actor/gitignore +7 -0
  335. package/dist/templates/actor/package.json +20 -0
  336. package/dist/templates/actor/src/durable-objects.ts +13 -0
  337. package/dist/templates/actor/tsconfig.json +11 -0
  338. package/dist/templates/ai-chat/.env.example +1 -0
  339. package/dist/templates/ai-chat/LICENSE.md +9 -0
  340. package/dist/templates/ai-chat/README.md +41 -0
  341. package/dist/templates/ai-chat/gitignore +8 -0
  342. package/dist/templates/ai-chat/index.html +12 -0
  343. package/dist/templates/ai-chat/package.json +30 -0
  344. package/dist/templates/ai-chat/src/Chat.tsx +37 -0
  345. package/dist/templates/ai-chat/src/backend.ts +41 -0
  346. package/dist/templates/ai-chat/src/durable-objects.ts +15 -0
  347. package/dist/templates/ai-chat/tsconfig.json +13 -0
  348. package/dist/templates/chat/LICENSE.md +9 -0
  349. package/dist/templates/chat/README.md +29 -0
  350. package/dist/templates/chat/gitignore +8 -0
  351. package/dist/templates/chat/index.html +12 -0
  352. package/dist/templates/chat/package.json +27 -0
  353. package/dist/templates/chat/src/Chat.tsx +63 -0
  354. package/dist/templates/chat/src/backend.ts +20 -0
  355. package/dist/templates/chat/src/durable-objects.ts +18 -0
  356. package/dist/templates/chat/tsconfig.json +13 -0
  357. package/dist/templates/documents/LICENSE.md +9 -0
  358. package/dist/templates/documents/README.md +38 -0
  359. package/dist/templates/documents/gitignore +8 -0
  360. package/dist/templates/documents/index.html +12 -0
  361. package/dist/templates/documents/package.json +35 -0
  362. package/dist/templates/documents/src/App.tsx +81 -0
  363. package/dist/templates/documents/src/Editor.tsx +69 -0
  364. package/dist/templates/documents/src/backend.ts +18 -0
  365. package/dist/templates/documents/src/collaboration.ts +46 -0
  366. package/dist/templates/documents/src/durable-objects.ts +48 -0
  367. package/dist/templates/documents/src/style.css +145 -0
  368. package/dist/templates/documents/tsconfig.json +13 -0
  369. package/dist/wire/contract.d.ts +9 -0
  370. package/dist/wire/contract.d.ts.map +1 -0
  371. package/dist/wire/contract.js +2 -0
  372. package/dist/wire/contract.js.map +1 -0
  373. package/dist/wire/public-contract.d.ts +36 -0
  374. package/dist/wire/public-contract.d.ts.map +1 -0
  375. package/dist/wire/public-contract.js +2 -0
  376. package/dist/wire/public-contract.js.map +1 -0
  377. package/package.json +111 -0
package/LICENSE.md ADDED
@@ -0,0 +1,9 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Terse
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,206 @@
1
+ # Durable Actors
2
+
3
+ Named actors with serial method calls and saved state. Requires Node.js 20.19+ or 22.12+ (matching Vite's runtime requirement). The CLI uses Node.js; actor execution requires Bun 1.4.2+.
4
+
5
+ ## Local development
6
+
7
+ Install the CLI once with pnpm:
8
+
9
+ ```sh
10
+ pnpm add --global durable-actors
11
+ ```
12
+
13
+ Create a standalone actor project and start its server:
14
+
15
+ ```sh
16
+ durable-actors init my-actors
17
+ cd my-actors
18
+ pnpm install
19
+ durable-actors dev
20
+ ```
21
+
22
+ The project contains a persisted counter in `src/durable-objects.ts`, TypeScript configuration, and scripts to check and build your actors. Keep the actor server running.
23
+
24
+ In your separate application project's directory, install the SDK:
25
+
26
+ ```sh
27
+ pnpm add durable-actors
28
+ ```
29
+
30
+ Copy the settings printed under **Connect your application** into that application's `.env` file:
31
+
32
+ ```dotenv
33
+ DURABLE_ACTORS_PROJECT_ID=local
34
+ DURABLE_ACTORS_CONTROL_PLANE_URL=http://127.0.0.1:7100
35
+ DURABLE_ACTORS_SECRET='<paste the secret printed by dev>'
36
+ ```
37
+
38
+ Generate the client from your application directory:
39
+
40
+ ```sh
41
+ durable-actors generate
42
+ ```
43
+
44
+ The CLI loads `.env` automatically and fetches the contract from your actor server. Use the generated client in your backend:
45
+
46
+ ```ts
47
+ import { actors } from "./generated/index.js"
48
+
49
+ const counter = actors.Counter.get("example")
50
+ console.log(await counter.increment())
51
+ ```
52
+
53
+ Start your backend with that `.env` loaded, using your usual development command. Generated clients contain public types without importing actor source or its private dependencies.
54
+
55
+ Edit actors in the actor project's `src/durable-objects.ts`. Annotate every instance field with `@Persisted` or `@Ephemeral`, imported from `durable-actors`. Rerun `durable-actors generate` in your application when actor method signatures change. `dev` mints a fresh shared secret on restart unless one is configured, so update your application's `.env` and restart its backend too.
56
+
57
+ For complete application templates, use `durable-actors init <directory> --template chat`, `--template ai-chat`, or `--template documents`. See the [chat](https://github.com/TerseAI/durable-actors/tree/main/examples/chat), [AI chat](https://github.com/TerseAI/durable-actors/tree/main/examples/ai-chat), and [documents](https://github.com/TerseAI/durable-actors/tree/main/examples/documents) examples.
58
+
59
+ ## Generate clients programmatically
60
+
61
+ Build tools can generate the same files in memory through the public compiler and codegen APIs:
62
+
63
+ ```ts
64
+ import { generateTypeScript } from "durable-actors/codegen"
65
+ import { ActorCompiler } from "durable-actors/compiler"
66
+
67
+ const contract = new ActorCompiler().compileContract("src/durable-objects.ts")
68
+ const files = await generateTypeScript(contract)
69
+ // files is a ReadonlyMap<string, string> of relative filenames to TypeScript source.
70
+ ```
71
+
72
+ The caller chooses where to write the files. Generation does not execute actor code. The CLI writes only generated TypeScript clients.
73
+
74
+ ## Deploy and generate remote clients
75
+
76
+ For a hosted deployment, configure the [remote connection](#hosted-backends), then supply your published customer build image. The control plane compiles the code and public contract, publishes the snapshot, and registers the deployment in one request:
77
+
78
+ ```sh
79
+ durable-actors deploy --image im-customer-build
80
+ ```
81
+
82
+ Then generate clients in another repository using the same environment settings:
83
+
84
+ ```sh
85
+ durable-actors generate
86
+ ```
87
+
88
+ Deploy assigns a revision automatically, and generation uses the latest deployment. The server stores only its active contract. See the [CLI reference](../docs/reference/cli.md#generate-from-the-control-plane) for deployment and credentials.
89
+
90
+ The npm package installs the `durable-actors` CLI. On first use, `dev` downloads and caches the matching native runtime automatically. It watches TypeScript files across the actor project and publishes valid source changes to the local control plane; rerun `durable-actors generate` when the public contract changes. Start your frontend and application backend with their usual tooling. Restart the application backend after restarting the actor runtime to reload cached settings. State survives restarts in `.durable-actors/`.
91
+
92
+ `durable-actors dev --help` lists options. There is no CLI client runner; browser applications use native WebSockets as shown below.
93
+
94
+ ## Test runners
95
+
96
+ Start a local server programmatically and pass its connection settings to your test runner:
97
+
98
+ ```ts
99
+ import { startLocalActors } from "durable-actors/dev"
100
+
101
+ const runtime = await startLocalActors({ entrypoint: "src/actors.ts" })
102
+ try {
103
+ await runTests(runtime.connection)
104
+ } finally {
105
+ await runtime.stop()
106
+ }
107
+ ```
108
+
109
+ The launcher downloads the matching runtime and waits for readiness. It defaults to a free loopback port and `.durable-actors/`; set `project`, `dataDir`, or `port` to override them. `stop()` preserves state and waits for shutdown. `connection` exposes the server settings; `closed` rejects on process failure.
110
+
111
+ ## Hosted backends
112
+
113
+ Configure the [remote connection](https://github.com/TerseAI/durable-actors/blob/main/docs/reference/configuration.md) once for your CLI and backend. Local development uses the connection settings printed by `dev`.
114
+
115
+ Keep the shared secret on your backend, where you check user permissions. The SDK connects to the named actor and calls its methods. Mobile and browser apps use [WebSockets authorized by your backend](https://github.com/TerseAI/durable-actors/blob/main/docs/guides/self-hosting.md#browser-connections).
116
+
117
+ See [self-hosting](https://github.com/TerseAI/durable-actors/blob/main/docs/guides/self-hosting.md) for deployment and credentials. Runtime distributions bundle the Go provider.
118
+
119
+ ## WebSocket API
120
+
121
+ The gateway keeps connections while actors hibernate. Actors use `onConnect`, `onMessage`, and `onDisconnect` to manage application messages. Browser connections receive explicit actor messages plus automatic snapshots and committed updates of public `@Persisted @Emittable` fields. Private, protected, and non-emittable fields are excluded.
122
+
123
+ For long-running async methods, import the experimental `Reentrant` decorator and apply `@Reentrant` to allow other calls and socket hooks to run while the method awaits. The method retains actor state access, but state can change across awaits. Undecorated calls block all new invocations until completion and persistence; already-running reentrant continuations may still resume during their awaits. Direct `this.method()` calls inherit the current invocation's mode.
124
+
125
+ Declaring any reentrant method disables application-error rollback for the whole actor class. Failed-call mutations remain in memory and may be saved by another successful call. Persistence still occurs on successful completion, so this does not make streamed progress immediately durable. See the [scheduling and persistence contract](https://github.com/TerseAI/durable-actors/blob/main/docs/reference/api.md#reentrant-methods-experimental) before opting in.
126
+
127
+ Inside actor hooks and backend SDK connections, send JSON values with `socket.send({ type: "chat", text: "Hello" })`. The backend SDK encodes and parses these values. Native browser sockets use `JSON.stringify` and `JSON.parse`.
128
+
129
+ `Actor<Metadata, Incoming, Outgoing = Incoming, Tag extends string = string>` types metadata, both message directions, and tags. Use `ActorSocketOf<ChatRoom>` and `ActorMessageOf<ChatRoom>` in hooks to reuse those types. Generated JSON schemas are checked at deployment and are not enforced with AJV during execution. Optional static Zod schemas validate metadata, incoming and outgoing messages, and tags at runtime; see [generics and wire validation](https://github.com/TerseAI/durable-actors/blob/main/docs/reference/api.md#generics-and-wire-validation).
130
+
131
+ | API | Behavior |
132
+ | ------------------------------------ | ---------------------------------------------------- |
133
+ | `Actor.get(id).connect(metadata)` | Opens a connection with JSON-serializable metadata. |
134
+ | `onMessage(socket, message)` | Handles incoming messages on the actor. |
135
+ | `onDisconnect(socket)` | Handles a closed connection. |
136
+ | `this.broadcast(message)` | Sends to connected clients. |
137
+ | `socket.send(message)` | Sends to one client. |
138
+ | `socket.setTags(...tags)` | Tags a connection for filtered broadcasts. |
139
+ | `socket.close()` / `socket.reject()` | Closes a connection / rejects it during `onConnect`. |
140
+
141
+ `await this.getConnections()` fetches connections on demand and caches the result for that invocation. Ordinary methods that do not enumerate connections skip the gateway lookup. From application code, `Actor.get(id).broadcast(message)` sends transient output without invoking the actor or saving state.
142
+
143
+ For a separate WebSocket gateway, see [gateway configuration](https://github.com/TerseAI/durable-actors/blob/main/docs/reference/configuration.md).
144
+
145
+ ## Browser clients
146
+
147
+ Generate backend helpers from your actor entrypoint:
148
+
149
+ ```sh
150
+ npx durable-actors generate
151
+ ```
152
+
153
+ The generated `index.ts` exposes typed backend RPC stubs and WebSocket grants under `actors`. Your frontend uses the browser's native `WebSocket`; it needs no generated client or SDK import.
154
+
155
+ Your backend authenticates the user and checks actor access before issuing a grant:
156
+
157
+ ```ts
158
+ import { actors } from "./generated/index.js"
159
+
160
+ export async function POST(request: Request) {
161
+ const user = await requireUser(request)
162
+ const roomId = "lobby"
163
+ await requireRoomAccess(user, roomId)
164
+ const grant = await actors.ChatRoom.prepareWebsocket({
165
+ actorId: roomId,
166
+ metadata: { userId: user.id }
167
+ })
168
+ return Response.json(grant, { headers: { "cache-control": "no-store" } })
169
+ }
170
+ ```
171
+
172
+ `prepareWebsocket` returns `{ websocketUrl, key }`. The URL already includes the signed key and can be passed directly to `new WebSocket()`. The key grants socket access to one actor; it cannot invoke backend RPC methods or issue other keys. Metadata comes from your backend and is validated by the actor host.
173
+
174
+ The helper reads connection settings from environment variables. For overrides or an injected transport, use `actors.ChatRoom.prepareWebsocket(authorization, options, { fetch })`. `ActorProxy.handle({ actorName, actorId, metadata })` remains available for dynamic actor selection.
175
+
176
+ The frontend fetches your application endpoint and opens the returned URL:
177
+
178
+ ```js
179
+ const response = await fetch("/api/socket/ChatRoom/lobby", { method: "POST" })
180
+ if (!response.ok) throw new Error("Connection denied")
181
+ const { websocketUrl } = await response.json()
182
+ const socket = new WebSocket(websocketUrl)
183
+
184
+ socket.onopen = () => socket.send(JSON.stringify({ type: "post", text: "Hello" }))
185
+ socket.onmessage = event => renderMessage(JSON.parse(event.data))
186
+ socket.onclose = event => showDisconnected(event.code)
187
+ socket.onerror = () => showConnectionError()
188
+ ```
189
+
190
+ Messages are application JSON in text frames, with no SDK envelopes, initialization frames, or special subprotocol. Actors send initial application data explicitly from `onConnect` and use `socket.send()` or `this.broadcast()` for updates. Public `@Persisted @Emittable` fields also send automatic `state` snapshots and committed `state_update` messages. Actors without emittable fields send only application messages. Reconnection, message replay, and ticket renewal remain application responsibilities.
191
+
192
+ Open a grant within 60 seconds. Connection authorization defaults to 15 minutes; set `authorizationLifetimeMs` in `prepareWebsocket` to change it, subject to the server's maximum. The server closes expired connections with code `4408`, including while idle or running a handler. Your application decides whether to request a fresh grant and open another socket.
193
+
194
+ Treat both the URL and key as credentials. Keep the backend shared secret on the server and omit signed URL query strings from logs. Call `socket.close()` when the view is finished.
195
+
196
+ ## Reference
197
+
198
+ - [Configuration](https://github.com/TerseAI/durable-actors/blob/main/docs/reference/configuration.md): local defaults, environment variables, credentials, and server settings.
199
+ - [CLI reference](https://github.com/TerseAI/durable-actors/blob/main/docs/reference/cli.md): commands and options.
200
+ - [TypeScript API reference](https://github.com/TerseAI/durable-actors/blob/main/docs/reference/api.md): actors, methods, connections, types, and errors.
201
+ - [HTTP and WebSocket reference](https://github.com/TerseAI/durable-actors/blob/main/docs/reference/http.md): deployments, backend access, connections, and callbacks.
202
+ - [Local development](https://github.com/TerseAI/durable-actors/blob/main/docs/guides/local-development.md): install from npm and run actors locally.
203
+
204
+ ## License
205
+
206
+ MIT © 2026 Terse
@@ -0,0 +1,66 @@
1
+ import type { JsonObject, JsonValue } from "../json.js";
2
+ import type { ActorSchema } from "./schema.js";
3
+ import type { ActorBroadcastOptions, ActorConnection, ActorSocket } from "./socket.js";
4
+ import type { ActorSchemas } from "./socketValidation.js";
5
+ declare const actorTypes: unique symbol;
6
+ interface Actor<Metadata = JsonValue, Incoming = JsonValue, Outgoing = Incoming, Tag extends string = string> {
7
+ onConnect?(socket: ActorSocket<Metadata, Outgoing, Tag>): Promise<void>;
8
+ onMessage?(socket: ActorSocket<Metadata, Outgoing, Tag>, message: Incoming): Promise<void>;
9
+ onDisconnect?(socket: ActorSocket<Metadata, Outgoing, Tag>, code: number, reason: string, wasClean: boolean): Promise<void>;
10
+ }
11
+ declare abstract class Actor<Metadata = JsonValue, Incoming = JsonValue, Outgoing = Incoming, Tag extends string = string> {
12
+ readonly [actorTypes]: {
13
+ metadata: Metadata;
14
+ incoming: Incoming;
15
+ outgoing: Outgoing;
16
+ tag: Tag;
17
+ };
18
+ protected constructor();
19
+ static get<TActorClass extends ActorClass>(this: ValidActorClass<TActorClass>, actorId: string): ActorReference<TActorClass["prototype"]>;
20
+ protected get id(): string;
21
+ protected getConnections(): Promise<readonly ActorSocket<Metadata, Outgoing, Tag>[]>;
22
+ protected broadcast(message: Outgoing, options?: ActorBroadcastOptions<Tag>): void;
23
+ }
24
+ declare function registerActorClass<Instance extends AnyActor>(actorClass: ActorClass<Instance>, state: ActorSchema): ActorDefinition;
25
+ declare function findActorDefinition(actorName: string): ActorDefinition | undefined;
26
+ declare function bindActorIdentity(instance: AnyActor, actorId: string): void;
27
+ interface ActorDefinition extends ActorClassDescription {
28
+ state: ActorSchema;
29
+ }
30
+ interface ActorClassDescription {
31
+ readonly actorName: string;
32
+ readonly actorClass: ActorClass;
33
+ readonly schemas: ActorSchemas;
34
+ readonly methods: ReadonlySet<string>;
35
+ }
36
+ type AnyActor = Actor<unknown, unknown, unknown>;
37
+ type ActorClass<Instance extends AnyActor = AnyActor> = Function & {
38
+ readonly prototype: Instance;
39
+ readonly schemas?: ActorSchemas;
40
+ };
41
+ type AsyncMethod = (...args: never[]) => Promise<unknown>;
42
+ type PubliclyConstructibleActorClass = abstract new (...args: never[]) => AnyActor;
43
+ type InvalidActorMethod<Instance extends AnyActor> = {
44
+ [Key in keyof Instance]-?: NonNullable<Instance[Key]> extends (...args: never[]) => unknown ? NonNullable<Instance[Key]> extends AsyncMethod ? never : Key : never;
45
+ }[keyof Instance];
46
+ type ValidActorClass<TActorClass extends ActorClass> = TActorClass extends PubliclyConstructibleActorClass ? never : InvalidActorMethod<TActorClass["prototype"]> extends never ? TActorClass extends {
47
+ readonly schemas: ActorSchemas<SocketMetadata<TActorClass["prototype"]>, SocketIncoming<TActorClass["prototype"]>, SocketOutgoing<TActorClass["prototype"]>, SocketTag<TActorClass["prototype"]>>;
48
+ } ? TActorClass : TActorClass extends {
49
+ readonly schemas: unknown;
50
+ } ? never : TActorClass : never;
51
+ type ActorReference<Instance extends AnyActor> = {
52
+ [Key in keyof Instance as Instance[Key] extends AsyncMethod ? Key extends SocketLifecycleMethod ? never : Key : never]: Instance[Key];
53
+ } & {
54
+ connect(metadata: SocketMetadata<Instance>): Promise<ActorConnection<SocketIncoming<Instance>, SocketOutgoing<Instance>, JsonObject>>;
55
+ broadcast(message: SocketOutgoing<Instance>): Promise<void>;
56
+ };
57
+ type SocketLifecycleMethod = "onConnect" | "onMessage" | "onDisconnect";
58
+ type SocketMetadata<Instance extends AnyActor> = Instance[typeof actorTypes]["metadata"];
59
+ type SocketIncoming<Instance extends AnyActor> = Instance[typeof actorTypes]["incoming"];
60
+ type SocketOutgoing<Instance extends AnyActor> = Instance[typeof actorTypes]["outgoing"];
61
+ type SocketTag<Instance extends AnyActor> = Instance[typeof actorTypes]["tag"];
62
+ type ActorSocketOf<Instance extends AnyActor> = ActorSocket<SocketMetadata<Instance>, SocketOutgoing<Instance>, SocketTag<Instance>>;
63
+ type ActorMessageOf<Instance extends AnyActor> = SocketIncoming<Instance>;
64
+ export { Actor, bindActorIdentity, findActorDefinition, registerActorClass };
65
+ export type { ActorClass, ActorDefinition, ActorMessageOf, ActorReference, ActorSocketOf, AnyActor };
66
+ //# sourceMappingURL=actor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actor.d.ts","sourceRoot":"","sources":["../../src/actor/actor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAGvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,WAAW,EAAsB,MAAM,aAAa,CAAA;AAE1G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,OAAO,CAAC,MAAM,UAAU,EAAE,OAAO,MAAM,CAAA;AAOvC,UAAU,KAAK,CAAC,QAAQ,GAAG,SAAS,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,GAAG,QAAQ,EAAE,GAAG,SAAS,MAAM,GAAG,MAAM;IACxG,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvE,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1F,YAAY,CAAC,CACT,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,EAC5C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,OAAO,GAClB,OAAO,CAAC,IAAI,CAAC,CAAA;CACnB;AAED,uBAAe,KAAK,CAAC,QAAQ,GAAG,SAAS,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,GAAG,QAAQ,EAAE,GAAG,SAAS,MAAM,GAAG,MAAM;IAC7G,SAAiB,CAAC,UAAU,CAAC,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAC;QAAC,GAAG,EAAE,GAAG,CAAA;KAAE,CAAA;IAEvG,SAAS;IAET,MAAM,CAAC,GAAG,CAAC,WAAW,SAAS,UAAU,EACrC,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,EAClC,OAAO,EAAE,MAAM,GAChB,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAI3C,SAAS,KAAK,EAAE,IAAI,MAAM,CAEzB;IAED,SAAS,CAAC,cAAc,IAAI,OAAO,CAAC,SAAS,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;IAIpF,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,qBAAqB,CAAC,GAAG,CAAC,GAAG,IAAI;CAGrF;AAED,iBAAS,kBAAkB,CAAC,QAAQ,SAAS,QAAQ,EACjD,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,EAChC,KAAK,EAAE,WAAW,GACnB,eAAe,CAYjB;AAED,iBAAS,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE3E;AAUD,iBAAS,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAEpE;AAyGD,UAAU,eAAgB,SAAQ,qBAAqB;IACnD,KAAK,EAAE,WAAW,CAAA;CACrB;AAED,UAAU,qBAAqB;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CACxC;AAMD,KAAK,QAAQ,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;AAChD,KAAK,UAAU,CAAC,QAAQ,SAAS,QAAQ,GAAG,QAAQ,IAAI,QAAQ,GAAG;IAC/D,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAA;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAClC,CAAA;AAED,KAAK,WAAW,GAAG,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AACzD,KAAK,+BAA+B,GAAG,QAAQ,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,QAAQ,CAAA;AAClF,KAAK,kBAAkB,CAAC,QAAQ,SAAS,QAAQ,IAAI;KAChD,GAAG,IAAI,MAAM,QAAQ,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,GACrF,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,WAAW,GAC1C,KAAK,GACL,GAAG,GACP,KAAK;CACd,CAAC,MAAM,QAAQ,CAAC,CAAA;AACjB,KAAK,eAAe,CAAC,WAAW,SAAS,UAAU,IAAI,WAAW,SAAS,+BAA+B,GACpG,KAAK,GACL,kBAAkB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,SAAS,KAAK,GACxD,WAAW,SAAS;IAChB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAC1B,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,EACxC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,EACxC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,EACxC,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CACtC,CAAA;CACJ,GACG,WAAW,GACX,WAAW,SAAS;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC/C,KAAK,GACL,WAAW,GACjB,KAAK,CAAA;AACb,KAAK,cAAc,CAAC,QAAQ,SAAS,QAAQ,IAAI;KAEzC,GAAG,IAAI,MAAM,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,WAAW,GACpD,GAAG,SAAS,qBAAqB,GAC7B,KAAK,GACL,GAAG,GACP,KAAK,GACZ,QAAQ,CAAC,GAAG,CAAC;CACnB,GAAG;IACA,OAAO,CACH,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,GACnC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC,CAAA;IAC3F,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9D,CAAA;AACD,KAAK,qBAAqB,GAAG,WAAW,GAAG,WAAW,GAAG,cAAc,CAAA;AACvE,KAAK,cAAc,CAAC,QAAQ,SAAS,QAAQ,IAAI,QAAQ,CAAC,OAAO,UAAU,CAAC,CAAC,UAAU,CAAC,CAAA;AACxF,KAAK,cAAc,CAAC,QAAQ,SAAS,QAAQ,IAAI,QAAQ,CAAC,OAAO,UAAU,CAAC,CAAC,UAAU,CAAC,CAAA;AACxF,KAAK,cAAc,CAAC,QAAQ,SAAS,QAAQ,IAAI,QAAQ,CAAC,OAAO,UAAU,CAAC,CAAC,UAAU,CAAC,CAAA;AACxF,KAAK,SAAS,CAAC,QAAQ,SAAS,QAAQ,IAAI,QAAQ,CAAC,OAAO,UAAU,CAAC,CAAC,KAAK,CAAC,CAAA;AAC9E,KAAK,aAAa,CAAC,QAAQ,SAAS,QAAQ,IAAI,WAAW,CACvD,cAAc,CAAC,QAAQ,CAAC,EACxB,cAAc,CAAC,QAAQ,CAAC,EACxB,SAAS,CAAC,QAAQ,CAAC,CACtB,CAAA;AACD,KAAK,cAAc,CAAC,QAAQ,SAAS,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAA;AAEzE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAA;AAC5E,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAA"}
@@ -0,0 +1,144 @@
1
+ import { actorClient } from "../client/client.js";
2
+ import { ActorDefinitionError } from "../errors.js";
3
+ import { validateActorComponent } from "./identity.js";
4
+ import { actorConnections, broadcastActor } from "./socket.js";
5
+ import { outgoingMessage, socketMetadata } from "./socketValidation.js";
6
+ const actorMetadata = new WeakMap();
7
+ const actorDefinitions = new Map();
8
+ const asyncFunction = Object.getPrototypeOf(async () => { }).constructor;
9
+ const referenceClasses = new WeakMap();
10
+ class Actor {
11
+ constructor() { }
12
+ static get(actorId) {
13
+ return getActorReference(this, validateActorComponent("actor ID", actorId));
14
+ }
15
+ get id() {
16
+ return metadataFor(this).actorId;
17
+ }
18
+ getConnections() {
19
+ return actorConnections(this);
20
+ }
21
+ broadcast(message, options) {
22
+ broadcastActor(this, message, options);
23
+ }
24
+ }
25
+ function registerActorClass(actorClass, state) {
26
+ const actorName = actorClassName(actorClass);
27
+ const existing = actorDefinitions.get(actorName);
28
+ if (existing !== undefined) {
29
+ if (existing.actorClass !== actorClass)
30
+ throw new ActorDefinitionError(`duplicate actor name ${actorName}`);
31
+ existing.state = state;
32
+ return existing;
33
+ }
34
+ const definition = { ...describeActorClass(actorClass), state };
35
+ actorDefinitions.set(actorName, definition);
36
+ return definition;
37
+ }
38
+ function findActorDefinition(actorName) {
39
+ return actorDefinitions.get(actorName);
40
+ }
41
+ function getActorReference(actorClass, actorId) {
42
+ const Reference = referenceClass(actorClass);
43
+ return new Reference(actorId);
44
+ }
45
+ function bindActorIdentity(instance, actorId) {
46
+ actorMetadata.set(instance, { actorId: validateActorComponent("actor ID", actorId) });
47
+ }
48
+ function referenceClass(actorClass) {
49
+ const existing = referenceClasses.get(actorClass);
50
+ if (existing !== undefined)
51
+ return existing;
52
+ const definition = describeActorClass(actorClass);
53
+ class ActorReference extends Actor {
54
+ constructor(actorId) {
55
+ super();
56
+ bindActorIdentity(this, actorId);
57
+ }
58
+ }
59
+ Object.defineProperty(ActorReference.prototype, "connect", {
60
+ configurable: false,
61
+ enumerable: false,
62
+ writable: false,
63
+ value: function connectActor(metadata) {
64
+ const actor = metadataFor(this);
65
+ const attachment = socketMetadata(metadata, definition.schemas);
66
+ return actorClient().then(client => client.connect(definition.actorName, actor.actorId, attachment, definition.schemas));
67
+ }
68
+ });
69
+ Object.defineProperty(ActorReference.prototype, "broadcast", {
70
+ configurable: false,
71
+ enumerable: false,
72
+ writable: false,
73
+ value: function broadcastActorMessage(message) {
74
+ const actor = metadataFor(this);
75
+ const outgoing = outgoingMessage(message, definition.schemas);
76
+ return actorClient().then(client => client.broadcast(definition.actorName, actor.actorId, outgoing));
77
+ }
78
+ });
79
+ definition.methods.forEach(method => {
80
+ Object.defineProperty(ActorReference.prototype, method, {
81
+ configurable: false,
82
+ enumerable: false,
83
+ writable: false,
84
+ value: function forwardActorMethod(...args) {
85
+ const metadata = metadataFor(this);
86
+ return actorClient().then(client => client.invoke(definition.actorName, metadata.actorId, method, args));
87
+ }
88
+ });
89
+ });
90
+ referenceClasses.set(definition.actorClass, ActorReference);
91
+ return ActorReference;
92
+ }
93
+ function metadataFor(instance) {
94
+ const metadata = actorMetadata.get(instance);
95
+ if (metadata === undefined)
96
+ throw new ActorDefinitionError("actor identity is unavailable outside an actor invocation");
97
+ return metadata;
98
+ }
99
+ function describeActorClass(actorClass) {
100
+ const actorName = actorClassName(actorClass);
101
+ validateActorClass(actorClass, actorName);
102
+ return {
103
+ actorName: validateActorComponent("actor name", actorName),
104
+ actorClass,
105
+ schemas: actorClass.schemas ?? {},
106
+ methods: new Set(discoverMethods(actorClass, actorName))
107
+ };
108
+ }
109
+ function discoverMethods(actorClass, actorName) {
110
+ if (Object.getOwnPropertySymbols(actorClass.prototype).length > 0)
111
+ throw new ActorDefinitionError(`actor class ${actorName} cannot define symbol methods`);
112
+ return Object.entries(Object.getOwnPropertyDescriptors(actorClass.prototype)).flatMap(([name, descriptor]) => {
113
+ if (name === "constructor")
114
+ return [];
115
+ if (descriptor.get !== undefined || descriptor.set !== undefined)
116
+ throw new ActorDefinitionError(`actor class ${actorName} cannot define accessor ${name}`);
117
+ if (typeof descriptor.value !== "function")
118
+ return [];
119
+ validateActorComponent("actor method", name);
120
+ if (name === "then")
121
+ throw new ActorDefinitionError(`actor class ${actorName} cannot define method then`);
122
+ if (name === "connect" || name === "broadcast")
123
+ throw new ActorDefinitionError(`actor class ${actorName} cannot define reserved method ${name}`);
124
+ if (!(descriptor.value instanceof asyncFunction))
125
+ throw new ActorDefinitionError(`actor method ${actorName}.${name} must be async`);
126
+ if (lifecycleMethods.has(name))
127
+ return [];
128
+ return [name];
129
+ });
130
+ }
131
+ const lifecycleMethods = new Set(["onConnect", "onMessage", "onDisconnect"]);
132
+ function validateActorClass(actorClass, actorName) {
133
+ if (Object.getPrototypeOf(actorClass.prototype) !== Actor.prototype)
134
+ throw new ActorDefinitionError(`actor class ${actorName} must extend Actor directly`);
135
+ if (actorClass.length !== 0)
136
+ throw new ActorDefinitionError(`actor class ${actorName} cannot require constructor arguments`);
137
+ }
138
+ function actorClassName(actorClass) {
139
+ if (actorClass.name.length === 0)
140
+ throw new ActorDefinitionError("actor classes must be named");
141
+ return actorClass.name;
142
+ }
143
+ export { Actor, bindActorIdentity, findActorDefinition, registerActorClass };
144
+ //# sourceMappingURL=actor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actor.js","sourceRoot":"","sources":["../../src/actor/actor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ declare function Reentrant(_value: Function, context: ClassMethodDecoratorContext): void;
2
+ declare function Persisted(_value: undefined, context: ClassFieldDecoratorContext): void;
3
+ declare function Ephemeral(_value: undefined, context: ClassFieldDecoratorContext): void;
4
+ declare function Emittable(_value: undefined, context: ClassFieldDecoratorContext): void;
5
+ export { Emittable, Ephemeral, Persisted, Reentrant };
6
+ //# sourceMappingURL=decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/actor/decorators.ts"],"names":[],"mappings":"AAEA,iBAAS,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,2BAA2B,GAAG,IAAI,CAG/E;AAED,iBAAS,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,0BAA0B,GAAG,IAAI,CAG/E;AAED,iBAAS,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,0BAA0B,GAAG,IAAI,CAE/E;AAED,iBAAS,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,0BAA0B,GAAG,IAAI,CAG/E;AAOD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,CAAA"}
@@ -0,0 +1,24 @@
1
+ import { ActorDefinitionError } from "../errors.js";
2
+ function Reentrant(_value, context) {
3
+ if (context.kind !== "method" || context.static || context.private || typeof context.name !== "string")
4
+ throw new ActorDefinitionError("@Reentrant requires a public instance async method");
5
+ }
6
+ function Persisted(_value, context) {
7
+ validateField("Persisted", context);
8
+ if (context.private)
9
+ throw new ActorDefinitionError("@Persisted cannot decorate a JavaScript private field");
10
+ }
11
+ function Ephemeral(_value, context) {
12
+ validateField("Ephemeral", context);
13
+ }
14
+ function Emittable(_value, context) {
15
+ validateField("Emittable", context);
16
+ if (context.private)
17
+ throw new ActorDefinitionError("@Emittable requires a public field");
18
+ }
19
+ function validateField(name, context) {
20
+ if (context.kind !== "field" || context.static || typeof context.name !== "string")
21
+ throw new ActorDefinitionError(`@${name} requires an instance field with a string name`);
22
+ }
23
+ export { Emittable, Ephemeral, Persisted, Reentrant };
24
+ //# sourceMappingURL=decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/actor/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAEnD,SAAS,SAAS,CAAC,MAAgB,EAAE,OAAoC;IACrE,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;QAClG,MAAM,IAAI,oBAAoB,CAAC,oDAAoD,CAAC,CAAA;AAC5F,CAAC;AAED,SAAS,SAAS,CAAC,MAAiB,EAAE,OAAmC;IACrE,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IACnC,IAAI,OAAO,CAAC,OAAO;QAAE,MAAM,IAAI,oBAAoB,CAAC,uDAAuD,CAAC,CAAA;AAChH,CAAC;AAED,SAAS,SAAS,CAAC,MAAiB,EAAE,OAAmC;IACrE,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;AACvC,CAAC;AAED,SAAS,SAAS,CAAC,MAAiB,EAAE,OAAmC;IACrE,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IACnC,IAAI,OAAO,CAAC,OAAO;QAAE,MAAM,IAAI,oBAAoB,CAAC,oCAAoC,CAAC,CAAA;AAC7F,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,OAAmC;IACpE,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;QAC9E,MAAM,IAAI,oBAAoB,CAAC,IAAI,IAAI,gDAAgD,CAAC,CAAA;AAChG,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { z } from "zod";
2
+ declare function validateActorComponent(name: string, value: string): string;
3
+ declare function actorKey(actor: ActorIdentity): string;
4
+ declare const actorComponentSchema: z.ZodString;
5
+ export declare const projectIdSchema: z.ZodString;
6
+ export declare function validateProjectId(value: unknown): string;
7
+ declare const actorIdentitySchema: z.ZodObject<{
8
+ project_id: z.ZodString;
9
+ actor_name: z.ZodString;
10
+ actor_id: z.ZodString;
11
+ }, z.core.$strict>;
12
+ type ActorIdentity = z.infer<typeof actorIdentitySchema>;
13
+ export { actorComponentSchema, actorIdentitySchema, actorKey, validateActorComponent };
14
+ export type { ActorIdentity };
15
+ export declare function projectActorPath(projectId: string, actorName: string, actorId: string): string;
16
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/actor/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,iBAAS,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKnE;AAED,iBAAS,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAE9C;AAED,QAAA,MAAM,oBAAoB,aAAyC,CAAA;AACnE,eAAO,MAAM,eAAe,aAAgF,CAAA;AAC5G,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIxD;AACD,QAAA,MAAM,mBAAmB;;;;kBAIvB,CAAA;AAEF,KAAK,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAExD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,sBAAsB,EAAE,CAAA;AACtF,YAAY,EAAE,aAAa,EAAE,CAAA;AAE7B,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE9F"}
@@ -0,0 +1,29 @@
1
+ import { z } from "zod";
2
+ import { ActorValidationError } from "../errors.js";
3
+ function validateActorComponent(name, value) {
4
+ const result = actorComponentSchema.safeParse(value);
5
+ if (!result.success)
6
+ throw new ActorValidationError(`${name} may contain only ASCII letters, digits, '.', '-', and '_'`);
7
+ return result.data;
8
+ }
9
+ function actorKey(actor) {
10
+ return `${actor.project_id}\u001f${actor.actor_name}\u001f${actor.actor_id}`;
11
+ }
12
+ const actorComponentSchema = z.string().regex(/^[A-Za-z0-9._-]+$/u);
13
+ export const projectIdSchema = actorComponentSchema.max(64).refine(value => value !== "." && value !== "..");
14
+ export function validateProjectId(value) {
15
+ const result = projectIdSchema.safeParse(value);
16
+ if (!result.success)
17
+ throw new ActorValidationError("A valid actor project ID is required");
18
+ return result.data;
19
+ }
20
+ const actorIdentitySchema = z.strictObject({
21
+ project_id: projectIdSchema,
22
+ actor_name: actorComponentSchema,
23
+ actor_id: actorComponentSchema
24
+ });
25
+ export { actorComponentSchema, actorIdentitySchema, actorKey, validateActorComponent };
26
+ export function projectActorPath(projectId, actorName, actorId) {
27
+ return `/v1/projects/${encodeURIComponent(validateProjectId(projectId))}/actors/${encodeURIComponent(actorName)}/${encodeURIComponent(actorId)}`;
28
+ }
29
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/actor/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAEnD,SAAS,sBAAsB,CAAC,IAAY,EAAE,KAAa;IACvD,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IACpD,IAAI,CAAC,MAAM,CAAC,OAAO;QACf,MAAM,IAAI,oBAAoB,CAAC,GAAG,IAAI,4DAA4D,CAAC,CAAA;IACvG,OAAO,MAAM,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAoB;IAClC,OAAO,GAAG,KAAK,CAAC,UAAU,SAAS,KAAK,CAAC,UAAU,SAAS,KAAK,CAAC,QAAQ,EAAE,CAAA;AAChF,CAAC;AAED,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;AACnE,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,IAAI,CAAC,CAAA;AAC5G,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC5C,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAC/C,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,IAAI,oBAAoB,CAAC,sCAAsC,CAAC,CAAA;IAC3F,OAAO,MAAM,CAAC,IAAI,CAAA;AACtB,CAAC;AACD,MAAM,mBAAmB,GAAG,CAAC,CAAC,YAAY,CAAC;IACvC,UAAU,EAAE,eAAe;IAC3B,UAAU,EAAE,oBAAoB;IAChC,QAAQ,EAAE,oBAAoB;CACjC,CAAC,CAAA;AAIF,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,sBAAsB,EAAE,CAAA;AAGtF,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,SAAiB,EAAE,OAAe;IAClF,OAAO,gBAAgB,kBAAkB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,WAAW,kBAAkB,CAAC,SAAS,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAA;AACpJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ declare function runInActorInvocation<T>(operation: () => T): T;
2
+ declare function currentActorInvocation(): true | undefined;
3
+ export { currentActorInvocation, runInActorInvocation };
4
+ //# sourceMappingURL=invocationContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invocationContext.d.ts","sourceRoot":"","sources":["../../src/actor/invocationContext.ts"],"names":[],"mappings":"AAIA,iBAAS,oBAAoB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAEtD;AAED,iBAAS,sBAAsB,IAAI,IAAI,GAAG,SAAS,CAElD;AAED,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ const invocationStorage = new AsyncLocalStorage();
3
+ function runInActorInvocation(operation) {
4
+ return invocationStorage.run(true, operation);
5
+ }
6
+ function currentActorInvocation() {
7
+ return invocationStorage.getStore();
8
+ }
9
+ export { currentActorInvocation, runInActorInvocation };
10
+ //# sourceMappingURL=invocationContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invocationContext.js","sourceRoot":"","sources":["../../src/actor/invocationContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAQ,CAAA;AAEvD,SAAS,oBAAoB,CAAI,SAAkB;IAC/C,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;AACjD,CAAC;AAED,SAAS,sBAAsB;IAC3B,OAAO,iBAAiB,CAAC,QAAQ,EAAE,CAAA;AACvC,CAAC;AAED,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,CAAA"}
@@ -0,0 +1,22 @@
1
+ import type { SocketContract } from "../wire/contract.js";
2
+ declare const ACTOR_ARTIFACT_VERSION = 1;
3
+ declare enum Persistence {
4
+ Persisted = "persisted",
5
+ Ephemeral = "ephemeral"
6
+ }
7
+ interface ActorFieldSchema {
8
+ readonly name: string;
9
+ readonly persistence: Persistence;
10
+ readonly private?: boolean;
11
+ readonly visibility?: "private" | "protected";
12
+ readonly emittable?: boolean;
13
+ }
14
+ interface ActorSchema {
15
+ readonly actorName: string;
16
+ readonly fields: readonly ActorFieldSchema[];
17
+ readonly reentrantMethods?: readonly string[];
18
+ readonly contract?: SocketContract;
19
+ }
20
+ export { ACTOR_ARTIFACT_VERSION, Persistence };
21
+ export type { ActorFieldSchema, ActorSchema };
22
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/actor/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,QAAA,MAAM,sBAAsB,IAAI,CAAA;AAEhC,aAAK,WAAW;IACZ,SAAS,cAAc;IACvB,SAAS,cAAc;CAC1B;AAED,UAAU,gBAAgB;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,GAAG,WAAW,CAAA;IAC7C,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,UAAU,WAAW;IACjB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAC5C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;CACrC;AAED,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,CAAA;AAC9C,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAA"}
@@ -0,0 +1,8 @@
1
+ const ACTOR_ARTIFACT_VERSION = 1;
2
+ var Persistence;
3
+ (function (Persistence) {
4
+ Persistence["Persisted"] = "persisted";
5
+ Persistence["Ephemeral"] = "ephemeral";
6
+ })(Persistence || (Persistence = {}));
7
+ export { ACTOR_ARTIFACT_VERSION, Persistence };
8
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/actor/schema.ts"],"names":[],"mappings":"AAEA,MAAM,sBAAsB,GAAG,CAAC,CAAA;AAEhC,IAAK,WAGJ;AAHD,WAAK,WAAW;IACZ,sCAAuB,CAAA;IACvB,sCAAuB,CAAA;AAC3B,CAAC,EAHI,WAAW,KAAX,WAAW,QAGf;AAiBD,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,CAAA"}