rivetkit 2.0.24-rc.1 → 2.0.25-rc.1
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/v1.ts +6 -0
- package/dist/schemas/actor-persist/v2.ts +9 -3
- package/dist/schemas/actor-persist/v3.ts +280 -0
- package/dist/schemas/client-protocol/v1.ts +6 -0
- package/dist/schemas/client-protocol/v2.ts +438 -0
- package/dist/schemas/file-system-driver/v1.ts +6 -0
- package/dist/schemas/file-system-driver/v2.ts +142 -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-ZTH3KYFH.cjs → chunk-3FG5OJ3G.cjs} +3 -3
- package/dist/tsup/{chunk-ZTH3KYFH.cjs.map → chunk-3FG5OJ3G.cjs.map} +1 -1
- package/dist/tsup/{chunk-BLK27ES3.js → chunk-6JN6W6G3.js} +44 -56
- package/dist/tsup/chunk-6JN6W6G3.js.map +1 -0
- package/dist/tsup/chunk-7IBNNGQ2.js +514 -0
- package/dist/tsup/chunk-7IBNNGQ2.js.map +1 -0
- package/dist/tsup/{chunk-36JJ4IQB.cjs → chunk-AZATXPR4.cjs} +4 -8
- package/dist/tsup/chunk-AZATXPR4.cjs.map +1 -0
- package/dist/tsup/chunk-B7MENRD5.cjs +5694 -0
- package/dist/tsup/chunk-B7MENRD5.cjs.map +1 -0
- package/dist/tsup/{chunk-BOMZS2TJ.js → chunk-BBVFDEYD.js} +9 -9
- package/dist/tsup/chunk-BBVFDEYD.js.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-2JYPS5YM.cjs → chunk-E63WZNMR.cjs} +6 -6
- package/dist/tsup/chunk-E63WZNMR.cjs.map +1 -0
- package/dist/tsup/{chunk-YBG6R7LX.js → chunk-EDGN4OC7.js} +3 -7
- package/dist/tsup/chunk-EDGN4OC7.js.map +1 -0
- package/dist/tsup/{chunk-BYMKMOBS.js → chunk-FLOQ3UWM.js} +1844 -1681
- package/dist/tsup/chunk-FLOQ3UWM.js.map +1 -0
- package/dist/tsup/{chunk-7L65NNWP.cjs → chunk-H7GV5DIW.cjs} +187 -185
- package/dist/tsup/chunk-H7GV5DIW.cjs.map +1 -0
- package/dist/tsup/{chunk-227FEWMB.js → chunk-HZYZ7JSF.js} +3322 -2251
- package/dist/tsup/chunk-HZYZ7JSF.js.map +1 -0
- package/dist/tsup/{chunk-FX7TWFQR.js → chunk-IDJK7ILQ.js} +2 -6
- package/dist/tsup/chunk-IDJK7ILQ.js.map +1 -0
- package/dist/tsup/{chunk-VHGY7PU5.cjs → chunk-ILFXA4AL.cjs} +1900 -1737
- package/dist/tsup/chunk-ILFXA4AL.cjs.map +1 -0
- package/dist/tsup/chunk-MV6M3FDL.cjs +514 -0
- package/dist/tsup/chunk-MV6M3FDL.cjs.map +1 -0
- package/dist/tsup/{chunk-PLUN2NQT.js → chunk-NWBKMCWC.js} +189 -187
- package/dist/tsup/chunk-NWBKMCWC.js.map +1 -0
- package/dist/tsup/{chunk-CD33GT6Z.js → chunk-QIHBDXTO.js} +2 -2
- package/dist/tsup/{chunk-G64QUEDJ.js → chunk-W6RDS6NW.js} +23 -28
- package/dist/tsup/chunk-W6RDS6NW.js.map +1 -0
- package/dist/tsup/{chunk-INNFK746.cjs → chunk-WQU4M4ZC.cjs} +10 -14
- package/dist/tsup/chunk-WQU4M4ZC.cjs.map +1 -0
- package/dist/tsup/{chunk-SHVX2QUR.cjs → chunk-XKZA47XS.cjs} +17 -17
- package/dist/tsup/chunk-XKZA47XS.cjs.map +1 -0
- package/dist/tsup/{chunk-HHFKKVLR.cjs → chunk-YHWIOWVA.cjs} +45 -57
- package/dist/tsup/chunk-YHWIOWVA.cjs.map +1 -0
- package/dist/tsup/{chunk-YBHYXIP6.js → chunk-YVL6IRUM.js} +3 -3
- package/dist/tsup/chunk-YVL6IRUM.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-227FEWMB.js.map +0 -1
- package/dist/tsup/chunk-2JYPS5YM.cjs.map +0 -1
- package/dist/tsup/chunk-36JJ4IQB.cjs.map +0 -1
- package/dist/tsup/chunk-7L65NNWP.cjs.map +0 -1
- package/dist/tsup/chunk-BLK27ES3.js.map +0 -1
- package/dist/tsup/chunk-BOMZS2TJ.js.map +0 -1
- package/dist/tsup/chunk-BYMKMOBS.js.map +0 -1
- package/dist/tsup/chunk-FX7TWFQR.js.map +0 -1
- package/dist/tsup/chunk-G64QUEDJ.js.map +0 -1
- package/dist/tsup/chunk-HHFKKVLR.cjs.map +0 -1
- package/dist/tsup/chunk-INNFK746.cjs.map +0 -1
- package/dist/tsup/chunk-KSRXX3Z4.cjs.map +0 -1
- package/dist/tsup/chunk-O44LFKSB.cjs +0 -4623
- package/dist/tsup/chunk-O44LFKSB.cjs.map +0 -1
- package/dist/tsup/chunk-PLUN2NQT.js.map +0 -1
- package/dist/tsup/chunk-S4UJG7ZE.js +0 -1119
- package/dist/tsup/chunk-S4UJG7ZE.js.map +0 -1
- package/dist/tsup/chunk-SHVX2QUR.cjs.map +0 -1
- package/dist/tsup/chunk-VFB23BYZ.cjs +0 -1119
- package/dist/tsup/chunk-VFB23BYZ.cjs.map +0 -1
- package/dist/tsup/chunk-VHGY7PU5.cjs.map +0 -1
- package/dist/tsup/chunk-YBG6R7LX.js.map +0 -1
- package/dist/tsup/chunk-YBHYXIP6.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-CD33GT6Z.js.map → chunk-QIHBDXTO.js.map} +0 -0
|
@@ -47,12 +47,6 @@ declare class ActionNotFound extends ActorError {
|
|
|
47
47
|
declare class InvalidEncoding extends ActorError {
|
|
48
48
|
constructor(format?: string);
|
|
49
49
|
}
|
|
50
|
-
declare class ConnNotFound extends ActorError {
|
|
51
|
-
constructor(id?: string);
|
|
52
|
-
}
|
|
53
|
-
declare class IncorrectConnToken extends ActorError {
|
|
54
|
-
constructor();
|
|
55
|
-
}
|
|
56
50
|
declare class MessageTooLong extends ActorError {
|
|
57
51
|
constructor();
|
|
58
52
|
}
|
|
@@ -100,9 +94,12 @@ declare class InvalidRequest extends ActorError {
|
|
|
100
94
|
declare class ActorNotFound extends ActorError {
|
|
101
95
|
constructor(identifier?: string);
|
|
102
96
|
}
|
|
103
|
-
declare class
|
|
97
|
+
declare class ActorDuplicateKey extends ActorError {
|
|
104
98
|
constructor(name: string, key: string[]);
|
|
105
99
|
}
|
|
100
|
+
declare class ActorStopping extends ActorError {
|
|
101
|
+
constructor(identifier?: string);
|
|
102
|
+
}
|
|
106
103
|
declare class ProxyError extends ActorError {
|
|
107
104
|
constructor(operation: string, error?: unknown);
|
|
108
105
|
}
|
|
@@ -123,13 +120,13 @@ declare class Forbidden extends ActorError {
|
|
|
123
120
|
declare class DatabaseNotEnabled extends ActorError {
|
|
124
121
|
constructor();
|
|
125
122
|
}
|
|
126
|
-
declare class
|
|
123
|
+
declare class RequestHandlerNotDfeined extends ActorError {
|
|
127
124
|
constructor();
|
|
128
125
|
}
|
|
129
126
|
declare class WebSocketHandlerNotDefined extends ActorError {
|
|
130
127
|
constructor();
|
|
131
128
|
}
|
|
132
|
-
declare class
|
|
129
|
+
declare class InvalidRequestHandlerResponse extends ActorError {
|
|
133
130
|
constructor();
|
|
134
131
|
}
|
|
135
132
|
declare class MissingActorHeader extends ActorError {
|
|
@@ -145,4 +142,4 @@ declare class RouteNotFound extends ActorError {
|
|
|
145
142
|
constructor();
|
|
146
143
|
}
|
|
147
144
|
|
|
148
|
-
export { ActionNotFound, ActionTimedOut,
|
|
145
|
+
export { ActionNotFound, ActionTimedOut, ActorDuplicateKey, ActorError, ActorNotFound, ActorStopping, ConnStateNotEnabled, DatabaseNotEnabled, FeatureNotImplemented, Forbidden, INTERNAL_ERROR_CODE, INTERNAL_ERROR_DESCRIPTION, InternalError, type InternalErrorMetadata, InvalidActionRequest, InvalidEncoding, InvalidParams, InvalidQueryJSON, InvalidRequest, InvalidRequestHandlerResponse, InvalidStateType, type InvalidStateTypeOptions, MalformedMessage, MessageTooLong, MissingActorHeader, ProxyError, RequestHandlerNotDfeined, RouteNotFound, StateNotEnabled, USER_ERROR_CODE, Unauthorized, Unreachable, Unsupported, UserError, type UserErrorOptions, VarsNotEnabled, WebSocketHandlerNotDefined, WebSocketsNotEnabled };
|
|
@@ -1,30 +1,29 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ActionNotFound,
|
|
3
3
|
ActionTimedOut,
|
|
4
|
-
|
|
4
|
+
ActorDuplicateKey,
|
|
5
5
|
ActorError,
|
|
6
6
|
ActorNotFound,
|
|
7
|
-
|
|
7
|
+
ActorStopping,
|
|
8
8
|
ConnStateNotEnabled,
|
|
9
9
|
DatabaseNotEnabled,
|
|
10
10
|
FeatureNotImplemented,
|
|
11
|
-
FetchHandlerNotDefined,
|
|
12
11
|
Forbidden,
|
|
13
12
|
INTERNAL_ERROR_CODE,
|
|
14
13
|
INTERNAL_ERROR_DESCRIPTION,
|
|
15
|
-
IncorrectConnToken,
|
|
16
14
|
InternalError,
|
|
17
15
|
InvalidActionRequest,
|
|
18
16
|
InvalidEncoding,
|
|
19
|
-
InvalidFetchResponse,
|
|
20
17
|
InvalidParams,
|
|
21
18
|
InvalidQueryJSON,
|
|
22
19
|
InvalidRequest,
|
|
20
|
+
InvalidRequestHandlerResponse,
|
|
23
21
|
InvalidStateType,
|
|
24
22
|
MalformedMessage,
|
|
25
23
|
MessageTooLong,
|
|
26
24
|
MissingActorHeader,
|
|
27
25
|
ProxyError,
|
|
26
|
+
RequestHandlerNotDfeined,
|
|
28
27
|
RouteNotFound,
|
|
29
28
|
StateNotEnabled,
|
|
30
29
|
USER_ERROR_CODE,
|
|
@@ -35,34 +34,33 @@ import {
|
|
|
35
34
|
VarsNotEnabled,
|
|
36
35
|
WebSocketHandlerNotDefined,
|
|
37
36
|
WebSocketsNotEnabled
|
|
38
|
-
} from "../chunk-
|
|
37
|
+
} from "../chunk-W6RDS6NW.js";
|
|
39
38
|
export {
|
|
40
39
|
ActionNotFound,
|
|
41
40
|
ActionTimedOut,
|
|
42
|
-
|
|
41
|
+
ActorDuplicateKey,
|
|
43
42
|
ActorError,
|
|
44
43
|
ActorNotFound,
|
|
45
|
-
|
|
44
|
+
ActorStopping,
|
|
46
45
|
ConnStateNotEnabled,
|
|
47
46
|
DatabaseNotEnabled,
|
|
48
47
|
FeatureNotImplemented,
|
|
49
|
-
FetchHandlerNotDefined,
|
|
50
48
|
Forbidden,
|
|
51
49
|
INTERNAL_ERROR_CODE,
|
|
52
50
|
INTERNAL_ERROR_DESCRIPTION,
|
|
53
|
-
IncorrectConnToken,
|
|
54
51
|
InternalError,
|
|
55
52
|
InvalidActionRequest,
|
|
56
53
|
InvalidEncoding,
|
|
57
|
-
InvalidFetchResponse,
|
|
58
54
|
InvalidParams,
|
|
59
55
|
InvalidQueryJSON,
|
|
60
56
|
InvalidRequest,
|
|
57
|
+
InvalidRequestHandlerResponse,
|
|
61
58
|
InvalidStateType,
|
|
62
59
|
MalformedMessage,
|
|
63
60
|
MessageTooLong,
|
|
64
61
|
MissingActorHeader,
|
|
65
62
|
ProxyError,
|
|
63
|
+
RequestHandlerNotDfeined,
|
|
66
64
|
RouteNotFound,
|
|
67
65
|
StateNotEnabled,
|
|
68
66
|
USER_ERROR_CODE,
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
declare const
|
|
2
|
-
declare const
|
|
1
|
+
declare const PATH_CONNECT = "/connect";
|
|
2
|
+
declare const PATH_WEBSOCKET_BASE = "/websocket";
|
|
3
|
+
declare const PATH_WEBSOCKET_PREFIX = "/websocket/";
|
|
3
4
|
declare const HEADER_ACTOR_QUERY = "x-rivet-query";
|
|
4
5
|
declare const HEADER_ENCODING = "x-rivet-encoding";
|
|
5
6
|
declare const HEADER_CONN_PARAMS = "x-rivet-conn-params";
|
|
6
7
|
declare const HEADER_ACTOR_ID = "x-rivet-actor";
|
|
7
|
-
declare const HEADER_CONN_ID = "x-rivet-conn";
|
|
8
|
-
declare const HEADER_CONN_TOKEN = "x-rivet-conn-token";
|
|
9
8
|
declare const HEADER_RIVET_TARGET = "x-rivet-target";
|
|
10
9
|
declare const HEADER_RIVET_ACTOR = "x-rivet-actor";
|
|
11
10
|
/** Some servers (such as node-ws & Cloudflare) require explicitly match a certain WebSocket protocol. This gives us a static protocol to match against. */
|
|
@@ -14,10 +13,7 @@ declare const WS_PROTOCOL_TARGET = "rivet_target.";
|
|
|
14
13
|
declare const WS_PROTOCOL_ACTOR = "rivet_actor.";
|
|
15
14
|
declare const WS_PROTOCOL_ENCODING = "rivet_encoding.";
|
|
16
15
|
declare const WS_PROTOCOL_CONN_PARAMS = "rivet_conn_params.";
|
|
17
|
-
declare const
|
|
18
|
-
declare const WS_PROTOCOL_CONN_TOKEN = "rivet_conn_token.";
|
|
19
|
-
declare const WS_PROTOCOL_TRANSPORT = "test_transport.";
|
|
20
|
-
declare const WS_PROTOCOL_PATH = "test_path.";
|
|
16
|
+
declare const WS_TEST_PROTOCOL_PATH = "test_path.";
|
|
21
17
|
/**
|
|
22
18
|
* Headers that publics can send from public clients.
|
|
23
19
|
*
|
|
@@ -25,4 +21,4 @@ declare const WS_PROTOCOL_PATH = "test_path.";
|
|
|
25
21
|
**/
|
|
26
22
|
declare const ALLOWED_PUBLIC_HEADERS: string[];
|
|
27
23
|
|
|
28
|
-
export { ALLOWED_PUBLIC_HEADERS as A, HEADER_ACTOR_ID as H,
|
|
24
|
+
export { ALLOWED_PUBLIC_HEADERS as A, HEADER_ACTOR_ID as H, PATH_CONNECT as P, WS_PROTOCOL_ACTOR as W, PATH_WEBSOCKET_PREFIX as a, HEADER_ACTOR_QUERY as b, HEADER_CONN_PARAMS as c, HEADER_ENCODING as d, HEADER_RIVET_ACTOR as e, HEADER_RIVET_TARGET as f, PATH_WEBSOCKET_BASE as g, WS_PROTOCOL_CONN_PARAMS as h, WS_PROTOCOL_ENCODING as i, WS_PROTOCOL_STANDARD as j, WS_PROTOCOL_TARGET as k, WS_TEST_PROTOCOL_PATH as l };
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
declare const
|
|
2
|
-
declare const
|
|
1
|
+
declare const PATH_CONNECT = "/connect";
|
|
2
|
+
declare const PATH_WEBSOCKET_BASE = "/websocket";
|
|
3
|
+
declare const PATH_WEBSOCKET_PREFIX = "/websocket/";
|
|
3
4
|
declare const HEADER_ACTOR_QUERY = "x-rivet-query";
|
|
4
5
|
declare const HEADER_ENCODING = "x-rivet-encoding";
|
|
5
6
|
declare const HEADER_CONN_PARAMS = "x-rivet-conn-params";
|
|
6
7
|
declare const HEADER_ACTOR_ID = "x-rivet-actor";
|
|
7
|
-
declare const HEADER_CONN_ID = "x-rivet-conn";
|
|
8
|
-
declare const HEADER_CONN_TOKEN = "x-rivet-conn-token";
|
|
9
8
|
declare const HEADER_RIVET_TARGET = "x-rivet-target";
|
|
10
9
|
declare const HEADER_RIVET_ACTOR = "x-rivet-actor";
|
|
11
10
|
/** Some servers (such as node-ws & Cloudflare) require explicitly match a certain WebSocket protocol. This gives us a static protocol to match against. */
|
|
@@ -14,10 +13,7 @@ declare const WS_PROTOCOL_TARGET = "rivet_target.";
|
|
|
14
13
|
declare const WS_PROTOCOL_ACTOR = "rivet_actor.";
|
|
15
14
|
declare const WS_PROTOCOL_ENCODING = "rivet_encoding.";
|
|
16
15
|
declare const WS_PROTOCOL_CONN_PARAMS = "rivet_conn_params.";
|
|
17
|
-
declare const
|
|
18
|
-
declare const WS_PROTOCOL_CONN_TOKEN = "rivet_conn_token.";
|
|
19
|
-
declare const WS_PROTOCOL_TRANSPORT = "test_transport.";
|
|
20
|
-
declare const WS_PROTOCOL_PATH = "test_path.";
|
|
16
|
+
declare const WS_TEST_PROTOCOL_PATH = "test_path.";
|
|
21
17
|
/**
|
|
22
18
|
* Headers that publics can send from public clients.
|
|
23
19
|
*
|
|
@@ -25,4 +21,4 @@ declare const WS_PROTOCOL_PATH = "test_path.";
|
|
|
25
21
|
**/
|
|
26
22
|
declare const ALLOWED_PUBLIC_HEADERS: string[];
|
|
27
23
|
|
|
28
|
-
export { ALLOWED_PUBLIC_HEADERS as A, HEADER_ACTOR_ID as H,
|
|
24
|
+
export { ALLOWED_PUBLIC_HEADERS as A, HEADER_ACTOR_ID as H, PATH_CONNECT as P, WS_PROTOCOL_ACTOR as W, PATH_WEBSOCKET_PREFIX as a, HEADER_ACTOR_QUERY as b, HEADER_CONN_PARAMS as c, HEADER_ENCODING as d, HEADER_RIVET_ACTOR as e, HEADER_RIVET_TARGET as f, PATH_WEBSOCKET_BASE as g, WS_PROTOCOL_CONN_PARAMS as h, WS_PROTOCOL_ENCODING as i, WS_PROTOCOL_STANDARD as j, WS_PROTOCOL_TARGET as k, WS_TEST_PROTOCOL_PATH as l };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
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; } }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkH7GV5DIWcjs = require('./chunk-H7GV5DIW.cjs');
|
|
4
4
|
|
|
5
5
|
// src/client/log.ts
|
|
6
6
|
function logger() {
|
|
7
|
-
return
|
|
7
|
+
return _chunkH7GV5DIWcjs.getLogger.call(void 0, "actor-client");
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
// src/common/websocket.ts
|
|
@@ -46,4 +46,4 @@ async function importWebSocket() {
|
|
|
46
46
|
|
|
47
47
|
|
|
48
48
|
exports.logger = logger; exports.importWebSocket = importWebSocket;
|
|
49
|
-
//# sourceMappingURL=chunk-
|
|
49
|
+
//# sourceMappingURL=chunk-3FG5OJ3G.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/rivet/rivet/rivetkit-typescript/packages/rivetkit/dist/tsup/chunk-
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/rivet/rivet/rivetkit-typescript/packages/rivetkit/dist/tsup/chunk-3FG5OJ3G.cjs","../../src/client/log.ts","../../src/common/websocket.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACFO,SAAS,MAAA,CAAA,EAAS;AACxB,EAAA,OAAO,yCAAA,cAAwB,CAAA;AAChC;ADIA;AACA;AENA,IAAI,iBAAA,EAAqD,IAAA;AAEzD,MAAA,SAAsB,eAAA,CAAA,EAA6C;AAElE,EAAA,GAAA,CAAI,iBAAA,IAAqB,IAAA,EAAM;AAC9B,IAAA,OAAO,gBAAA;AAAA,EACR;AAGA,EAAA,iBAAA,EAAA,CAAoB,MAAA,CAAA,EAAA,GAAY;AAC/B,IAAA,IAAI,UAAA;AAEJ,IAAA,GAAA,CAAI,OAAO,UAAA,IAAc,WAAA,EAAa;AAErC,MAAA,WAAA,EAAa,SAAA;AAAA,IACd,EAAA,KAAO;AAEN,MAAA,IAAI;AACH,QAAA,MAAM,WAAA,EAAa,IAAA;AACnB,QAAA,MAAM,GAAA,EAAK,MAAM,4DAAA;AAAA;AAAA,UAAiC;AAAA,QAAA,GAAA;AAClD,QAAA,WAAA,EAAa,EAAA,CAAG,OAAA;AAChB,QAAA,MAAA,CAAO,CAAA,CAAE,KAAA,CAAM,0BAA0B,CAAA;AAAA,MAC1C,EAAA,UAAQ;AAEP,QAAA,WAAA,EAAa,MAAM,cAAc;AAAA,UAChC,WAAA,CAAA,EAAc;AACb,YAAA,MAAM,IAAI,KAAA;AAAA,cACT;AAAA,YACD,CAAA;AAAA,UACD;AAAA,QACD,CAAA;AACA,QAAA,MAAA,CAAO,CAAA,CAAE,KAAA,CAAM,sBAAsB,CAAA;AAAA,MACtC;AAAA,IACD;AAEA,IAAA,OAAO,UAAA;AAAA,EACR,CAAA,CAAA,CAAG,CAAA;AAEH,EAAA,OAAO,gBAAA;AACR;AFCA;AACA;AACE;AACA;AACF,mEAAC","file":"/home/runner/work/rivet/rivet/rivetkit-typescript/packages/rivetkit/dist/tsup/chunk-3FG5OJ3G.cjs","sourcesContent":[null,"import { getLogger } from \"@/common/log\";\n\nexport function logger() {\n\treturn getLogger(\"actor-client\");\n}\n","import { logger } from \"@/client/log\";\n\n// Global singleton promise that will be reused for subsequent calls\nlet webSocketPromise: Promise<typeof WebSocket> | null = null;\n\nexport async function importWebSocket(): Promise<typeof WebSocket> {\n\t// Return existing promise if we already started loading\n\tif (webSocketPromise !== null) {\n\t\treturn webSocketPromise;\n\t}\n\n\t// Create and store the promise\n\twebSocketPromise = (async () => {\n\t\tlet _WebSocket: typeof WebSocket;\n\n\t\tif (typeof WebSocket !== \"undefined\") {\n\t\t\t// Browser environment\n\t\t\t_WebSocket = WebSocket as unknown as typeof WebSocket;\n\t\t} else {\n\t\t\t// Node.js environment\n\t\t\ttry {\n\t\t\t\tconst moduleName = \"ws\";\n\t\t\t\tconst ws = await import(/* webpackIgnore: true */ moduleName);\n\t\t\t\t_WebSocket = ws.default as unknown as typeof WebSocket;\n\t\t\t\tlogger().debug(\"using websocket from npm\");\n\t\t\t} catch {\n\t\t\t\t// WS not available\n\t\t\t\t_WebSocket = class MockWebSocket {\n\t\t\t\t\tconstructor() {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'WebSocket support requires installing the \"ws\" peer dependency.',\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} as unknown as typeof WebSocket;\n\t\t\t\tlogger().debug(\"using mock websocket\");\n\t\t\t}\n\t\t}\n\n\t\treturn _WebSocket;\n\t})();\n\n\treturn webSocketPromise;\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
assertUnreachable,
|
|
3
3
|
getLogger
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-NWBKMCWC.js";
|
|
5
5
|
import {
|
|
6
6
|
Unreachable
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-W6RDS6NW.js";
|
|
8
8
|
|
|
9
9
|
// src/actor/log.ts
|
|
10
10
|
function loggerWithoutContext() {
|
|
@@ -68,14 +68,14 @@ function isConnStatePath(path) {
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
// src/common/actor-router-consts.ts
|
|
71
|
-
var
|
|
72
|
-
var
|
|
71
|
+
var PATH_CONNECT = "/connect";
|
|
72
|
+
var PATH_WEBSOCKET_BASE = "/websocket";
|
|
73
|
+
var PATH_WEBSOCKET_PREFIX = "/websocket/";
|
|
74
|
+
var PATH_INSPECTOR_CONNECT = "/inspector/connect";
|
|
73
75
|
var HEADER_ACTOR_QUERY = "x-rivet-query";
|
|
74
76
|
var HEADER_ENCODING = "x-rivet-encoding";
|
|
75
77
|
var HEADER_CONN_PARAMS = "x-rivet-conn-params";
|
|
76
78
|
var HEADER_ACTOR_ID = "x-rivet-actor";
|
|
77
|
-
var HEADER_CONN_ID = "x-rivet-conn";
|
|
78
|
-
var HEADER_CONN_TOKEN = "x-rivet-conn-token";
|
|
79
79
|
var HEADER_RIVET_TOKEN = "x-rivet-token";
|
|
80
80
|
var HEADER_RIVET_TARGET = "x-rivet-target";
|
|
81
81
|
var HEADER_RIVET_ACTOR = "x-rivet-actor";
|
|
@@ -85,11 +85,7 @@ var WS_PROTOCOL_TARGET = "rivet_target.";
|
|
|
85
85
|
var WS_PROTOCOL_ACTOR = "rivet_actor.";
|
|
86
86
|
var WS_PROTOCOL_ENCODING = "rivet_encoding.";
|
|
87
87
|
var WS_PROTOCOL_CONN_PARAMS = "rivet_conn_params.";
|
|
88
|
-
var
|
|
89
|
-
var WS_PROTOCOL_CONN_TOKEN = "rivet_conn_token.";
|
|
90
|
-
var WS_PROTOCOL_TOKEN = "rivet_token.";
|
|
91
|
-
var WS_PROTOCOL_TRANSPORT = "test_transport.";
|
|
92
|
-
var WS_PROTOCOL_PATH = "test_path.";
|
|
88
|
+
var WS_TEST_PROTOCOL_PATH = "test_path.";
|
|
93
89
|
var ALLOWED_PUBLIC_HEADERS = [
|
|
94
90
|
"Content-Type",
|
|
95
91
|
"User-Agent",
|
|
@@ -97,8 +93,6 @@ var ALLOWED_PUBLIC_HEADERS = [
|
|
|
97
93
|
HEADER_ENCODING,
|
|
98
94
|
HEADER_CONN_PARAMS,
|
|
99
95
|
HEADER_ACTOR_ID,
|
|
100
|
-
HEADER_CONN_ID,
|
|
101
|
-
HEADER_CONN_TOKEN,
|
|
102
96
|
HEADER_RIVET_TARGET,
|
|
103
97
|
HEADER_RIVET_ACTOR,
|
|
104
98
|
HEADER_RIVET_NAMESPACE,
|
|
@@ -116,9 +110,15 @@ var CachedSerializer = class {
|
|
|
116
110
|
#data;
|
|
117
111
|
#cache = /* @__PURE__ */ new Map();
|
|
118
112
|
#versionedDataHandler;
|
|
119
|
-
|
|
113
|
+
#zodSchema;
|
|
114
|
+
#toJson;
|
|
115
|
+
#toBare;
|
|
116
|
+
constructor(data, versionedDataHandler, zodSchema, toJson, toBare) {
|
|
120
117
|
this.#data = data;
|
|
121
118
|
this.#versionedDataHandler = versionedDataHandler;
|
|
119
|
+
this.#zodSchema = zodSchema;
|
|
120
|
+
this.#toJson = toJson;
|
|
121
|
+
this.#toBare = toBare;
|
|
122
122
|
}
|
|
123
123
|
get rawData() {
|
|
124
124
|
return this.#data;
|
|
@@ -131,7 +131,10 @@ var CachedSerializer = class {
|
|
|
131
131
|
const serialized = serializeWithEncoding(
|
|
132
132
|
encoding,
|
|
133
133
|
this.#data,
|
|
134
|
-
this.#versionedDataHandler
|
|
134
|
+
this.#versionedDataHandler,
|
|
135
|
+
this.#zodSchema,
|
|
136
|
+
this.#toJson,
|
|
137
|
+
this.#toBare
|
|
135
138
|
);
|
|
136
139
|
this.#cache.set(encoding, serialized);
|
|
137
140
|
return serialized;
|
|
@@ -150,17 +153,6 @@ function base64EncodeArrayBuffer(arrayBuffer) {
|
|
|
150
153
|
const uint8Array = new Uint8Array(arrayBuffer);
|
|
151
154
|
return base64EncodeUint8Array(uint8Array);
|
|
152
155
|
}
|
|
153
|
-
function encodeDataToString(message) {
|
|
154
|
-
if (typeof message === "string") {
|
|
155
|
-
return message;
|
|
156
|
-
} else if (message instanceof ArrayBuffer) {
|
|
157
|
-
return base64EncodeArrayBuffer(message);
|
|
158
|
-
} else if (message instanceof Uint8Array) {
|
|
159
|
-
return base64EncodeUint8Array(message);
|
|
160
|
-
} else {
|
|
161
|
-
assertUnreachable2(message);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
156
|
function base64DecodeToUint8Array(base64) {
|
|
165
157
|
if (typeof Buffer !== "undefined") {
|
|
166
158
|
return new Uint8Array(Buffer.from(base64, "base64"));
|
|
@@ -224,15 +216,6 @@ function uint8ArrayToBase64(uint8Array) {
|
|
|
224
216
|
}
|
|
225
217
|
return btoa(binary);
|
|
226
218
|
}
|
|
227
|
-
function encodingIsBinary(encoding) {
|
|
228
|
-
if (encoding === "json") {
|
|
229
|
-
return false;
|
|
230
|
-
} else if (encoding === "cbor" || encoding === "bare") {
|
|
231
|
-
return true;
|
|
232
|
-
} else {
|
|
233
|
-
assertUnreachable(encoding);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
219
|
function contentTypeForEncoding(encoding) {
|
|
237
220
|
if (encoding === "json") {
|
|
238
221
|
return "application/json";
|
|
@@ -242,37 +225,47 @@ function contentTypeForEncoding(encoding) {
|
|
|
242
225
|
assertUnreachable(encoding);
|
|
243
226
|
}
|
|
244
227
|
}
|
|
245
|
-
function serializeWithEncoding(encoding, value, versionedDataHandler) {
|
|
228
|
+
function serializeWithEncoding(encoding, value, versionedDataHandler, zodSchema, toJson, toBare) {
|
|
246
229
|
if (encoding === "json") {
|
|
247
|
-
|
|
230
|
+
const jsonValue = toJson(value);
|
|
231
|
+
const validated = zodSchema.parse(jsonValue);
|
|
232
|
+
return jsonStringifyCompat(validated);
|
|
248
233
|
} else if (encoding === "cbor") {
|
|
249
|
-
|
|
234
|
+
const jsonValue = toJson(value);
|
|
235
|
+
const validated = zodSchema.parse(jsonValue);
|
|
236
|
+
return cbor.encode(validated);
|
|
250
237
|
} else if (encoding === "bare") {
|
|
251
238
|
if (!versionedDataHandler) {
|
|
252
239
|
throw new Error(
|
|
253
240
|
"VersionedDataHandler is required for 'bare' encoding"
|
|
254
241
|
);
|
|
255
242
|
}
|
|
256
|
-
|
|
243
|
+
const bareValue = toBare(value);
|
|
244
|
+
return versionedDataHandler.serializeWithEmbeddedVersion(bareValue);
|
|
257
245
|
} else {
|
|
258
246
|
assertUnreachable(encoding);
|
|
259
247
|
}
|
|
260
248
|
}
|
|
261
|
-
function deserializeWithEncoding(encoding, buffer, versionedDataHandler) {
|
|
249
|
+
function deserializeWithEncoding(encoding, buffer, versionedDataHandler, zodSchema, fromJson, fromBare) {
|
|
262
250
|
if (encoding === "json") {
|
|
251
|
+
let parsed;
|
|
263
252
|
if (typeof buffer === "string") {
|
|
264
|
-
|
|
253
|
+
parsed = jsonParseCompat(buffer);
|
|
265
254
|
} else {
|
|
266
255
|
const decoder = new TextDecoder("utf-8");
|
|
267
256
|
const jsonString = decoder.decode(buffer);
|
|
268
|
-
|
|
257
|
+
parsed = jsonParseCompat(jsonString);
|
|
269
258
|
}
|
|
259
|
+
const validated = zodSchema.parse(parsed);
|
|
260
|
+
return fromJson(validated);
|
|
270
261
|
} else if (encoding === "cbor") {
|
|
271
262
|
invariant(
|
|
272
263
|
typeof buffer !== "string",
|
|
273
264
|
"buffer cannot be string for cbor encoding"
|
|
274
265
|
);
|
|
275
|
-
|
|
266
|
+
const decoded = cbor.decode(buffer);
|
|
267
|
+
const validated = zodSchema.parse(decoded);
|
|
268
|
+
return fromJson(validated);
|
|
276
269
|
} else if (encoding === "bare") {
|
|
277
270
|
invariant(
|
|
278
271
|
typeof buffer !== "string",
|
|
@@ -283,7 +276,8 @@ function deserializeWithEncoding(encoding, buffer, versionedDataHandler) {
|
|
|
283
276
|
"VersionedDataHandler is required for 'bare' encoding"
|
|
284
277
|
);
|
|
285
278
|
}
|
|
286
|
-
|
|
279
|
+
const bareValue = versionedDataHandler.deserializeWithEmbeddedVersion(buffer);
|
|
280
|
+
return fromBare(bareValue);
|
|
287
281
|
} else {
|
|
288
282
|
assertUnreachable(encoding);
|
|
289
283
|
}
|
|
@@ -291,7 +285,6 @@ function deserializeWithEncoding(encoding, buffer, versionedDataHandler) {
|
|
|
291
285
|
|
|
292
286
|
export {
|
|
293
287
|
uint8ArrayToBase64,
|
|
294
|
-
encodingIsBinary,
|
|
295
288
|
contentTypeForEncoding,
|
|
296
289
|
serializeWithEncoding,
|
|
297
290
|
deserializeWithEncoding,
|
|
@@ -305,16 +298,15 @@ export {
|
|
|
305
298
|
isConnStatePath,
|
|
306
299
|
EncodingSchema,
|
|
307
300
|
CachedSerializer,
|
|
308
|
-
encodeDataToString,
|
|
309
301
|
jsonStringifyCompat,
|
|
310
|
-
|
|
311
|
-
|
|
302
|
+
PATH_CONNECT,
|
|
303
|
+
PATH_WEBSOCKET_BASE,
|
|
304
|
+
PATH_WEBSOCKET_PREFIX,
|
|
305
|
+
PATH_INSPECTOR_CONNECT,
|
|
312
306
|
HEADER_ACTOR_QUERY,
|
|
313
307
|
HEADER_ENCODING,
|
|
314
308
|
HEADER_CONN_PARAMS,
|
|
315
309
|
HEADER_ACTOR_ID,
|
|
316
|
-
HEADER_CONN_ID,
|
|
317
|
-
HEADER_CONN_TOKEN,
|
|
318
310
|
HEADER_RIVET_TOKEN,
|
|
319
311
|
HEADER_RIVET_TARGET,
|
|
320
312
|
HEADER_RIVET_ACTOR,
|
|
@@ -323,11 +315,7 @@ export {
|
|
|
323
315
|
WS_PROTOCOL_ACTOR,
|
|
324
316
|
WS_PROTOCOL_ENCODING,
|
|
325
317
|
WS_PROTOCOL_CONN_PARAMS,
|
|
326
|
-
|
|
327
|
-
WS_PROTOCOL_CONN_TOKEN,
|
|
328
|
-
WS_PROTOCOL_TOKEN,
|
|
329
|
-
WS_PROTOCOL_TRANSPORT,
|
|
330
|
-
WS_PROTOCOL_PATH,
|
|
318
|
+
WS_TEST_PROTOCOL_PATH,
|
|
331
319
|
ALLOWED_PUBLIC_HEADERS
|
|
332
320
|
};
|
|
333
|
-
//# sourceMappingURL=chunk-
|
|
321
|
+
//# sourceMappingURL=chunk-6JN6W6G3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/actor/log.ts","../../src/actor/utils.ts","../../src/common/actor-router-consts.ts","../../src/serde.ts","../../src/actor/protocol/serde.ts"],"sourcesContent":["import { getLogger } from \"@/common/log\";\n\n/** Prever to use ActorInstance.rlog child logger. This does not provide context in the log, should only be used as a last resort if you cannot pass the actor's child logger. */\nexport function loggerWithoutContext() {\n\treturn getLogger(\"actor-runtime\");\n}\n","import * as errors from \"./errors\";\nimport { loggerWithoutContext } from \"./log\";\n\nexport function assertUnreachable(x: never): never {\n\tloggerWithoutContext().error({\n\t\tmsg: \"unreachable\",\n\t\tvalue: `${x}`,\n\t\tstack: new Error().stack,\n\t});\n\tthrow new errors.Unreachable(x);\n}\n\nexport const throttle = <\n\t// biome-ignore lint/suspicious/noExplicitAny: we want to allow any function\n\tFn extends (...args: any) => any,\n>(\n\tfn: Fn,\n\tdelay: number,\n) => {\n\tlet lastRan = false;\n\tlet lastArgs: Parameters<Fn> | null = null;\n\n\treturn (...args: Parameters<Fn>) => {\n\t\tif (!lastRan) {\n\t\t\tfn.apply(this, args);\n\t\t\tlastRan = true;\n\t\t\tconst timer = () =>\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tlastRan = false;\n\t\t\t\t\tif (lastArgs) {\n\t\t\t\t\t\tfn.apply(this, lastArgs);\n\t\t\t\t\t\tlastRan = true;\n\t\t\t\t\t\tlastArgs = null;\n\t\t\t\t\t\ttimer();\n\t\t\t\t\t}\n\t\t\t\t}, delay);\n\t\t\ttimer();\n\t\t} else lastArgs = args;\n\t};\n};\n\nexport class DeadlineError extends Error {\n\tconstructor() {\n\t\tsuper(\"Promise did not complete before deadline.\");\n\t}\n}\n\nexport function deadline<T>(promise: Promise<T>, timeout: number): Promise<T> {\n\tconst controller = new AbortController();\n\tconst signal = controller.signal;\n\n\t// Set a timeout to abort the operation\n\tconst timeoutId = setTimeout(() => controller.abort(), timeout);\n\n\treturn Promise.race<T>([\n\t\tpromise,\n\t\tnew Promise<T>((_, reject) => {\n\t\t\tsignal.addEventListener(\"abort\", () => reject(new DeadlineError()));\n\t\t}),\n\t]).finally(() => {\n\t\tclearTimeout(timeoutId);\n\t});\n}\n\nexport class Lock<T> {\n\tprivate _locked = false;\n\tprivate _waiting: Array<() => void> = [];\n\n\tconstructor(private _value: T) {}\n\n\tasync lock(fn: (value: T) => Promise<void>): Promise<void> {\n\t\tif (this._locked) {\n\t\t\tawait new Promise<void>((resolve) => this._waiting.push(resolve));\n\t\t}\n\t\tthis._locked = true;\n\n\t\ttry {\n\t\t\tawait fn(this._value);\n\t\t} finally {\n\t\t\tthis._locked = false;\n\t\t\tconst next = this._waiting.shift();\n\t\t\tif (next) next();\n\t\t}\n\t}\n}\n\nexport function generateSecureToken(length = 32) {\n\tconst array = new Uint8Array(length);\n\tcrypto.getRandomValues(array);\n\t// Replace base64 chars that are not URL safe with URL-safe chars and strip padding\n\treturn btoa(String.fromCharCode(...array))\n\t\t.replace(/\\+/g, \"-\")\n\t\t.replace(/\\//g, \"_\")\n\t\t.replace(/=/g, \"\");\n}\n\nexport function generateRandomString(length = 32) {\n\tconst characters =\n\t\t\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n\tlet result = \"\";\n\tfor (let i = 0; i < length; i++) {\n\t\tconst randomIndex = Math.floor(Math.random() * characters.length);\n\t\tresult += characters[randomIndex];\n\t}\n\treturn result;\n}\n\n/**\n * Checks if a path is an actor state path within the persisted actor data.\n */\nexport function isStatePath(path: string): boolean {\n\treturn path === \"state\" || path.startsWith(\"state.\");\n}\n\n/**\n * Checks if a path is a connection state path within the persisted actor data.\n */\nexport function isConnStatePath(path: string): boolean {\n\tif (!path.startsWith(\"connections.\")) {\n\t\treturn false;\n\t}\n\tconst stateIndex = path.indexOf(\".state\", 12); // Start after \"connections.\"\n\tif (stateIndex === -1) {\n\t\treturn false;\n\t}\n\tconst afterState = stateIndex + 6; // \".state\".length = 6\n\t// Check if \".state\" is followed by end of string or \".\"\n\treturn path.length === afterState || path[afterState] === \".\";\n}\n","// NOTE: This is in a separate file from the router since it needs to be shared between the client & the server. If this was in the router file, the client would end up importing the *entire* actor router and tree shaking would not work.\n\n// MARK: Paths\nexport const PATH_CONNECT = \"/connect\";\nexport const PATH_WEBSOCKET_BASE = \"/websocket\";\nexport const PATH_WEBSOCKET_PREFIX = \"/websocket/\";\nexport const PATH_INSPECTOR_CONNECT = \"/inspector/connect\";\n\n// MARK: Headers\nexport const HEADER_ACTOR_QUERY = \"x-rivet-query\";\n\nexport const HEADER_ENCODING = \"x-rivet-encoding\";\n\n// IMPORTANT: Params must be in headers or in an E2EE part of the request (i.e. NOT the URL or query string) in order to ensure that tokens can be securely passed in params.\nexport const HEADER_CONN_PARAMS = \"x-rivet-conn-params\";\n\nexport const HEADER_ACTOR_ID = \"x-rivet-actor\";\n\nexport const HEADER_RIVET_TOKEN = \"x-rivet-token\";\n\n// MARK: Manager Gateway Headers\nexport const HEADER_RIVET_TARGET = \"x-rivet-target\";\nexport const HEADER_RIVET_ACTOR = \"x-rivet-actor\";\nexport const HEADER_RIVET_NAMESPACE = \"x-rivet-namespace\";\n\n// MARK: WebSocket Protocol Prefixes\n/** Some servers (such as node-ws & Cloudflare) require explicitly match a certain WebSocket protocol. This gives us a static protocol to match against. */\nexport const WS_PROTOCOL_STANDARD = \"rivet\";\nexport const WS_PROTOCOL_TARGET = \"rivet_target.\";\nexport const WS_PROTOCOL_ACTOR = \"rivet_actor.\";\nexport const WS_PROTOCOL_ENCODING = \"rivet_encoding.\";\nexport const WS_PROTOCOL_CONN_PARAMS = \"rivet_conn_params.\";\nexport const WS_PROTOCOL_TOKEN = \"rivet_token.\";\n\n// MARK: WebSocket Inline Test Protocol Prefixes\nexport const WS_TEST_PROTOCOL_PATH = \"test_path.\";\n\n/**\n * Headers that publics can send from public clients.\n *\n * Used for CORS.\n **/\nexport const ALLOWED_PUBLIC_HEADERS = [\n\t\"Content-Type\",\n\t\"User-Agent\",\n\tHEADER_ACTOR_QUERY,\n\tHEADER_ENCODING,\n\tHEADER_CONN_PARAMS,\n\tHEADER_ACTOR_ID,\n\tHEADER_RIVET_TARGET,\n\tHEADER_RIVET_ACTOR,\n\tHEADER_RIVET_NAMESPACE,\n\tHEADER_RIVET_TOKEN,\n];\n","import * as cbor from \"cbor-x\";\nimport invariant from \"invariant\";\nimport type { z } from \"zod\";\nimport { assertUnreachable } from \"@/common/utils\";\nimport type { VersionedDataHandler } from \"@/common/versioned-data\";\nimport type { Encoding } from \"@/mod\";\nimport { jsonParseCompat, jsonStringifyCompat } from \"./actor/protocol/serde\";\n\nexport function uint8ArrayToBase64(uint8Array: Uint8Array): string {\n\t// Check if Buffer is available (Node.js)\n\tif (typeof Buffer !== \"undefined\") {\n\t\treturn Buffer.from(uint8Array).toString(\"base64\");\n\t}\n\n\t// Browser environment - use btoa\n\tlet binary = \"\";\n\tconst len = uint8Array.byteLength;\n\tfor (let i = 0; i < len; i++) {\n\t\tbinary += String.fromCharCode(uint8Array[i]);\n\t}\n\treturn btoa(binary);\n}\n\nexport function encodingIsBinary(encoding: Encoding): boolean {\n\tif (encoding === \"json\") {\n\t\treturn false;\n\t} else if (encoding === \"cbor\" || encoding === \"bare\") {\n\t\treturn true;\n\t} else {\n\t\tassertUnreachable(encoding);\n\t}\n}\n\nexport function contentTypeForEncoding(encoding: Encoding): string {\n\tif (encoding === \"json\") {\n\t\treturn \"application/json\";\n\t} else if (encoding === \"cbor\" || encoding === \"bare\") {\n\t\treturn \"application/octet-stream\";\n\t} else {\n\t\tassertUnreachable(encoding);\n\t}\n}\n\nexport function wsBinaryTypeForEncoding(\n\tencoding: Encoding,\n): \"arraybuffer\" | \"blob\" {\n\tif (encoding === \"json\") {\n\t\treturn \"blob\";\n\t} else if (encoding === \"cbor\" || encoding === \"bare\") {\n\t\treturn \"arraybuffer\";\n\t} else {\n\t\tassertUnreachable(encoding);\n\t}\n}\n\nexport function serializeWithEncoding<TBare, TJson, T = TBare>(\n\tencoding: Encoding,\n\tvalue: T,\n\tversionedDataHandler: VersionedDataHandler<TBare> | undefined,\n\tzodSchema: z.ZodType<TJson>,\n\ttoJson: (value: T) => TJson,\n\ttoBare: (value: T) => TBare,\n): Uint8Array | string {\n\tif (encoding === \"json\") {\n\t\tconst jsonValue = toJson(value);\n\t\tconst validated = zodSchema.parse(jsonValue);\n\t\treturn jsonStringifyCompat(validated);\n\t} else if (encoding === \"cbor\") {\n\t\tconst jsonValue = toJson(value);\n\t\tconst validated = zodSchema.parse(jsonValue);\n\t\treturn cbor.encode(validated);\n\t} else if (encoding === \"bare\") {\n\t\tif (!versionedDataHandler) {\n\t\t\tthrow new Error(\n\t\t\t\t\"VersionedDataHandler is required for 'bare' encoding\",\n\t\t\t);\n\t\t}\n\t\tconst bareValue = toBare(value);\n\t\treturn versionedDataHandler.serializeWithEmbeddedVersion(bareValue);\n\t} else {\n\t\tassertUnreachable(encoding);\n\t}\n}\n\nexport function deserializeWithEncoding<TBare, TJson, T = TBare>(\n\tencoding: Encoding,\n\tbuffer: Uint8Array | string,\n\tversionedDataHandler: VersionedDataHandler<TBare> | undefined,\n\tzodSchema: z.ZodType<TJson>,\n\tfromJson: (value: TJson) => T,\n\tfromBare: (value: TBare) => T,\n): T {\n\tif (encoding === \"json\") {\n\t\tlet parsed: unknown;\n\t\tif (typeof buffer === \"string\") {\n\t\t\tparsed = jsonParseCompat(buffer);\n\t\t} else {\n\t\t\tconst decoder = new TextDecoder(\"utf-8\");\n\t\t\tconst jsonString = decoder.decode(buffer);\n\t\t\tparsed = jsonParseCompat(jsonString);\n\t\t}\n\t\tconst validated = zodSchema.parse(parsed);\n\t\treturn fromJson(validated);\n\t} else if (encoding === \"cbor\") {\n\t\tinvariant(\n\t\t\ttypeof buffer !== \"string\",\n\t\t\t\"buffer cannot be string for cbor encoding\",\n\t\t);\n\t\t// Decode CBOR to get JavaScript values (similar to JSON.parse)\n\t\tconst decoded: unknown = cbor.decode(buffer);\n\t\t// Validate with Zod schema (CBOR produces same structure as JSON)\n\t\tconst validated = zodSchema.parse(decoded);\n\t\t// CBOR decoding produces JS objects, use fromJson\n\t\treturn fromJson(validated);\n\t} else if (encoding === \"bare\") {\n\t\tinvariant(\n\t\t\ttypeof buffer !== \"string\",\n\t\t\t\"buffer cannot be string for bare encoding\",\n\t\t);\n\t\tif (!versionedDataHandler) {\n\t\t\tthrow new Error(\n\t\t\t\t\"VersionedDataHandler is required for 'bare' encoding\",\n\t\t\t);\n\t\t}\n\t\tconst bareValue =\n\t\t\tversionedDataHandler.deserializeWithEmbeddedVersion(buffer);\n\t\treturn fromBare(bareValue);\n\t} else {\n\t\tassertUnreachable(encoding);\n\t}\n}\n","import * as cbor from \"cbor-x\";\nimport { z } from \"zod\";\nimport * as errors from \"@/actor/errors\";\nimport type { VersionedDataHandler } from \"@/common/versioned-data\";\nimport { serializeWithEncoding } from \"@/serde\";\nimport { loggerWithoutContext } from \"../log\";\nimport { assertUnreachable } from \"../utils\";\n\n/** Data that can be deserialized. */\nexport type InputData = string | Buffer | Blob | ArrayBufferLike | Uint8Array;\n\n/** Data that's been serialized. */\nexport type OutputData = string | Uint8Array;\n\nexport const EncodingSchema = z.enum([\"json\", \"cbor\", \"bare\"]);\n\n/**\n * Encoding used to communicate between the client & actor.\n */\nexport type Encoding = z.infer<typeof EncodingSchema>;\n\n/**\n * Helper class that helps serialize data without re-serializing for the same encoding.\n */\nexport class CachedSerializer<TBare, TJson, T = TBare> {\n\t#data: T;\n\t#cache = new Map<Encoding, OutputData>();\n\t#versionedDataHandler: VersionedDataHandler<TBare>;\n\t#zodSchema: z.ZodType<TJson>;\n\t#toJson: (value: T) => TJson;\n\t#toBare: (value: T) => TBare;\n\n\tconstructor(\n\t\tdata: T,\n\t\tversionedDataHandler: VersionedDataHandler<TBare>,\n\t\tzodSchema: z.ZodType<TJson>,\n\t\ttoJson: (value: T) => TJson,\n\t\ttoBare: (value: T) => TBare,\n\t) {\n\t\tthis.#data = data;\n\t\tthis.#versionedDataHandler = versionedDataHandler;\n\t\tthis.#zodSchema = zodSchema;\n\t\tthis.#toJson = toJson;\n\t\tthis.#toBare = toBare;\n\t}\n\n\tpublic get rawData(): T {\n\t\treturn this.#data;\n\t}\n\n\tpublic serialize(encoding: Encoding): OutputData {\n\t\tconst cached = this.#cache.get(encoding);\n\t\tif (cached) {\n\t\t\treturn cached;\n\t\t} else {\n\t\t\tconst serialized = serializeWithEncoding(\n\t\t\t\tencoding,\n\t\t\t\tthis.#data,\n\t\t\t\tthis.#versionedDataHandler,\n\t\t\t\tthis.#zodSchema,\n\t\t\t\tthis.#toJson,\n\t\t\t\tthis.#toBare,\n\t\t\t);\n\t\t\tthis.#cache.set(encoding, serialized);\n\t\t\treturn serialized;\n\t\t}\n\t}\n}\n\n///**\n// * Use `CachedSerializer` if serializing the same data repeatedly.\n// */\n//export function serialize<T>(value: T, encoding: Encoding): OutputData {\n//\tif (encoding === \"json\") {\n//\t\treturn JSON.stringify(value);\n//\t} else if (encoding === \"cbor\") {\n//\t\t// TODO: Remove this hack, but cbor-x can't handle anything extra in data structures\n//\t\tconst cleanValue = JSON.parse(JSON.stringify(value));\n//\t\treturn cbor.encode(cleanValue);\n//\t} else {\n//\t\tassertUnreachable(encoding);\n//\t}\n//}\n//\n//export async function deserialize(data: InputData, encoding: Encoding) {\n//\tif (encoding === \"json\") {\n//\t\tif (typeof data !== \"string\") {\n//\t\t\tlogger().warn(\"received non-string for json parse\");\n//\t\t\tthrow new errors.MalformedMessage();\n//\t\t} else {\n//\t\t\treturn JSON.parse(data);\n//\t\t}\n//\t} else if (encoding === \"cbor\") {\n//\t\tif (data instanceof Blob) {\n//\t\t\tconst arrayBuffer = await data.arrayBuffer();\n//\t\t\treturn cbor.decode(new Uint8Array(arrayBuffer));\n//\t\t} else if (data instanceof Uint8Array) {\n//\t\t\treturn cbor.decode(data);\n//\t\t} else if (\n//\t\t\tdata instanceof ArrayBuffer ||\n//\t\t\tdata instanceof SharedArrayBuffer\n//\t\t) {\n//\t\t\treturn cbor.decode(new Uint8Array(data));\n//\t\t} else {\n//\t\t\tlogger().warn(\"received non-binary type for cbor parse\");\n//\t\t\tthrow new errors.MalformedMessage();\n//\t\t}\n//\t} else {\n//\t\tassertUnreachable(encoding);\n//\t}\n//}\n\n// TODO: Encode base 128\nfunction base64EncodeUint8Array(uint8Array: Uint8Array): string {\n\tlet binary = \"\";\n\tconst len = uint8Array.byteLength;\n\tfor (let i = 0; i < len; i++) {\n\t\tbinary += String.fromCharCode(uint8Array[i]);\n\t}\n\treturn btoa(binary);\n}\n\nfunction base64EncodeArrayBuffer(arrayBuffer: ArrayBuffer): string {\n\tconst uint8Array = new Uint8Array(arrayBuffer);\n\treturn base64EncodeUint8Array(uint8Array);\n}\n\n/** Converts data that was encoded to a string. Some formats (like SSE) don't support raw binary data. */\nexport function encodeDataToString(message: OutputData): string {\n\tif (typeof message === \"string\") {\n\t\treturn message;\n\t} else if (message instanceof ArrayBuffer) {\n\t\treturn base64EncodeArrayBuffer(message);\n\t} else if (message instanceof Uint8Array) {\n\t\treturn base64EncodeUint8Array(message);\n\t} else {\n\t\tassertUnreachable(message);\n\t}\n}\n\nfunction base64DecodeToUint8Array(base64: string): Uint8Array {\n\t// Check if Buffer is available (Node.js)\n\tif (typeof Buffer !== \"undefined\") {\n\t\treturn new Uint8Array(Buffer.from(base64, \"base64\"));\n\t}\n\n\t// Browser environment - use atob\n\tconst binary = atob(base64);\n\tconst len = binary.length;\n\tconst bytes = new Uint8Array(len);\n\tfor (let i = 0; i < len; i++) {\n\t\tbytes[i] = binary.charCodeAt(i);\n\t}\n\treturn bytes;\n}\n\nfunction base64DecodeToArrayBuffer(base64: string): ArrayBuffer {\n\treturn base64DecodeToUint8Array(base64).buffer as ArrayBuffer;\n}\n\n/** Stringifies with compat for values that BARE & CBOR supports. */\nexport function jsonStringifyCompat(input: any): string {\n\treturn JSON.stringify(input, (_key, value) => {\n\t\tif (typeof value === \"bigint\") {\n\t\t\treturn [\"$BigInt\", value.toString()];\n\t\t} else if (value instanceof ArrayBuffer) {\n\t\t\treturn [\"$ArrayBuffer\", base64EncodeArrayBuffer(value)];\n\t\t} else if (value instanceof Uint8Array) {\n\t\t\treturn [\"$Uint8Array\", base64EncodeUint8Array(value)];\n\t\t}\n\n\t\t// Escape user arrays that start with $ by prepending another $\n\t\tif (\n\t\t\tArray.isArray(value) &&\n\t\t\tvalue.length === 2 &&\n\t\t\ttypeof value[0] === \"string\" &&\n\t\t\tvalue[0].startsWith(\"$\")\n\t\t) {\n\t\t\treturn [\"$\" + value[0], value[1]];\n\t\t}\n\n\t\treturn value;\n\t});\n}\n\n/** Parses JSON with compat for values that BARE & CBOR supports. */\nexport function jsonParseCompat(input: string): any {\n\treturn JSON.parse(input, (_key, value) => {\n\t\t// Handle arrays with $ prefix\n\t\tif (\n\t\t\tArray.isArray(value) &&\n\t\t\tvalue.length === 2 &&\n\t\t\ttypeof value[0] === \"string\" &&\n\t\t\tvalue[0].startsWith(\"$\")\n\t\t) {\n\t\t\t// Known special types\n\t\t\tif (value[0] === \"$BigInt\") {\n\t\t\t\treturn BigInt(value[1]);\n\t\t\t} else if (value[0] === \"$ArrayBuffer\") {\n\t\t\t\treturn base64DecodeToArrayBuffer(value[1]);\n\t\t\t} else if (value[0] === \"$Uint8Array\") {\n\t\t\t\treturn base64DecodeToUint8Array(value[1]);\n\t\t\t}\n\n\t\t\t// Unescape user arrays that started with $ ($$foo -> $foo)\n\t\t\tif (value[0].startsWith(\"$$\")) {\n\t\t\t\treturn [value[0].substring(1), value[1]];\n\t\t\t}\n\n\t\t\t// Unknown type starting with $ - this is an error\n\t\t\tthrow new Error(\n\t\t\t\t`Unknown JSON encoding type: ${value[0]}. This may indicate corrupted data or a version mismatch.`,\n\t\t\t);\n\t\t}\n\n\t\treturn value;\n\t});\n}\n"],"mappings":"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","names":["assertUnreachable"]}
|