From 4baf6de4729c3cf389376c892068ec065931b05b Mon Sep 17 00:00:00 2001 From: Vendicated Date: Sun, 6 Jul 2025 17:54:23 +0200 Subject: [PATCH] arrpc: fix link handling --- src/main/arrpc/index.ts | 20 +++++++------------- src/main/arrpc/types.ts | 3 ++- src/main/arrpc/worker.ts | 15 ++++++++++++++- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/main/arrpc/index.ts b/src/main/arrpc/index.ts index d5dd214..d4d663d 100644 --- a/src/main/arrpc/index.ts +++ b/src/main/arrpc/index.ts @@ -29,19 +29,19 @@ export async function initArRPC() { transferList: [workerPort] }); - hostPort.on("message", async (e: ArRpcEvent) => { - switch (e.type) { + hostPort.on("message", async ({ type, nonce, data }: ArRpcEvent) => { + switch (type) { case "activity": { - sendRendererCommand(IpcCommands.RPC_ACTIVITY, e.data); + sendRendererCommand(IpcCommands.RPC_ACTIVITY, data); break; } case "invite": { - const invite = String(e.data); + const invite = String(data); const response: ArRpcHostEvent = { type: "ack-invite", - nonce: e.nonce, + nonce, data: false }; @@ -56,19 +56,13 @@ export async function initArRPC() { } case "link": { - const link = String(e.data); - const response: ArRpcHostEvent = { type: "ack-link", - nonce: e.nonce, + nonce: nonce, data: false }; - if (!inviteCodeRegex.test(link)) { - return hostPort.postMessage(response); - } - - response.data = await sendRendererCommand(IpcCommands.RPC_DEEP_LINK, link).catch(() => false); + response.data = await sendRendererCommand(IpcCommands.RPC_DEEP_LINK, data).catch(() => false); hostPort.postMessage(response); break; diff --git a/src/main/arrpc/types.ts b/src/main/arrpc/types.ts index 51492ed..6e2c7ee 100644 --- a/src/main/arrpc/types.ts +++ b/src/main/arrpc/types.ts @@ -9,6 +9,7 @@ export type ArRpcHostEvent = ArRpcHostAckInviteEvent | ArRpcHostAckLinkEvent; export interface ArRpcActivityEvent { type: "activity"; + nonce: string; data: string; } @@ -21,7 +22,7 @@ export interface ArRpcInviteEvent { export interface ArRpcLinkEvent { type: "link"; nonce: string; - data: string; + data: any; } export interface ArRpcHostAckInviteEvent { diff --git a/src/main/arrpc/worker.ts b/src/main/arrpc/worker.ts index f994c43..4c2c778 100644 --- a/src/main/arrpc/worker.ts +++ b/src/main/arrpc/worker.ts @@ -26,7 +26,8 @@ const linkCallbacks = new Map(); server.on("activity", (data: any) => { const event: ArRpcEvent = { type: "activity", - data: JSON.stringify(data) + data: JSON.stringify(data), + nonce: randomUUID() }; workerPort.postMessage(event); }); @@ -43,6 +44,18 @@ const linkCallbacks = new Map(); workerPort.postMessage(event); }); + server.on("link", async (data: any, callback: LinkCallback) => { + const nonce = randomUUID(); + linkCallbacks.set(nonce, callback); + + const event: ArRpcEvent = { + type: "link", + data, + nonce + }; + workerPort.postMessage(event); + }); + workerPort.on("message", (e: ArRpcHostEvent) => { switch (e.type) { case "ack-invite": {