@fireproof/core-svc-protocol 0.24.0-dev-multi-clerks-0

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/transport.d.ts ADDED
@@ -0,0 +1,269 @@
1
+ import { Logger, Result } from "@adviser/cement";
2
+ import { MsgType } from "./database-protocol.zod.js";
3
+ import { SuperThis } from "@fireproof/core-types-base";
4
+ export interface FPTransportOriginCTX {
5
+ readonly origin: string;
6
+ }
7
+ export interface FPTransportTargetCTX extends FPTransportOriginCTX {
8
+ readonly target: string;
9
+ }
10
+ export interface FPTransport {
11
+ start(): Promise<Result<void>>;
12
+ send<R extends MsgType>(msg: R, ctx: FPTransportTargetCTX): Promise<Result<R>>;
13
+ recv(fn: (msg: MsgType, ctx: FPTransportOriginCTX) => Promise<Result<void>>): () => void;
14
+ onSend(fn: (msg: MsgType, ctx: FPTransportTargetCTX) => Promise<void>): () => void;
15
+ onRecv(fn: (msg: MsgType, ctx: FPTransportOriginCTX) => Promise<void>): () => void;
16
+ }
17
+ export interface FPWebWindow {
18
+ postMessage(message: unknown, options?: string): void;
19
+ addEventListener<T>(type: string, listener: (evt: T) => void, options?: boolean | AddEventListenerOptions): void;
20
+ removeEventListener<T>(type: string, listener: (evt: T) => void, options?: boolean | EventListenerOptions): void;
21
+ }
22
+ export interface FPApiTransportCtx {
23
+ readonly transport: FPTransport;
24
+ readonly webWindow: FPWebWindow;
25
+ }
26
+ export declare class FPApiPostMessageTransport implements FPTransport {
27
+ readonly logger: Logger;
28
+ readonly webWindow: FPWebWindow;
29
+ readonly onSend: import("@adviser/cement").ReturnOnFunc<[msg: Readonly<{
30
+ tid: string;
31
+ src: string;
32
+ dst: string;
33
+ type: "resApplyDatabaseConfig";
34
+ dbName: string;
35
+ dbId: string;
36
+ }> | Readonly<{
37
+ tid: string;
38
+ src: string;
39
+ dst: string;
40
+ type: "error";
41
+ error: string;
42
+ code?: number | undefined;
43
+ stack?: string[] | undefined;
44
+ }> | Readonly<{
45
+ tid: string;
46
+ src: string;
47
+ dst: string;
48
+ dbName: string;
49
+ dbId: string;
50
+ type: "reqDBGet";
51
+ docIds: string[];
52
+ }> | Readonly<{
53
+ tid: string;
54
+ src: string;
55
+ dst: string;
56
+ dbName: string;
57
+ dbId: string;
58
+ type: "resDBGet";
59
+ docId: string;
60
+ results: any[];
61
+ }> | Readonly<{
62
+ tid: string;
63
+ src: string;
64
+ dst: string;
65
+ dbName: string;
66
+ dbId: string;
67
+ type: "reqDBGetFile";
68
+ docId: string;
69
+ fileData: Readonly<{
70
+ type: string;
71
+ size: number;
72
+ cid: any;
73
+ car?: any;
74
+ lastModified?: number | undefined;
75
+ url?: string | undefined;
76
+ }>;
77
+ }> | Readonly<{
78
+ tid: string;
79
+ src: string;
80
+ dst: string;
81
+ dbName: string;
82
+ dbId: string;
83
+ type: "resDBGetFile";
84
+ docId: string;
85
+ fileData: Readonly<{
86
+ type: string;
87
+ size: number;
88
+ cid: any;
89
+ car?: any;
90
+ lastModified?: number | undefined;
91
+ url?: string | undefined;
92
+ }>;
93
+ content: Uint8Array<ArrayBuffer>;
94
+ }> | Readonly<{
95
+ tid: string;
96
+ src: string;
97
+ dst: string;
98
+ dbName: string;
99
+ dbId: string;
100
+ type: "reqDBBulk";
101
+ docs: any[];
102
+ }> | Readonly<{
103
+ tid: string;
104
+ src: string;
105
+ dst: string;
106
+ dbName: string;
107
+ dbId: string;
108
+ type: "resDBBulk";
109
+ results: Readonly<{
110
+ ids: string[];
111
+ clock: string;
112
+ name?: string | undefined;
113
+ }>;
114
+ }> | {
115
+ tid: string;
116
+ src: string;
117
+ dst: string;
118
+ type: "reqApplyDatabaseConfig";
119
+ config: {
120
+ env?: Record<string, string> | undefined;
121
+ ctx?: Record<string, string> | undefined;
122
+ writeQueue?: {
123
+ chunkSize: number;
124
+ } | undefined;
125
+ autoCompact?: number | undefined;
126
+ compactStrategy?: string | undefined;
127
+ storeUrls?: Readonly<{
128
+ base?: string | undefined;
129
+ data: {
130
+ meta?: string | undefined;
131
+ car?: string | undefined;
132
+ file?: string | undefined;
133
+ wal?: string | undefined;
134
+ };
135
+ idx: {
136
+ meta?: string | undefined;
137
+ car?: string | undefined;
138
+ file?: string | undefined;
139
+ wal?: string | undefined;
140
+ };
141
+ }> | undefined;
142
+ threshold?: number | undefined;
143
+ name: string;
144
+ refId: string;
145
+ };
146
+ }, ctx: FPTransportTargetCTX], unknown>;
147
+ readonly onRecv: import("@adviser/cement").ReturnOnFunc<[msg: Readonly<{
148
+ tid: string;
149
+ src: string;
150
+ dst: string;
151
+ type: "resApplyDatabaseConfig";
152
+ dbName: string;
153
+ dbId: string;
154
+ }> | Readonly<{
155
+ tid: string;
156
+ src: string;
157
+ dst: string;
158
+ type: "error";
159
+ error: string;
160
+ code?: number | undefined;
161
+ stack?: string[] | undefined;
162
+ }> | Readonly<{
163
+ tid: string;
164
+ src: string;
165
+ dst: string;
166
+ dbName: string;
167
+ dbId: string;
168
+ type: "reqDBGet";
169
+ docIds: string[];
170
+ }> | Readonly<{
171
+ tid: string;
172
+ src: string;
173
+ dst: string;
174
+ dbName: string;
175
+ dbId: string;
176
+ type: "resDBGet";
177
+ docId: string;
178
+ results: any[];
179
+ }> | Readonly<{
180
+ tid: string;
181
+ src: string;
182
+ dst: string;
183
+ dbName: string;
184
+ dbId: string;
185
+ type: "reqDBGetFile";
186
+ docId: string;
187
+ fileData: Readonly<{
188
+ type: string;
189
+ size: number;
190
+ cid: any;
191
+ car?: any;
192
+ lastModified?: number | undefined;
193
+ url?: string | undefined;
194
+ }>;
195
+ }> | Readonly<{
196
+ tid: string;
197
+ src: string;
198
+ dst: string;
199
+ dbName: string;
200
+ dbId: string;
201
+ type: "resDBGetFile";
202
+ docId: string;
203
+ fileData: Readonly<{
204
+ type: string;
205
+ size: number;
206
+ cid: any;
207
+ car?: any;
208
+ lastModified?: number | undefined;
209
+ url?: string | undefined;
210
+ }>;
211
+ content: Uint8Array<ArrayBuffer>;
212
+ }> | Readonly<{
213
+ tid: string;
214
+ src: string;
215
+ dst: string;
216
+ dbName: string;
217
+ dbId: string;
218
+ type: "reqDBBulk";
219
+ docs: any[];
220
+ }> | Readonly<{
221
+ tid: string;
222
+ src: string;
223
+ dst: string;
224
+ dbName: string;
225
+ dbId: string;
226
+ type: "resDBBulk";
227
+ results: Readonly<{
228
+ ids: string[];
229
+ clock: string;
230
+ name?: string | undefined;
231
+ }>;
232
+ }> | {
233
+ tid: string;
234
+ src: string;
235
+ dst: string;
236
+ type: "reqApplyDatabaseConfig";
237
+ config: {
238
+ env?: Record<string, string> | undefined;
239
+ ctx?: Record<string, string> | undefined;
240
+ writeQueue?: {
241
+ chunkSize: number;
242
+ } | undefined;
243
+ autoCompact?: number | undefined;
244
+ compactStrategy?: string | undefined;
245
+ storeUrls?: Readonly<{
246
+ base?: string | undefined;
247
+ data: {
248
+ meta?: string | undefined;
249
+ car?: string | undefined;
250
+ file?: string | undefined;
251
+ wal?: string | undefined;
252
+ };
253
+ idx: {
254
+ meta?: string | undefined;
255
+ car?: string | undefined;
256
+ file?: string | undefined;
257
+ wal?: string | undefined;
258
+ };
259
+ }> | undefined;
260
+ threshold?: number | undefined;
261
+ name: string;
262
+ refId: string;
263
+ };
264
+ }, ctx: FPTransportOriginCTX], unknown>;
265
+ constructor(sthis: SuperThis, fpWindow: FPWebWindow);
266
+ start(): Promise<Result<void, Error>>;
267
+ recv(fn: (msg: MsgType, ctx: FPTransportOriginCTX) => Promise<Result<void>>): () => void;
268
+ send<T extends MsgType>(msg: T, ctx: FPTransportTargetCTX): Promise<Result<T>>;
269
+ }
package/transport.js ADDED
@@ -0,0 +1,44 @@
1
+ import { isUint8Array, OnFunc, Result } from "@adviser/cement";
2
+ import { ensureLogger } from "@fireproof/core-runtime";
3
+ import { decode, encode } from "cborg";
4
+ export class FPApiPostMessageTransport {
5
+ logger;
6
+ webWindow;
7
+ onSend = OnFunc();
8
+ onRecv = OnFunc();
9
+ constructor(sthis, fpWindow) {
10
+ this.logger = ensureLogger(sthis, "FPApiTransport");
11
+ this.webWindow = fpWindow;
12
+ }
13
+ start() {
14
+ return Promise.resolve(Result.Ok());
15
+ }
16
+ recv(fn) {
17
+ const handleMessage = (event) => {
18
+ const msgCbor = event.data;
19
+ if (!isUint8Array(msgCbor)) {
20
+ return this.logger.Warn().Msg("Received non-Uint8Array message in FPApiPostMessageTransport").ResultError();
21
+ }
22
+ const msg = decode(msgCbor);
23
+ const ctx = {
24
+ origin: event.origin,
25
+ };
26
+ this.onRecv.invoke(msg, ctx);
27
+ fn(msg, ctx);
28
+ };
29
+ this.webWindow.addEventListener("message", handleMessage);
30
+ return () => {
31
+ this.webWindow.removeEventListener("message", handleMessage);
32
+ };
33
+ }
34
+ async send(msg, ctx) {
35
+ const cborMsg = encode(msg);
36
+ this.webWindow.postMessage({
37
+ origin: ctx.origin,
38
+ data: cborMsg,
39
+ }, ctx.target);
40
+ this.onSend.invoke(msg, ctx);
41
+ return Result.Ok(msg);
42
+ }
43
+ }
44
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../jsr/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAU,MAAM,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGvE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AA+BvC,MAAM,OAAO,yBAAyB;IAC3B,MAAM,CAAS;IACf,SAAS,CAAc;IAEvB,MAAM,GAAG,MAAM,EAA8D,CAAC;IAC9E,MAAM,GAAG,MAAM,EAAqD,CAAC;IAE9E,YAAY,KAAgB,EAAE,QAAqB,EAAE;QACnD,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAAA,CAC3B;IAED,KAAK,GAAG;QACN,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IAAA,CACrC;IAED,IAAI,CAAC,EAAsE,EAAc;QACvF,MAAM,aAAa,GAAG,CAAC,KAAmB,EAAE,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;YAC3B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9G,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM,GAAG,GAAyB;gBAChC,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAE7B,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAAA,CACd,CAAC;QAGF,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAC1D,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAAA,CAC9D,CAAC;IAAA,CACH;IAED,KAAK,CAAC,IAAI,CAAoB,GAAM,EAAE,GAAyB,EAAsB;QAEnF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAE5B,IAAI,CAAC,SAAS,CAAC,WAAW,CACxB;YACE,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI,EAAE,OAAO;SACd,EACD,GAAG,CAAC,MAAM,CACX,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAA,CACvB;CACF"}
package/tsconfig.json ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "extends": [
3
+ "/__w/fireproof/fireproof/tsconfig.dist.json"
4
+ ],
5
+ "compilerOptions": {
6
+ "outDir": "../npm/",
7
+ "noEmit": false
8
+ },
9
+ "include": [
10
+ "**/*"
11
+ ],
12
+ "exclude": [
13
+ "node_modules",
14
+ "dist",
15
+ ".git",
16
+ ".vscode"
17
+ ]
18
+ }