rivetkit 2.0.23 → 2.0.24
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.
- package/dist/schemas/actor-persist/v2.ts +3 -3
- package/dist/schemas/actor-persist/v3.ts +274 -0
- package/dist/schemas/client-protocol/v2.ts +432 -0
- package/dist/schemas/file-system-driver/v2.ts +136 -0
- package/dist/tsup/actor/errors.cjs +2 -4
- package/dist/tsup/actor/errors.cjs.map +1 -1
- package/dist/tsup/actor/errors.d.cts +7 -10
- package/dist/tsup/actor/errors.d.ts +7 -10
- package/dist/tsup/actor/errors.js +9 -11
- package/dist/tsup/{actor-router-consts-B3Lu87yJ.d.cts → actor-router-consts-DzI2szci.d.cts} +5 -9
- package/dist/tsup/{actor-router-consts-B3Lu87yJ.d.ts → actor-router-consts-DzI2szci.d.ts} +5 -9
- package/dist/tsup/{chunk-3JYSUFET.cjs → chunk-3543NCSN.cjs} +45 -57
- package/dist/tsup/chunk-3543NCSN.cjs.map +1 -0
- package/dist/tsup/chunk-4SHILYS5.cjs +5694 -0
- package/dist/tsup/chunk-4SHILYS5.cjs.map +1 -0
- package/dist/tsup/{chunk-NCUALX2Q.cjs → chunk-5BZO5XPS.cjs} +3 -3
- package/dist/tsup/{chunk-NCUALX2Q.cjs.map → chunk-5BZO5XPS.cjs.map} +1 -1
- package/dist/tsup/{chunk-5PKKNNNS.js → chunk-BAIGSF64.js} +189 -187
- package/dist/tsup/chunk-BAIGSF64.js.map +1 -0
- package/dist/tsup/{chunk-HNYF4T36.cjs → chunk-CHLZBSI2.cjs} +17 -17
- package/dist/tsup/chunk-CHLZBSI2.cjs.map +1 -0
- package/dist/tsup/chunk-D3SLADUD.cjs +512 -0
- package/dist/tsup/chunk-D3SLADUD.cjs.map +1 -0
- package/dist/tsup/{chunk-KSRXX3Z4.cjs → chunk-D6762AOA.cjs} +20 -25
- package/dist/tsup/chunk-D6762AOA.cjs.map +1 -0
- package/dist/tsup/{chunk-C56XVVV4.cjs → chunk-DLK5YCTN.cjs} +187 -185
- package/dist/tsup/chunk-DLK5YCTN.cjs.map +1 -0
- package/dist/tsup/{chunk-DLYZKFRY.js → chunk-DUJQWGYD.js} +3 -7
- package/dist/tsup/chunk-DUJQWGYD.js.map +1 -0
- package/dist/tsup/{chunk-5UJQWWO3.js → chunk-EIPANQMF.js} +2 -2
- package/dist/tsup/{chunk-54DVMQPT.cjs → chunk-ESMTDP7G.cjs} +6 -6
- package/dist/tsup/chunk-ESMTDP7G.cjs.map +1 -0
- package/dist/tsup/{chunk-XYK5PY3B.cjs → chunk-FVAKREFB.cjs} +1900 -1737
- package/dist/tsup/chunk-FVAKREFB.cjs.map +1 -0
- package/dist/tsup/{chunk-PHNIVSG5.js → chunk-I3XT7WOF.js} +44 -56
- package/dist/tsup/chunk-I3XT7WOF.js.map +1 -0
- package/dist/tsup/{chunk-3I6ZIJVJ.js → chunk-IMDS5T42.js} +3 -3
- package/dist/tsup/chunk-IMDS5T42.js.map +1 -0
- package/dist/tsup/{chunk-SN4KWTRA.cjs → chunk-J3HZJF2P.cjs} +10 -14
- package/dist/tsup/chunk-J3HZJF2P.cjs.map +1 -0
- package/dist/tsup/{chunk-NOZSCUPQ.js → chunk-MBBJUHSP.js} +1844 -1681
- package/dist/tsup/chunk-MBBJUHSP.js.map +1 -0
- package/dist/tsup/{chunk-RVVUS4X6.js → chunk-MO5CB6MD.js} +9 -9
- package/dist/tsup/chunk-MO5CB6MD.js.map +1 -0
- package/dist/tsup/chunk-OFOTPKAH.js +512 -0
- package/dist/tsup/chunk-OFOTPKAH.js.map +1 -0
- package/dist/tsup/{chunk-G64QUEDJ.js → chunk-W6RDS6NW.js} +23 -28
- package/dist/tsup/chunk-W6RDS6NW.js.map +1 -0
- package/dist/tsup/{chunk-XSDSNHSE.cjs → chunk-YC5DUHPM.cjs} +4 -8
- package/dist/tsup/chunk-YC5DUHPM.cjs.map +1 -0
- package/dist/tsup/{chunk-YAYNBR37.js → chunk-YC7YPM2T.js} +2 -6
- package/dist/tsup/chunk-YC7YPM2T.js.map +1 -0
- package/dist/tsup/{chunk-FTQ62XTN.js → chunk-ZSPU5R4C.js} +3322 -2251
- package/dist/tsup/chunk-ZSPU5R4C.js.map +1 -0
- package/dist/tsup/client/mod.cjs +9 -9
- package/dist/tsup/client/mod.d.cts +5 -7
- package/dist/tsup/client/mod.d.ts +5 -7
- package/dist/tsup/client/mod.js +8 -8
- package/dist/tsup/common/log.cjs +3 -3
- package/dist/tsup/common/log.js +2 -2
- package/dist/tsup/common/websocket.cjs +4 -4
- package/dist/tsup/common/websocket.js +3 -3
- package/dist/tsup/{conn-B3Vhbgnd.d.ts → config-BRDYDraU.d.cts} +1119 -1047
- package/dist/tsup/{conn-DJWL3nGx.d.cts → config-Bo-blHpJ.d.ts} +1119 -1047
- package/dist/tsup/driver-helpers/mod.cjs +5 -13
- package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
- package/dist/tsup/driver-helpers/mod.d.cts +11 -9
- package/dist/tsup/driver-helpers/mod.d.ts +11 -9
- package/dist/tsup/driver-helpers/mod.js +14 -22
- package/dist/tsup/driver-test-suite/mod.cjs +474 -303
- package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
- package/dist/tsup/driver-test-suite/mod.d.cts +6 -9
- package/dist/tsup/driver-test-suite/mod.d.ts +6 -9
- package/dist/tsup/driver-test-suite/mod.js +1085 -914
- package/dist/tsup/driver-test-suite/mod.js.map +1 -1
- package/dist/tsup/inspector/mod.cjs +6 -6
- package/dist/tsup/inspector/mod.d.cts +5 -7
- package/dist/tsup/inspector/mod.d.ts +5 -7
- package/dist/tsup/inspector/mod.js +5 -5
- package/dist/tsup/mod.cjs +10 -16
- package/dist/tsup/mod.cjs.map +1 -1
- package/dist/tsup/mod.d.cts +23 -25
- package/dist/tsup/mod.d.ts +23 -25
- package/dist/tsup/mod.js +17 -23
- package/dist/tsup/test/mod.cjs +11 -11
- package/dist/tsup/test/mod.d.cts +4 -6
- package/dist/tsup/test/mod.d.ts +4 -6
- package/dist/tsup/test/mod.js +10 -10
- package/dist/tsup/utils.cjs +3 -5
- package/dist/tsup/utils.cjs.map +1 -1
- package/dist/tsup/utils.d.cts +1 -2
- package/dist/tsup/utils.d.ts +1 -2
- package/dist/tsup/utils.js +2 -4
- package/package.json +13 -6
- package/src/actor/config.ts +56 -44
- package/src/actor/conn/driver.ts +61 -0
- package/src/actor/conn/drivers/http.ts +17 -0
- package/src/actor/conn/drivers/raw-request.ts +24 -0
- package/src/actor/conn/drivers/raw-websocket.ts +65 -0
- package/src/actor/conn/drivers/websocket.ts +129 -0
- package/src/actor/conn/mod.ts +232 -0
- package/src/actor/conn/persisted.ts +81 -0
- package/src/actor/conn/state-manager.ts +196 -0
- package/src/actor/contexts/action.ts +23 -0
- package/src/actor/{context.ts → contexts/actor.ts} +19 -8
- package/src/actor/contexts/conn-init.ts +31 -0
- package/src/actor/contexts/conn.ts +48 -0
- package/src/actor/contexts/create-conn-state.ts +13 -0
- package/src/actor/contexts/on-before-connect.ts +13 -0
- package/src/actor/contexts/on-connect.ts +22 -0
- package/src/actor/contexts/request.ts +48 -0
- package/src/actor/contexts/websocket.ts +48 -0
- package/src/actor/definition.ts +3 -3
- package/src/actor/driver.ts +36 -5
- package/src/actor/errors.ts +19 -24
- package/src/actor/instance/connection-manager.ts +465 -0
- package/src/actor/instance/event-manager.ts +292 -0
- package/src/actor/instance/kv.ts +15 -0
- package/src/actor/instance/mod.ts +1107 -0
- package/src/actor/instance/persisted.ts +67 -0
- package/src/actor/instance/schedule-manager.ts +349 -0
- package/src/actor/instance/state-manager.ts +502 -0
- package/src/actor/mod.ts +13 -16
- package/src/actor/protocol/old.ts +131 -43
- package/src/actor/protocol/serde.ts +19 -4
- package/src/actor/router-endpoints.ts +61 -586
- package/src/actor/router-websocket-endpoints.ts +408 -0
- package/src/actor/router.ts +63 -197
- package/src/actor/schedule.ts +1 -1
- package/src/client/actor-conn.ts +183 -249
- package/src/client/actor-handle.ts +29 -6
- package/src/client/client.ts +0 -4
- package/src/client/config.ts +1 -4
- package/src/client/mod.ts +0 -1
- package/src/client/raw-utils.ts +3 -3
- package/src/client/utils.ts +85 -39
- package/src/common/actor-router-consts.ts +5 -12
- package/src/common/{inline-websocket-adapter2.ts → inline-websocket-adapter.ts} +26 -48
- package/src/common/log.ts +1 -1
- package/src/common/router.ts +28 -17
- package/src/common/utils.ts +2 -0
- package/src/driver-helpers/mod.ts +7 -10
- package/src/driver-helpers/utils.ts +18 -9
- package/src/driver-test-suite/mod.ts +26 -50
- package/src/driver-test-suite/test-inline-client-driver.ts +27 -51
- package/src/driver-test-suite/tests/actor-conn-hibernation.ts +150 -0
- package/src/driver-test-suite/tests/actor-conn-state.ts +1 -4
- package/src/driver-test-suite/tests/actor-conn.ts +5 -9
- package/src/driver-test-suite/tests/actor-destroy.ts +294 -0
- package/src/driver-test-suite/tests/actor-driver.ts +0 -7
- package/src/driver-test-suite/tests/actor-handle.ts +12 -12
- package/src/driver-test-suite/tests/actor-metadata.ts +1 -1
- package/src/driver-test-suite/tests/manager-driver.ts +1 -1
- package/src/driver-test-suite/tests/raw-http-direct-registry.ts +8 -8
- package/src/driver-test-suite/tests/raw-http-request-properties.ts +6 -5
- package/src/driver-test-suite/tests/raw-http.ts +5 -5
- package/src/driver-test-suite/tests/raw-websocket-direct-registry.ts +7 -7
- package/src/driver-test-suite/tests/request-access.ts +4 -4
- package/src/driver-test-suite/utils.ts +6 -10
- package/src/drivers/engine/actor-driver.ts +614 -424
- package/src/drivers/engine/mod.ts +0 -1
- package/src/drivers/file-system/actor.ts +24 -12
- package/src/drivers/file-system/global-state.ts +427 -37
- package/src/drivers/file-system/manager.ts +71 -83
- package/src/drivers/file-system/mod.ts +3 -0
- package/src/drivers/file-system/utils.ts +18 -8
- package/src/engine-process/mod.ts +38 -38
- package/src/inspector/utils.ts +7 -5
- package/src/manager/driver.ts +11 -4
- package/src/manager/gateway.ts +4 -29
- package/src/manager/protocol/mod.ts +0 -2
- package/src/manager/protocol/query.ts +0 -4
- package/src/manager/router.ts +67 -64
- package/src/manager-api/actors.ts +13 -0
- package/src/mod.ts +1 -3
- package/src/registry/mod.ts +20 -20
- package/src/registry/serve.ts +9 -14
- package/src/remote-manager-driver/actor-websocket-client.ts +1 -16
- package/src/remote-manager-driver/api-endpoints.ts +13 -1
- package/src/remote-manager-driver/api-utils.ts +8 -0
- package/src/remote-manager-driver/metadata.ts +58 -0
- package/src/remote-manager-driver/mod.ts +47 -62
- package/src/remote-manager-driver/ws-proxy.ts +1 -1
- package/src/schemas/actor-persist/mod.ts +1 -1
- package/src/schemas/actor-persist/versioned.ts +56 -31
- package/src/schemas/client-protocol/mod.ts +1 -1
- package/src/schemas/client-protocol/versioned.ts +41 -21
- package/src/schemas/client-protocol-zod/mod.ts +103 -0
- package/src/schemas/file-system-driver/mod.ts +1 -1
- package/src/schemas/file-system-driver/versioned.ts +42 -19
- package/src/serde.ts +33 -11
- package/src/test/mod.ts +7 -3
- package/src/utils/node.ts +173 -0
- package/src/utils.ts +0 -4
- package/dist/tsup/chunk-3I6ZIJVJ.js.map +0 -1
- package/dist/tsup/chunk-3JYSUFET.cjs.map +0 -1
- package/dist/tsup/chunk-54DVMQPT.cjs.map +0 -1
- package/dist/tsup/chunk-5PKKNNNS.js.map +0 -1
- package/dist/tsup/chunk-C56XVVV4.cjs.map +0 -1
- package/dist/tsup/chunk-D6PCH7FR.cjs +0 -4623
- package/dist/tsup/chunk-D6PCH7FR.cjs.map +0 -1
- package/dist/tsup/chunk-DLYZKFRY.js.map +0 -1
- package/dist/tsup/chunk-FTQ62XTN.js.map +0 -1
- package/dist/tsup/chunk-G64QUEDJ.js.map +0 -1
- package/dist/tsup/chunk-HNYF4T36.cjs.map +0 -1
- package/dist/tsup/chunk-JMLTKMJ7.cjs +0 -1119
- package/dist/tsup/chunk-JMLTKMJ7.cjs.map +0 -1
- package/dist/tsup/chunk-KSRXX3Z4.cjs.map +0 -1
- package/dist/tsup/chunk-NOZSCUPQ.js.map +0 -1
- package/dist/tsup/chunk-PHNIVSG5.js.map +0 -1
- package/dist/tsup/chunk-RUTBXBRR.js +0 -1119
- package/dist/tsup/chunk-RUTBXBRR.js.map +0 -1
- package/dist/tsup/chunk-RVVUS4X6.js.map +0 -1
- package/dist/tsup/chunk-SN4KWTRA.cjs.map +0 -1
- package/dist/tsup/chunk-XSDSNHSE.cjs.map +0 -1
- package/dist/tsup/chunk-XYK5PY3B.cjs.map +0 -1
- package/dist/tsup/chunk-YAYNBR37.js.map +0 -1
- package/src/actor/action.ts +0 -178
- package/src/actor/conn-drivers.ts +0 -216
- package/src/actor/conn-socket.ts +0 -8
- package/src/actor/conn.ts +0 -272
- package/src/actor/instance.ts +0 -2336
- package/src/actor/persisted.ts +0 -49
- package/src/actor/unstable-react.ts +0 -110
- package/src/driver-test-suite/tests/actor-reconnect.ts +0 -170
- package/src/drivers/engine/kv.ts +0 -3
- package/src/manager/hono-websocket-adapter.ts +0 -393
- /package/dist/tsup/{chunk-5UJQWWO3.js.map → chunk-EIPANQMF.js.map} +0 -0
|
@@ -13,25 +13,24 @@ import {
|
|
|
13
13
|
TO_CLIENT_VERSIONED,
|
|
14
14
|
TO_SERVER_VERSIONED,
|
|
15
15
|
} from "@/schemas/client-protocol/versioned";
|
|
16
|
+
import {
|
|
17
|
+
type ToClient as ToClientJson,
|
|
18
|
+
ToClientSchema,
|
|
19
|
+
type ToServer as ToServerJson,
|
|
20
|
+
ToServerSchema,
|
|
21
|
+
} from "@/schemas/client-protocol-zod/mod";
|
|
16
22
|
import { deserializeWithEncoding } from "@/serde";
|
|
17
23
|
import { assertUnreachable, bufferToArrayBuffer } from "../../utils";
|
|
18
|
-
import {
|
|
19
|
-
import
|
|
20
|
-
import type { ActorInstance } from "../instance";
|
|
21
|
-
|
|
22
|
-
export const TransportSchema = z.enum(["websocket", "sse"]);
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Transport mechanism used to communicate between client & actor.
|
|
26
|
-
*/
|
|
27
|
-
export type Transport = z.infer<typeof TransportSchema>;
|
|
24
|
+
import { CONN_SEND_MESSAGE_SYMBOL, type Conn } from "../conn/mod";
|
|
25
|
+
import { ActionContext } from "../contexts/action";
|
|
26
|
+
import type { ActorInstance } from "../instance/mod";
|
|
28
27
|
|
|
29
28
|
interface MessageEventOpts {
|
|
30
29
|
encoding: Encoding;
|
|
31
30
|
maxIncomingMessageSize: number;
|
|
32
31
|
}
|
|
33
32
|
|
|
34
|
-
function getValueLength(value: InputData): number {
|
|
33
|
+
export function getValueLength(value: InputData): number {
|
|
35
34
|
if (typeof value === "string") {
|
|
36
35
|
return value.length;
|
|
37
36
|
} else if (value instanceof Blob) {
|
|
@@ -70,7 +69,17 @@ export async function inputDataToBuffer(
|
|
|
70
69
|
export async function parseMessage(
|
|
71
70
|
value: InputData,
|
|
72
71
|
opts: MessageEventOpts,
|
|
73
|
-
): Promise<
|
|
72
|
+
): Promise<{
|
|
73
|
+
body:
|
|
74
|
+
| {
|
|
75
|
+
tag: "ActionRequest";
|
|
76
|
+
val: { id: bigint; name: string; args: unknown };
|
|
77
|
+
}
|
|
78
|
+
| {
|
|
79
|
+
tag: "SubscriptionRequest";
|
|
80
|
+
val: { eventName: string; subscribe: boolean };
|
|
81
|
+
};
|
|
82
|
+
}> {
|
|
74
83
|
// Validate value length
|
|
75
84
|
const length = getValueLength(value);
|
|
76
85
|
if (length > opts.maxIncomingMessageSize) {
|
|
@@ -88,7 +97,34 @@ export async function parseMessage(
|
|
|
88
97
|
}
|
|
89
98
|
|
|
90
99
|
// Deserialize message
|
|
91
|
-
return deserializeWithEncoding(
|
|
100
|
+
return deserializeWithEncoding(
|
|
101
|
+
opts.encoding,
|
|
102
|
+
buffer,
|
|
103
|
+
TO_SERVER_VERSIONED,
|
|
104
|
+
ToServerSchema,
|
|
105
|
+
// JSON: values are already the correct type
|
|
106
|
+
(json: ToServerJson): any => json,
|
|
107
|
+
// BARE: need to decode ArrayBuffer fields back to unknown
|
|
108
|
+
(bare: protocol.ToServer): any => {
|
|
109
|
+
if (bare.body.tag === "ActionRequest") {
|
|
110
|
+
return {
|
|
111
|
+
body: {
|
|
112
|
+
tag: "ActionRequest",
|
|
113
|
+
val: {
|
|
114
|
+
id: bare.body.val.id,
|
|
115
|
+
name: bare.body.val.name,
|
|
116
|
+
args: cbor.decode(
|
|
117
|
+
new Uint8Array(bare.body.val.args),
|
|
118
|
+
),
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
} else {
|
|
123
|
+
// SubscriptionRequest has no ArrayBuffer fields
|
|
124
|
+
return bare;
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
);
|
|
92
128
|
}
|
|
93
129
|
|
|
94
130
|
export interface ProcessMessageHandler<
|
|
@@ -122,7 +158,17 @@ export async function processMessage<
|
|
|
122
158
|
I,
|
|
123
159
|
DB extends AnyDatabaseProvider,
|
|
124
160
|
>(
|
|
125
|
-
message:
|
|
161
|
+
message: {
|
|
162
|
+
body:
|
|
163
|
+
| {
|
|
164
|
+
tag: "ActionRequest";
|
|
165
|
+
val: { id: bigint; name: string; args: unknown };
|
|
166
|
+
}
|
|
167
|
+
| {
|
|
168
|
+
tag: "SubscriptionRequest";
|
|
169
|
+
val: { eventName: string; subscribe: boolean };
|
|
170
|
+
};
|
|
171
|
+
},
|
|
126
172
|
actor: ActorInstance<S, CP, CS, V, I, DB>,
|
|
127
173
|
conn: Conn<S, CP, CS, V, I, DB>,
|
|
128
174
|
handler: ProcessMessageHandler<S, CP, CS, V, I, DB>,
|
|
@@ -138,10 +184,9 @@ export async function processMessage<
|
|
|
138
184
|
throw new errors.Unsupported("Action");
|
|
139
185
|
}
|
|
140
186
|
|
|
141
|
-
const { id, name, args
|
|
187
|
+
const { id, name, args } = message.body.val;
|
|
142
188
|
actionId = id;
|
|
143
189
|
actionName = name;
|
|
144
|
-
const args = cbor.decode(new Uint8Array(argsRaw));
|
|
145
190
|
|
|
146
191
|
actor.rLog.debug({
|
|
147
192
|
msg: "processing action request",
|
|
@@ -149,14 +194,15 @@ export async function processMessage<
|
|
|
149
194
|
actionName: name,
|
|
150
195
|
});
|
|
151
196
|
|
|
152
|
-
const ctx = new ActionContext<S, CP, CS, V, I, DB>(
|
|
153
|
-
actor.actorContext,
|
|
154
|
-
conn,
|
|
155
|
-
);
|
|
197
|
+
const ctx = new ActionContext<S, CP, CS, V, I, DB>(actor, conn);
|
|
156
198
|
|
|
157
199
|
// Process the action request and wait for the result
|
|
158
200
|
// This will wait for async actions to complete
|
|
159
|
-
const output = await handler.onExecuteAction(
|
|
201
|
+
const output = await handler.onExecuteAction(
|
|
202
|
+
ctx,
|
|
203
|
+
name,
|
|
204
|
+
args as unknown[],
|
|
205
|
+
);
|
|
160
206
|
|
|
161
207
|
actor.rLog.debug({
|
|
162
208
|
msg: "sending action response",
|
|
@@ -167,20 +213,31 @@ export async function processMessage<
|
|
|
167
213
|
});
|
|
168
214
|
|
|
169
215
|
// Send the response back to the client
|
|
170
|
-
conn
|
|
171
|
-
new CachedSerializer
|
|
172
|
-
|
|
216
|
+
conn[CONN_SEND_MESSAGE_SYMBOL](
|
|
217
|
+
new CachedSerializer(
|
|
218
|
+
output,
|
|
219
|
+
TO_CLIENT_VERSIONED,
|
|
220
|
+
ToClientSchema,
|
|
221
|
+
// JSON: output is the raw value
|
|
222
|
+
(value): ToClientJson => ({
|
|
173
223
|
body: {
|
|
174
|
-
tag: "ActionResponse",
|
|
224
|
+
tag: "ActionResponse" as const,
|
|
175
225
|
val: {
|
|
176
226
|
id: id,
|
|
177
|
-
output:
|
|
178
|
-
cbor.encode(output),
|
|
179
|
-
),
|
|
227
|
+
output: value,
|
|
180
228
|
},
|
|
181
229
|
},
|
|
182
|
-
},
|
|
183
|
-
|
|
230
|
+
}),
|
|
231
|
+
// BARE/CBOR: output needs to be CBOR-encoded to ArrayBuffer
|
|
232
|
+
(value): protocol.ToClient => ({
|
|
233
|
+
body: {
|
|
234
|
+
tag: "ActionResponse" as const,
|
|
235
|
+
val: {
|
|
236
|
+
id: id,
|
|
237
|
+
output: bufferToArrayBuffer(cbor.encode(value)),
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
}),
|
|
184
241
|
),
|
|
185
242
|
);
|
|
186
243
|
|
|
@@ -236,23 +293,54 @@ export async function processMessage<
|
|
|
236
293
|
});
|
|
237
294
|
|
|
238
295
|
// Build response
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
296
|
+
const errorData = { group, code, message, metadata, actionId };
|
|
297
|
+
conn[CONN_SEND_MESSAGE_SYMBOL](
|
|
298
|
+
new CachedSerializer(
|
|
299
|
+
errorData,
|
|
300
|
+
TO_CLIENT_VERSIONED,
|
|
301
|
+
ToClientSchema,
|
|
302
|
+
// JSON: metadata is the raw value (keep as undefined if not present)
|
|
303
|
+
(value): ToClientJson => {
|
|
304
|
+
const val: any = {
|
|
305
|
+
group: value.group,
|
|
306
|
+
code: value.code,
|
|
307
|
+
message: value.message,
|
|
308
|
+
actionId:
|
|
309
|
+
value.actionId !== undefined
|
|
310
|
+
? value.actionId
|
|
311
|
+
: null,
|
|
312
|
+
};
|
|
313
|
+
if (value.metadata !== undefined) {
|
|
314
|
+
val.metadata = value.metadata;
|
|
315
|
+
}
|
|
316
|
+
return {
|
|
317
|
+
body: {
|
|
318
|
+
tag: "Error" as const,
|
|
319
|
+
val,
|
|
320
|
+
},
|
|
321
|
+
};
|
|
322
|
+
},
|
|
323
|
+
// BARE/CBOR: metadata needs to be CBOR-encoded to ArrayBuffer
|
|
324
|
+
// Note: protocol.Error expects `| null` for optional fields (BARE protocol)
|
|
325
|
+
(value): protocol.ToClient => ({
|
|
242
326
|
body: {
|
|
243
|
-
tag: "Error",
|
|
327
|
+
tag: "Error" as const,
|
|
244
328
|
val: {
|
|
245
|
-
group,
|
|
246
|
-
code,
|
|
247
|
-
message,
|
|
248
|
-
metadata:
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
329
|
+
group: value.group,
|
|
330
|
+
code: value.code,
|
|
331
|
+
message: value.message,
|
|
332
|
+
metadata: value.metadata
|
|
333
|
+
? bufferToArrayBuffer(
|
|
334
|
+
cbor.encode(value.metadata),
|
|
335
|
+
)
|
|
336
|
+
: null,
|
|
337
|
+
actionId:
|
|
338
|
+
value.actionId !== undefined
|
|
339
|
+
? value.actionId
|
|
340
|
+
: null,
|
|
252
341
|
},
|
|
253
342
|
},
|
|
254
|
-
},
|
|
255
|
-
TO_CLIENT_VERSIONED,
|
|
343
|
+
}),
|
|
256
344
|
),
|
|
257
345
|
);
|
|
258
346
|
|
|
@@ -22,14 +22,26 @@ export type Encoding = z.infer<typeof EncodingSchema>;
|
|
|
22
22
|
/**
|
|
23
23
|
* Helper class that helps serialize data without re-serializing for the same encoding.
|
|
24
24
|
*/
|
|
25
|
-
export class CachedSerializer<T> {
|
|
25
|
+
export class CachedSerializer<TBare, TJson, T = TBare> {
|
|
26
26
|
#data: T;
|
|
27
27
|
#cache = new Map<Encoding, OutputData>();
|
|
28
|
-
#versionedDataHandler: VersionedDataHandler<
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
#versionedDataHandler: VersionedDataHandler<TBare>;
|
|
29
|
+
#zodSchema: z.ZodType<TJson>;
|
|
30
|
+
#toJson: (value: T) => TJson;
|
|
31
|
+
#toBare: (value: T) => TBare;
|
|
32
|
+
|
|
33
|
+
constructor(
|
|
34
|
+
data: T,
|
|
35
|
+
versionedDataHandler: VersionedDataHandler<TBare>,
|
|
36
|
+
zodSchema: z.ZodType<TJson>,
|
|
37
|
+
toJson: (value: T) => TJson,
|
|
38
|
+
toBare: (value: T) => TBare,
|
|
39
|
+
) {
|
|
31
40
|
this.#data = data;
|
|
32
41
|
this.#versionedDataHandler = versionedDataHandler;
|
|
42
|
+
this.#zodSchema = zodSchema;
|
|
43
|
+
this.#toJson = toJson;
|
|
44
|
+
this.#toBare = toBare;
|
|
33
45
|
}
|
|
34
46
|
|
|
35
47
|
public get rawData(): T {
|
|
@@ -45,6 +57,9 @@ export class CachedSerializer<T> {
|
|
|
45
57
|
encoding,
|
|
46
58
|
this.#data,
|
|
47
59
|
this.#versionedDataHandler,
|
|
60
|
+
this.#zodSchema,
|
|
61
|
+
this.#toJson,
|
|
62
|
+
this.#toBare,
|
|
48
63
|
);
|
|
49
64
|
this.#cache.set(encoding, serialized);
|
|
50
65
|
return serialized;
|