rivetkit 2.0.3 → 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 (233) hide show
  1. package/README.md +11 -0
  2. package/dist/schemas/actor-persist/v1.ts +21 -24
  3. package/dist/schemas/client-protocol/v1.ts +6 -0
  4. package/dist/tsup/actor/errors.cjs +10 -2
  5. package/dist/tsup/actor/errors.cjs.map +1 -1
  6. package/dist/tsup/actor/errors.d.cts +17 -4
  7. package/dist/tsup/actor/errors.d.ts +17 -4
  8. package/dist/tsup/actor/errors.js +11 -3
  9. package/dist/tsup/{chunk-6PDXBYI5.js → chunk-3F2YSRJL.js} +8 -23
  10. package/dist/tsup/chunk-3F2YSRJL.js.map +1 -0
  11. package/dist/tsup/chunk-4CXBCT26.cjs +250 -0
  12. package/dist/tsup/chunk-4CXBCT26.cjs.map +1 -0
  13. package/dist/tsup/chunk-4R73YDN3.cjs +20 -0
  14. package/dist/tsup/chunk-4R73YDN3.cjs.map +1 -0
  15. package/dist/tsup/{chunk-OGAPU3UG.cjs → chunk-6LJT3QRL.cjs} +39 -25
  16. package/dist/tsup/chunk-6LJT3QRL.cjs.map +1 -0
  17. package/dist/tsup/{chunk-6WKQDDUD.cjs → chunk-GICQ3YCU.cjs} +143 -141
  18. package/dist/tsup/chunk-GICQ3YCU.cjs.map +1 -0
  19. package/dist/tsup/{chunk-FLMTTN27.js → chunk-H26RP6GD.js} +15 -8
  20. package/dist/tsup/chunk-H26RP6GD.js.map +1 -0
  21. package/dist/tsup/chunk-HI3HWJRC.js +20 -0
  22. package/dist/tsup/chunk-HI3HWJRC.js.map +1 -0
  23. package/dist/tsup/{chunk-4NSUQZ2H.js → chunk-HLLF4B4Q.js} +116 -114
  24. package/dist/tsup/chunk-HLLF4B4Q.js.map +1 -0
  25. package/dist/tsup/{chunk-FCCPJNMA.cjs → chunk-IH6CKNDW.cjs} +12 -27
  26. package/dist/tsup/chunk-IH6CKNDW.cjs.map +1 -0
  27. package/dist/tsup/chunk-LV2S3OU3.js +250 -0
  28. package/dist/tsup/chunk-LV2S3OU3.js.map +1 -0
  29. package/dist/tsup/{chunk-R2OPSKIV.cjs → chunk-LWNKVZG5.cjs} +20 -13
  30. package/dist/tsup/chunk-LWNKVZG5.cjs.map +1 -0
  31. package/dist/tsup/{chunk-INGJP237.js → chunk-NFU2BBT5.js} +102 -43
  32. package/dist/tsup/chunk-NFU2BBT5.js.map +1 -0
  33. package/dist/tsup/{chunk-3H7O2A7I.js → chunk-PQY7KKTL.js} +33 -19
  34. package/dist/tsup/chunk-PQY7KKTL.js.map +1 -0
  35. package/dist/tsup/{chunk-PO4VLDWA.js → chunk-QK72M5JB.js} +3 -5
  36. package/dist/tsup/chunk-QK72M5JB.js.map +1 -0
  37. package/dist/tsup/{chunk-TZJKSBUQ.cjs → chunk-QNNXFOQV.cjs} +3 -5
  38. package/dist/tsup/chunk-QNNXFOQV.cjs.map +1 -0
  39. package/dist/tsup/{chunk-GIR3AFFI.cjs → chunk-SBHHJ6QS.cjs} +102 -43
  40. package/dist/tsup/chunk-SBHHJ6QS.cjs.map +1 -0
  41. package/dist/tsup/chunk-TQ62L3X7.js +325 -0
  42. package/dist/tsup/chunk-TQ62L3X7.js.map +1 -0
  43. package/dist/tsup/chunk-VO7ZRVVD.cjs +6293 -0
  44. package/dist/tsup/chunk-VO7ZRVVD.cjs.map +1 -0
  45. package/dist/tsup/chunk-WHBPJNGW.cjs +325 -0
  46. package/dist/tsup/chunk-WHBPJNGW.cjs.map +1 -0
  47. package/dist/tsup/chunk-XJQHKJ4P.js +6293 -0
  48. package/dist/tsup/chunk-XJQHKJ4P.js.map +1 -0
  49. package/dist/tsup/client/mod.cjs +10 -10
  50. package/dist/tsup/client/mod.d.cts +7 -13
  51. package/dist/tsup/client/mod.d.ts +7 -13
  52. package/dist/tsup/client/mod.js +9 -9
  53. package/dist/tsup/common/log.cjs +12 -4
  54. package/dist/tsup/common/log.cjs.map +1 -1
  55. package/dist/tsup/common/log.d.cts +23 -17
  56. package/dist/tsup/common/log.d.ts +23 -17
  57. package/dist/tsup/common/log.js +15 -7
  58. package/dist/tsup/common/websocket.cjs +5 -5
  59. package/dist/tsup/common/websocket.js +4 -4
  60. package/dist/tsup/{common-CpqORuCq.d.cts → common-CXCe7s6i.d.cts} +2 -2
  61. package/dist/tsup/{common-CpqORuCq.d.ts → common-CXCe7s6i.d.ts} +2 -2
  62. package/dist/tsup/{connection-BwUMoe6n.d.ts → connection-BI-6UIBJ.d.ts} +196 -226
  63. package/dist/tsup/{connection-BR_Ve4ku.d.cts → connection-Dyd4NLGW.d.cts} +196 -226
  64. package/dist/tsup/driver-helpers/mod.cjs +6 -9
  65. package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
  66. package/dist/tsup/driver-helpers/mod.d.cts +5 -6
  67. package/dist/tsup/driver-helpers/mod.d.ts +5 -6
  68. package/dist/tsup/driver-helpers/mod.js +6 -9
  69. package/dist/tsup/driver-test-suite/mod.cjs +155 -1363
  70. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
  71. package/dist/tsup/driver-test-suite/mod.d.cts +11 -5
  72. package/dist/tsup/driver-test-suite/mod.d.ts +11 -5
  73. package/dist/tsup/driver-test-suite/mod.js +876 -2084
  74. package/dist/tsup/driver-test-suite/mod.js.map +1 -1
  75. package/dist/tsup/inspector/mod.cjs +6 -8
  76. package/dist/tsup/inspector/mod.cjs.map +1 -1
  77. package/dist/tsup/inspector/mod.d.cts +3 -3
  78. package/dist/tsup/inspector/mod.d.ts +3 -3
  79. package/dist/tsup/inspector/mod.js +8 -10
  80. package/dist/tsup/mod.cjs +9 -15
  81. package/dist/tsup/mod.cjs.map +1 -1
  82. package/dist/tsup/mod.d.cts +47 -42
  83. package/dist/tsup/mod.d.ts +47 -42
  84. package/dist/tsup/mod.js +10 -16
  85. package/dist/tsup/{router-endpoints-DAbqVFx2.d.ts → router-endpoints-BTe_Rsdn.d.cts} +2 -3
  86. package/dist/tsup/{router-endpoints-AYkXG8Tl.d.cts → router-endpoints-CBSrKHmo.d.ts} +2 -3
  87. package/dist/tsup/test/mod.cjs +10 -14
  88. package/dist/tsup/test/mod.cjs.map +1 -1
  89. package/dist/tsup/test/mod.d.cts +4 -5
  90. package/dist/tsup/test/mod.d.ts +4 -5
  91. package/dist/tsup/test/mod.js +9 -13
  92. package/dist/tsup/{utils-CT0cv4jd.d.ts → utils-fwx3o3K9.d.cts} +1 -0
  93. package/dist/tsup/{utils-CT0cv4jd.d.cts → utils-fwx3o3K9.d.ts} +1 -0
  94. package/dist/tsup/utils.cjs +3 -3
  95. package/dist/tsup/utils.d.cts +1 -1
  96. package/dist/tsup/utils.d.ts +1 -1
  97. package/dist/tsup/utils.js +2 -2
  98. package/package.json +4 -4
  99. package/src/actor/action.ts +1 -5
  100. package/src/actor/config.ts +27 -295
  101. package/src/actor/connection.ts +9 -12
  102. package/src/actor/context.ts +1 -4
  103. package/src/actor/definition.ts +7 -11
  104. package/src/actor/errors.ts +97 -35
  105. package/src/actor/generic-conn-driver.ts +28 -16
  106. package/src/actor/instance.ts +177 -133
  107. package/src/actor/log.ts +4 -13
  108. package/src/actor/mod.ts +0 -5
  109. package/src/actor/protocol/old.ts +42 -26
  110. package/src/actor/protocol/serde.ts +1 -1
  111. package/src/actor/router-endpoints.ts +41 -38
  112. package/src/actor/router.ts +20 -18
  113. package/src/actor/unstable-react.ts +1 -1
  114. package/src/actor/utils.ts +6 -2
  115. package/src/client/actor-common.ts +1 -1
  116. package/src/client/actor-conn.ts +152 -91
  117. package/src/client/actor-handle.ts +85 -25
  118. package/src/client/actor-query.ts +65 -0
  119. package/src/client/client.ts +29 -98
  120. package/src/client/config.ts +44 -0
  121. package/src/client/errors.ts +1 -0
  122. package/src/client/log.ts +2 -4
  123. package/src/client/mod.ts +16 -12
  124. package/src/client/raw-utils.ts +82 -25
  125. package/src/client/utils.ts +5 -3
  126. package/src/common/fake-event-source.ts +10 -9
  127. package/src/common/inline-websocket-adapter2.ts +39 -30
  128. package/src/common/log.ts +176 -101
  129. package/src/common/logfmt.ts +21 -30
  130. package/src/common/router.ts +12 -19
  131. package/src/common/utils.ts +27 -13
  132. package/src/common/websocket.ts +0 -1
  133. package/src/driver-helpers/mod.ts +1 -1
  134. package/src/driver-test-suite/log.ts +1 -3
  135. package/src/driver-test-suite/mod.ts +86 -60
  136. package/src/driver-test-suite/tests/actor-handle.ts +33 -0
  137. package/src/driver-test-suite/tests/manager-driver.ts +5 -3
  138. package/src/driver-test-suite/tests/raw-http-direct-registry.ts +227 -226
  139. package/src/driver-test-suite/tests/raw-websocket-direct-registry.ts +393 -392
  140. package/src/driver-test-suite/tests/request-access.ts +112 -126
  141. package/src/driver-test-suite/utils.ts +13 -10
  142. package/src/drivers/default.ts +7 -4
  143. package/src/drivers/engine/actor-driver.ts +22 -13
  144. package/src/drivers/engine/config.ts +2 -10
  145. package/src/drivers/engine/kv.ts +1 -1
  146. package/src/drivers/engine/log.ts +1 -3
  147. package/src/drivers/engine/mod.ts +2 -3
  148. package/src/drivers/file-system/actor.ts +1 -1
  149. package/src/drivers/file-system/global-state.ts +33 -20
  150. package/src/drivers/file-system/log.ts +1 -3
  151. package/src/drivers/file-system/manager.ts +31 -8
  152. package/src/inspector/config.ts +9 -4
  153. package/src/inspector/log.ts +1 -1
  154. package/src/inspector/manager.ts +2 -2
  155. package/src/inspector/utils.ts +1 -1
  156. package/src/manager/driver.ts +10 -2
  157. package/src/manager/hono-websocket-adapter.ts +21 -12
  158. package/src/manager/log.ts +2 -4
  159. package/src/manager/mod.ts +1 -1
  160. package/src/manager/router.ts +277 -1657
  161. package/src/manager-api/routes/actors-create.ts +16 -0
  162. package/src/manager-api/routes/actors-delete.ts +4 -0
  163. package/src/manager-api/routes/actors-get-by-id.ts +7 -0
  164. package/src/manager-api/routes/actors-get-or-create-by-id.ts +29 -0
  165. package/src/manager-api/routes/actors-get.ts +7 -0
  166. package/src/manager-api/routes/common.ts +18 -0
  167. package/src/mod.ts +0 -2
  168. package/src/registry/config.ts +1 -1
  169. package/src/registry/log.ts +2 -4
  170. package/src/registry/mod.ts +57 -24
  171. package/src/registry/run-config.ts +31 -33
  172. package/src/registry/serve.ts +4 -5
  173. package/src/remote-manager-driver/actor-http-client.ts +72 -0
  174. package/src/remote-manager-driver/actor-websocket-client.ts +63 -0
  175. package/src/remote-manager-driver/api-endpoints.ts +79 -0
  176. package/src/remote-manager-driver/api-utils.ts +43 -0
  177. package/src/remote-manager-driver/log.ts +5 -0
  178. package/src/remote-manager-driver/mod.ts +274 -0
  179. package/src/{drivers/engine → remote-manager-driver}/ws-proxy.ts +24 -14
  180. package/src/serde.ts +8 -2
  181. package/src/test/log.ts +1 -3
  182. package/src/test/mod.ts +17 -16
  183. package/dist/tsup/chunk-2CRLFV6Z.cjs +0 -202
  184. package/dist/tsup/chunk-2CRLFV6Z.cjs.map +0 -1
  185. package/dist/tsup/chunk-3H7O2A7I.js.map +0 -1
  186. package/dist/tsup/chunk-42I3OZ3Q.js +0 -15
  187. package/dist/tsup/chunk-42I3OZ3Q.js.map +0 -1
  188. package/dist/tsup/chunk-4NSUQZ2H.js.map +0 -1
  189. package/dist/tsup/chunk-6PDXBYI5.js.map +0 -1
  190. package/dist/tsup/chunk-6WKQDDUD.cjs.map +0 -1
  191. package/dist/tsup/chunk-CTBOSFUH.cjs +0 -116
  192. package/dist/tsup/chunk-CTBOSFUH.cjs.map +0 -1
  193. package/dist/tsup/chunk-EGVZZFE2.js +0 -2857
  194. package/dist/tsup/chunk-EGVZZFE2.js.map +0 -1
  195. package/dist/tsup/chunk-FCCPJNMA.cjs.map +0 -1
  196. package/dist/tsup/chunk-FLMTTN27.js.map +0 -1
  197. package/dist/tsup/chunk-GIR3AFFI.cjs.map +0 -1
  198. package/dist/tsup/chunk-INGJP237.js.map +0 -1
  199. package/dist/tsup/chunk-KJCJLKRM.js +0 -116
  200. package/dist/tsup/chunk-KJCJLKRM.js.map +0 -1
  201. package/dist/tsup/chunk-KUPQZYUQ.cjs +0 -15
  202. package/dist/tsup/chunk-KUPQZYUQ.cjs.map +0 -1
  203. package/dist/tsup/chunk-O2MBYIXO.cjs +0 -2857
  204. package/dist/tsup/chunk-O2MBYIXO.cjs.map +0 -1
  205. package/dist/tsup/chunk-OGAPU3UG.cjs.map +0 -1
  206. package/dist/tsup/chunk-OV6AYD4S.js +0 -4406
  207. package/dist/tsup/chunk-OV6AYD4S.js.map +0 -1
  208. package/dist/tsup/chunk-PO4VLDWA.js.map +0 -1
  209. package/dist/tsup/chunk-R2OPSKIV.cjs.map +0 -1
  210. package/dist/tsup/chunk-TZJKSBUQ.cjs.map +0 -1
  211. package/dist/tsup/chunk-UBUC5C3G.cjs +0 -189
  212. package/dist/tsup/chunk-UBUC5C3G.cjs.map +0 -1
  213. package/dist/tsup/chunk-UIM22YJL.cjs +0 -4406
  214. package/dist/tsup/chunk-UIM22YJL.cjs.map +0 -1
  215. package/dist/tsup/chunk-URVFQMYI.cjs +0 -230
  216. package/dist/tsup/chunk-URVFQMYI.cjs.map +0 -1
  217. package/dist/tsup/chunk-UVUPOS46.js +0 -230
  218. package/dist/tsup/chunk-UVUPOS46.js.map +0 -1
  219. package/dist/tsup/chunk-VRRHBNJC.js +0 -189
  220. package/dist/tsup/chunk-VRRHBNJC.js.map +0 -1
  221. package/dist/tsup/chunk-XFSS33EQ.js +0 -202
  222. package/dist/tsup/chunk-XFSS33EQ.js.map +0 -1
  223. package/src/client/http-client-driver.ts +0 -326
  224. package/src/driver-test-suite/test-inline-client-driver.ts +0 -402
  225. package/src/driver-test-suite/tests/actor-auth.ts +0 -591
  226. package/src/drivers/engine/api-endpoints.ts +0 -128
  227. package/src/drivers/engine/api-utils.ts +0 -70
  228. package/src/drivers/engine/manager-driver.ts +0 -391
  229. package/src/inline-client-driver/log.ts +0 -7
  230. package/src/inline-client-driver/mod.ts +0 -385
  231. package/src/manager/auth.ts +0 -121
  232. /package/src/{drivers/engine → actor}/keys.test.ts +0 -0
  233. /package/src/{drivers/engine → actor}/keys.ts +0 -0
@@ -0,0 +1,274 @@
1
+ import * as cbor from "cbor-x";
2
+ import type { Hono, Context as HonoContext } from "hono";
3
+ import invariant from "invariant";
4
+ import { ActorAlreadyExists } from "@/actor/errors";
5
+ import { deserializeActorKey, serializeActorKey } from "@/actor/keys";
6
+ import type { ClientConfig } from "@/client/client";
7
+ import { noopNext } from "@/common/utils";
8
+ import type {
9
+ ActorOutput,
10
+ CreateInput,
11
+ GetForIdInput,
12
+ GetOrCreateWithKeyInput,
13
+ GetWithKeyInput,
14
+ ManagerDisplayInformation,
15
+ ManagerDriver,
16
+ } from "@/driver-helpers/mod";
17
+ import type { ManagerInspector } from "@/inspector/manager";
18
+ import type { Encoding, RegistryConfig, UniversalWebSocket } from "@/mod";
19
+ import type { RunConfig } from "@/registry/run-config";
20
+ import { sendHttpRequestToActor } from "./actor-http-client";
21
+ import {
22
+ buildGuardHeadersForWebSocket,
23
+ openWebSocketToActor,
24
+ } from "./actor-websocket-client";
25
+ import {
26
+ createActor,
27
+ destroyActor,
28
+ getActor,
29
+ getActorById,
30
+ getOrCreateActorById,
31
+ } from "./api-endpoints";
32
+ import { EngineApiError, getEndpoint } from "./api-utils";
33
+ import { logger } from "./log";
34
+ import { createWebSocketProxy } from "./ws-proxy";
35
+
36
+ // TODO:
37
+ // // Lazily import the dynamic imports so we don't have to turn `createClient` in to an async fn
38
+ // const dynamicImports = (async () => {
39
+ // // Import dynamic dependencies
40
+ // const [WebSocket, EventSource] = await Promise.all([
41
+ // importWebSocket(),
42
+ // importEventSource(),
43
+ // ]);
44
+ // return {
45
+ // WebSocket,
46
+ // EventSource,
47
+ // };
48
+ // })();
49
+
50
+ export class RemoteManagerDriver implements ManagerDriver {
51
+ #config: ClientConfig;
52
+
53
+ constructor(runConfig: ClientConfig) {
54
+ this.#config = runConfig;
55
+ }
56
+
57
+ async getForId({
58
+ c,
59
+ name,
60
+ actorId,
61
+ }: GetForIdInput): Promise<ActorOutput | undefined> {
62
+ // Fetch from API if not in cache
63
+ try {
64
+ const response = await getActor(this.#config, actorId);
65
+
66
+ // Validate name matches
67
+ if (response.actor.name !== name) {
68
+ logger().debug({
69
+ msg: "actor name mismatch from api",
70
+ actorId,
71
+ apiName: response.actor.name,
72
+ requestedName: name,
73
+ });
74
+ return undefined;
75
+ }
76
+
77
+ const keyRaw = response.actor.key;
78
+ invariant(keyRaw, `actor ${actorId} should have key`);
79
+ const key = deserializeActorKey(keyRaw);
80
+
81
+ return {
82
+ actorId,
83
+ name,
84
+ key,
85
+ };
86
+ } catch (error) {
87
+ if (
88
+ error instanceof EngineApiError &&
89
+ (error as EngineApiError).group === "actor" &&
90
+ (error as EngineApiError).code === "not_found"
91
+ ) {
92
+ return undefined;
93
+ }
94
+ throw error;
95
+ }
96
+ }
97
+
98
+ async getWithKey({
99
+ c,
100
+ name,
101
+ key,
102
+ }: GetWithKeyInput): Promise<ActorOutput | undefined> {
103
+ logger().debug({ msg: "getWithKey: searching for actor", name, key });
104
+
105
+ // If not in local cache, fetch by key from API
106
+ try {
107
+ const response = await getActorById(this.#config, name, key);
108
+
109
+ if (!response.actor_id) {
110
+ return undefined;
111
+ }
112
+
113
+ const actorId = response.actor_id;
114
+
115
+ logger().debug({
116
+ msg: "getWithKey: found actor via api",
117
+ actorId,
118
+ name,
119
+ key,
120
+ });
121
+
122
+ return {
123
+ actorId,
124
+ name,
125
+ key,
126
+ };
127
+ } catch (error) {
128
+ if (
129
+ error instanceof EngineApiError &&
130
+ (error as EngineApiError).group === "actor" &&
131
+ (error as EngineApiError).code === "not_found"
132
+ ) {
133
+ return undefined;
134
+ }
135
+ throw error;
136
+ }
137
+ }
138
+
139
+ async getOrCreateWithKey(
140
+ input: GetOrCreateWithKeyInput,
141
+ ): Promise<ActorOutput> {
142
+ const { c, name, key, input: actorInput, region } = input;
143
+
144
+ logger().info({
145
+ msg: "getOrCreateWithKey: getting or creating actor via engine api",
146
+ name,
147
+ key,
148
+ });
149
+
150
+ const response = await getOrCreateActorById(this.#config, {
151
+ name,
152
+ key: serializeActorKey(key),
153
+ runner_name_selector: this.#config.runnerName,
154
+ input: input ? cbor.encode(actorInput).toString("base64") : undefined,
155
+ crash_policy: "sleep",
156
+ });
157
+
158
+ const actorId = response.actor_id;
159
+
160
+ logger().info({
161
+ msg: "getOrCreateWithKey: actor ready",
162
+ actorId,
163
+ name,
164
+ key,
165
+ created: response.created,
166
+ });
167
+
168
+ return {
169
+ actorId,
170
+ name,
171
+ key,
172
+ };
173
+ }
174
+
175
+ async createActor({
176
+ c,
177
+ name,
178
+ key,
179
+ input,
180
+ }: CreateInput): Promise<ActorOutput> {
181
+ logger().info({ msg: "creating actor via engine api", name, key });
182
+
183
+ // Create actor via engine API
184
+ const result = await createActor(this.#config, {
185
+ name,
186
+ runner_name_selector: this.#config.runnerName,
187
+ key: serializeActorKey(key),
188
+ input: input ? cbor.encode(input).toString("base64") : null,
189
+ crash_policy: "sleep",
190
+ });
191
+ const actorId = result.actor.actor_id;
192
+
193
+ logger().info({ msg: "actor created", actorId, name, key });
194
+
195
+ return {
196
+ actorId,
197
+ name,
198
+ key,
199
+ };
200
+ }
201
+
202
+ async destroyActor(actorId: string): Promise<void> {
203
+ logger().info({ msg: "destroying actor via engine api", actorId });
204
+
205
+ await destroyActor(this.#config, actorId);
206
+
207
+ logger().info({ msg: "actor destroyed", actorId });
208
+ }
209
+
210
+ async sendRequest(actorId: string, actorRequest: Request): Promise<Response> {
211
+ return await sendHttpRequestToActor(this.#config, actorId, actorRequest);
212
+ }
213
+
214
+ async openWebSocket(
215
+ path: string,
216
+ actorId: string,
217
+ encoding: Encoding,
218
+ params: unknown,
219
+ ): Promise<UniversalWebSocket> {
220
+ return await openWebSocketToActor(
221
+ this.#config,
222
+ path,
223
+ actorId,
224
+ encoding,
225
+ params,
226
+ );
227
+ }
228
+
229
+ async proxyRequest(
230
+ _c: HonoContext,
231
+ actorRequest: Request,
232
+ actorId: string,
233
+ ): Promise<Response> {
234
+ return await sendHttpRequestToActor(this.#config, actorId, actorRequest);
235
+ }
236
+
237
+ async proxyWebSocket(
238
+ c: HonoContext,
239
+ path: string,
240
+ actorId: string,
241
+ encoding: Encoding,
242
+ params: unknown,
243
+ authData: unknown,
244
+ ): Promise<Response> {
245
+ const upgradeWebSocket = this.#config.getUpgradeWebSocket?.();
246
+ invariant(upgradeWebSocket, "missing getUpgradeWebSocket");
247
+
248
+ const endpoint = getEndpoint(this.#config);
249
+ const guardUrl = `${endpoint}${path}`;
250
+ const wsGuardUrl = guardUrl.replace("http://", "ws://");
251
+
252
+ logger().debug({
253
+ msg: "forwarding websocket to actor via guard",
254
+ actorId,
255
+ path,
256
+ guardUrl,
257
+ });
258
+
259
+ // Build headers
260
+ const headers = buildGuardHeadersForWebSocket(
261
+ actorId,
262
+ encoding,
263
+ params,
264
+ authData,
265
+ );
266
+ const args = await createWebSocketProxy(c, wsGuardUrl, headers);
267
+
268
+ return await upgradeWebSocket(() => args)(c, noopNext());
269
+ }
270
+
271
+ displayInformation(): ManagerDisplayInformation {
272
+ return { name: "Remote", properties: {} };
273
+ }
274
+ }
@@ -1,7 +1,6 @@
1
1
  import type { Context as HonoContext } from "hono";
2
2
  import type { WSContext } from "hono/ws";
3
- import invariant from "invariant";
4
- import type { CloseEvent } from "ws";
3
+ import { stringifyError } from "@/common/utils";
5
4
  import { importWebSocket } from "@/common/websocket";
6
5
  import type { UpgradeWebSocketArgs } from "@/mod";
7
6
  import { logger } from "./log";
@@ -32,10 +31,11 @@ export async function createWebSocketProxy(
32
31
 
33
32
  return {
34
33
  onOpen: async (event: any, clientWs: WSContext) => {
35
- logger().debug("client websocket connected", { targetUrl });
34
+ logger().debug({ msg: "client websocket connected", targetUrl });
36
35
 
37
36
  if (clientWs.readyState !== 1) {
38
- logger().warn("client websocket not open on connection", {
37
+ logger().warn({
38
+ msg: "client websocket not open on connection",
39
39
  targetUrl,
40
40
  readyState: clientWs.readyState,
41
41
  });
@@ -49,10 +49,11 @@ export async function createWebSocketProxy(
49
49
  // Setup connection promise
50
50
  state.connectPromise = new Promise<void>((resolve, reject) => {
51
51
  targetWs.addEventListener("open", () => {
52
- logger().debug("target websocket connected", { targetUrl });
52
+ logger().debug({ msg: "target websocket connected", targetUrl });
53
53
 
54
54
  if (clientWs.readyState !== 1) {
55
- logger().warn("client websocket closed before target connected", {
55
+ logger().warn({
56
+ msg: "client websocket closed before target connected",
56
57
  targetUrl,
57
58
  clientReadyState: clientWs.readyState,
58
59
  });
@@ -64,7 +65,8 @@ export async function createWebSocketProxy(
64
65
  });
65
66
 
66
67
  targetWs.addEventListener("error", (error) => {
67
- logger().warn("target websocket error during connection", {
68
+ logger().warn({
69
+ msg: "target websocket error during connection",
68
70
  targetUrl,
69
71
  });
70
72
  reject(error);
@@ -86,7 +88,8 @@ export async function createWebSocketProxy(
86
88
  });
87
89
 
88
90
  state.targetWs.addEventListener("close", (event) => {
89
- logger().debug("target websocket closed", {
91
+ logger().debug({
92
+ msg: "target websocket closed",
90
93
  targetUrl,
91
94
  code: event.code,
92
95
  reason: event.reason,
@@ -95,14 +98,18 @@ export async function createWebSocketProxy(
95
98
  });
96
99
 
97
100
  state.targetWs.addEventListener("error", (error) => {
98
- logger().error("target websocket error", { targetUrl, error });
101
+ logger().error({
102
+ msg: "target websocket error",
103
+ targetUrl,
104
+ error: stringifyError(error),
105
+ });
99
106
  closeWebSocketIfOpen(clientWs, 1011, "Target WebSocket error");
100
107
  });
101
108
  },
102
109
 
103
110
  onMessage: async (event: any, clientWs: WSContext) => {
104
111
  if (!state.targetWs || !state.connectPromise) {
105
- logger().error("websocket state not initialized", { targetUrl });
112
+ logger().error({ msg: "websocket state not initialized", targetUrl });
106
113
  return;
107
114
  }
108
115
 
@@ -111,13 +118,15 @@ export async function createWebSocketProxy(
111
118
  if (state.targetWs.readyState === WebSocket.OPEN) {
112
119
  state.targetWs.send(event.data);
113
120
  } else {
114
- logger().warn("target websocket not open", {
121
+ logger().warn({
122
+ msg: "target websocket not open",
115
123
  targetUrl,
116
124
  readyState: state.targetWs.readyState,
117
125
  });
118
126
  }
119
127
  } catch (error) {
120
- logger().error("failed to connect to target websocket", {
128
+ logger().error({
129
+ msg: "failed to connect to target websocket",
121
130
  targetUrl,
122
131
  error,
123
132
  });
@@ -126,7 +135,8 @@ export async function createWebSocketProxy(
126
135
  },
127
136
 
128
137
  onClose: (event: any, clientWs: WSContext) => {
129
- logger().debug("client websocket closed", {
138
+ logger().debug({
139
+ msg: "client websocket closed",
130
140
  targetUrl,
131
141
  code: event.code,
132
142
  reason: event.reason,
@@ -144,7 +154,7 @@ export async function createWebSocketProxy(
144
154
  },
145
155
 
146
156
  onError: (event: any, clientWs: WSContext) => {
147
- logger().error("client websocket error", { targetUrl, event });
157
+ logger().error({ msg: "client websocket error", targetUrl, event });
148
158
 
149
159
  if (state.targetWs) {
150
160
  if (state.targetWs.readyState === WebSocket.OPEN) {
package/src/serde.ts CHANGED
@@ -40,13 +40,16 @@ export function wsBinaryTypeForEncoding(
40
40
  export function serializeWithEncoding<T>(
41
41
  encoding: Encoding,
42
42
  value: T,
43
- versionedDataHandler: VersionedDataHandler<T>,
43
+ versionedDataHandler: VersionedDataHandler<T> | undefined,
44
44
  ): Uint8Array | string {
45
45
  if (encoding === "json") {
46
46
  return jsonStringifyCompat(value);
47
47
  } else if (encoding === "cbor") {
48
48
  return cbor.encode(value);
49
49
  } else if (encoding === "bare") {
50
+ if (!versionedDataHandler) {
51
+ throw new Error("VersionedDataHandler is required for 'bare' encoding");
52
+ }
50
53
  return versionedDataHandler.serializeWithEmbeddedVersion(value);
51
54
  } else {
52
55
  assertUnreachable(encoding);
@@ -56,7 +59,7 @@ export function serializeWithEncoding<T>(
56
59
  export function deserializeWithEncoding<T>(
57
60
  encoding: Encoding,
58
61
  buffer: Uint8Array | string,
59
- versionedDataHandler: VersionedDataHandler<T>,
62
+ versionedDataHandler: VersionedDataHandler<T> | undefined,
60
63
  ): T {
61
64
  if (encoding === "json") {
62
65
  if (typeof buffer === "string") {
@@ -77,6 +80,9 @@ export function deserializeWithEncoding<T>(
77
80
  typeof buffer !== "string",
78
81
  "buffer cannot be string for bare encoding",
79
82
  );
83
+ if (!versionedDataHandler) {
84
+ throw new Error("VersionedDataHandler is required for 'bare' encoding");
85
+ }
80
86
  return versionedDataHandler.deserializeWithEmbeddedVersion(buffer);
81
87
  } else {
82
88
  assertUnreachable(encoding);
package/src/test/log.ts CHANGED
@@ -1,7 +1,5 @@
1
1
  import { getLogger } from "@/common/log";
2
2
 
3
- export const LOGGER_NAME = "nodejs";
4
-
5
3
  export function logger() {
6
- return getLogger(LOGGER_NAME);
4
+ return getLogger("test");
7
5
  }
package/src/test/mod.ts CHANGED
@@ -5,7 +5,6 @@ import { type TestContext, vi } from "vitest";
5
5
  import { type Client, createClient } from "@/client/mod";
6
6
  import { chooseDefaultDriver } from "@/drivers/default";
7
7
  import { createFileSystemOrMemoryDriver } from "@/drivers/file-system/mod";
8
- import { createInlineClientDriver } from "@/inline-client-driver/mod";
9
8
  import { getInspectorUrl } from "@/inspector/utils";
10
9
  import { createManagerRouter } from "@/manager/router";
11
10
  import type { Registry } from "@/registry/mod";
@@ -28,11 +27,9 @@ function serve(registry: Registry<any>, inputConfig?: InputConfig): ServerType {
28
27
  const runConfig = RunConfigSchema.parse(inputConfig);
29
28
  const driver = inputConfig.driver ?? createFileSystemOrMemoryDriver(false);
30
29
  const managerDriver = driver.manager(registry.config, config);
31
- const inlineClientDriver = createInlineClientDriver(managerDriver);
32
30
  const { router } = createManagerRouter(
33
31
  registry.config,
34
32
  runConfig,
35
- inlineClientDriver,
36
33
  managerDriver,
37
34
  false,
38
35
  );
@@ -48,7 +45,8 @@ function serve(registry: Registry<any>, inputConfig?: InputConfig): ServerType {
48
45
  });
49
46
  nodeWebSocket.injectWebSocket(server);
50
47
 
51
- logger().info("rivetkit started", {
48
+ logger().info({
49
+ msg: "rivetkit started",
52
50
  hostname: config.hostname,
53
51
  port: config.port,
54
52
  definitions: Object.keys(registry.config.use).length,
@@ -88,18 +86,21 @@ export async function setupTest<A extends Registry<any>>(
88
86
  async () => await new Promise((resolve) => server.close(() => resolve())),
89
87
  );
90
88
 
91
- // Create client
92
- const client = createClient<A>(`http://127.0.0.1:${port}`);
93
- c.onTestFinished(async () => await client.dispose());
94
-
95
- return {
96
- client,
97
- mockDriver: {
98
- actorDriver: {
99
- setCreateVarsContext: setDriverContextFn,
100
- },
101
- },
102
- };
89
+ throw "TODO: Fix engine port";
90
+
91
+ // // TODO: Figure out how to make this the correct endpoint
92
+ // // Create client
93
+ // const client = createClient<A>(`http://127.0.0.1:${port}`);
94
+ // c.onTestFinished(async () => await client.dispose());
95
+ //
96
+ // return {
97
+ // client,
98
+ // mockDriver: {
99
+ // actorDriver: {
100
+ // setCreateVarsContext: setDriverContextFn,
101
+ // },
102
+ // },
103
+ // };
103
104
  }
104
105
 
105
106
  export async function getPort(): Promise<number> {
@@ -1,202 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
2
-
3
- var _chunkOGAPU3UGcjs = require('./chunk-OGAPU3UG.cjs');
4
-
5
- // src/common/log-levels.ts
6
- var LogLevels = {
7
- TRACE: 0,
8
- DEBUG: 1,
9
- INFO: 2,
10
- WARN: 3,
11
- ERROR: 4,
12
- CRITICAL: 5
13
- };
14
- var LevelNameMap = {
15
- 0: "TRACE",
16
- 1: "DEBUG",
17
- 2: "INFO",
18
- 3: "WARN",
19
- 4: "ERROR",
20
- 5: "CRITICAL"
21
- };
22
-
23
- // src/common/logfmt.ts
24
- var LOG_LEVEL_COLORS = {
25
- [LogLevels.CRITICAL]: "\x1B[31m",
26
- // Red
27
- [LogLevels.ERROR]: "\x1B[31m",
28
- // Red
29
- [LogLevels.WARN]: "\x1B[33m",
30
- // Yellow
31
- [LogLevels.INFO]: "\x1B[32m",
32
- // Green
33
- [LogLevels.DEBUG]: "\x1B[36m",
34
- // Cyan
35
- [LogLevels.TRACE]: "\x1B[36m"
36
- // Cyan
37
- };
38
- var RESET_COLOR = "\x1B[0m";
39
- function stringify(...data) {
40
- let line = "";
41
- for (let i = 0; i < data.length; i++) {
42
- const [key, valueRaw] = data[i];
43
- let isNull = false;
44
- let valueString;
45
- if (valueRaw == null) {
46
- isNull = true;
47
- valueString = "";
48
- } else {
49
- valueString = valueRaw.toString();
50
- }
51
- if (valueString.length > 512 && key !== "msg" && key !== "error")
52
- valueString = `${valueString.slice(0, 512)}...`;
53
- const needsQuoting = valueString.indexOf(" ") > -1 || valueString.indexOf("=") > -1;
54
- const needsEscaping = valueString.indexOf('"') > -1 || valueString.indexOf("\\") > -1;
55
- valueString = valueString.replace(/\n/g, "\\n");
56
- if (needsEscaping) valueString = valueString.replace(/["\\]/g, "\\$&");
57
- if (needsQuoting || needsEscaping) valueString = `"${valueString}"`;
58
- if (valueString === "" && !isNull) valueString = '""';
59
- if (LOGGER_CONFIG.enableColor) {
60
- let color = "\x1B[2m";
61
- if (key === "level") {
62
- const level = LogLevels[valueString];
63
- const levelColor = LOG_LEVEL_COLORS[level];
64
- if (levelColor) {
65
- color = levelColor;
66
- }
67
- } else if (key === "msg") {
68
- color = "\x1B[32m";
69
- } else if (key === "trace") {
70
- color = "\x1B[34m";
71
- }
72
- line += `\x1B[0m\x1B[1m${key}\x1B[0m\x1B[2m=\x1B[0m${color}${valueString}${RESET_COLOR}`;
73
- } else {
74
- line += `${key}=${valueString}`;
75
- }
76
- if (i !== data.length - 1) {
77
- line += " ";
78
- }
79
- }
80
- return line;
81
- }
82
- function formatTimestamp(date) {
83
- const year = date.getUTCFullYear();
84
- const month = String(date.getUTCMonth() + 1).padStart(2, "0");
85
- const day = String(date.getUTCDate()).padStart(2, "0");
86
- const hours = String(date.getUTCHours()).padStart(2, "0");
87
- const minutes = String(date.getUTCMinutes()).padStart(2, "0");
88
- const seconds = String(date.getUTCSeconds()).padStart(2, "0");
89
- const milliseconds = String(date.getUTCMilliseconds()).padStart(3, "0");
90
- return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${milliseconds}Z`;
91
- }
92
- function castToLogValue(v) {
93
- if (typeof v === "string" || typeof v === "number" || typeof v === "bigint" || typeof v === "boolean" || v === null || v === void 0) {
94
- return v;
95
- }
96
- if (v instanceof Error) {
97
- return String(v);
98
- }
99
- try {
100
- return JSON.stringify(v);
101
- } catch (e) {
102
- return "[cannot stringify]";
103
- }
104
- }
105
- var LOGGER_CONFIG = {
106
- enableColor: false,
107
- enableSpreadObject: false,
108
- enableErrorStack: false
109
- };
110
-
111
- // src/common/log.ts
112
- var Logger = class {
113
-
114
-
115
- constructor(name, level) {
116
- this.name = name;
117
- this.level = level;
118
- }
119
- log(level, message, ...args) {
120
- const record = {
121
- msg: message,
122
- args,
123
- level,
124
- loggerName: this.name,
125
- datetime: /* @__PURE__ */ new Date(),
126
- levelName: LevelNameMap[level]
127
- };
128
- if (this.#shouldLog(level)) {
129
- this.#logRecord(record);
130
- }
131
- }
132
- #shouldLog(level) {
133
- return level >= LogLevels[this.level];
134
- }
135
- #logRecord(record) {
136
- console.log(formatter(record));
137
- }
138
- trace(message, ...args) {
139
- this.log(LogLevels.TRACE, message, ...args);
140
- }
141
- debug(message, ...args) {
142
- this.log(LogLevels.DEBUG, message, ...args);
143
- }
144
- info(message, ...args) {
145
- this.log(LogLevels.INFO, message, ...args);
146
- }
147
- warn(message, ...args) {
148
- this.log(LogLevels.WARN, message, ...args);
149
- }
150
- error(message, ...args) {
151
- this.log(LogLevels.ERROR, message, ...args);
152
- }
153
- critical(message, ...args) {
154
- this.log(LogLevels.CRITICAL, message, ...args);
155
- }
156
- };
157
- var loggers = {};
158
- function getLogger(name = "default") {
159
- const defaultLogLevelEnv = _chunkOGAPU3UGcjs.getEnvUniversal.call(void 0,
160
- "_LOG_LEVEL"
161
- );
162
- const defaultLogLevel = _nullishCoalesce(defaultLogLevelEnv, () => ( "INFO"));
163
- if (!loggers[name]) {
164
- loggers[name] = new Logger(name, defaultLogLevel);
165
- }
166
- return loggers[name];
167
- }
168
- function formatter(log) {
169
- const args = [];
170
- for (let i = 0; i < log.args.length; i++) {
171
- const logArg = log.args[i];
172
- if (logArg && typeof logArg === "object") {
173
- for (const k in logArg) {
174
- const v = logArg[k];
175
- pushArg(k, v, args);
176
- }
177
- } else {
178
- pushArg(`arg${i}`, logArg, args);
179
- }
180
- }
181
- const logTs = _chunkOGAPU3UGcjs.getEnvUniversal.call(void 0, "_LOG_TIMESTAMP") === "1";
182
- const logTarget = _chunkOGAPU3UGcjs.getEnvUniversal.call(void 0, "_LOG_TARGET") === "1";
183
- return stringify(
184
- ...logTs ? [["ts", formatTimestamp(/* @__PURE__ */ new Date())]] : [],
185
- ["level", LevelNameMap[log.level]],
186
- ...logTarget ? [["target", log.loggerName]] : [],
187
- ["msg", log.msg],
188
- ...args
189
- );
190
- }
191
- function pushArg(k, v, args) {
192
- args.push([k, castToLogValue(v)]);
193
- }
194
- function setupLogging() {
195
- }
196
-
197
-
198
-
199
-
200
-
201
- exports.Logger = Logger; exports.getLogger = getLogger; exports.setupLogging = setupLogging;
202
- //# sourceMappingURL=chunk-2CRLFV6Z.cjs.map