@voidhash/mimic-effect 0.0.9 → 1.0.0-beta.2
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/.turbo/turbo-build.log +136 -90
- package/README.md +385 -0
- package/dist/ColdStorage.cjs +60 -0
- package/dist/ColdStorage.d.cts +53 -0
- package/dist/ColdStorage.d.cts.map +1 -0
- package/dist/ColdStorage.d.mts +53 -0
- package/dist/ColdStorage.d.mts.map +1 -0
- package/dist/ColdStorage.mjs +60 -0
- package/dist/ColdStorage.mjs.map +1 -0
- package/dist/DocumentManager.cjs +263 -82
- package/dist/DocumentManager.d.cts +44 -22
- package/dist/DocumentManager.d.cts.map +1 -1
- package/dist/DocumentManager.d.mts +44 -22
- package/dist/DocumentManager.d.mts.map +1 -1
- package/dist/DocumentManager.mjs +259 -67
- package/dist/DocumentManager.mjs.map +1 -1
- package/dist/Errors.cjs +54 -0
- package/dist/Errors.d.cts +96 -0
- package/dist/Errors.d.cts.map +1 -0
- package/dist/Errors.d.mts +96 -0
- package/dist/Errors.d.mts.map +1 -0
- package/dist/Errors.mjs +48 -0
- package/dist/Errors.mjs.map +1 -0
- package/dist/HotStorage.cjs +100 -0
- package/dist/HotStorage.d.cts +70 -0
- package/dist/HotStorage.d.cts.map +1 -0
- package/dist/HotStorage.d.mts +70 -0
- package/dist/HotStorage.d.mts.map +1 -0
- package/dist/HotStorage.mjs +100 -0
- package/dist/HotStorage.mjs.map +1 -0
- package/dist/Metrics.cjs +143 -0
- package/dist/Metrics.d.cts +31 -0
- package/dist/Metrics.d.cts.map +1 -0
- package/dist/Metrics.d.mts +31 -0
- package/dist/Metrics.d.mts.map +1 -0
- package/dist/Metrics.mjs +126 -0
- package/dist/Metrics.mjs.map +1 -0
- package/dist/MimicAuthService.cjs +61 -45
- package/dist/MimicAuthService.d.cts +61 -48
- package/dist/MimicAuthService.d.cts.map +1 -1
- package/dist/MimicAuthService.d.mts +61 -48
- package/dist/MimicAuthService.d.mts.map +1 -1
- package/dist/MimicAuthService.mjs +60 -36
- package/dist/MimicAuthService.mjs.map +1 -1
- package/dist/MimicClusterServerEngine.cjs +521 -0
- package/dist/MimicClusterServerEngine.d.cts +17 -0
- package/dist/MimicClusterServerEngine.d.cts.map +1 -0
- package/dist/MimicClusterServerEngine.d.mts +17 -0
- package/dist/MimicClusterServerEngine.d.mts.map +1 -0
- package/dist/MimicClusterServerEngine.mjs +523 -0
- package/dist/MimicClusterServerEngine.mjs.map +1 -0
- package/dist/MimicServer.cjs +205 -96
- package/dist/MimicServer.d.cts +9 -110
- package/dist/MimicServer.d.cts.map +1 -1
- package/dist/MimicServer.d.mts +9 -110
- package/dist/MimicServer.d.mts.map +1 -1
- package/dist/MimicServer.mjs +206 -90
- package/dist/MimicServer.mjs.map +1 -1
- package/dist/MimicServerEngine.cjs +97 -0
- package/dist/MimicServerEngine.d.cts +78 -0
- package/dist/MimicServerEngine.d.cts.map +1 -0
- package/dist/MimicServerEngine.d.mts +78 -0
- package/dist/MimicServerEngine.d.mts.map +1 -0
- package/dist/MimicServerEngine.mjs +97 -0
- package/dist/MimicServerEngine.mjs.map +1 -0
- package/dist/PresenceManager.cjs +75 -91
- package/dist/PresenceManager.d.cts +17 -66
- package/dist/PresenceManager.d.cts.map +1 -1
- package/dist/PresenceManager.d.mts +17 -66
- package/dist/PresenceManager.d.mts.map +1 -1
- package/dist/PresenceManager.mjs +74 -78
- package/dist/PresenceManager.mjs.map +1 -1
- package/dist/Protocol.cjs +146 -0
- package/dist/Protocol.d.cts +203 -0
- package/dist/Protocol.d.cts.map +1 -0
- package/dist/Protocol.d.mts +203 -0
- package/dist/Protocol.d.mts.map +1 -0
- package/dist/Protocol.mjs +132 -0
- package/dist/Protocol.mjs.map +1 -0
- package/dist/Types.d.cts +172 -0
- package/dist/Types.d.cts.map +1 -0
- package/dist/Types.d.mts +172 -0
- package/dist/Types.d.mts.map +1 -0
- package/dist/_virtual/rolldown_runtime.cjs +1 -25
- package/dist/_virtual/rolldown_runtime.mjs +4 -1
- package/dist/index.cjs +37 -75
- package/dist/index.d.cts +13 -12
- package/dist/index.d.mts +13 -12
- package/dist/index.mjs +12 -12
- package/dist/testing/ColdStorageTestSuite.cjs +508 -0
- package/dist/testing/ColdStorageTestSuite.d.cts +36 -0
- package/dist/testing/ColdStorageTestSuite.d.cts.map +1 -0
- package/dist/testing/ColdStorageTestSuite.d.mts +36 -0
- package/dist/testing/ColdStorageTestSuite.d.mts.map +1 -0
- package/dist/testing/ColdStorageTestSuite.mjs +508 -0
- package/dist/testing/ColdStorageTestSuite.mjs.map +1 -0
- package/dist/testing/FailingStorage.cjs +135 -0
- package/dist/testing/FailingStorage.d.cts +43 -0
- package/dist/testing/FailingStorage.d.cts.map +1 -0
- package/dist/testing/FailingStorage.d.mts +43 -0
- package/dist/testing/FailingStorage.d.mts.map +1 -0
- package/dist/testing/FailingStorage.mjs +136 -0
- package/dist/testing/FailingStorage.mjs.map +1 -0
- package/dist/testing/HotStorageTestSuite.cjs +585 -0
- package/dist/testing/HotStorageTestSuite.d.cts +40 -0
- package/dist/testing/HotStorageTestSuite.d.cts.map +1 -0
- package/dist/testing/HotStorageTestSuite.d.mts +40 -0
- package/dist/testing/HotStorageTestSuite.d.mts.map +1 -0
- package/dist/testing/HotStorageTestSuite.mjs +585 -0
- package/dist/testing/HotStorageTestSuite.mjs.map +1 -0
- package/dist/testing/StorageIntegrationTestSuite.cjs +349 -0
- package/dist/testing/StorageIntegrationTestSuite.d.cts +35 -0
- package/dist/testing/StorageIntegrationTestSuite.d.cts.map +1 -0
- package/dist/testing/StorageIntegrationTestSuite.d.mts +35 -0
- package/dist/testing/StorageIntegrationTestSuite.d.mts.map +1 -0
- package/dist/testing/StorageIntegrationTestSuite.mjs +349 -0
- package/dist/testing/StorageIntegrationTestSuite.mjs.map +1 -0
- package/dist/testing/assertions.cjs +114 -0
- package/dist/testing/assertions.mjs +109 -0
- package/dist/testing/assertions.mjs.map +1 -0
- package/dist/testing/index.cjs +14 -0
- package/dist/testing/index.d.cts +6 -0
- package/dist/testing/index.d.mts +6 -0
- package/dist/testing/index.mjs +7 -0
- package/dist/testing/types.cjs +15 -0
- package/dist/testing/types.d.cts +90 -0
- package/dist/testing/types.d.cts.map +1 -0
- package/dist/testing/types.d.mts +90 -0
- package/dist/testing/types.d.mts.map +1 -0
- package/dist/testing/types.mjs +16 -0
- package/dist/testing/types.mjs.map +1 -0
- package/package.json +18 -3
- package/src/ColdStorage.ts +136 -0
- package/src/DocumentManager.ts +550 -190
- package/src/Errors.ts +114 -0
- package/src/HotStorage.ts +239 -0
- package/src/Metrics.ts +187 -0
- package/src/MimicAuthService.ts +126 -64
- package/src/MimicClusterServerEngine.ts +946 -0
- package/src/MimicServer.ts +448 -195
- package/src/MimicServerEngine.ts +276 -0
- package/src/PresenceManager.ts +169 -240
- package/src/Protocol.ts +350 -0
- package/src/Types.ts +231 -0
- package/src/index.ts +57 -23
- package/src/testing/ColdStorageTestSuite.ts +589 -0
- package/src/testing/FailingStorage.ts +286 -0
- package/src/testing/HotStorageTestSuite.ts +762 -0
- package/src/testing/StorageIntegrationTestSuite.ts +504 -0
- package/src/testing/assertions.ts +181 -0
- package/src/testing/index.ts +83 -0
- package/src/testing/types.ts +100 -0
- package/tests/ColdStorage.test.ts +24 -0
- package/tests/DocumentManager.test.ts +158 -287
- package/tests/HotStorage.test.ts +24 -0
- package/tests/MimicAuthService.test.ts +102 -134
- package/tests/MimicClusterServerEngine.test.ts +587 -0
- package/tests/MimicServer.test.ts +90 -226
- package/tests/MimicServerEngine.test.ts +521 -0
- package/tests/PresenceManager.test.ts +22 -63
- package/tests/Protocol.test.ts +190 -0
- package/tests/StorageIntegration.test.ts +259 -0
- package/tsconfig.json +1 -1
- package/tsdown.config.ts +1 -1
- package/dist/DocumentProtocol.cjs +0 -94
- package/dist/DocumentProtocol.d.cts +0 -113
- package/dist/DocumentProtocol.d.cts.map +0 -1
- package/dist/DocumentProtocol.d.mts +0 -113
- package/dist/DocumentProtocol.d.mts.map +0 -1
- package/dist/DocumentProtocol.mjs +0 -89
- package/dist/DocumentProtocol.mjs.map +0 -1
- package/dist/MimicConfig.cjs +0 -60
- package/dist/MimicConfig.d.cts +0 -141
- package/dist/MimicConfig.d.cts.map +0 -1
- package/dist/MimicConfig.d.mts +0 -141
- package/dist/MimicConfig.d.mts.map +0 -1
- package/dist/MimicConfig.mjs +0 -50
- package/dist/MimicConfig.mjs.map +0 -1
- package/dist/MimicDataStorage.cjs +0 -83
- package/dist/MimicDataStorage.d.cts +0 -113
- package/dist/MimicDataStorage.d.cts.map +0 -1
- package/dist/MimicDataStorage.d.mts +0 -113
- package/dist/MimicDataStorage.d.mts.map +0 -1
- package/dist/MimicDataStorage.mjs +0 -74
- package/dist/MimicDataStorage.mjs.map +0 -1
- package/dist/WebSocketHandler.cjs +0 -365
- package/dist/WebSocketHandler.d.cts +0 -34
- package/dist/WebSocketHandler.d.cts.map +0 -1
- package/dist/WebSocketHandler.d.mts +0 -34
- package/dist/WebSocketHandler.d.mts.map +0 -1
- package/dist/WebSocketHandler.mjs +0 -355
- package/dist/WebSocketHandler.mjs.map +0 -1
- package/dist/auth/NoAuth.cjs +0 -43
- package/dist/auth/NoAuth.d.cts +0 -22
- package/dist/auth/NoAuth.d.cts.map +0 -1
- package/dist/auth/NoAuth.d.mts +0 -22
- package/dist/auth/NoAuth.d.mts.map +0 -1
- package/dist/auth/NoAuth.mjs +0 -36
- package/dist/auth/NoAuth.mjs.map +0 -1
- package/dist/errors.cjs +0 -74
- package/dist/errors.d.cts +0 -89
- package/dist/errors.d.cts.map +0 -1
- package/dist/errors.d.mts +0 -89
- package/dist/errors.d.mts.map +0 -1
- package/dist/errors.mjs +0 -67
- package/dist/errors.mjs.map +0 -1
- package/dist/storage/InMemoryDataStorage.cjs +0 -57
- package/dist/storage/InMemoryDataStorage.d.cts +0 -19
- package/dist/storage/InMemoryDataStorage.d.cts.map +0 -1
- package/dist/storage/InMemoryDataStorage.d.mts +0 -19
- package/dist/storage/InMemoryDataStorage.d.mts.map +0 -1
- package/dist/storage/InMemoryDataStorage.mjs +0 -48
- package/dist/storage/InMemoryDataStorage.mjs.map +0 -1
- package/src/DocumentProtocol.ts +0 -112
- package/src/MimicConfig.ts +0 -211
- package/src/MimicDataStorage.ts +0 -157
- package/src/WebSocketHandler.ts +0 -735
- package/src/auth/NoAuth.ts +0 -46
- package/src/errors.ts +0 -113
- package/src/storage/InMemoryDataStorage.ts +0 -66
- package/tests/DocumentProtocol.test.ts +0 -113
- package/tests/InMemoryDataStorage.test.ts +0 -190
- package/tests/MimicConfig.test.ts +0 -290
- package/tests/MimicDataStorage.test.ts +0 -190
- package/tests/NoAuth.test.ts +0 -94
- package/tests/WebSocketHandler.test.ts +0 -321
- package/tests/errors.test.ts +0 -77
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { Permission, PresenceEntry } from "./Types.mjs";
|
|
2
|
+
import { MessageParseError } from "./Errors.mjs";
|
|
3
|
+
import { Effect } from "effect";
|
|
4
|
+
import { Transaction } from "@voidhash/mimic";
|
|
5
|
+
|
|
6
|
+
//#region src/Protocol.d.ts
|
|
7
|
+
declare namespace Protocol_d_exports {
|
|
8
|
+
export { AuthMessage, AuthResultMessage, ClientMessage, EncodedClientMessage, EncodedServerMessage, ErrorMessage, PingMessage, PongMessage, PresenceClearMessage, PresenceRemoveMessage, PresenceSetMessage, PresenceSnapshotMessage, PresenceUpdateMessage, RequestSnapshotMessage, ServerBroadcast, ServerMessage, SnapshotMessage, SubmitMessage, TransactionMessage, authResultFailure, authResultSuccess, decodeClientMessage, encodeServerMessage, errorMessage, parseClientMessage, pong, presenceRemoveMessage, presenceSnapshotMessage, presenceUpdateMessage, snapshotMessage, transactionMessage };
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Authentication request
|
|
12
|
+
*/
|
|
13
|
+
interface AuthMessage {
|
|
14
|
+
readonly type: "auth";
|
|
15
|
+
readonly token: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Heartbeat ping
|
|
19
|
+
*/
|
|
20
|
+
interface PingMessage {
|
|
21
|
+
readonly type: "ping";
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Submit a transaction
|
|
25
|
+
*/
|
|
26
|
+
interface SubmitMessage {
|
|
27
|
+
readonly type: "submit";
|
|
28
|
+
readonly transaction: Transaction.Transaction;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Request current document snapshot
|
|
32
|
+
*/
|
|
33
|
+
interface RequestSnapshotMessage {
|
|
34
|
+
readonly type: "request_snapshot";
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Set presence data
|
|
38
|
+
*/
|
|
39
|
+
interface PresenceSetMessage {
|
|
40
|
+
readonly type: "presence_set";
|
|
41
|
+
readonly data: unknown;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Clear presence data
|
|
45
|
+
*/
|
|
46
|
+
interface PresenceClearMessage {
|
|
47
|
+
readonly type: "presence_clear";
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Union of all client messages
|
|
51
|
+
*/
|
|
52
|
+
type ClientMessage = AuthMessage | PingMessage | SubmitMessage | RequestSnapshotMessage | PresenceSetMessage | PresenceClearMessage;
|
|
53
|
+
/**
|
|
54
|
+
* Authentication result
|
|
55
|
+
*/
|
|
56
|
+
interface AuthResultMessage {
|
|
57
|
+
readonly type: "auth_result";
|
|
58
|
+
readonly success: boolean;
|
|
59
|
+
readonly error?: string;
|
|
60
|
+
readonly userId?: string;
|
|
61
|
+
readonly permission?: Permission;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Heartbeat pong
|
|
65
|
+
*/
|
|
66
|
+
interface PongMessage {
|
|
67
|
+
readonly type: "pong";
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Transaction broadcast
|
|
71
|
+
*/
|
|
72
|
+
interface TransactionMessage {
|
|
73
|
+
readonly type: "transaction";
|
|
74
|
+
readonly transaction: Transaction.Transaction;
|
|
75
|
+
readonly version: number;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Document snapshot
|
|
79
|
+
*/
|
|
80
|
+
interface SnapshotMessage {
|
|
81
|
+
readonly type: "snapshot";
|
|
82
|
+
readonly state: unknown;
|
|
83
|
+
readonly version: number;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Transaction error
|
|
87
|
+
*/
|
|
88
|
+
interface ErrorMessage {
|
|
89
|
+
readonly type: "error";
|
|
90
|
+
readonly transactionId: string;
|
|
91
|
+
readonly reason: string;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Presence update broadcast
|
|
95
|
+
*/
|
|
96
|
+
interface PresenceUpdateMessage {
|
|
97
|
+
readonly type: "presence_update";
|
|
98
|
+
readonly id: string;
|
|
99
|
+
readonly data: unknown;
|
|
100
|
+
readonly userId?: string;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Presence removal broadcast
|
|
104
|
+
*/
|
|
105
|
+
interface PresenceRemoveMessage {
|
|
106
|
+
readonly type: "presence_remove";
|
|
107
|
+
readonly id: string;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Presence snapshot (sent after auth)
|
|
111
|
+
*/
|
|
112
|
+
interface PresenceSnapshotMessage {
|
|
113
|
+
readonly type: "presence_snapshot";
|
|
114
|
+
readonly selfId: string;
|
|
115
|
+
readonly presences: Record<string, PresenceEntry>;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Union of all server messages
|
|
119
|
+
*/
|
|
120
|
+
type ServerMessage = AuthResultMessage | PongMessage | TransactionMessage | SnapshotMessage | ErrorMessage | PresenceUpdateMessage | PresenceRemoveMessage | PresenceSnapshotMessage;
|
|
121
|
+
/**
|
|
122
|
+
* Server broadcast messages (transaction or error)
|
|
123
|
+
*/
|
|
124
|
+
type ServerBroadcast = TransactionMessage | ErrorMessage;
|
|
125
|
+
/**
|
|
126
|
+
* Encoded client message (with encoded transaction)
|
|
127
|
+
*/
|
|
128
|
+
interface EncodedClientMessage {
|
|
129
|
+
readonly type: string;
|
|
130
|
+
readonly token?: string;
|
|
131
|
+
readonly transaction?: Transaction.EncodedTransaction;
|
|
132
|
+
readonly data?: unknown;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Encoded server message (with encoded transaction)
|
|
136
|
+
*/
|
|
137
|
+
interface EncodedServerMessage {
|
|
138
|
+
readonly type: string;
|
|
139
|
+
readonly success?: boolean;
|
|
140
|
+
readonly error?: string;
|
|
141
|
+
readonly userId?: string;
|
|
142
|
+
readonly permission?: Permission;
|
|
143
|
+
readonly transaction?: Transaction.EncodedTransaction;
|
|
144
|
+
readonly version?: number;
|
|
145
|
+
readonly state?: unknown;
|
|
146
|
+
readonly transactionId?: string;
|
|
147
|
+
readonly reason?: string;
|
|
148
|
+
readonly id?: string;
|
|
149
|
+
readonly data?: unknown;
|
|
150
|
+
readonly selfId?: string;
|
|
151
|
+
readonly presences?: Record<string, PresenceEntry>;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Decode an encoded client message to a ClientMessage
|
|
155
|
+
*/
|
|
156
|
+
declare const decodeClientMessage: (encoded: EncodedClientMessage) => ClientMessage;
|
|
157
|
+
/**
|
|
158
|
+
* Encode a server message for wire format
|
|
159
|
+
*/
|
|
160
|
+
declare const encodeServerMessage: (message: ServerMessage) => string;
|
|
161
|
+
/**
|
|
162
|
+
* Parse a raw WebSocket message to a ClientMessage
|
|
163
|
+
*/
|
|
164
|
+
declare const parseClientMessage: (data: string | ArrayBuffer | Uint8Array) => Effect.Effect<ClientMessage, MessageParseError>;
|
|
165
|
+
/**
|
|
166
|
+
* Create an auth result success message
|
|
167
|
+
*/
|
|
168
|
+
declare const authResultSuccess: (userId: string, permission: Permission) => AuthResultMessage;
|
|
169
|
+
/**
|
|
170
|
+
* Create an auth result failure message
|
|
171
|
+
*/
|
|
172
|
+
declare const authResultFailure: (error: string) => AuthResultMessage;
|
|
173
|
+
/**
|
|
174
|
+
* Create a pong message
|
|
175
|
+
*/
|
|
176
|
+
declare const pong: () => PongMessage;
|
|
177
|
+
/**
|
|
178
|
+
* Create a transaction message
|
|
179
|
+
*/
|
|
180
|
+
declare const transactionMessage: (transaction: Transaction.Transaction, version: number) => TransactionMessage;
|
|
181
|
+
/**
|
|
182
|
+
* Create a snapshot message
|
|
183
|
+
*/
|
|
184
|
+
declare const snapshotMessage: (state: unknown, version: number) => SnapshotMessage;
|
|
185
|
+
/**
|
|
186
|
+
* Create an error message
|
|
187
|
+
*/
|
|
188
|
+
declare const errorMessage: (transactionId: string, reason: string) => ErrorMessage;
|
|
189
|
+
/**
|
|
190
|
+
* Create a presence update message
|
|
191
|
+
*/
|
|
192
|
+
declare const presenceUpdateMessage: (id: string, data: unknown, userId?: string) => PresenceUpdateMessage;
|
|
193
|
+
/**
|
|
194
|
+
* Create a presence remove message
|
|
195
|
+
*/
|
|
196
|
+
declare const presenceRemoveMessage: (id: string) => PresenceRemoveMessage;
|
|
197
|
+
/**
|
|
198
|
+
* Create a presence snapshot message
|
|
199
|
+
*/
|
|
200
|
+
declare const presenceSnapshotMessage: (selfId: string, presences: Record<string, PresenceEntry>) => PresenceSnapshotMessage;
|
|
201
|
+
//#endregion
|
|
202
|
+
export { Protocol_d_exports, ServerBroadcast, ServerMessage, SnapshotMessage };
|
|
203
|
+
//# sourceMappingURL=Protocol.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Protocol.d.mts","names":[],"sources":["../src/Protocol.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;UAiBiB,WAAA;;;;;;;UAQA,WAAA;;;;;;UAOA,aAAA;;wBAEO,WAAA,CAAY;;;;;UAMnB,sBAAA;;;;;;UAOA,kBAAA;;EA9BA,SAAA,IAAA,EAAW,OAAA;AAQ5B;AAOA;AAQA;AAOA;AAQiB,UAAA,oBAAA,CAAoB;EAOzB,SAAA,IAAA,EAAA,gBAAa;;;;;AAKrB,KALQ,aAAA,GACR,WAIA,GAHA,WAGA,GAFA,aAEA,GADA,sBACA,GAAA,kBAAA,GACA,oBADA;;;AAUJ;AAWiB,UAXA,iBAAA,CAWW;EAOX,SAAA,IAAA,EAAA,aAAkB;EASlB,SAAA,OAAA,EAAe,OAAA;EASf,SAAA,KAAA,CAAY,EAAA,MAAA;EASZ,SAAA,MAAA,CAAA,EAAA,MAAqB;EAUrB,SAAA,UAAA,CAAA,EAlDO,UAkDc;AAQtC;AASA;;;AAGI,UAhEa,WAAA,CAgEb;EACA,SAAA,IAAA,EAAA,MAAA;;;;;AAIuB,UA9DV,kBAAA,CA8DU;EAKf,SAAA,IAAA,EAAA,aAAe;EASV,SAAA,WAAA,EA1EO,WAAA,CAAY,WA6EX;EAOR,SAAA,OAAA,EAAA,MAAoB;;;;;AAcR,UA3FZ,eAAA,CA2FY;EAUhB,SAAA,IAAA,EAAA,UAUZ;EAKY,SAAA,KAAA,EAAA,OAUZ;EAKY,SAAA,OAAA,EAAA,MAeT;;;;;AAbD,UA5Hc,YAAA,CA4HP;EAAM,SAAA,IAAA,EAAA,OAAA;EAkBH,SAAA,aAQX,EAAA,MAAA;EAKW,SAAA,MAAA,EAAA,MAIX;AAKF;AAKA;AAYA;AAYA;AAYa,UApMI,qBAAA,CA6Mf;EAKW,SAAA,IAAA,EAAA,iBAKX;EAKW,SAAA,EAAA,EAAA,MAAA;EAEe,SAAA,IAAA,EAAA,OAAA;EAAf,SAAA,MAAA,CAAA,EAAA,MAAA;;;;;UApNI,qBAAA;;;;;;;UAQA,uBAAA;;;sBAGK,eAAe;;;;;KAMzB,aAAA,GACR,oBACA,cACA,qBACA,kBACA,eACA,wBACA,wBACA;;;;KAKQ,eAAA,GAAkB,qBAAqB;;;;UASlC,oBAAA;;;yBAGQ,WAAA,CAAY;;;;;;UAOpB,oBAAA;;;;;wBAKO;yBACC,WAAA,CAAY;;;;;;;;uBAQd,eAAe;;;;;cAUzB,+BACF,yBACR;;;;cAaU,+BAAgC;;;;cAehC,oCACI,cAAc,eAC5B,MAAA,CAAO,OAAO,eAAe;;;;cAkBnB,gDAEC,eACX;;;;cAUU,sCAAqC;;;;cASrC,YAAW;;;;cAKX,kCACE,WAAA,CAAY,iCAExB;;;;cASU,sDAGV;;;;cASU,yDAGV;;;;cASU,uEAIV;;;;cAUU,uCAEV;;;;cAQU,qDAEA,eAAe,mBACzB"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { __export } from "./_virtual/rolldown_runtime.mjs";
|
|
2
|
+
import { MessageParseError } from "./Errors.mjs";
|
|
3
|
+
import { Effect } from "effect";
|
|
4
|
+
import { Transaction } from "@voidhash/mimic";
|
|
5
|
+
|
|
6
|
+
//#region src/Protocol.ts
|
|
7
|
+
/**
|
|
8
|
+
* @voidhash/mimic-effect - WebSocket Protocol
|
|
9
|
+
*
|
|
10
|
+
* Message types and encoding/decoding for WebSocket communication.
|
|
11
|
+
*/
|
|
12
|
+
var Protocol_exports = /* @__PURE__ */ __export({
|
|
13
|
+
authResultFailure: () => authResultFailure,
|
|
14
|
+
authResultSuccess: () => authResultSuccess,
|
|
15
|
+
decodeClientMessage: () => decodeClientMessage,
|
|
16
|
+
encodeServerMessage: () => encodeServerMessage,
|
|
17
|
+
errorMessage: () => errorMessage,
|
|
18
|
+
parseClientMessage: () => parseClientMessage,
|
|
19
|
+
pong: () => pong,
|
|
20
|
+
presenceRemoveMessage: () => presenceRemoveMessage,
|
|
21
|
+
presenceSnapshotMessage: () => presenceSnapshotMessage,
|
|
22
|
+
presenceUpdateMessage: () => presenceUpdateMessage,
|
|
23
|
+
snapshotMessage: () => snapshotMessage,
|
|
24
|
+
transactionMessage: () => transactionMessage
|
|
25
|
+
});
|
|
26
|
+
/**
|
|
27
|
+
* Decode an encoded client message to a ClientMessage
|
|
28
|
+
*/
|
|
29
|
+
const decodeClientMessage = (encoded) => {
|
|
30
|
+
if (encoded.type === "submit" && encoded.transaction) return {
|
|
31
|
+
type: "submit",
|
|
32
|
+
transaction: Transaction.decode(encoded.transaction)
|
|
33
|
+
};
|
|
34
|
+
return encoded;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Encode a server message for wire format
|
|
38
|
+
*/
|
|
39
|
+
const encodeServerMessage = (message) => {
|
|
40
|
+
if (message.type === "transaction") {
|
|
41
|
+
const encoded = {
|
|
42
|
+
type: "transaction",
|
|
43
|
+
transaction: Transaction.encode(message.transaction),
|
|
44
|
+
version: message.version
|
|
45
|
+
};
|
|
46
|
+
return JSON.stringify(encoded);
|
|
47
|
+
}
|
|
48
|
+
return JSON.stringify(message);
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Parse a raw WebSocket message to a ClientMessage
|
|
52
|
+
*/
|
|
53
|
+
const parseClientMessage = (data) => Effect.try({
|
|
54
|
+
try: () => {
|
|
55
|
+
const text = typeof data === "string" ? data : new TextDecoder().decode(data instanceof ArrayBuffer ? new Uint8Array(data) : data);
|
|
56
|
+
return decodeClientMessage(JSON.parse(text));
|
|
57
|
+
},
|
|
58
|
+
catch: (cause) => new MessageParseError({ cause })
|
|
59
|
+
});
|
|
60
|
+
/**
|
|
61
|
+
* Create an auth result success message
|
|
62
|
+
*/
|
|
63
|
+
const authResultSuccess = (userId, permission) => ({
|
|
64
|
+
type: "auth_result",
|
|
65
|
+
success: true,
|
|
66
|
+
userId,
|
|
67
|
+
permission
|
|
68
|
+
});
|
|
69
|
+
/**
|
|
70
|
+
* Create an auth result failure message
|
|
71
|
+
*/
|
|
72
|
+
const authResultFailure = (error) => ({
|
|
73
|
+
type: "auth_result",
|
|
74
|
+
success: false,
|
|
75
|
+
error
|
|
76
|
+
});
|
|
77
|
+
/**
|
|
78
|
+
* Create a pong message
|
|
79
|
+
*/
|
|
80
|
+
const pong = () => ({ type: "pong" });
|
|
81
|
+
/**
|
|
82
|
+
* Create a transaction message
|
|
83
|
+
*/
|
|
84
|
+
const transactionMessage = (transaction, version) => ({
|
|
85
|
+
type: "transaction",
|
|
86
|
+
transaction,
|
|
87
|
+
version
|
|
88
|
+
});
|
|
89
|
+
/**
|
|
90
|
+
* Create a snapshot message
|
|
91
|
+
*/
|
|
92
|
+
const snapshotMessage = (state, version) => ({
|
|
93
|
+
type: "snapshot",
|
|
94
|
+
state,
|
|
95
|
+
version
|
|
96
|
+
});
|
|
97
|
+
/**
|
|
98
|
+
* Create an error message
|
|
99
|
+
*/
|
|
100
|
+
const errorMessage = (transactionId, reason) => ({
|
|
101
|
+
type: "error",
|
|
102
|
+
transactionId,
|
|
103
|
+
reason
|
|
104
|
+
});
|
|
105
|
+
/**
|
|
106
|
+
* Create a presence update message
|
|
107
|
+
*/
|
|
108
|
+
const presenceUpdateMessage = (id, data, userId) => ({
|
|
109
|
+
type: "presence_update",
|
|
110
|
+
id,
|
|
111
|
+
data,
|
|
112
|
+
userId
|
|
113
|
+
});
|
|
114
|
+
/**
|
|
115
|
+
* Create a presence remove message
|
|
116
|
+
*/
|
|
117
|
+
const presenceRemoveMessage = (id) => ({
|
|
118
|
+
type: "presence_remove",
|
|
119
|
+
id
|
|
120
|
+
});
|
|
121
|
+
/**
|
|
122
|
+
* Create a presence snapshot message
|
|
123
|
+
*/
|
|
124
|
+
const presenceSnapshotMessage = (selfId, presences) => ({
|
|
125
|
+
type: "presence_snapshot",
|
|
126
|
+
selfId,
|
|
127
|
+
presences
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
//#endregion
|
|
131
|
+
export { Protocol_exports, authResultFailure, authResultSuccess, encodeServerMessage, errorMessage, parseClientMessage, pong, presenceRemoveMessage, presenceSnapshotMessage, presenceUpdateMessage, snapshotMessage };
|
|
132
|
+
//# sourceMappingURL=Protocol.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Protocol.mjs","names":["encoded: EncodedServerMessage"],"sources":["../src/Protocol.ts"],"sourcesContent":["/**\n * @voidhash/mimic-effect - WebSocket Protocol\n *\n * Message types and encoding/decoding for WebSocket communication.\n */\nimport { Effect } from \"effect\";\nimport { Transaction } from \"@voidhash/mimic\";\nimport type { Permission, PresenceEntry } from \"./Types\";\nimport { MessageParseError } from \"./Errors\";\n\n// =============================================================================\n// Client -> Server Messages\n// =============================================================================\n\n/**\n * Authentication request\n */\nexport interface AuthMessage {\n readonly type: \"auth\";\n readonly token: string;\n}\n\n/**\n * Heartbeat ping\n */\nexport interface PingMessage {\n readonly type: \"ping\";\n}\n\n/**\n * Submit a transaction\n */\nexport interface SubmitMessage {\n readonly type: \"submit\";\n readonly transaction: Transaction.Transaction;\n}\n\n/**\n * Request current document snapshot\n */\nexport interface RequestSnapshotMessage {\n readonly type: \"request_snapshot\";\n}\n\n/**\n * Set presence data\n */\nexport interface PresenceSetMessage {\n readonly type: \"presence_set\";\n readonly data: unknown;\n}\n\n/**\n * Clear presence data\n */\nexport interface PresenceClearMessage {\n readonly type: \"presence_clear\";\n}\n\n/**\n * Union of all client messages\n */\nexport type ClientMessage =\n | AuthMessage\n | PingMessage\n | SubmitMessage\n | RequestSnapshotMessage\n | PresenceSetMessage\n | PresenceClearMessage;\n\n// =============================================================================\n// Server -> Client Messages\n// =============================================================================\n\n/**\n * Authentication result\n */\nexport interface AuthResultMessage {\n readonly type: \"auth_result\";\n readonly success: boolean;\n readonly error?: string;\n readonly userId?: string;\n readonly permission?: Permission;\n}\n\n/**\n * Heartbeat pong\n */\nexport interface PongMessage {\n readonly type: \"pong\";\n}\n\n/**\n * Transaction broadcast\n */\nexport interface TransactionMessage {\n readonly type: \"transaction\";\n readonly transaction: Transaction.Transaction;\n readonly version: number;\n}\n\n/**\n * Document snapshot\n */\nexport interface SnapshotMessage {\n readonly type: \"snapshot\";\n readonly state: unknown;\n readonly version: number;\n}\n\n/**\n * Transaction error\n */\nexport interface ErrorMessage {\n readonly type: \"error\";\n readonly transactionId: string;\n readonly reason: string;\n}\n\n/**\n * Presence update broadcast\n */\nexport interface PresenceUpdateMessage {\n readonly type: \"presence_update\";\n readonly id: string;\n readonly data: unknown;\n readonly userId?: string;\n}\n\n/**\n * Presence removal broadcast\n */\nexport interface PresenceRemoveMessage {\n readonly type: \"presence_remove\";\n readonly id: string;\n}\n\n/**\n * Presence snapshot (sent after auth)\n */\nexport interface PresenceSnapshotMessage {\n readonly type: \"presence_snapshot\";\n readonly selfId: string;\n readonly presences: Record<string, PresenceEntry>;\n}\n\n/**\n * Union of all server messages\n */\nexport type ServerMessage =\n | AuthResultMessage\n | PongMessage\n | TransactionMessage\n | SnapshotMessage\n | ErrorMessage\n | PresenceUpdateMessage\n | PresenceRemoveMessage\n | PresenceSnapshotMessage;\n\n/**\n * Server broadcast messages (transaction or error)\n */\nexport type ServerBroadcast = TransactionMessage | ErrorMessage;\n\n// =============================================================================\n// Encoded Types (for wire format)\n// =============================================================================\n\n/**\n * Encoded client message (with encoded transaction)\n */\nexport interface EncodedClientMessage {\n readonly type: string;\n readonly token?: string;\n readonly transaction?: Transaction.EncodedTransaction;\n readonly data?: unknown;\n}\n\n/**\n * Encoded server message (with encoded transaction)\n */\nexport interface EncodedServerMessage {\n readonly type: string;\n readonly success?: boolean;\n readonly error?: string;\n readonly userId?: string;\n readonly permission?: Permission;\n readonly transaction?: Transaction.EncodedTransaction;\n readonly version?: number;\n readonly state?: unknown;\n readonly transactionId?: string;\n readonly reason?: string;\n readonly id?: string;\n readonly data?: unknown;\n readonly selfId?: string;\n readonly presences?: Record<string, PresenceEntry>;\n}\n\n// =============================================================================\n// Encoding/Decoding Functions\n// =============================================================================\n\n/**\n * Decode an encoded client message to a ClientMessage\n */\nexport const decodeClientMessage = (\n encoded: EncodedClientMessage\n): ClientMessage => {\n if (encoded.type === \"submit\" && encoded.transaction) {\n return {\n type: \"submit\",\n transaction: Transaction.decode(encoded.transaction),\n };\n }\n return encoded as ClientMessage;\n};\n\n/**\n * Encode a server message for wire format\n */\nexport const encodeServerMessage = (message: ServerMessage): string => {\n if (message.type === \"transaction\") {\n const encoded: EncodedServerMessage = {\n type: \"transaction\",\n transaction: Transaction.encode(message.transaction),\n version: message.version,\n };\n return JSON.stringify(encoded);\n }\n return JSON.stringify(message);\n};\n\n/**\n * Parse a raw WebSocket message to a ClientMessage\n */\nexport const parseClientMessage = (\n data: string | ArrayBuffer | Uint8Array\n): Effect.Effect<ClientMessage, MessageParseError> =>\n Effect.try({\n try: () => {\n const text =\n typeof data === \"string\"\n ? data\n : new TextDecoder().decode(\n data instanceof ArrayBuffer ? new Uint8Array(data) : data\n );\n const encoded = JSON.parse(text) as EncodedClientMessage;\n return decodeClientMessage(encoded);\n },\n catch: (cause) => new MessageParseError({ cause }),\n });\n\n/**\n * Create an auth result success message\n */\nexport const authResultSuccess = (\n userId: string,\n permission: Permission\n): AuthResultMessage => ({\n type: \"auth_result\",\n success: true,\n userId,\n permission,\n});\n\n/**\n * Create an auth result failure message\n */\nexport const authResultFailure = (error: string): AuthResultMessage => ({\n type: \"auth_result\",\n success: false,\n error,\n});\n\n/**\n * Create a pong message\n */\nexport const pong = (): PongMessage => ({ type: \"pong\" });\n\n/**\n * Create a transaction message\n */\nexport const transactionMessage = (\n transaction: Transaction.Transaction,\n version: number\n): TransactionMessage => ({\n type: \"transaction\",\n transaction,\n version,\n});\n\n/**\n * Create a snapshot message\n */\nexport const snapshotMessage = (\n state: unknown,\n version: number\n): SnapshotMessage => ({\n type: \"snapshot\",\n state,\n version,\n});\n\n/**\n * Create an error message\n */\nexport const errorMessage = (\n transactionId: string,\n reason: string\n): ErrorMessage => ({\n type: \"error\",\n transactionId,\n reason,\n});\n\n/**\n * Create a presence update message\n */\nexport const presenceUpdateMessage = (\n id: string,\n data: unknown,\n userId?: string\n): PresenceUpdateMessage => ({\n type: \"presence_update\",\n id,\n data,\n userId,\n});\n\n/**\n * Create a presence remove message\n */\nexport const presenceRemoveMessage = (\n id: string\n): PresenceRemoveMessage => ({\n type: \"presence_remove\",\n id,\n});\n\n/**\n * Create a presence snapshot message\n */\nexport const presenceSnapshotMessage = (\n selfId: string,\n presences: Record<string, PresenceEntry>\n): PresenceSnapshotMessage => ({\n type: \"presence_snapshot\",\n selfId,\n presences,\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6MA,MAAa,uBACX,YACkB;AAClB,KAAI,QAAQ,SAAS,YAAY,QAAQ,YACvC,QAAO;EACL,MAAM;EACN,aAAa,YAAY,OAAO,QAAQ,YAAY;EACrD;AAEH,QAAO;;;;;AAMT,MAAa,uBAAuB,YAAmC;AACrE,KAAI,QAAQ,SAAS,eAAe;EAClC,MAAMA,UAAgC;GACpC,MAAM;GACN,aAAa,YAAY,OAAO,QAAQ,YAAY;GACpD,SAAS,QAAQ;GAClB;AACD,SAAO,KAAK,UAAU,QAAQ;;AAEhC,QAAO,KAAK,UAAU,QAAQ;;;;;AAMhC,MAAa,sBACX,SAEA,OAAO,IAAI;CACT,WAAW;EACT,MAAM,OACJ,OAAO,SAAS,WACZ,OACA,IAAI,aAAa,CAAC,OAChB,gBAAgB,cAAc,IAAI,WAAW,KAAK,GAAG,KACtD;AAEP,SAAO,oBADS,KAAK,MAAM,KAAK,CACG;;CAErC,QAAQ,UAAU,IAAI,kBAAkB,EAAE,OAAO,CAAC;CACnD,CAAC;;;;AAKJ,MAAa,qBACX,QACA,gBACuB;CACvB,MAAM;CACN,SAAS;CACT;CACA;CACD;;;;AAKD,MAAa,qBAAqB,WAAsC;CACtE,MAAM;CACN,SAAS;CACT;CACD;;;;AAKD,MAAa,cAA2B,EAAE,MAAM,QAAQ;;;;AAKxD,MAAa,sBACX,aACA,aACwB;CACxB,MAAM;CACN;CACA;CACD;;;;AAKD,MAAa,mBACX,OACA,aACqB;CACrB,MAAM;CACN;CACA;CACD;;;;AAKD,MAAa,gBACX,eACA,YACkB;CAClB,MAAM;CACN;CACA;CACD;;;;AAKD,MAAa,yBACX,IACA,MACA,YAC2B;CAC3B,MAAM;CACN;CACA;CACA;CACD;;;;AAKD,MAAa,yBACX,QAC2B;CAC3B,MAAM;CACN;CACD;;;;AAKD,MAAa,2BACX,QACA,eAC6B;CAC7B,MAAM;CACN;CACA;CACD"}
|
package/dist/Types.d.cts
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { Duration, Effect } from "effect";
|
|
2
|
+
import { Presence, Primitive, Transaction } from "@voidhash/mimic";
|
|
3
|
+
|
|
4
|
+
//#region src/Types.d.ts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Permission level for document access
|
|
8
|
+
* - "read": Can subscribe, receive transactions, get snapshots
|
|
9
|
+
* - "write": All of the above, plus can submit transactions and set presence
|
|
10
|
+
*/
|
|
11
|
+
type Permission = "read" | "write";
|
|
12
|
+
/**
|
|
13
|
+
* Authentication context returned after successful authentication
|
|
14
|
+
*/
|
|
15
|
+
interface AuthContext {
|
|
16
|
+
readonly userId: string;
|
|
17
|
+
readonly permission: Permission;
|
|
18
|
+
readonly metadata?: Record<string, unknown>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Document state stored in ColdStorage (snapshots)
|
|
22
|
+
*/
|
|
23
|
+
interface StoredDocument {
|
|
24
|
+
/** Document state */
|
|
25
|
+
readonly state: unknown;
|
|
26
|
+
/** Current version number */
|
|
27
|
+
readonly version: number;
|
|
28
|
+
/** Schema version for future migration support */
|
|
29
|
+
readonly schemaVersion: number;
|
|
30
|
+
/** Unix timestamp (ms) when saved */
|
|
31
|
+
readonly savedAt: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* WAL entry stored in HotStorage
|
|
35
|
+
*/
|
|
36
|
+
interface WalEntry {
|
|
37
|
+
/** The transaction data */
|
|
38
|
+
readonly transaction: Transaction.Transaction;
|
|
39
|
+
/** Version after this transaction */
|
|
40
|
+
readonly version: number;
|
|
41
|
+
/** Unix timestamp (ms) */
|
|
42
|
+
readonly timestamp: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Presence entry for a connection
|
|
46
|
+
*/
|
|
47
|
+
interface PresenceEntry {
|
|
48
|
+
/** Presence data (schema-validated) */
|
|
49
|
+
readonly data: unknown;
|
|
50
|
+
/** User ID from authentication (optional) */
|
|
51
|
+
readonly userId?: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Snapshot of all presences for a document
|
|
55
|
+
*/
|
|
56
|
+
interface PresenceSnapshot {
|
|
57
|
+
readonly presences: Record<string, PresenceEntry>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Presence update event
|
|
61
|
+
*/
|
|
62
|
+
interface PresenceUpdateEvent {
|
|
63
|
+
readonly type: "presence_update";
|
|
64
|
+
readonly id: string;
|
|
65
|
+
readonly data: unknown;
|
|
66
|
+
readonly userId?: string;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Presence remove event
|
|
70
|
+
*/
|
|
71
|
+
interface PresenceRemoveEvent {
|
|
72
|
+
readonly type: "presence_remove";
|
|
73
|
+
readonly id: string;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Union of presence events
|
|
77
|
+
*/
|
|
78
|
+
type PresenceEvent = PresenceUpdateEvent | PresenceRemoveEvent;
|
|
79
|
+
/**
|
|
80
|
+
* Duration input type - matches Effect's DurationInput
|
|
81
|
+
*/
|
|
82
|
+
type DurationInput = Duration.DurationInput;
|
|
83
|
+
/**
|
|
84
|
+
* Snapshot configuration
|
|
85
|
+
*/
|
|
86
|
+
interface SnapshotConfig {
|
|
87
|
+
/** Time-based snapshot interval */
|
|
88
|
+
readonly interval: DurationInput;
|
|
89
|
+
/** Transaction count threshold for snapshots */
|
|
90
|
+
readonly transactionThreshold: number;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Context passed to initial state function
|
|
94
|
+
*/
|
|
95
|
+
interface InitialContext {
|
|
96
|
+
readonly documentId: string;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Initial state function type
|
|
100
|
+
*/
|
|
101
|
+
type InitialFn<TSchema extends Primitive.AnyPrimitive> = (context: InitialContext) => Effect.Effect<Primitive.InferSetInput<TSchema>>;
|
|
102
|
+
/**
|
|
103
|
+
* Initial state - either a static value or a function
|
|
104
|
+
*/
|
|
105
|
+
type Initial<TSchema extends Primitive.AnyPrimitive> = Primitive.InferSetInput<TSchema> | InitialFn<TSchema>;
|
|
106
|
+
/**
|
|
107
|
+
* MimicServerEngine configuration
|
|
108
|
+
*/
|
|
109
|
+
interface MimicServerEngineConfig<TSchema extends Primitive.AnyPrimitive> {
|
|
110
|
+
/** Document schema (required) */
|
|
111
|
+
readonly schema: TSchema;
|
|
112
|
+
/** Initial state for new documents (optional) */
|
|
113
|
+
readonly initial?: Initial<TSchema>;
|
|
114
|
+
/** Presence schema (optional) */
|
|
115
|
+
readonly presence?: Presence.AnyPresence;
|
|
116
|
+
/** Document idle timeout before GC (default: 5 minutes) */
|
|
117
|
+
readonly maxIdleTime?: DurationInput;
|
|
118
|
+
/** Maximum transaction history for deduplication (default: 1000) */
|
|
119
|
+
readonly maxTransactionHistory?: number;
|
|
120
|
+
/** Snapshot configuration */
|
|
121
|
+
readonly snapshot?: SnapshotConfig;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* MimicClusterServerEngine configuration (extends MimicServerEngineConfig)
|
|
125
|
+
*/
|
|
126
|
+
interface MimicClusterServerEngineConfig<TSchema extends Primitive.AnyPrimitive> extends MimicServerEngineConfig<TSchema> {
|
|
127
|
+
/** Shard group name for cluster distribution (default: "mimic-documents") */
|
|
128
|
+
readonly shardGroup?: string;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* MimicServer route configuration
|
|
132
|
+
*/
|
|
133
|
+
interface MimicServerRouteConfig {
|
|
134
|
+
/** WebSocket route path prefix (default: "/mimic") */
|
|
135
|
+
readonly path?: `/${string}`;
|
|
136
|
+
/** Heartbeat ping interval (default: 30 seconds) */
|
|
137
|
+
readonly heartbeatInterval?: DurationInput;
|
|
138
|
+
/** Heartbeat timeout - disconnect if no activity (default: 10 seconds) */
|
|
139
|
+
readonly heartbeatTimeout?: DurationInput;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Resolved engine configuration with all defaults applied
|
|
143
|
+
*/
|
|
144
|
+
interface ResolvedConfig<TSchema extends Primitive.AnyPrimitive> {
|
|
145
|
+
readonly schema: TSchema;
|
|
146
|
+
readonly initial: Initial<TSchema> | undefined;
|
|
147
|
+
readonly presence: Presence.AnyPresence | undefined;
|
|
148
|
+
readonly maxIdleTime: Duration.Duration;
|
|
149
|
+
readonly maxTransactionHistory: number;
|
|
150
|
+
readonly snapshot: {
|
|
151
|
+
readonly interval: Duration.Duration;
|
|
152
|
+
readonly transactionThreshold: number;
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Resolved route configuration with all defaults applied
|
|
157
|
+
*/
|
|
158
|
+
interface ResolvedRouteConfig {
|
|
159
|
+
readonly path: string;
|
|
160
|
+
readonly heartbeatInterval: Duration.Duration;
|
|
161
|
+
readonly heartbeatTimeout: Duration.Duration;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Resolved cluster engine configuration with all defaults applied
|
|
165
|
+
*/
|
|
166
|
+
interface ResolvedClusterConfig<TSchema extends Primitive.AnyPrimitive> extends ResolvedConfig<TSchema> {
|
|
167
|
+
/** Shard group name for cluster distribution */
|
|
168
|
+
readonly shardGroup: string;
|
|
169
|
+
}
|
|
170
|
+
//#endregion
|
|
171
|
+
export { AuthContext, DurationInput, Initial, InitialContext, InitialFn, MimicClusterServerEngineConfig, MimicServerEngineConfig, MimicServerRouteConfig, Permission, PresenceEntry, PresenceEvent, PresenceRemoveEvent, PresenceSnapshot, PresenceUpdateEvent, ResolvedClusterConfig, ResolvedConfig, ResolvedRouteConfig, SnapshotConfig, StoredDocument, WalEntry };
|
|
172
|
+
//# sourceMappingURL=Types.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Types.d.cts","names":[],"sources":["../src/Types.ts"],"sourcesContent":[],"mappings":";;;;;AAiDA;AAgBA;AAUA;AAOA;AAUA;AAQY,KAnFA,UAAA,GAmFa,MAAA,GAAG,OAAA;AAS5B;AAKA;AAUA;AAOY,UA7GK,WAAA,CA6GI;EAAiB,SAAU,MAAA,EAAA,MAAA;EACrC,SAAA,UAAA,EA5GY,UA4GZ;EACgC,SAAA,QAAA,CAAA,EA5GrB,MA4GqB,CAAA,MAAA,EAAA,OAAA,CAAA;;;;AAK3C;AAAoC,UAvGnB,cAAA,CAuG6B;EAClB;EAAxB,SAAU,KAAA,EAAA,OAAA;EACA;EAAV,SAAA,OAAA,EAAA,MAAA;EAAS;EAKI,SAAA,aAAA,EAAA,MAAuB;EACtB;EAGC,SAAA,OAAA,EAAA,MAAA;;;;;AAeG,UAnHL,QAAA,CAmHK;EAAc;EAMnB,SAAA,WAAA,EAvHO,WAAA,CAAY,WAuHW;EAC7B;EACgB,SAAA,OAAA,EAAA,MAAA;EAAxB;EAAuB,SAAA,SAAA,EAAA,MAAA;AAYjC;AAkBA;;;AAE4B,UA3IX,aAAA,CA2IW;EAAR;EACC,SAAS,IAAA,EAAA,OAAA;EACN;EAGD,SAAS,MAAA,CAAA,EAAA,MAAA;;AAQhC;AASA;;AACyB,UAxJR,gBAAA,CAwJQ;EAAf,SAAA,SAAA,EAvJY,MAuJZ,CAAA,MAAA,EAvJ2B,aAuJ3B,CAAA;;;;;UAjJO,mBAAA;;;;;;;;;UAUA,mBAAA;;;;;;;KAQL,aAAA,GAAgB,sBAAsB;;;;KAStC,aAAA,GAAgB,QAAA,CAAS;;;;UAKpB,cAAA;;qBAEI;;;;;;;UAQJ,cAAA;;;;;;KAOL,0BAA0B,SAAA,CAAU,0BACrC,mBACN,MAAA,CAAO,OAAO,SAAA,CAAU,cAAc;;;;KAK/B,wBAAwB,SAAA,CAAU,gBAC1C,SAAA,CAAU,cAAc,WACxB,UAAU;;;;UAKG,wCACC,SAAA,CAAU;;mBAGT;;qBAGE,QAAQ;;sBAGP,QAAA,CAAS;;yBAGN;;;;sBAMH;;;;;UAML,+CACC,SAAA,CAAU,sBAClB,wBAAwB;;;;;;;UAYjB,sBAAA;;;;+BAKc;;8BAGD;;;;;UAUb,+BAA+B,SAAA,CAAU;mBACvC;oBACC,QAAQ;qBACP,QAAA,CAAS;wBACN,QAAA,CAAS;;;uBAGV,QAAA,CAAS;;;;;;;UAQf,mBAAA;;8BAEa,QAAA,CAAS;6BACV,QAAA,CAAS;;;;;UAMrB,sCAAsC,SAAA,CAAU,sBACvD,eAAe"}
|