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