rivetkit 2.0.1 → 2.0.3

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 (253) hide show
  1. package/dist/schemas/actor-persist/v1.ts +228 -0
  2. package/dist/schemas/client-protocol/v1.ts +429 -0
  3. package/dist/schemas/file-system-driver/v1.ts +102 -0
  4. package/dist/tsup/actor/errors.cjs +69 -0
  5. package/dist/tsup/actor/errors.cjs.map +1 -0
  6. package/dist/tsup/actor/errors.d.cts +143 -0
  7. package/dist/tsup/actor/errors.d.ts +143 -0
  8. package/dist/tsup/actor/errors.js +69 -0
  9. package/dist/tsup/actor/errors.js.map +1 -0
  10. package/dist/tsup/chunk-2CRLFV6Z.cjs +202 -0
  11. package/dist/tsup/chunk-2CRLFV6Z.cjs.map +1 -0
  12. package/dist/tsup/chunk-3H7O2A7I.js +525 -0
  13. package/dist/tsup/chunk-3H7O2A7I.js.map +1 -0
  14. package/dist/tsup/chunk-42I3OZ3Q.js +15 -0
  15. package/dist/tsup/chunk-42I3OZ3Q.js.map +1 -0
  16. package/dist/tsup/chunk-4NSUQZ2H.js +1790 -0
  17. package/dist/tsup/chunk-4NSUQZ2H.js.map +1 -0
  18. package/dist/tsup/chunk-6PDXBYI5.js +132 -0
  19. package/dist/tsup/chunk-6PDXBYI5.js.map +1 -0
  20. package/dist/tsup/chunk-6WKQDDUD.cjs +1790 -0
  21. package/dist/tsup/chunk-6WKQDDUD.cjs.map +1 -0
  22. package/dist/tsup/chunk-CTBOSFUH.cjs +116 -0
  23. package/dist/tsup/chunk-CTBOSFUH.cjs.map +1 -0
  24. package/dist/tsup/chunk-EGVZZFE2.js +2857 -0
  25. package/dist/tsup/chunk-EGVZZFE2.js.map +1 -0
  26. package/dist/tsup/chunk-FCCPJNMA.cjs +132 -0
  27. package/dist/tsup/chunk-FCCPJNMA.cjs.map +1 -0
  28. package/dist/tsup/chunk-FLMTTN27.js +244 -0
  29. package/dist/tsup/chunk-FLMTTN27.js.map +1 -0
  30. package/dist/tsup/chunk-GIR3AFFI.cjs +315 -0
  31. package/dist/tsup/chunk-GIR3AFFI.cjs.map +1 -0
  32. package/dist/tsup/chunk-INGJP237.js +315 -0
  33. package/dist/tsup/chunk-INGJP237.js.map +1 -0
  34. package/dist/tsup/chunk-KJCJLKRM.js +116 -0
  35. package/dist/tsup/chunk-KJCJLKRM.js.map +1 -0
  36. package/dist/tsup/chunk-KUPQZYUQ.cjs +15 -0
  37. package/dist/tsup/chunk-KUPQZYUQ.cjs.map +1 -0
  38. package/dist/tsup/chunk-O2MBYIXO.cjs +2857 -0
  39. package/dist/tsup/chunk-O2MBYIXO.cjs.map +1 -0
  40. package/dist/tsup/chunk-OGAPU3UG.cjs +525 -0
  41. package/dist/tsup/chunk-OGAPU3UG.cjs.map +1 -0
  42. package/dist/tsup/chunk-OV6AYD4S.js +4406 -0
  43. package/dist/tsup/chunk-OV6AYD4S.js.map +1 -0
  44. package/dist/tsup/chunk-PO4VLDWA.js +47 -0
  45. package/dist/tsup/chunk-PO4VLDWA.js.map +1 -0
  46. package/dist/tsup/chunk-R2OPSKIV.cjs +244 -0
  47. package/dist/tsup/chunk-R2OPSKIV.cjs.map +1 -0
  48. package/dist/tsup/chunk-TZJKSBUQ.cjs +47 -0
  49. package/dist/tsup/chunk-TZJKSBUQ.cjs.map +1 -0
  50. package/dist/tsup/chunk-UBUC5C3G.cjs +189 -0
  51. package/dist/tsup/chunk-UBUC5C3G.cjs.map +1 -0
  52. package/dist/tsup/chunk-UIM22YJL.cjs +4406 -0
  53. package/dist/tsup/chunk-UIM22YJL.cjs.map +1 -0
  54. package/dist/tsup/chunk-URVFQMYI.cjs +230 -0
  55. package/dist/tsup/chunk-URVFQMYI.cjs.map +1 -0
  56. package/dist/tsup/chunk-UVUPOS46.js +230 -0
  57. package/dist/tsup/chunk-UVUPOS46.js.map +1 -0
  58. package/dist/tsup/chunk-VRRHBNJC.js +189 -0
  59. package/dist/tsup/chunk-VRRHBNJC.js.map +1 -0
  60. package/dist/tsup/chunk-XFSS33EQ.js +202 -0
  61. package/dist/tsup/chunk-XFSS33EQ.js.map +1 -0
  62. package/dist/tsup/client/mod.cjs +32 -0
  63. package/dist/tsup/client/mod.cjs.map +1 -0
  64. package/dist/tsup/client/mod.d.cts +26 -0
  65. package/dist/tsup/client/mod.d.ts +26 -0
  66. package/dist/tsup/client/mod.js +32 -0
  67. package/dist/tsup/client/mod.js.map +1 -0
  68. package/dist/tsup/common/log.cjs +13 -0
  69. package/dist/tsup/common/log.cjs.map +1 -0
  70. package/dist/tsup/common/log.d.cts +20 -0
  71. package/dist/tsup/common/log.d.ts +20 -0
  72. package/dist/tsup/common/log.js +13 -0
  73. package/dist/tsup/common/log.js.map +1 -0
  74. package/dist/tsup/common/websocket.cjs +10 -0
  75. package/dist/tsup/common/websocket.cjs.map +1 -0
  76. package/dist/tsup/common/websocket.d.cts +3 -0
  77. package/dist/tsup/common/websocket.d.ts +3 -0
  78. package/dist/tsup/common/websocket.js +10 -0
  79. package/dist/tsup/common/websocket.js.map +1 -0
  80. package/dist/tsup/common-CpqORuCq.d.cts +218 -0
  81. package/dist/tsup/common-CpqORuCq.d.ts +218 -0
  82. package/dist/tsup/connection-BR_Ve4ku.d.cts +2117 -0
  83. package/dist/tsup/connection-BwUMoe6n.d.ts +2117 -0
  84. package/dist/tsup/driver-helpers/mod.cjs +33 -0
  85. package/dist/tsup/driver-helpers/mod.cjs.map +1 -0
  86. package/dist/tsup/driver-helpers/mod.d.cts +18 -0
  87. package/dist/tsup/driver-helpers/mod.d.ts +18 -0
  88. package/dist/tsup/driver-helpers/mod.js +33 -0
  89. package/dist/tsup/driver-helpers/mod.js.map +1 -0
  90. package/dist/tsup/driver-test-suite/mod.cjs +4619 -0
  91. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -0
  92. package/dist/tsup/driver-test-suite/mod.d.cts +57 -0
  93. package/dist/tsup/driver-test-suite/mod.d.ts +57 -0
  94. package/dist/tsup/driver-test-suite/mod.js +4619 -0
  95. package/dist/tsup/driver-test-suite/mod.js.map +1 -0
  96. package/dist/tsup/inspector/mod.cjs +53 -0
  97. package/dist/tsup/inspector/mod.cjs.map +1 -0
  98. package/dist/tsup/inspector/mod.d.cts +408 -0
  99. package/dist/tsup/inspector/mod.d.ts +408 -0
  100. package/dist/tsup/inspector/mod.js +53 -0
  101. package/dist/tsup/inspector/mod.js.map +1 -0
  102. package/dist/tsup/mod.cjs +73 -0
  103. package/dist/tsup/mod.cjs.map +1 -0
  104. package/dist/tsup/mod.d.cts +100 -0
  105. package/dist/tsup/mod.d.ts +100 -0
  106. package/dist/tsup/mod.js +73 -0
  107. package/dist/tsup/mod.js.map +1 -0
  108. package/dist/tsup/router-endpoints-AYkXG8Tl.d.cts +66 -0
  109. package/dist/tsup/router-endpoints-DAbqVFx2.d.ts +66 -0
  110. package/dist/tsup/test/mod.cjs +21 -0
  111. package/dist/tsup/test/mod.cjs.map +1 -0
  112. package/dist/tsup/test/mod.d.cts +27 -0
  113. package/dist/tsup/test/mod.d.ts +27 -0
  114. package/dist/tsup/test/mod.js +21 -0
  115. package/dist/tsup/test/mod.js.map +1 -0
  116. package/dist/tsup/utils-CT0cv4jd.d.cts +17 -0
  117. package/dist/tsup/utils-CT0cv4jd.d.ts +17 -0
  118. package/dist/tsup/utils.cjs +26 -0
  119. package/dist/tsup/utils.cjs.map +1 -0
  120. package/dist/tsup/utils.d.cts +36 -0
  121. package/dist/tsup/utils.d.ts +36 -0
  122. package/dist/tsup/utils.js +26 -0
  123. package/dist/tsup/utils.js.map +1 -0
  124. package/package.json +208 -5
  125. package/src/actor/action.ts +182 -0
  126. package/src/actor/config.ts +765 -0
  127. package/src/actor/connection.ts +260 -0
  128. package/src/actor/context.ts +171 -0
  129. package/src/actor/database.ts +23 -0
  130. package/src/actor/definition.ts +86 -0
  131. package/src/actor/driver.ts +84 -0
  132. package/src/actor/errors.ts +360 -0
  133. package/src/actor/generic-conn-driver.ts +234 -0
  134. package/src/actor/instance.ts +1800 -0
  135. package/src/actor/log.ts +15 -0
  136. package/src/actor/mod.ts +113 -0
  137. package/src/actor/persisted.ts +42 -0
  138. package/src/actor/protocol/old.ts +281 -0
  139. package/src/actor/protocol/serde.ts +131 -0
  140. package/src/actor/router-endpoints.ts +685 -0
  141. package/src/actor/router.ts +263 -0
  142. package/src/actor/schedule.ts +17 -0
  143. package/src/actor/unstable-react.ts +110 -0
  144. package/src/actor/utils.ts +98 -0
  145. package/src/client/actor-common.ts +30 -0
  146. package/src/client/actor-conn.ts +804 -0
  147. package/src/client/actor-handle.ts +208 -0
  148. package/src/client/client.ts +623 -0
  149. package/src/client/errors.ts +41 -0
  150. package/src/client/http-client-driver.ts +326 -0
  151. package/src/client/log.ts +7 -0
  152. package/src/client/mod.ts +56 -0
  153. package/src/client/raw-utils.ts +92 -0
  154. package/src/client/test.ts +44 -0
  155. package/src/client/utils.ts +150 -0
  156. package/src/common/eventsource-interface.ts +47 -0
  157. package/src/common/eventsource.ts +80 -0
  158. package/src/common/fake-event-source.ts +266 -0
  159. package/src/common/inline-websocket-adapter2.ts +445 -0
  160. package/src/common/log-levels.ts +27 -0
  161. package/src/common/log.ts +139 -0
  162. package/src/common/logfmt.ts +228 -0
  163. package/src/common/network.ts +2 -0
  164. package/src/common/router.ts +87 -0
  165. package/src/common/utils.ts +322 -0
  166. package/src/common/versioned-data.ts +95 -0
  167. package/src/common/websocket-interface.ts +49 -0
  168. package/src/common/websocket.ts +43 -0
  169. package/src/driver-helpers/mod.ts +22 -0
  170. package/src/driver-helpers/utils.ts +17 -0
  171. package/src/driver-test-suite/log.ts +7 -0
  172. package/src/driver-test-suite/mod.ts +213 -0
  173. package/src/driver-test-suite/test-inline-client-driver.ts +402 -0
  174. package/src/driver-test-suite/tests/action-features.ts +136 -0
  175. package/src/driver-test-suite/tests/actor-auth.ts +591 -0
  176. package/src/driver-test-suite/tests/actor-conn-state.ts +249 -0
  177. package/src/driver-test-suite/tests/actor-conn.ts +349 -0
  178. package/src/driver-test-suite/tests/actor-driver.ts +25 -0
  179. package/src/driver-test-suite/tests/actor-error-handling.ts +158 -0
  180. package/src/driver-test-suite/tests/actor-handle.ts +259 -0
  181. package/src/driver-test-suite/tests/actor-inline-client.ts +152 -0
  182. package/src/driver-test-suite/tests/actor-inspector.ts +570 -0
  183. package/src/driver-test-suite/tests/actor-metadata.ts +116 -0
  184. package/src/driver-test-suite/tests/actor-onstatechange.ts +95 -0
  185. package/src/driver-test-suite/tests/actor-schedule.ts +108 -0
  186. package/src/driver-test-suite/tests/actor-sleep.ts +413 -0
  187. package/src/driver-test-suite/tests/actor-state.ts +54 -0
  188. package/src/driver-test-suite/tests/actor-vars.ts +93 -0
  189. package/src/driver-test-suite/tests/manager-driver.ts +365 -0
  190. package/src/driver-test-suite/tests/raw-http-direct-registry.ts +226 -0
  191. package/src/driver-test-suite/tests/raw-http-request-properties.ts +414 -0
  192. package/src/driver-test-suite/tests/raw-http.ts +347 -0
  193. package/src/driver-test-suite/tests/raw-websocket-direct-registry.ts +392 -0
  194. package/src/driver-test-suite/tests/raw-websocket.ts +484 -0
  195. package/src/driver-test-suite/tests/request-access.ts +244 -0
  196. package/src/driver-test-suite/utils.ts +68 -0
  197. package/src/drivers/default.ts +31 -0
  198. package/src/drivers/engine/actor-driver.ts +360 -0
  199. package/src/drivers/engine/api-endpoints.ts +128 -0
  200. package/src/drivers/engine/api-utils.ts +70 -0
  201. package/src/drivers/engine/config.ts +39 -0
  202. package/src/drivers/engine/keys.test.ts +266 -0
  203. package/src/drivers/engine/keys.ts +89 -0
  204. package/src/drivers/engine/kv.ts +3 -0
  205. package/src/drivers/engine/log.ts +7 -0
  206. package/src/drivers/engine/manager-driver.ts +391 -0
  207. package/src/drivers/engine/mod.ts +36 -0
  208. package/src/drivers/engine/ws-proxy.ts +170 -0
  209. package/src/drivers/file-system/actor.ts +91 -0
  210. package/src/drivers/file-system/global-state.ts +673 -0
  211. package/src/drivers/file-system/log.ts +7 -0
  212. package/src/drivers/file-system/manager.ts +306 -0
  213. package/src/drivers/file-system/mod.ts +48 -0
  214. package/src/drivers/file-system/utils.ts +109 -0
  215. package/src/globals.d.ts +6 -0
  216. package/src/inline-client-driver/log.ts +7 -0
  217. package/src/inline-client-driver/mod.ts +385 -0
  218. package/src/inspector/actor.ts +298 -0
  219. package/src/inspector/config.ts +83 -0
  220. package/src/inspector/log.ts +5 -0
  221. package/src/inspector/manager.ts +86 -0
  222. package/src/inspector/mod.ts +2 -0
  223. package/src/inspector/protocol/actor.ts +10 -0
  224. package/src/inspector/protocol/common.ts +196 -0
  225. package/src/inspector/protocol/manager.ts +10 -0
  226. package/src/inspector/protocol/mod.ts +2 -0
  227. package/src/inspector/utils.ts +76 -0
  228. package/src/manager/auth.ts +121 -0
  229. package/src/manager/driver.ts +80 -0
  230. package/src/manager/hono-websocket-adapter.ts +333 -0
  231. package/src/manager/log.ts +7 -0
  232. package/src/manager/mod.ts +2 -0
  233. package/src/manager/protocol/mod.ts +24 -0
  234. package/src/manager/protocol/query.ts +89 -0
  235. package/src/manager/router.ts +1792 -0
  236. package/src/mod.ts +20 -0
  237. package/src/registry/config.ts +32 -0
  238. package/src/registry/log.ts +7 -0
  239. package/src/registry/mod.ts +124 -0
  240. package/src/registry/run-config.ts +54 -0
  241. package/src/registry/serve.ts +53 -0
  242. package/src/schemas/actor-persist/mod.ts +1 -0
  243. package/src/schemas/actor-persist/versioned.ts +25 -0
  244. package/src/schemas/client-protocol/mod.ts +1 -0
  245. package/src/schemas/client-protocol/versioned.ts +63 -0
  246. package/src/schemas/file-system-driver/mod.ts +1 -0
  247. package/src/schemas/file-system-driver/versioned.ts +28 -0
  248. package/src/serde.ts +84 -0
  249. package/src/test/config.ts +16 -0
  250. package/src/test/log.ts +7 -0
  251. package/src/test/mod.ts +153 -0
  252. package/src/utils.ts +172 -0
  253. package/README.md +0 -13
@@ -0,0 +1,1790 @@
1
+ import {
2
+ getLogger
3
+ } from "./chunk-XFSS33EQ.js";
4
+ import {
5
+ assertUnreachable,
6
+ bufferToArrayBuffer,
7
+ deconstructError,
8
+ stringifyError
9
+ } from "./chunk-3H7O2A7I.js";
10
+ import {
11
+ ConnNotFound,
12
+ ConnStateNotEnabled,
13
+ IncorrectConnToken,
14
+ InvalidEncoding,
15
+ InvalidParams,
16
+ InvalidQueryJSON,
17
+ InvalidRequest,
18
+ MalformedMessage,
19
+ MessageTooLong,
20
+ Unreachable,
21
+ Unsupported
22
+ } from "./chunk-INGJP237.js";
23
+
24
+ // src/actor/connection.ts
25
+ import * as cbor2 from "cbor-x";
26
+
27
+ // src/common/versioned-data.ts
28
+ var VersionedDataHandler = class {
29
+ constructor(config2) {
30
+ this.config = config2;
31
+ }
32
+ serializeWithEmbeddedVersion(data) {
33
+ const versioned = {
34
+ version: this.config.currentVersion,
35
+ data: this.config.serializeVersion(data)
36
+ };
37
+ return this.embedVersion(versioned);
38
+ }
39
+ deserializeWithEmbeddedVersion(bytes) {
40
+ const versioned = this.extractVersion(bytes);
41
+ return this.deserialize(versioned.data, versioned.version);
42
+ }
43
+ serialize(data, version) {
44
+ return this.config.serializeVersion(data);
45
+ }
46
+ deserialize(bytes, version) {
47
+ if (version === this.config.currentVersion) {
48
+ return this.config.deserializeVersion(bytes);
49
+ }
50
+ if (version > this.config.currentVersion) {
51
+ throw new Error(
52
+ `Cannot decode data from version ${version}, current version is ${this.config.currentVersion}`
53
+ );
54
+ }
55
+ let currentData = this.config.deserializeVersion(bytes);
56
+ let currentVersion = version;
57
+ while (currentVersion < this.config.currentVersion) {
58
+ const migration = this.config.migrations.get(currentVersion);
59
+ if (!migration) {
60
+ throw new Error(
61
+ `No migration found from version ${currentVersion} to ${currentVersion + 1}`
62
+ );
63
+ }
64
+ currentData = migration(currentData);
65
+ currentVersion++;
66
+ }
67
+ return currentData;
68
+ }
69
+ embedVersion(data) {
70
+ const versionBytes = new Uint8Array(4);
71
+ new DataView(versionBytes.buffer).setUint32(0, data.version, true);
72
+ const result = new Uint8Array(versionBytes.length + data.data.length);
73
+ result.set(versionBytes);
74
+ result.set(data.data, versionBytes.length);
75
+ return result;
76
+ }
77
+ extractVersion(bytes) {
78
+ if (bytes.length < 4) {
79
+ throw new Error("Invalid versioned data: too short");
80
+ }
81
+ const version = new DataView(bytes.buffer, bytes.byteOffset).getUint32(
82
+ 0,
83
+ true
84
+ );
85
+ const data = bytes.slice(4);
86
+ return { version, data };
87
+ }
88
+ };
89
+ function createVersionedDataHandler(config2) {
90
+ return new VersionedDataHandler(config2);
91
+ }
92
+
93
+ // dist/schemas/client-protocol/v1.ts
94
+ import * as bare from "@bare-ts/lib";
95
+ var config = /* @__PURE__ */ bare.Config({});
96
+ function readInit(bc) {
97
+ return {
98
+ actorId: bare.readString(bc),
99
+ connectionId: bare.readString(bc),
100
+ connectionToken: bare.readString(bc)
101
+ };
102
+ }
103
+ function writeInit(bc, x) {
104
+ bare.writeString(bc, x.actorId);
105
+ bare.writeString(bc, x.connectionId);
106
+ bare.writeString(bc, x.connectionToken);
107
+ }
108
+ function read0(bc) {
109
+ return bare.readBool(bc) ? bare.readData(bc) : null;
110
+ }
111
+ function write0(bc, x) {
112
+ bare.writeBool(bc, x !== null);
113
+ if (x !== null) {
114
+ bare.writeData(bc, x);
115
+ }
116
+ }
117
+ function read1(bc) {
118
+ return bare.readBool(bc) ? bare.readUint(bc) : null;
119
+ }
120
+ function write1(bc, x) {
121
+ bare.writeBool(bc, x !== null);
122
+ if (x !== null) {
123
+ bare.writeUint(bc, x);
124
+ }
125
+ }
126
+ function readError(bc) {
127
+ return {
128
+ code: bare.readString(bc),
129
+ message: bare.readString(bc),
130
+ metadata: read0(bc),
131
+ actionId: read1(bc)
132
+ };
133
+ }
134
+ function writeError(bc, x) {
135
+ bare.writeString(bc, x.code);
136
+ bare.writeString(bc, x.message);
137
+ write0(bc, x.metadata);
138
+ write1(bc, x.actionId);
139
+ }
140
+ function readActionResponse(bc) {
141
+ return {
142
+ id: bare.readUint(bc),
143
+ output: bare.readData(bc)
144
+ };
145
+ }
146
+ function writeActionResponse(bc, x) {
147
+ bare.writeUint(bc, x.id);
148
+ bare.writeData(bc, x.output);
149
+ }
150
+ function readEvent(bc) {
151
+ return {
152
+ name: bare.readString(bc),
153
+ args: bare.readData(bc)
154
+ };
155
+ }
156
+ function writeEvent(bc, x) {
157
+ bare.writeString(bc, x.name);
158
+ bare.writeData(bc, x.args);
159
+ }
160
+ function readToClientBody(bc) {
161
+ const offset = bc.offset;
162
+ const tag = bare.readU8(bc);
163
+ switch (tag) {
164
+ case 0:
165
+ return { tag: "Init", val: readInit(bc) };
166
+ case 1:
167
+ return { tag: "Error", val: readError(bc) };
168
+ case 2:
169
+ return { tag: "ActionResponse", val: readActionResponse(bc) };
170
+ case 3:
171
+ return { tag: "Event", val: readEvent(bc) };
172
+ default: {
173
+ bc.offset = offset;
174
+ throw new bare.BareError(offset, "invalid tag");
175
+ }
176
+ }
177
+ }
178
+ function writeToClientBody(bc, x) {
179
+ switch (x.tag) {
180
+ case "Init": {
181
+ bare.writeU8(bc, 0);
182
+ writeInit(bc, x.val);
183
+ break;
184
+ }
185
+ case "Error": {
186
+ bare.writeU8(bc, 1);
187
+ writeError(bc, x.val);
188
+ break;
189
+ }
190
+ case "ActionResponse": {
191
+ bare.writeU8(bc, 2);
192
+ writeActionResponse(bc, x.val);
193
+ break;
194
+ }
195
+ case "Event": {
196
+ bare.writeU8(bc, 3);
197
+ writeEvent(bc, x.val);
198
+ break;
199
+ }
200
+ }
201
+ }
202
+ function readToClient(bc) {
203
+ return {
204
+ body: readToClientBody(bc)
205
+ };
206
+ }
207
+ function writeToClient(bc, x) {
208
+ writeToClientBody(bc, x.body);
209
+ }
210
+ function encodeToClient(x) {
211
+ const bc = new bare.ByteCursor(
212
+ new Uint8Array(config.initialBufferLength),
213
+ config
214
+ );
215
+ writeToClient(bc, x);
216
+ return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset);
217
+ }
218
+ function decodeToClient(bytes) {
219
+ const bc = new bare.ByteCursor(bytes, config);
220
+ const result = readToClient(bc);
221
+ if (bc.offset < bc.view.byteLength) {
222
+ throw new bare.BareError(bc.offset, "remaining bytes");
223
+ }
224
+ return result;
225
+ }
226
+ function readActionRequest(bc) {
227
+ return {
228
+ id: bare.readUint(bc),
229
+ name: bare.readString(bc),
230
+ args: bare.readData(bc)
231
+ };
232
+ }
233
+ function writeActionRequest(bc, x) {
234
+ bare.writeUint(bc, x.id);
235
+ bare.writeString(bc, x.name);
236
+ bare.writeData(bc, x.args);
237
+ }
238
+ function readSubscriptionRequest(bc) {
239
+ return {
240
+ eventName: bare.readString(bc),
241
+ subscribe: bare.readBool(bc)
242
+ };
243
+ }
244
+ function writeSubscriptionRequest(bc, x) {
245
+ bare.writeString(bc, x.eventName);
246
+ bare.writeBool(bc, x.subscribe);
247
+ }
248
+ function readToServerBody(bc) {
249
+ const offset = bc.offset;
250
+ const tag = bare.readU8(bc);
251
+ switch (tag) {
252
+ case 0:
253
+ return { tag: "ActionRequest", val: readActionRequest(bc) };
254
+ case 1:
255
+ return { tag: "SubscriptionRequest", val: readSubscriptionRequest(bc) };
256
+ default: {
257
+ bc.offset = offset;
258
+ throw new bare.BareError(offset, "invalid tag");
259
+ }
260
+ }
261
+ }
262
+ function writeToServerBody(bc, x) {
263
+ switch (x.tag) {
264
+ case "ActionRequest": {
265
+ bare.writeU8(bc, 0);
266
+ writeActionRequest(bc, x.val);
267
+ break;
268
+ }
269
+ case "SubscriptionRequest": {
270
+ bare.writeU8(bc, 1);
271
+ writeSubscriptionRequest(bc, x.val);
272
+ break;
273
+ }
274
+ }
275
+ }
276
+ function readToServer(bc) {
277
+ return {
278
+ body: readToServerBody(bc)
279
+ };
280
+ }
281
+ function writeToServer(bc, x) {
282
+ writeToServerBody(bc, x.body);
283
+ }
284
+ function encodeToServer(x) {
285
+ const bc = new bare.ByteCursor(
286
+ new Uint8Array(config.initialBufferLength),
287
+ config
288
+ );
289
+ writeToServer(bc, x);
290
+ return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset);
291
+ }
292
+ function decodeToServer(bytes) {
293
+ const bc = new bare.ByteCursor(bytes, config);
294
+ const result = readToServer(bc);
295
+ if (bc.offset < bc.view.byteLength) {
296
+ throw new bare.BareError(bc.offset, "remaining bytes");
297
+ }
298
+ return result;
299
+ }
300
+ function readHttpActionRequest(bc) {
301
+ return {
302
+ args: bare.readData(bc)
303
+ };
304
+ }
305
+ function writeHttpActionRequest(bc, x) {
306
+ bare.writeData(bc, x.args);
307
+ }
308
+ function encodeHttpActionRequest(x) {
309
+ const bc = new bare.ByteCursor(
310
+ new Uint8Array(config.initialBufferLength),
311
+ config
312
+ );
313
+ writeHttpActionRequest(bc, x);
314
+ return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset);
315
+ }
316
+ function decodeHttpActionRequest(bytes) {
317
+ const bc = new bare.ByteCursor(bytes, config);
318
+ const result = readHttpActionRequest(bc);
319
+ if (bc.offset < bc.view.byteLength) {
320
+ throw new bare.BareError(bc.offset, "remaining bytes");
321
+ }
322
+ return result;
323
+ }
324
+ function readHttpActionResponse(bc) {
325
+ return {
326
+ output: bare.readData(bc)
327
+ };
328
+ }
329
+ function writeHttpActionResponse(bc, x) {
330
+ bare.writeData(bc, x.output);
331
+ }
332
+ function encodeHttpActionResponse(x) {
333
+ const bc = new bare.ByteCursor(
334
+ new Uint8Array(config.initialBufferLength),
335
+ config
336
+ );
337
+ writeHttpActionResponse(bc, x);
338
+ return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset);
339
+ }
340
+ function decodeHttpActionResponse(bytes) {
341
+ const bc = new bare.ByteCursor(bytes, config);
342
+ const result = readHttpActionResponse(bc);
343
+ if (bc.offset < bc.view.byteLength) {
344
+ throw new bare.BareError(bc.offset, "remaining bytes");
345
+ }
346
+ return result;
347
+ }
348
+ function readHttpResponseError(bc) {
349
+ return {
350
+ code: bare.readString(bc),
351
+ message: bare.readString(bc),
352
+ metadata: read0(bc)
353
+ };
354
+ }
355
+ function writeHttpResponseError(bc, x) {
356
+ bare.writeString(bc, x.code);
357
+ bare.writeString(bc, x.message);
358
+ write0(bc, x.metadata);
359
+ }
360
+ function encodeHttpResponseError(x) {
361
+ const bc = new bare.ByteCursor(
362
+ new Uint8Array(config.initialBufferLength),
363
+ config
364
+ );
365
+ writeHttpResponseError(bc, x);
366
+ return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset);
367
+ }
368
+ function decodeHttpResponseError(bytes) {
369
+ const bc = new bare.ByteCursor(bytes, config);
370
+ const result = readHttpResponseError(bc);
371
+ if (bc.offset < bc.view.byteLength) {
372
+ throw new bare.BareError(bc.offset, "remaining bytes");
373
+ }
374
+ return result;
375
+ }
376
+ function readHttpResolveResponse(bc) {
377
+ return {
378
+ actorId: bare.readString(bc)
379
+ };
380
+ }
381
+ function writeHttpResolveResponse(bc, x) {
382
+ bare.writeString(bc, x.actorId);
383
+ }
384
+ function encodeHttpResolveResponse(x) {
385
+ const bc = new bare.ByteCursor(
386
+ new Uint8Array(config.initialBufferLength),
387
+ config
388
+ );
389
+ writeHttpResolveResponse(bc, x);
390
+ return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset);
391
+ }
392
+ function decodeHttpResolveResponse(bytes) {
393
+ const bc = new bare.ByteCursor(bytes, config);
394
+ const result = readHttpResolveResponse(bc);
395
+ if (bc.offset < bc.view.byteLength) {
396
+ throw new bare.BareError(bc.offset, "remaining bytes");
397
+ }
398
+ return result;
399
+ }
400
+
401
+ // src/schemas/client-protocol/versioned.ts
402
+ var CURRENT_VERSION = 1;
403
+ var migrations = /* @__PURE__ */ new Map();
404
+ var TO_SERVER_VERSIONED = createVersionedDataHandler({
405
+ currentVersion: CURRENT_VERSION,
406
+ migrations,
407
+ serializeVersion: (data) => encodeToServer(data),
408
+ deserializeVersion: (bytes) => decodeToServer(bytes)
409
+ });
410
+ var TO_CLIENT_VERSIONED = createVersionedDataHandler({
411
+ currentVersion: CURRENT_VERSION,
412
+ migrations,
413
+ serializeVersion: (data) => encodeToClient(data),
414
+ deserializeVersion: (bytes) => decodeToClient(bytes)
415
+ });
416
+ var HTTP_ACTION_REQUEST_VERSIONED = createVersionedDataHandler({
417
+ currentVersion: CURRENT_VERSION,
418
+ migrations,
419
+ serializeVersion: (data) => encodeHttpActionRequest(data),
420
+ deserializeVersion: (bytes) => decodeHttpActionRequest(bytes)
421
+ });
422
+ var HTTP_ACTION_RESPONSE_VERSIONED = createVersionedDataHandler({
423
+ currentVersion: CURRENT_VERSION,
424
+ migrations,
425
+ serializeVersion: (data) => encodeHttpActionResponse(data),
426
+ deserializeVersion: (bytes) => decodeHttpActionResponse(bytes)
427
+ });
428
+ var HTTP_RESPONSE_ERROR_VERSIONED = createVersionedDataHandler({
429
+ currentVersion: CURRENT_VERSION,
430
+ migrations,
431
+ serializeVersion: (data) => encodeHttpResponseError(data),
432
+ deserializeVersion: (bytes) => decodeHttpResponseError(bytes)
433
+ });
434
+ var HTTP_RESOLVE_REQUEST_VERSIONED = createVersionedDataHandler({
435
+ currentVersion: CURRENT_VERSION,
436
+ migrations,
437
+ serializeVersion: (_) => new Uint8Array(),
438
+ deserializeVersion: (bytes) => null
439
+ });
440
+ var HTTP_RESOLVE_RESPONSE_VERSIONED = createVersionedDataHandler({
441
+ currentVersion: CURRENT_VERSION,
442
+ migrations,
443
+ serializeVersion: (data) => encodeHttpResolveResponse(data),
444
+ deserializeVersion: (bytes) => decodeHttpResolveResponse(bytes)
445
+ });
446
+
447
+ // src/actor/log.ts
448
+ var RUNTIME_LOGGER_NAME = "actor-runtime";
449
+ var ACTOR_LOGGER_NAME = "actor";
450
+ function logger() {
451
+ return getLogger(RUNTIME_LOGGER_NAME);
452
+ }
453
+ function instanceLogger() {
454
+ return getLogger(ACTOR_LOGGER_NAME);
455
+ }
456
+
457
+ // src/actor/protocol/serde.ts
458
+ import { z } from "zod";
459
+
460
+ // src/serde.ts
461
+ import * as cbor from "cbor-x";
462
+ import invariant from "invariant";
463
+ function encodingIsBinary(encoding) {
464
+ if (encoding === "json") {
465
+ return false;
466
+ } else if (encoding === "cbor" || encoding === "bare") {
467
+ return true;
468
+ } else {
469
+ assertUnreachable(encoding);
470
+ }
471
+ }
472
+ function contentTypeForEncoding(encoding) {
473
+ if (encoding === "json") {
474
+ return "application/json";
475
+ } else if (encoding === "cbor" || encoding === "bare") {
476
+ return "application/octet-stream";
477
+ } else {
478
+ assertUnreachable(encoding);
479
+ }
480
+ }
481
+ function wsBinaryTypeForEncoding(encoding) {
482
+ if (encoding === "json") {
483
+ return "blob";
484
+ } else if (encoding === "cbor" || encoding === "bare") {
485
+ return "arraybuffer";
486
+ } else {
487
+ assertUnreachable(encoding);
488
+ }
489
+ }
490
+ function serializeWithEncoding(encoding, value, versionedDataHandler) {
491
+ if (encoding === "json") {
492
+ return jsonStringifyCompat(value);
493
+ } else if (encoding === "cbor") {
494
+ return cbor.encode(value);
495
+ } else if (encoding === "bare") {
496
+ return versionedDataHandler.serializeWithEmbeddedVersion(value);
497
+ } else {
498
+ assertUnreachable(encoding);
499
+ }
500
+ }
501
+ function deserializeWithEncoding(encoding, buffer, versionedDataHandler) {
502
+ if (encoding === "json") {
503
+ if (typeof buffer === "string") {
504
+ return JSON.parse(buffer);
505
+ } else {
506
+ const decoder = new TextDecoder("utf-8");
507
+ const jsonString = decoder.decode(buffer);
508
+ return JSON.parse(jsonString);
509
+ }
510
+ } else if (encoding === "cbor") {
511
+ invariant(
512
+ typeof buffer !== "string",
513
+ "buffer cannot be string for cbor encoding"
514
+ );
515
+ return cbor.decode(buffer);
516
+ } else if (encoding === "bare") {
517
+ invariant(
518
+ typeof buffer !== "string",
519
+ "buffer cannot be string for bare encoding"
520
+ );
521
+ return versionedDataHandler.deserializeWithEmbeddedVersion(buffer);
522
+ } else {
523
+ assertUnreachable(encoding);
524
+ }
525
+ }
526
+
527
+ // src/actor/utils.ts
528
+ function assertUnreachable2(x) {
529
+ logger().error("unreachable", { value: `${x}`, stack: new Error().stack });
530
+ throw new Unreachable(x);
531
+ }
532
+ var DeadlineError = class extends Error {
533
+ constructor() {
534
+ super("Promise did not complete before deadline.");
535
+ }
536
+ };
537
+ function deadline(promise, timeout) {
538
+ const controller = new AbortController();
539
+ const signal = controller.signal;
540
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
541
+ return Promise.race([
542
+ promise,
543
+ new Promise((_, reject) => {
544
+ signal.addEventListener("abort", () => reject(new DeadlineError()));
545
+ })
546
+ ]).finally(() => {
547
+ clearTimeout(timeoutId);
548
+ });
549
+ }
550
+ function generateSecureToken(length = 32) {
551
+ const array = new Uint8Array(length);
552
+ crypto.getRandomValues(array);
553
+ return btoa(String.fromCharCode(...array));
554
+ }
555
+ function generateRandomString(length = 32) {
556
+ const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
557
+ let result = "";
558
+ for (let i = 0; i < length; i++) {
559
+ const randomIndex = Math.floor(Math.random() * characters.length);
560
+ result += characters[randomIndex];
561
+ }
562
+ return result;
563
+ }
564
+
565
+ // src/actor/protocol/serde.ts
566
+ var EncodingSchema = z.enum(["json", "cbor", "bare"]);
567
+ var CachedSerializer = class {
568
+ #data;
569
+ #cache = /* @__PURE__ */ new Map();
570
+ #versionedDataHandler;
571
+ constructor(data, versionedDataHandler) {
572
+ this.#data = data;
573
+ this.#versionedDataHandler = versionedDataHandler;
574
+ }
575
+ get rawData() {
576
+ return this.#data;
577
+ }
578
+ serialize(encoding) {
579
+ const cached = this.#cache.get(encoding);
580
+ if (cached) {
581
+ return cached;
582
+ } else {
583
+ const serialized = serializeWithEncoding(
584
+ encoding,
585
+ this.#data,
586
+ this.#versionedDataHandler
587
+ );
588
+ this.#cache.set(encoding, serialized);
589
+ return serialized;
590
+ }
591
+ }
592
+ };
593
+ function base64EncodeUint8Array(uint8Array) {
594
+ let binary = "";
595
+ const len = uint8Array.byteLength;
596
+ for (let i = 0; i < len; i++) {
597
+ binary += String.fromCharCode(uint8Array[i]);
598
+ }
599
+ return btoa(binary);
600
+ }
601
+ function base64EncodeArrayBuffer(arrayBuffer) {
602
+ const uint8Array = new Uint8Array(arrayBuffer);
603
+ return base64EncodeUint8Array(uint8Array);
604
+ }
605
+ function encodeDataToString(message) {
606
+ if (typeof message === "string") {
607
+ return message;
608
+ } else if (message instanceof ArrayBuffer) {
609
+ return base64EncodeArrayBuffer(message);
610
+ } else if (message instanceof Uint8Array) {
611
+ return base64EncodeUint8Array(message);
612
+ } else {
613
+ assertUnreachable2(message);
614
+ }
615
+ }
616
+ function jsonStringifyCompat(input) {
617
+ return JSON.stringify(
618
+ input,
619
+ (_key, value) => typeof value === "bigint" ? value.toString() : value
620
+ );
621
+ }
622
+
623
+ // src/actor/connection.ts
624
+ function generateConnId() {
625
+ return crypto.randomUUID();
626
+ }
627
+ function generateConnToken() {
628
+ return generateSecureToken(32);
629
+ }
630
+ var CONNECTION_DRIVER_WEBSOCKET = "webSocket";
631
+ var CONNECTION_DRIVER_SSE = "sse";
632
+ var CONNECTION_DRIVER_HTTP = "http";
633
+ var CONNECTION_CHECK_LIVENESS_SYMBOL = Symbol("checkLiveness");
634
+ var Conn = class {
635
+ subscriptions = /* @__PURE__ */ new Set();
636
+ #stateEnabled;
637
+ // TODO: Remove this cyclical reference
638
+ #actor;
639
+ #status = "connected";
640
+ /**
641
+ * The proxied state that notifies of changes automatically.
642
+ *
643
+ * Any data that should be stored indefinitely should be held within this object.
644
+ */
645
+ __persist;
646
+ /**
647
+ * Driver used to manage realtime connection communication.
648
+ *
649
+ * @protected
650
+ */
651
+ #driver;
652
+ get params() {
653
+ return this.__persist.params;
654
+ }
655
+ get auth() {
656
+ return this.__persist.authData;
657
+ }
658
+ get driver() {
659
+ return this.__persist.connDriver;
660
+ }
661
+ get _stateEnabled() {
662
+ return this.#stateEnabled;
663
+ }
664
+ /**
665
+ * Gets the current state of the connection.
666
+ *
667
+ * Throws an error if the state is not enabled.
668
+ */
669
+ get state() {
670
+ this.#validateStateEnabled();
671
+ if (!this.__persist.state) throw new Error("state should exists");
672
+ return this.__persist.state;
673
+ }
674
+ /**
675
+ * Sets the state of the connection.
676
+ *
677
+ * Throws an error if the state is not enabled.
678
+ */
679
+ set state(value) {
680
+ this.#validateStateEnabled();
681
+ this.__persist.state = value;
682
+ }
683
+ /**
684
+ * Unique identifier for the connection.
685
+ */
686
+ get id() {
687
+ return this.__persist.connId;
688
+ }
689
+ /**
690
+ * Token used to authenticate this request.
691
+ */
692
+ get _token() {
693
+ return this.__persist.token;
694
+ }
695
+ /**
696
+ * Status of the connection.
697
+ */
698
+ get status() {
699
+ return this.#status;
700
+ }
701
+ /**
702
+ * Timestamp of the last time the connection was seen, i.e. the last time the connection was active and checked for liveness.
703
+ */
704
+ get lastSeen() {
705
+ return this.__persist.lastSeen;
706
+ }
707
+ /**
708
+ * Initializes a new instance of the Connection class.
709
+ *
710
+ * This should only be constructed by {@link Actor}.
711
+ *
712
+ * @protected
713
+ */
714
+ constructor(actor, persist, driver, stateEnabled) {
715
+ this.#actor = actor;
716
+ this.__persist = persist;
717
+ this.#driver = driver;
718
+ this.#stateEnabled = stateEnabled;
719
+ }
720
+ #validateStateEnabled() {
721
+ if (!this.#stateEnabled) {
722
+ throw new ConnStateNotEnabled();
723
+ }
724
+ }
725
+ /**
726
+ * Sends a WebSocket message to the client.
727
+ *
728
+ * @param message - The message to send.
729
+ *
730
+ * @protected
731
+ */
732
+ _sendMessage(message) {
733
+ var _a, _b;
734
+ (_b = (_a = this.#driver).sendMessage) == null ? void 0 : _b.call(
735
+ _a,
736
+ this.#actor,
737
+ this,
738
+ this.__persist.connDriverState,
739
+ message
740
+ );
741
+ }
742
+ /**
743
+ * Sends an event with arguments to the client.
744
+ *
745
+ * @param eventName - The name of the event.
746
+ * @param args - The arguments for the event.
747
+ * @see {@link https://rivet.gg/docs/events|Events Documentation}
748
+ */
749
+ send(eventName, ...args) {
750
+ this.#actor.inspector.emitter.emit("eventFired", {
751
+ type: "event",
752
+ eventName,
753
+ args,
754
+ connId: this.id
755
+ });
756
+ this._sendMessage(
757
+ new CachedSerializer(
758
+ {
759
+ body: {
760
+ tag: "Event",
761
+ val: {
762
+ name: eventName,
763
+ args: bufferToArrayBuffer(cbor2.encode(args))
764
+ }
765
+ }
766
+ },
767
+ TO_CLIENT_VERSIONED
768
+ )
769
+ );
770
+ }
771
+ /**
772
+ * Disconnects the client with an optional reason.
773
+ *
774
+ * @param reason - The reason for disconnection.
775
+ */
776
+ async disconnect(reason) {
777
+ this.#status = "reconnecting";
778
+ await this.#driver.disconnect(
779
+ this.#actor,
780
+ this,
781
+ this.__persist.connDriverState,
782
+ reason
783
+ );
784
+ }
785
+ /**
786
+ * This method checks the connection's liveness by querying the driver for its ready state.
787
+ * If the connection is not closed, it updates the last liveness timestamp and returns `true`.
788
+ * Otherwise, it returns `false`.
789
+ * @internal
790
+ */
791
+ [CONNECTION_CHECK_LIVENESS_SYMBOL]() {
792
+ const readyState = this.#driver.getConnectionReadyState(this.#actor, this);
793
+ const isConnectionClosed = readyState === 3 /* CLOSED */ || readyState === 2 /* CLOSING */ || readyState === void 0;
794
+ const newLastSeen = Date.now();
795
+ const newStatus = isConnectionClosed ? "reconnecting" : "connected";
796
+ logger().debug("liveness probe for connection", {
797
+ connId: this.id,
798
+ actorId: this.#actor.id,
799
+ readyState,
800
+ status: this.#status,
801
+ newStatus,
802
+ lastSeen: this.__persist.lastSeen,
803
+ currentTs: newLastSeen
804
+ });
805
+ if (!isConnectionClosed) {
806
+ this.__persist.lastSeen = newLastSeen;
807
+ }
808
+ this.#status = newStatus;
809
+ return {
810
+ status: this.#status,
811
+ lastSeen: this.__persist.lastSeen
812
+ };
813
+ }
814
+ };
815
+
816
+ // src/actor/router-endpoints.ts
817
+ import * as cbor4 from "cbor-x";
818
+ import { streamSSE } from "hono/streaming";
819
+
820
+ // src/actor/action.ts
821
+ var ActionContext = class {
822
+ /**
823
+ * Should not be called directly.
824
+ *
825
+ * @param actorContext - The actor context
826
+ * @param conn - The connection associated with the action
827
+ */
828
+ constructor(actorContext, conn) {
829
+ this.conn = conn;
830
+ this.#actorContext = actorContext;
831
+ }
832
+ #actorContext;
833
+ /**
834
+ * Get the actor state
835
+ */
836
+ get state() {
837
+ return this.#actorContext.state;
838
+ }
839
+ /**
840
+ * Get the actor variables
841
+ */
842
+ get vars() {
843
+ return this.#actorContext.vars;
844
+ }
845
+ /**
846
+ * Broadcasts an event to all connected clients.
847
+ */
848
+ broadcast(name, ...args) {
849
+ this.#actorContext.broadcast(name, ...args);
850
+ }
851
+ /**
852
+ * Gets the logger instance.
853
+ */
854
+ get log() {
855
+ return this.#actorContext.log;
856
+ }
857
+ /**
858
+ * Gets actor ID.
859
+ */
860
+ get actorId() {
861
+ return this.#actorContext.actorId;
862
+ }
863
+ /**
864
+ * Gets the actor name.
865
+ */
866
+ get name() {
867
+ return this.#actorContext.name;
868
+ }
869
+ /**
870
+ * Gets the actor key.
871
+ */
872
+ get key() {
873
+ return this.#actorContext.key;
874
+ }
875
+ /**
876
+ * Gets the region.
877
+ */
878
+ get region() {
879
+ return this.#actorContext.region;
880
+ }
881
+ /**
882
+ * Gets the scheduler.
883
+ */
884
+ get schedule() {
885
+ return this.#actorContext.schedule;
886
+ }
887
+ /**
888
+ * Gets the map of connections.
889
+ */
890
+ get conns() {
891
+ return this.#actorContext.conns;
892
+ }
893
+ /**
894
+ * Returns the client for the given registry.
895
+ */
896
+ client() {
897
+ return this.#actorContext.client();
898
+ }
899
+ /**
900
+ * @experimental
901
+ */
902
+ get db() {
903
+ return this.#actorContext.db;
904
+ }
905
+ /**
906
+ * Forces the state to get saved.
907
+ */
908
+ async saveState(opts) {
909
+ return this.#actorContext.saveState(opts);
910
+ }
911
+ /**
912
+ * Prevents the actor from sleeping until promise is complete.
913
+ */
914
+ waitUntil(promise) {
915
+ this.#actorContext.waitUntil(promise);
916
+ }
917
+ /**
918
+ * AbortSignal that fires when the actor is stopping.
919
+ */
920
+ get abortSignal() {
921
+ return this.#actorContext.abortSignal;
922
+ }
923
+ /**
924
+ * Forces the actor to sleep.
925
+ *
926
+ * Not supported on all drivers.
927
+ *
928
+ * @experimental
929
+ */
930
+ sleep() {
931
+ this.#actorContext.sleep();
932
+ }
933
+ };
934
+
935
+ // src/manager/log.ts
936
+ var LOGGER_NAME = "actor-manager";
937
+ function logger2() {
938
+ return getLogger(LOGGER_NAME);
939
+ }
940
+
941
+ // src/manager/hono-websocket-adapter.ts
942
+ var HonoWebSocketAdapter = class {
943
+ // WebSocket readyState values
944
+ CONNECTING = 0;
945
+ OPEN = 1;
946
+ CLOSING = 2;
947
+ CLOSED = 3;
948
+ #ws;
949
+ #readyState = 1;
950
+ // Start as OPEN since WSContext is already connected
951
+ #eventListeners = /* @__PURE__ */ new Map();
952
+ #closeCode;
953
+ #closeReason;
954
+ constructor(ws) {
955
+ this.#ws = ws;
956
+ this.#readyState = this.OPEN;
957
+ setTimeout(() => {
958
+ this.#fireEvent("open", { type: "open", target: this });
959
+ }, 0);
960
+ }
961
+ get readyState() {
962
+ return this.#readyState;
963
+ }
964
+ get binaryType() {
965
+ return "arraybuffer";
966
+ }
967
+ set binaryType(value) {
968
+ }
969
+ get bufferedAmount() {
970
+ return 0;
971
+ }
972
+ get extensions() {
973
+ return "";
974
+ }
975
+ get protocol() {
976
+ return "";
977
+ }
978
+ get url() {
979
+ return "";
980
+ }
981
+ send(data) {
982
+ if (this.readyState !== this.OPEN) {
983
+ throw new Error("WebSocket is not open");
984
+ }
985
+ try {
986
+ logger2().debug("bridge sending data", {
987
+ dataType: typeof data,
988
+ isString: typeof data === "string",
989
+ isArrayBuffer: data instanceof ArrayBuffer,
990
+ dataStr: typeof data === "string" ? data.substring(0, 100) : "<non-string>"
991
+ });
992
+ if (typeof data === "string") {
993
+ this.#ws.send(data);
994
+ } else if (data instanceof ArrayBuffer) {
995
+ this.#ws.send(data);
996
+ } else if (ArrayBuffer.isView(data)) {
997
+ const buffer = data.buffer.slice(
998
+ data.byteOffset,
999
+ data.byteOffset + data.byteLength
1000
+ );
1001
+ if (buffer instanceof SharedArrayBuffer) {
1002
+ const arrayBuffer = new ArrayBuffer(buffer.byteLength);
1003
+ new Uint8Array(arrayBuffer).set(new Uint8Array(buffer));
1004
+ this.#ws.send(arrayBuffer);
1005
+ } else {
1006
+ this.#ws.send(buffer);
1007
+ }
1008
+ } else if (data instanceof Blob) {
1009
+ data.arrayBuffer().then((buffer) => {
1010
+ this.#ws.send(buffer);
1011
+ }).catch((error) => {
1012
+ logger2().error("failed to convert blob to arraybuffer", { error });
1013
+ this.#fireEvent("error", { type: "error", target: this, error });
1014
+ });
1015
+ } else {
1016
+ logger2().warn("unsupported data type, converting to string", {
1017
+ dataType: typeof data,
1018
+ data
1019
+ });
1020
+ this.#ws.send(String(data));
1021
+ }
1022
+ } catch (error) {
1023
+ logger2().error("error sending websocket data", { error });
1024
+ this.#fireEvent("error", { type: "error", target: this, error });
1025
+ throw error;
1026
+ }
1027
+ }
1028
+ close(code = 1e3, reason = "") {
1029
+ if (this.readyState === this.CLOSING || this.readyState === this.CLOSED) {
1030
+ return;
1031
+ }
1032
+ this.#readyState = this.CLOSING;
1033
+ this.#closeCode = code;
1034
+ this.#closeReason = reason;
1035
+ try {
1036
+ this.#ws.close(code, reason);
1037
+ this.#readyState = this.CLOSED;
1038
+ this.#fireEvent("close", {
1039
+ type: "close",
1040
+ target: this,
1041
+ code,
1042
+ reason,
1043
+ wasClean: code === 1e3
1044
+ });
1045
+ } catch (error) {
1046
+ logger2().error("error closing websocket", { error });
1047
+ this.#readyState = this.CLOSED;
1048
+ this.#fireEvent("close", {
1049
+ type: "close",
1050
+ target: this,
1051
+ code: 1006,
1052
+ reason: "Abnormal closure",
1053
+ wasClean: false
1054
+ });
1055
+ }
1056
+ }
1057
+ addEventListener(type, listener) {
1058
+ if (!this.#eventListeners.has(type)) {
1059
+ this.#eventListeners.set(type, /* @__PURE__ */ new Set());
1060
+ }
1061
+ this.#eventListeners.get(type).add(listener);
1062
+ }
1063
+ removeEventListener(type, listener) {
1064
+ const listeners = this.#eventListeners.get(type);
1065
+ if (listeners) {
1066
+ listeners.delete(listener);
1067
+ }
1068
+ }
1069
+ dispatchEvent(event) {
1070
+ const listeners = this.#eventListeners.get(event.type);
1071
+ if (listeners) {
1072
+ for (const listener of listeners) {
1073
+ try {
1074
+ listener(event);
1075
+ } catch (error) {
1076
+ logger2().error(`error in ${event.type} event listener`, { error });
1077
+ }
1078
+ }
1079
+ }
1080
+ return true;
1081
+ }
1082
+ // Internal method to handle incoming messages from WSContext
1083
+ _handleMessage(data) {
1084
+ let messageData;
1085
+ if (typeof data === "string") {
1086
+ messageData = data;
1087
+ } else if (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) {
1088
+ messageData = data;
1089
+ } else if (data && typeof data === "object" && "data" in data) {
1090
+ messageData = data.data;
1091
+ } else {
1092
+ messageData = String(data);
1093
+ }
1094
+ logger2().debug("bridge handling message", {
1095
+ dataType: typeof messageData,
1096
+ isArrayBuffer: messageData instanceof ArrayBuffer,
1097
+ dataStr: typeof messageData === "string" ? messageData : "<binary>"
1098
+ });
1099
+ this.#fireEvent("message", {
1100
+ type: "message",
1101
+ target: this,
1102
+ data: messageData
1103
+ });
1104
+ }
1105
+ // Internal method to handle close from WSContext
1106
+ _handleClose(code, reason) {
1107
+ this.#ws.close(1e3, "hack_force_close");
1108
+ if (this.readyState === this.CLOSED) return;
1109
+ this.#readyState = this.CLOSED;
1110
+ this.#closeCode = code;
1111
+ this.#closeReason = reason;
1112
+ this.#fireEvent("close", {
1113
+ type: "close",
1114
+ target: this,
1115
+ code,
1116
+ reason,
1117
+ wasClean: code === 1e3
1118
+ });
1119
+ }
1120
+ // Internal method to handle errors from WSContext
1121
+ _handleError(error) {
1122
+ this.#fireEvent("error", {
1123
+ type: "error",
1124
+ target: this,
1125
+ error
1126
+ });
1127
+ }
1128
+ #fireEvent(type, event) {
1129
+ const listeners = this.#eventListeners.get(type);
1130
+ if (listeners) {
1131
+ for (const listener of listeners) {
1132
+ try {
1133
+ listener(event);
1134
+ } catch (error) {
1135
+ logger2().error(`error in ${type} event listener`, { error });
1136
+ }
1137
+ }
1138
+ }
1139
+ switch (type) {
1140
+ case "open":
1141
+ if (this.#onopen) {
1142
+ try {
1143
+ this.#onopen(event);
1144
+ } catch (error) {
1145
+ logger2().error("error in onopen handler", { error });
1146
+ }
1147
+ }
1148
+ break;
1149
+ case "close":
1150
+ if (this.#onclose) {
1151
+ try {
1152
+ this.#onclose(event);
1153
+ } catch (error) {
1154
+ logger2().error("error in onclose handler", { error });
1155
+ }
1156
+ }
1157
+ break;
1158
+ case "error":
1159
+ if (this.#onerror) {
1160
+ try {
1161
+ this.#onerror(event);
1162
+ } catch (error) {
1163
+ logger2().error("error in onerror handler", { error });
1164
+ }
1165
+ }
1166
+ break;
1167
+ case "message":
1168
+ if (this.#onmessage) {
1169
+ try {
1170
+ this.#onmessage(event);
1171
+ } catch (error) {
1172
+ logger2().error("error in onmessage handler", { error });
1173
+ }
1174
+ }
1175
+ break;
1176
+ }
1177
+ }
1178
+ // Event handler properties with getters/setters
1179
+ #onopen = null;
1180
+ #onclose = null;
1181
+ #onerror = null;
1182
+ #onmessage = null;
1183
+ get onopen() {
1184
+ return this.#onopen;
1185
+ }
1186
+ set onopen(handler) {
1187
+ this.#onopen = handler;
1188
+ }
1189
+ get onclose() {
1190
+ return this.#onclose;
1191
+ }
1192
+ set onclose(handler) {
1193
+ this.#onclose = handler;
1194
+ }
1195
+ get onerror() {
1196
+ return this.#onerror;
1197
+ }
1198
+ set onerror(handler) {
1199
+ this.#onerror = handler;
1200
+ }
1201
+ get onmessage() {
1202
+ return this.#onmessage;
1203
+ }
1204
+ set onmessage(handler) {
1205
+ this.#onmessage = handler;
1206
+ }
1207
+ };
1208
+
1209
+ // src/actor/protocol/old.ts
1210
+ import * as cbor3 from "cbor-x";
1211
+ import { z as z2 } from "zod";
1212
+ var TransportSchema = z2.enum(["websocket", "sse"]);
1213
+ function getValueLength(value) {
1214
+ if (typeof value === "string") {
1215
+ return value.length;
1216
+ } else if (value instanceof Blob) {
1217
+ return value.size;
1218
+ } else if (value instanceof ArrayBuffer || value instanceof SharedArrayBuffer || value instanceof Uint8Array) {
1219
+ return value.byteLength;
1220
+ } else {
1221
+ assertUnreachable(value);
1222
+ }
1223
+ }
1224
+ async function inputDataToBuffer(data) {
1225
+ if (typeof data === "string") {
1226
+ return data;
1227
+ } else if (data instanceof Blob) {
1228
+ const arrayBuffer = await data.arrayBuffer();
1229
+ return new Uint8Array(arrayBuffer);
1230
+ } else if (data instanceof Uint8Array) {
1231
+ return data;
1232
+ } else if (data instanceof ArrayBuffer || data instanceof SharedArrayBuffer) {
1233
+ return new Uint8Array(data);
1234
+ } else {
1235
+ throw new MalformedMessage();
1236
+ }
1237
+ }
1238
+ async function parseMessage(value, opts) {
1239
+ const length = getValueLength(value);
1240
+ if (length > opts.maxIncomingMessageSize) {
1241
+ throw new MessageTooLong();
1242
+ }
1243
+ const buffer = await inputDataToBuffer(value);
1244
+ return deserializeWithEncoding(opts.encoding, buffer, TO_SERVER_VERSIONED);
1245
+ }
1246
+ async function processMessage(message, actor, conn, handler) {
1247
+ let actionId;
1248
+ let actionName;
1249
+ try {
1250
+ if (message.body.tag === "ActionRequest") {
1251
+ if (handler.onExecuteAction === void 0) {
1252
+ throw new Unsupported("Action");
1253
+ }
1254
+ const { id, name, args: argsRaw } = message.body.val;
1255
+ actionId = id;
1256
+ actionName = name;
1257
+ const args = cbor3.decode(new Uint8Array(argsRaw));
1258
+ logger().debug("processing action request", {
1259
+ actionId: id,
1260
+ actionName: name
1261
+ });
1262
+ const ctx = new ActionContext(
1263
+ actor.actorContext,
1264
+ conn
1265
+ );
1266
+ const output = await handler.onExecuteAction(ctx, name, args);
1267
+ logger().debug("sending action response", {
1268
+ actionId: id,
1269
+ actionName: name,
1270
+ outputType: typeof output,
1271
+ isPromise: output instanceof Promise
1272
+ });
1273
+ conn._sendMessage(
1274
+ new CachedSerializer(
1275
+ {
1276
+ body: {
1277
+ tag: "ActionResponse",
1278
+ val: {
1279
+ id,
1280
+ output: bufferToArrayBuffer(cbor3.encode(output))
1281
+ }
1282
+ }
1283
+ },
1284
+ TO_CLIENT_VERSIONED
1285
+ )
1286
+ );
1287
+ logger().debug("action response sent", { id, name });
1288
+ } else if (message.body.tag === "SubscriptionRequest") {
1289
+ if (handler.onSubscribe === void 0 || handler.onUnsubscribe === void 0) {
1290
+ throw new Unsupported("Subscriptions");
1291
+ }
1292
+ const { eventName, subscribe } = message.body.val;
1293
+ logger().debug("processing subscription request", {
1294
+ eventName,
1295
+ subscribe
1296
+ });
1297
+ if (subscribe) {
1298
+ await handler.onSubscribe(eventName, conn);
1299
+ } else {
1300
+ await handler.onUnsubscribe(eventName, conn);
1301
+ }
1302
+ logger().debug("subscription request completed", {
1303
+ eventName,
1304
+ subscribe
1305
+ });
1306
+ } else {
1307
+ assertUnreachable(message.body);
1308
+ }
1309
+ } catch (error) {
1310
+ const { code, message: message2, metadata } = deconstructError(error, logger(), {
1311
+ connectionId: conn.id,
1312
+ actionId,
1313
+ actionName
1314
+ });
1315
+ logger().debug("sending error response", {
1316
+ actionId,
1317
+ actionName,
1318
+ code,
1319
+ message: message2
1320
+ });
1321
+ conn._sendMessage(
1322
+ new CachedSerializer(
1323
+ {
1324
+ body: {
1325
+ tag: "Error",
1326
+ val: {
1327
+ code,
1328
+ message: message2,
1329
+ metadata: bufferToArrayBuffer(cbor3.encode(metadata)),
1330
+ actionId: actionId ?? null
1331
+ }
1332
+ }
1333
+ },
1334
+ TO_CLIENT_VERSIONED
1335
+ )
1336
+ );
1337
+ logger().debug("error response sent", { actionId, actionName });
1338
+ }
1339
+ }
1340
+
1341
+ // src/actor/router-endpoints.ts
1342
+ async function handleWebSocketConnect(req, runConfig, actorDriver, actorId, encoding, parameters, authData) {
1343
+ const exposeInternalError = req ? getRequestExposeInternalError(req) : false;
1344
+ const {
1345
+ promise: handlersPromise,
1346
+ resolve: handlersResolve,
1347
+ reject: handlersReject
1348
+ } = Promise.withResolvers();
1349
+ let actor;
1350
+ try {
1351
+ actor = await actorDriver.loadActor(actorId);
1352
+ } catch (error) {
1353
+ return {
1354
+ onOpen: (_evt, ws) => {
1355
+ const { code } = deconstructError(
1356
+ error,
1357
+ logger(),
1358
+ {
1359
+ wsEvent: "open"
1360
+ },
1361
+ exposeInternalError
1362
+ );
1363
+ ws.close(1011, code);
1364
+ },
1365
+ onMessage: (_evt, ws) => {
1366
+ ws.close(1011, "Actor not loaded");
1367
+ },
1368
+ onClose: (_event, _ws) => {
1369
+ },
1370
+ onError: (_error) => {
1371
+ }
1372
+ };
1373
+ }
1374
+ return {
1375
+ onOpen: (_evt, ws) => {
1376
+ logger().debug("websocket open");
1377
+ (async () => {
1378
+ try {
1379
+ const connId = generateConnId();
1380
+ const connToken = generateConnToken();
1381
+ const connState = await actor.prepareConn(parameters, req);
1382
+ const connGlobalState = actorDriver.getGenericConnGlobalState(actorId);
1383
+ connGlobalState.websockets.set(connId, ws);
1384
+ logger().debug("registered websocket for conn", {
1385
+ actorId,
1386
+ totalCount: connGlobalState.websockets.size
1387
+ });
1388
+ const conn = await actor.createConn(
1389
+ connId,
1390
+ connToken,
1391
+ parameters,
1392
+ connState,
1393
+ CONNECTION_DRIVER_WEBSOCKET,
1394
+ { encoding },
1395
+ authData
1396
+ );
1397
+ handlersResolve({ conn, actor, connId });
1398
+ } catch (error) {
1399
+ handlersReject(error);
1400
+ const { code } = deconstructError(
1401
+ error,
1402
+ logger(),
1403
+ {
1404
+ wsEvent: "open"
1405
+ },
1406
+ exposeInternalError
1407
+ );
1408
+ ws.close(1011, code);
1409
+ }
1410
+ })();
1411
+ },
1412
+ onMessage: (evt, ws) => {
1413
+ handlersPromise.then(({ conn, actor: actor2 }) => {
1414
+ logger().debug("received message");
1415
+ const value = evt.data.valueOf();
1416
+ parseMessage(value, {
1417
+ encoding,
1418
+ maxIncomingMessageSize: runConfig.maxIncomingMessageSize
1419
+ }).then((message) => {
1420
+ actor2.processMessage(message, conn).catch((error) => {
1421
+ const { code } = deconstructError(
1422
+ error,
1423
+ logger(),
1424
+ {
1425
+ wsEvent: "message"
1426
+ },
1427
+ exposeInternalError
1428
+ );
1429
+ ws.close(1011, code);
1430
+ });
1431
+ }).catch((error) => {
1432
+ const { code } = deconstructError(
1433
+ error,
1434
+ logger(),
1435
+ {
1436
+ wsEvent: "message"
1437
+ },
1438
+ exposeInternalError
1439
+ );
1440
+ ws.close(1011, code);
1441
+ });
1442
+ }).catch((error) => {
1443
+ const { code } = deconstructError(
1444
+ error,
1445
+ logger(),
1446
+ {
1447
+ wsEvent: "message"
1448
+ },
1449
+ exposeInternalError
1450
+ );
1451
+ ws.close(1011, code);
1452
+ });
1453
+ },
1454
+ onClose: (event, ws) => {
1455
+ if (event.wasClean) {
1456
+ logger().info("websocket closed", {
1457
+ code: event.code,
1458
+ reason: event.reason,
1459
+ wasClean: event.wasClean
1460
+ });
1461
+ } else {
1462
+ logger().warn("websocket closed", {
1463
+ code: event.code,
1464
+ reason: event.reason,
1465
+ wasClean: event.wasClean
1466
+ });
1467
+ }
1468
+ ws.close(1e3, "hack_force_close");
1469
+ handlersPromise.then(({ conn, actor: actor2, connId }) => {
1470
+ const connGlobalState = actorDriver.getGenericConnGlobalState(actorId);
1471
+ const didDelete = connGlobalState.websockets.delete(connId);
1472
+ if (didDelete) {
1473
+ logger().info("removing websocket for conn", {
1474
+ totalCount: connGlobalState.websockets.size
1475
+ });
1476
+ } else {
1477
+ logger().warn("websocket does not exist for conn", {
1478
+ actorId,
1479
+ totalCount: connGlobalState.websockets.size
1480
+ });
1481
+ }
1482
+ actor2.__removeConn(conn);
1483
+ }).catch((error) => {
1484
+ deconstructError(
1485
+ error,
1486
+ logger(),
1487
+ { wsEvent: "close" },
1488
+ exposeInternalError
1489
+ );
1490
+ });
1491
+ },
1492
+ onError: (_error) => {
1493
+ try {
1494
+ logger().warn("websocket error");
1495
+ } catch (error) {
1496
+ deconstructError(
1497
+ error,
1498
+ logger(),
1499
+ { wsEvent: "error" },
1500
+ exposeInternalError
1501
+ );
1502
+ }
1503
+ }
1504
+ };
1505
+ }
1506
+ async function handleSseConnect(c, _runConfig, actorDriver, actorId, authData) {
1507
+ const encoding = getRequestEncoding(c.req);
1508
+ const parameters = getRequestConnParams(c.req);
1509
+ return streamSSE(c, async (stream) => {
1510
+ let actor;
1511
+ let connId;
1512
+ let connToken;
1513
+ let connState;
1514
+ let conn;
1515
+ try {
1516
+ actor = await actorDriver.loadActor(actorId);
1517
+ connId = generateConnId();
1518
+ connToken = generateConnToken();
1519
+ connState = await actor.prepareConn(parameters, c.req.raw);
1520
+ logger().debug("sse open");
1521
+ actorDriver.getGenericConnGlobalState(actorId).sseStreams.set(connId, stream);
1522
+ conn = await actor.createConn(
1523
+ connId,
1524
+ connToken,
1525
+ parameters,
1526
+ connState,
1527
+ CONNECTION_DRIVER_SSE,
1528
+ { encoding },
1529
+ authData
1530
+ );
1531
+ const abortResolver = Promise.withResolvers();
1532
+ stream.onAbort(async () => {
1533
+ try {
1534
+ logger().debug("sse stream aborted");
1535
+ if (connId) {
1536
+ actorDriver.getGenericConnGlobalState(actorId).sseStreams.delete(connId);
1537
+ }
1538
+ if (conn && actor) {
1539
+ actor.__removeConn(conn);
1540
+ }
1541
+ abortResolver.resolve(void 0);
1542
+ } catch (error) {
1543
+ logger().error("error closing sse connection", { error });
1544
+ abortResolver.resolve(void 0);
1545
+ }
1546
+ });
1547
+ try {
1548
+ c.executionCtx.waitUntil(abortResolver.promise);
1549
+ } catch {
1550
+ }
1551
+ await abortResolver.promise;
1552
+ } catch (error) {
1553
+ logger().error("error in sse connection", { error });
1554
+ if (connId !== void 0) {
1555
+ actorDriver.getGenericConnGlobalState(actorId).sseStreams.delete(connId);
1556
+ }
1557
+ if (conn && actor !== void 0) {
1558
+ actor.__removeConn(conn);
1559
+ }
1560
+ stream.close();
1561
+ }
1562
+ });
1563
+ }
1564
+ async function handleAction(c, _runConfig, actorDriver, actionName, actorId, authData) {
1565
+ const encoding = getRequestEncoding(c.req);
1566
+ const parameters = getRequestConnParams(c.req);
1567
+ logger().debug("handling action", { actionName, encoding });
1568
+ const arrayBuffer = await c.req.arrayBuffer();
1569
+ const request = deserializeWithEncoding(
1570
+ encoding,
1571
+ new Uint8Array(arrayBuffer),
1572
+ HTTP_ACTION_REQUEST_VERSIONED
1573
+ );
1574
+ const actionArgs = cbor4.decode(new Uint8Array(request.args));
1575
+ let actor;
1576
+ let conn;
1577
+ let output;
1578
+ try {
1579
+ actor = await actorDriver.loadActor(actorId);
1580
+ const connState = await actor.prepareConn(parameters, c.req.raw);
1581
+ conn = await actor.createConn(
1582
+ generateConnId(),
1583
+ generateConnToken(),
1584
+ parameters,
1585
+ connState,
1586
+ CONNECTION_DRIVER_HTTP,
1587
+ {},
1588
+ authData
1589
+ );
1590
+ const ctx = new ActionContext(actor.actorContext, conn);
1591
+ output = await actor.executeAction(ctx, actionName, actionArgs);
1592
+ } finally {
1593
+ if (conn) {
1594
+ actor == null ? void 0 : actor.__removeConn(conn);
1595
+ }
1596
+ }
1597
+ const responseData = {
1598
+ output: bufferToArrayBuffer(cbor4.encode(output))
1599
+ };
1600
+ const serialized = serializeWithEncoding(
1601
+ encoding,
1602
+ responseData,
1603
+ HTTP_ACTION_RESPONSE_VERSIONED
1604
+ );
1605
+ return c.body(serialized, 200, {
1606
+ "Content-Type": contentTypeForEncoding(encoding)
1607
+ });
1608
+ }
1609
+ async function handleConnectionMessage(c, _runConfig, actorDriver, connId, connToken, actorId) {
1610
+ const encoding = getRequestEncoding(c.req);
1611
+ const arrayBuffer = await c.req.arrayBuffer();
1612
+ const message = deserializeWithEncoding(
1613
+ encoding,
1614
+ new Uint8Array(arrayBuffer),
1615
+ TO_SERVER_VERSIONED
1616
+ );
1617
+ const actor = await actorDriver.loadActor(actorId);
1618
+ const conn = actor.conns.get(connId);
1619
+ if (!conn) {
1620
+ throw new ConnNotFound(connId);
1621
+ }
1622
+ if (conn._token !== connToken) {
1623
+ throw new IncorrectConnToken();
1624
+ }
1625
+ await actor.processMessage(message, conn);
1626
+ return c.json({});
1627
+ }
1628
+ async function handleRawWebSocketHandler(req, path, actorDriver, actorId, authData) {
1629
+ const actor = await actorDriver.loadActor(actorId);
1630
+ return {
1631
+ onOpen: (_evt, ws) => {
1632
+ const adapter = new HonoWebSocketAdapter(ws);
1633
+ ws.__adapter = adapter;
1634
+ const url = new URL(path, "http://actor");
1635
+ const pathname = url.pathname.replace(/^\/raw\/websocket/, "") || "/";
1636
+ const normalizedPath = pathname + url.search;
1637
+ let newRequest;
1638
+ if (req) {
1639
+ newRequest = new Request(`http://actor${normalizedPath}`, req);
1640
+ } else {
1641
+ newRequest = new Request(`http://actor${normalizedPath}`, {
1642
+ method: "GET"
1643
+ });
1644
+ }
1645
+ logger().debug("rewriting websocket url", {
1646
+ from: path,
1647
+ to: newRequest.url
1648
+ });
1649
+ actor.handleWebSocket(adapter, {
1650
+ request: newRequest,
1651
+ auth: authData
1652
+ });
1653
+ },
1654
+ onMessage: (event, ws) => {
1655
+ const adapter = ws.__adapter;
1656
+ if (adapter) {
1657
+ adapter._handleMessage(event);
1658
+ }
1659
+ },
1660
+ onClose: (evt, ws) => {
1661
+ const adapter = ws.__adapter;
1662
+ if (adapter) {
1663
+ adapter._handleClose((evt == null ? void 0 : evt.code) || 1006, (evt == null ? void 0 : evt.reason) || "");
1664
+ }
1665
+ },
1666
+ onError: (error, ws) => {
1667
+ const adapter = ws.__adapter;
1668
+ if (adapter) {
1669
+ adapter._handleError(error);
1670
+ }
1671
+ }
1672
+ };
1673
+ }
1674
+ function getRequestEncoding(req) {
1675
+ const encodingParam = req.header(HEADER_ENCODING);
1676
+ if (!encodingParam) {
1677
+ throw new InvalidEncoding("undefined");
1678
+ }
1679
+ const result = EncodingSchema.safeParse(encodingParam);
1680
+ if (!result.success) {
1681
+ throw new InvalidEncoding(encodingParam);
1682
+ }
1683
+ return result.data;
1684
+ }
1685
+ function getRequestExposeInternalError(req) {
1686
+ const param = req.headers.get(HEADER_EXPOSE_INTERNAL_ERROR);
1687
+ if (!param) {
1688
+ return false;
1689
+ }
1690
+ return param === "true";
1691
+ }
1692
+ function getRequestQuery(c) {
1693
+ const queryParam = c.req.header(HEADER_ACTOR_QUERY);
1694
+ if (!queryParam) {
1695
+ logger().error("missing query parameter");
1696
+ throw new InvalidRequest("missing query");
1697
+ }
1698
+ try {
1699
+ const parsed = JSON.parse(queryParam);
1700
+ return parsed;
1701
+ } catch (error) {
1702
+ logger().error("invalid query json", { error });
1703
+ throw new InvalidQueryJSON(error);
1704
+ }
1705
+ }
1706
+ var HEADER_ACTOR_QUERY = "X-RivetKit-Query";
1707
+ var HEADER_ENCODING = "X-RivetKit-Encoding";
1708
+ var HEADER_EXPOSE_INTERNAL_ERROR = "X-RivetKit-Expose-Internal-Error";
1709
+ var HEADER_CONN_PARAMS = "X-RivetKit-Conn-Params";
1710
+ var HEADER_AUTH_DATA = "X-RivetKit-Auth-Data";
1711
+ var HEADER_ACTOR_ID = "X-RivetKit-Actor";
1712
+ var HEADER_CONN_ID = "X-RivetKit-Conn";
1713
+ var HEADER_CONN_TOKEN = "X-RivetKit-Conn-Token";
1714
+ var ALLOWED_PUBLIC_HEADERS = [
1715
+ "Content-Type",
1716
+ "User-Agent",
1717
+ HEADER_ACTOR_QUERY,
1718
+ HEADER_ENCODING,
1719
+ HEADER_CONN_PARAMS,
1720
+ HEADER_ACTOR_ID,
1721
+ HEADER_CONN_ID,
1722
+ HEADER_CONN_TOKEN
1723
+ ];
1724
+ function getRequestConnParams(req) {
1725
+ const paramsParam = req.header(HEADER_CONN_PARAMS);
1726
+ if (!paramsParam) {
1727
+ return null;
1728
+ }
1729
+ try {
1730
+ return JSON.parse(paramsParam);
1731
+ } catch (err) {
1732
+ throw new InvalidParams(
1733
+ `Invalid params JSON: ${stringifyError(err)}`
1734
+ );
1735
+ }
1736
+ }
1737
+
1738
+ export {
1739
+ createVersionedDataHandler,
1740
+ TO_SERVER_VERSIONED,
1741
+ TO_CLIENT_VERSIONED,
1742
+ HTTP_ACTION_REQUEST_VERSIONED,
1743
+ HTTP_ACTION_RESPONSE_VERSIONED,
1744
+ HTTP_RESPONSE_ERROR_VERSIONED,
1745
+ HTTP_RESOLVE_REQUEST_VERSIONED,
1746
+ HTTP_RESOLVE_RESPONSE_VERSIONED,
1747
+ logger,
1748
+ instanceLogger,
1749
+ encodingIsBinary,
1750
+ contentTypeForEncoding,
1751
+ wsBinaryTypeForEncoding,
1752
+ serializeWithEncoding,
1753
+ deserializeWithEncoding,
1754
+ assertUnreachable2 as assertUnreachable,
1755
+ DeadlineError,
1756
+ deadline,
1757
+ generateRandomString,
1758
+ EncodingSchema,
1759
+ CachedSerializer,
1760
+ encodeDataToString,
1761
+ jsonStringifyCompat,
1762
+ generateConnId,
1763
+ generateConnToken,
1764
+ CONNECTION_DRIVER_WEBSOCKET,
1765
+ CONNECTION_DRIVER_SSE,
1766
+ CONNECTION_DRIVER_HTTP,
1767
+ CONNECTION_CHECK_LIVENESS_SYMBOL,
1768
+ Conn,
1769
+ logger2,
1770
+ inputDataToBuffer,
1771
+ processMessage,
1772
+ handleWebSocketConnect,
1773
+ handleSseConnect,
1774
+ handleAction,
1775
+ handleConnectionMessage,
1776
+ handleRawWebSocketHandler,
1777
+ getRequestEncoding,
1778
+ getRequestExposeInternalError,
1779
+ getRequestQuery,
1780
+ HEADER_ACTOR_QUERY,
1781
+ HEADER_ENCODING,
1782
+ HEADER_EXPOSE_INTERNAL_ERROR,
1783
+ HEADER_CONN_PARAMS,
1784
+ HEADER_AUTH_DATA,
1785
+ HEADER_ACTOR_ID,
1786
+ HEADER_CONN_ID,
1787
+ HEADER_CONN_TOKEN,
1788
+ ALLOWED_PUBLIC_HEADERS
1789
+ };
1790
+ //# sourceMappingURL=chunk-4NSUQZ2H.js.map