Changes
1 changed files (+12/-70)
-
-
@@ -6,6 +6,7 @@ import { createConnectTransport } from "@connectrpc/connect-web";import { MetaService } from "@yamori/proto/yamori/meta/v1/meta_service_pb.js"; import { WorkspaceService } from "@yamori/proto/yamori/workspace/v2/workspace_service_pb.js"; import { ConnectTransportProvider, ProtoRPCProvider, type ProtoRPC, ThemeProvider,
-
@@ -26,6 +27,10 @@ }const worker = new Worker(new URL("./worker/main.ts", import.meta.url), { type: "module", }); const transport = createConnectTransport({ baseUrl: "/api", }); const root = createRoot(document.body);
-
@@ -64,77 +69,14 @@root.render( <ThirdPartyNoticeProvider text={readThirdPartyNotice}> <HistoryAPIRouterProvider> <ProtoRPCProvider rpc={rpc}> <ThemeProvider className={css.theme}> <Page /> </ThemeProvider> </ProtoRPCProvider> <ConnectTransportProvider transport={transport}> <ProtoRPCProvider rpc={rpc}> <ThemeProvider className={css.theme}> <Page /> </ThemeProvider> </ProtoRPCProvider> </ConnectTransportProvider> </HistoryAPIRouterProvider> </ThirdPartyNoticeProvider>, ); }); const backend = new Worker(new URL("./worker/backend.ts", import.meta.url), { type: "module", }); const http = createConnectTransport({ baseUrl: "/api", }); const transport = createConnectTransport({ baseUrl: "/", useBinaryFormat: true, fetch(request, opts) { const id = crypto.randomUUID(); backend.postMessage( { id, input: request, options: { headers: Object.fromEntries(new Headers(opts?.headers).entries()), method: opts?.method, body: opts?.body, }, }, { transfer: [(opts?.body as Uint8Array).buffer], }, ); return new Promise((resolve) => { const handler = (event: MessageEvent) => { if (event.data.id !== id) { return; } const body = event.data.body as ArrayBuffer; const headers = event.data.headers as Record<string, string>; console.log(event.data); resolve(new Response(body, { headers })); backend.removeEventListener("message", handler); }; backend.addEventListener("message", handler); }); }, }); const client = createClient(MetaService, transport); client.ping({}).then((pong) => { console.log(pong); }); const workspace = createClient(WorkspaceService, http); workspace .login({ name: "Alice", password: "Alice", }) .then((res) => { console.log(res); });
-