Skip to content

Commit e125fa7

Browse files
committed
wip [skip ci]
1 parent c6c7583 commit e125fa7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+916
-1075
lines changed

cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
"url": "https://github.com/fireproof-storage/fireproof/issues"
3838
},
3939
"dependencies": {
40-
"@adviser/cement": "^0.4.54",
40+
"@adviser/cement": "^0.4.58",
4141
"@fireproof/core-runtime": "workspace:0.0.0",
4242
"@fireproof/core-types-base": "workspace:0.0.0",
4343
"@fireproof/vendor": "workspace:0.0.0",

cloud/3rd-party/package.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,7 @@
3939
"url": "https://github.com/fireproof-storage/fireproof/issues"
4040
},
4141
"dependencies": {
42-
"@adviser/cement": "^0.4.54",
43-
"preact": "^10.27.2",
44-
"preact-render-to-string": "^6.6.2",
42+
"@adviser/cement": "^0.4.58",
4543
"react": "^19.2.0",
4644
"react-dom": "^19.2.0",
4745
"use-fireproof": "workspace:0.0.0"

cloud/3rd-party/src/App.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import { DocWithId, useFireproof, toCloud, FPCloudConnectStrategy } from "use-fireproof";
22
import React, { useState, useEffect } from "react";
33
import "./App.css";
4-
import { overlayHtml } from "./overlayHtml.js";
4+
// import { overlayHtml } from "./overlayHtml.js";
55
// import { URI } from "@adviser/cement";
66

77
function App() {
8+
89
const { database, attach } = useFireproof("fireproof-5-party", {
910
attach: toCloud({
10-
strategy: new FPCloudConnectStrategy({
11+
strategy: FPCloudConnectStrategy({
1112
// overlayCss: defaultOverlayCss,
12-
overlayHtml,
13+
// overlayHtml,
1314
// dashboardURI: "http://localhost:7370/fp/cloud/api/token",
14-
// cloudApiURI: "http://localhost:7370/api",
1515
}),
1616
// urls: { base: "fpcloud://localhost:8787?protocol=ws" },
1717
// tenant: "3rd-party",

cloud/3rd-party/src/main.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { createRoot } from "react-dom/client";
33
import "./index.css";
44
import App from "./App.jsx";
55

6+
console.log("i'm in main.tsx")
67
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
78
createRoot(document.getElementById("root")!).render(
89
<StrictMode>

cloud/3rd-party/src/overlayHtml.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { renderToString } from "preact-render-to-string";
2-
import { createElement } from "preact";
1+
import { jsx } from "use-fireproof";
32

4-
const React = {
5-
createElement,
6-
};
3+
const {
4+
renderToString,
5+
React
6+
} = jsx
77

88
// function jsxDEV(...args: unknown[]) {
99
// // eslint-disable-next-line @typescript-eslint/no-explicit-any

cloud/backend/base/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
"url": "https://github.com/fireproof-storage/fireproof/issues"
3737
},
3838
"dependencies": {
39-
"@adviser/cement": "^0.4.54",
39+
"@adviser/cement": "^0.4.58",
4040
"@cloudflare/workers-types": "^4.20251014.0",
4141
"@fireproof/cloud-base": "workspace:0.0.0",
4242
"@fireproof/core-base": "workspace:0.0.0",

cloud/backend/cf-d1/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"url": "https://github.com/fireproof-storage/fireproof/issues"
4040
},
4141
"dependencies": {
42-
"@adviser/cement": "^0.4.54",
42+
"@adviser/cement": "^0.4.58",
4343
"@cloudflare/workers-types": "^4.20251014.0",
4444
"@fireproof/cloud-backend-base": "workspace:0.0.0",
4545
"@fireproof/cloud-base": "workspace:0.0.0",

cloud/backend/node/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
"url": "https://github.com/fireproof-storage/fireproof/issues"
3737
},
3838
"dependencies": {
39-
"@adviser/cement": "^0.4.54",
39+
"@adviser/cement": "^0.4.58",
4040
"@fireproof/cloud-backend-base": "workspace:0.0.0",
4141
"@fireproof/cloud-base": "workspace:0.0.0",
4242
"@fireproof/core-base": "workspace:0.0.0",

cloud/base/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
"react": ">=18.0.0"
3939
},
4040
"dependencies": {
41-
"@adviser/cement": "^0.4.54",
41+
"@adviser/cement": "^0.4.58",
4242
"@fireproof/core-blockstore": "workspace:0.0.0",
4343
"@fireproof/core-runtime": "workspace:0.0.0",
4444
"@fireproof/core-types-base": "workspace:0.0.0",

cloud/connector/base/fpcc-protocol.ts

Lines changed: 104 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,81 @@
1-
import { FPCCMessage, FPCCMsgBase, FPCCPong, FPCCSendMessage, isFPCCPing, validateFPCCMessage } from "./protocol-fp-cloud-conn.js";
2-
import { Logger } from "@adviser/cement";
1+
import {
2+
FPCCError,
3+
FPCCEvtApp,
4+
FPCCEvtConnectorReady,
5+
FPCCEvtNeedsLogin,
6+
FPCCMessage,
7+
FPCCMsgBase,
8+
FPCCPing,
9+
FPCCPong,
10+
FPCCReqRegisterLocalDbName,
11+
FPCCReqWaitConnectorReady,
12+
FPCCSendMessage,
13+
isFPCCError,
14+
isFPCCEvtApp,
15+
isFPCCEvtConnectorReady,
16+
isFPCCEvtNeedsLogin,
17+
isFPCCPing,
18+
isFPCCPong,
19+
isFPCCReqRegisterLocalDbName,
20+
isFPCCReqWaitConnectorReady,
21+
validateFPCCMessage,
22+
} from "./protocol-fp-cloud-conn.js";
23+
import { Logger, OnFunc } from "@adviser/cement";
324
import { ensureLogger } from "@fireproof/core-runtime";
425
import { SuperThis } from "@fireproof/core-types-base";
526

627
export interface FPCCProtocol {
728
// handle must be this bound method
8-
handleMessage: (event: MessageEvent<unknown>) => void;
9-
handleFPCCMessage?: (event: FPCCMessage, srcEvent: MessageEvent<unknown>) => void;
29+
hash: () => string;
30+
1031
sendMessage<T extends FPCCMsgBase>(event: FPCCSendMessage<T>, srcEvent: MessageEvent<unknown>): void;
1132
handleError: (error: unknown) => void;
12-
injectSend(send: (evt: FPCCMessage, srcEvent: MessageEvent<unknown>) => FPCCMessage): void;
33+
injectSend(send: (evt: FPCCMessage, srcEvent: MessageEvent<unknown> | string) => FPCCMessage): void;
1334
ready(): Promise<FPCCProtocol>;
1435
stop(): void;
1536
}
1637

1738
export class FPCCProtocolBase implements FPCCProtocol {
1839
protected readonly sthis: SuperThis;
1940
protected readonly logger: Logger;
20-
readonly #fpccMessageHandlers: ((msg: FPCCMessage, srcEvent: MessageEvent<unknown>) => boolean | undefined)[] = [];
2141
readonly onStartFns: (() => void)[] = [];
22-
#sendFn: ((msg: FPCCMessage, srcEvent: MessageEvent<unknown>) => FPCCMessage) | undefined = undefined;
42+
#sendFn: ((msg: FPCCMessage, srcEvent: MessageEvent<unknown> | string) => FPCCMessage) | undefined = undefined;
43+
44+
readonly onMessage = OnFunc<(event: MessageEvent<unknown>) => void>();
45+
readonly onFPCCMessage = OnFunc<(msg: FPCCMessage, srcEvent: MessageEvent<unknown>) => void>();
46+
47+
readonly onFPCCEvtNeedsLogin = OnFunc<(msg: FPCCEvtNeedsLogin, srcEvent: MessageEvent<unknown>) => void>()
48+
readonly onFPCCError = OnFunc<(msg: FPCCError, srcEvent: MessageEvent<unknown>) => void>();
49+
readonly onFPCCReqRegisterLocalDbName = OnFunc<(msg: FPCCReqRegisterLocalDbName, srcEvent: MessageEvent<unknown>) => void>()
50+
readonly onFPCCEvtApp = OnFunc<(msg: FPCCEvtApp, srcEvent: MessageEvent<unknown>) => void>()
51+
readonly onFPCCPing = OnFunc<(msg: FPCCPing, srcEvent: MessageEvent<unknown>) => void>();
52+
readonly onFPCCPong = OnFunc<(msg: FPCCPong, srcEvent: MessageEvent<unknown>) => void>()
53+
readonly onFPCCEvtConnectorReady = OnFunc<(msg: FPCCEvtConnectorReady, srcEvent: MessageEvent<unknown>) => void>();
54+
readonly onFPCCReqWaitConnectorReady = OnFunc<(msg: FPCCReqWaitConnectorReady, srcEvent: MessageEvent<unknown>) => void>();
2355

2456
constructor(sthis: SuperThis, logger?: Logger) {
2557
this.sthis = sthis;
2658
this.logger = logger || ensureLogger(sthis, "FPCCProtocolBase");
59+
this.onMessage(event => {
60+
this.handleMessage(event);
61+
});
62+
this.onFPCCMessage((msg, srcEvent) => {
63+
this.#handleFPCCMessage(msg, srcEvent);
64+
})
65+
this.onFPCCPing((msg, srcEvent) => {
66+
this.sendMessage<FPCCPong>({
67+
src: msg.dst,
68+
dst: msg.src,
69+
pingTid: msg.tid,
70+
type: "FPCCPong",
71+
},
72+
srcEvent,
73+
);
74+
});
75+
}
76+
77+
hash(): string {
78+
throw new Error("should be implemented by subclass");
2779
}
2880

2981
handleMessage = (event: MessageEvent<unknown>) => {
@@ -34,55 +86,79 @@ export class FPCCProtocolBase implements FPCCProtocol {
3486
const fpCCmsg = validateFPCCMessage(event.data);
3587
// console.log("IframeFPCCProtocol handleMessage called", event.data, fpCCmsg.success);
3688
if (fpCCmsg.success) {
37-
this.handleFPCCMessage(fpCCmsg.data, event);
89+
this.onFPCCMessage.invoke(fpCCmsg.data, event);
3890
} else {
3991
this.logger.Warn().Err(fpCCmsg.error).Any("event", event).Msg("Received non-FPCC message");
4092
}
4193
};
4294

43-
onFPCCMessage(callback: (msg: FPCCMessage, srcEvent: MessageEvent<unknown>) => boolean | undefined): void {
44-
this.#fpccMessageHandlers.push(callback);
45-
}
46-
47-
handleFPCCMessage = (event: FPCCMessage, srcEvent: MessageEvent<unknown>) => {
48-
// allow handlers to process the message first and abort further processing
49-
if (this.#fpccMessageHandlers.map((handler) => handler(event, srcEvent)).some((handled) => handled)) {
50-
return;
51-
}
95+
#handleFPCCMessage(event: FPCCMessage, srcEvent: MessageEvent<unknown>) {
5296
this.logger.Debug().Any("event", event).Msg("Handling FPCC message");
5397
switch (true) {
98+
99+
case isFPCCEvtNeedsLogin(event): {
100+
this.onFPCCEvtNeedsLogin.invoke(event, srcEvent);
101+
break;
102+
}
103+
104+
case isFPCCError(event): {
105+
this.onFPCCError.invoke(event, srcEvent);
106+
break;
107+
}
108+
109+
case isFPCCReqRegisterLocalDbName(event): {
110+
this.onFPCCReqRegisterLocalDbName.invoke(event, srcEvent);
111+
break;
112+
}
113+
114+
case isFPCCEvtApp(event): {
115+
this.onFPCCEvtApp.invoke(event, srcEvent);
116+
break;
117+
}
118+
54119
case isFPCCPing(event): {
55-
const pong: FPCCSendMessage<FPCCPong> = {
56-
type: "FPCCPong",
57-
dst: event.src,
58-
pingTid: event.tid,
59-
timestamp: Date.now(),
60-
};
61-
this.sendMessage<FPCCPong>(pong, srcEvent);
120+
this.onFPCCPing.invoke(event, srcEvent);
121+
break;
122+
}
123+
124+
case isFPCCPong(event): {
125+
this.onFPCCPong.invoke(event, srcEvent);
126+
break;
127+
}
128+
129+
case isFPCCEvtConnectorReady(event): {
130+
this.onFPCCEvtConnectorReady.invoke(event, srcEvent);
131+
break;
132+
}
133+
134+
case isFPCCReqWaitConnectorReady(event): {
135+
this.onFPCCReqWaitConnectorReady.invoke(event, srcEvent);
62136
break;
63137
}
138+
64139
}
65-
};
140+
}
66141

67142
handleError = (_error: unknown) => {
68143
throw new Error("Method not implemented.");
69144
};
70145

71146
ready(): Promise<FPCCProtocol> {
147+
72148
return Promise.resolve(this);
73149
}
74150

75-
injectSend(sendFn: (msg: FPCCMessage, srcEvent: MessageEvent<unknown>) => FPCCMessage): void {
151+
injectSend(sendFn: (msg: FPCCMessage, srcEvent: MessageEvent<unknown> | string) => FPCCMessage): void {
76152
this.#sendFn = sendFn;
77153
}
78154

79155
stop(): void {
80156
this.#sendFn = undefined;
81-
this.#fpccMessageHandlers.splice(0, this.#fpccMessageHandlers.length);
157+
this.onFPCCMessage.clear();
82158
this.onStartFns.splice(0, this.onStartFns.length);
83159
}
84160

85-
sendMessage<T extends FPCCMsgBase>(msg: FPCCSendMessage<T>, srcEvent: MessageEvent<unknown>): T {
161+
sendMessage<T extends FPCCMsgBase>(msg: FPCCSendMessage<T>, srcEvent: MessageEvent<unknown> | string): T {
86162
if (!this.#sendFn) {
87163
throw new Error("Protocol not started. Call start() before sending messages.");
88164
}

0 commit comments

Comments
 (0)