From ab88eb017f51b73d8e87091df1723384de70002c Mon Sep 17 00:00:00 2001 From: Tomek Marciniak Date: Sat, 9 Nov 2024 11:00:57 +0100 Subject: [PATCH] feat(extension): add contract to showUserPrompt --- apps/extension/src/sandbox/index.ts | 24 ++++-- bun.lockb | Bin 558856 -> 559168 bytes packages/features/package.json | 2 +- .../web-connector/routes/web-connector.tsx | 75 ++++++++++++++++-- .../src/web-connector/views/web-connector.tsx | 24 ------ .../src/mina-network/mina-provider.ts | 2 + packages/web-provider/src/utils/prompts.ts | 3 + 7 files changed, 92 insertions(+), 38 deletions(-) diff --git a/apps/extension/src/sandbox/index.ts b/apps/extension/src/sandbox/index.ts index e578a426..e62a6518 100644 --- a/apps/extension/src/sandbox/index.ts +++ b/apps/extension/src/sandbox/index.ts @@ -1,11 +1,25 @@ import { Add } from "@palladco/contracts" import { match } from "ts-pattern" +import { z } from "zod" + +const EventTypeSchema = z.enum(["run"]) +const ContractTypeSchema = z.enum(["add"]) window.addEventListener("message", async (event) => { - return match(event.data.type) - .with("compile", async () => { - await Add.compile() - window.parent.postMessage({ type: "compiled" }, "*") + // Can also read: payload, form + console.log(event.data) + console.log(event.data.userInput) + const type = EventTypeSchema.parse(event.data.type) + const contract = ContractTypeSchema.parse(event.data.contract) + return match(type) + .with("run", async () => { + return match(contract).with("add", async () => { + await Add.compile() + window.parent.postMessage( + { type: "compiled", result: "test", userInput: event.data.userInput }, + "*", + ) + }) }) - .run() + .exhaustive() }) diff --git a/bun.lockb b/bun.lockb index 3bc627a35ad386558fb104bbf17055915e8825e6..8b66a88b2854b2efc69f21c155203c0489262da1 100755 GIT binary patch delta 47158 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
tYlI;c!M$3rGJ4-r=*TkS`|D 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 delta 46962 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 diff --git a/packages/features/package.json b/packages/features/package.json index 44a8268f..29641716 100644 --- a/packages/features/package.json +++ b/packages/features/package.json @@ -69,7 +69,7 @@ "webext-bridge": "6.0.1", "webextension-polyfill": "0.12.0", "xss": "1.0.15", - "yaml": "2.5.0", + "yaml": "2.6.0", "zustand": "4.5.4" }, "devDependencies": { diff --git a/packages/features/src/web-connector/routes/web-connector.tsx b/packages/features/src/web-connector/routes/web-connector.tsx index 6d1dc230..0d6ff927 100644 --- a/packages/features/src/web-connector/routes/web-connector.tsx +++ b/packages/features/src/web-connector/routes/web-connector.tsx @@ -1,3 +1,4 @@ +import type { Json } from "@mina-js/utils" import { useEffect, useState } from "react" import type { SubmitHandler } from "react-hook-form" import { MemoryRouter } from "react-router-dom" @@ -14,36 +15,78 @@ const sanitizePayload = async (payload: string) => { return xss(yamlPayload) } +const sendSandboxMessage = (payload: Json) => { + const sandbox = document.querySelector( + "#o1sandbox", + ) as HTMLIFrameElement | null + if (!sandbox) return + return sandbox.contentWindow?.postMessage(payload, "*") +} + type ActionRequest = { title: string submitButtonLabel?: string rejectButtonLabel?: string payload: string inputType: "text" | "password" | "confirmation" - loading: boolean + contract: string | undefined emitConnected: boolean } export const WebConnectorRoute = () => { + const [loading, setLoading] = useState(true) const [request, setRequest] = useState({ title: "", payload: "", inputType: "confirmation", - loading: true, + contract: undefined, emitConnected: false, }) - const onSubmit: SubmitHandler = async ({ userInput }) => { + const startSubmitting: SubmitHandler = async ({ + userInput, + }) => { + if (!request.contract) return onSubmit({ userInput }) + setLoading(true) + try { + return sendSandboxMessage({ + type: "run", + contract: request.contract, + payload: request.payload, + userInput, + }) + } finally { + setLoading(false) + } + } + const onSubmit: SubmitHandler< + UserInputForm & { contractResult?: Json } + > = async ({ userInput, contractResult }) => { const { id } = await windows.getCurrent() await runtime.sendMessage({ userInput, + contractResult, windowId: id, }) window.close() } - const confirm = async () => { + const startConfirming = async () => { + if (!request.contract) return confirm({}) + setLoading(true) + try { + return sendSandboxMessage({ + type: "run", + contract: request.contract, + payload: request.payload, + }) + } finally { + setLoading(false) + } + } + const confirm = async ({ contractResult }: { contractResult?: Json }) => { const { id } = await windows.getCurrent() await runtime.sendMessage({ userConfirmed: true, + contractResult, windowId: id, }) if (request.emitConnected) { @@ -67,6 +110,21 @@ export const WebConnectorRoute = () => { }) window.close() } + const eventListener = (event: MessageEvent) => { + if (request.inputType === "confirmation") + return confirm({ contractResult: event.data.result }) + return onSubmit({ + userInput: event.data.userInput, + contractResult: event.data.result, + }) + } + // biome-ignore lint/correctness/useExhaustiveDependencies: wontdo + useEffect(() => { + window.addEventListener("message", eventListener) + return () => { + window.removeEventListener("message", eventListener) + } + }, []) useEffect(() => { runtime.onMessage.addListener(async (message) => { if (message.type === "action_request") { @@ -75,10 +133,11 @@ export const WebConnectorRoute = () => { submitButtonLabel: message.params.submitButtonLabel, rejectButtonLabel: message.params.rejectButtonLabel, payload: await sanitizePayload(message.params.payload), + contract: message.params.contract, inputType: message.params.inputType, - loading: false, emitConnected: message.params.emitConnected, }) + setLoading(false) } }) }, []) @@ -86,15 +145,15 @@ export const WebConnectorRoute = () => { ) diff --git a/packages/features/src/web-connector/views/web-connector.tsx b/packages/features/src/web-connector/views/web-connector.tsx index 38dc2bb3..8e94110c 100644 --- a/packages/features/src/web-connector/views/web-connector.tsx +++ b/packages/features/src/web-connector/views/web-connector.tsx @@ -1,7 +1,6 @@ import { AppLayout } from "@/components/app-layout" import { MenuBar } from "@/components/menu-bar" import { Skeleton } from "@/components/skeleton" -import { useEffect } from "react" import type { SubmitHandler } from "react-hook-form" import { ConfirmationForm } from "../components/confirmation-form" import { InputForm } from "../components/input-form" @@ -20,10 +19,6 @@ type WebConnectorViewProps = { loading: boolean } -const eventListener = (event: MessageEvent) => { - console.log(">>>P_EVENT", event.data) -} - export const WebConnectorView = ({ title, payload, @@ -40,29 +35,10 @@ export const WebConnectorView = ({ onReject() onDecline() } - const compileAdd = async () => { - const sandbox = document.querySelector( - "#o1sandbox", - ) as HTMLIFrameElement | null - if (!sandbox) return - sandbox.contentWindow?.postMessage( - { type: "compile", payload: payload }, - "*", - ) - } - useEffect(() => { - window.addEventListener("message", eventListener) - return () => { - window.removeEventListener("message", eventListener) - } - }, []) return (
-
diff --git a/packages/web-provider/src/mina-network/mina-provider.ts b/packages/web-provider/src/mina-network/mina-provider.ts index e5d25a2c..9e3c82f9 100644 --- a/packages/web-provider/src/mina-network/mina-provider.ts +++ b/packages/web-provider/src/mina-network/mina-provider.ts @@ -183,6 +183,8 @@ export const createMinaProvider = async (): Promise< async (signatureRequest) => { const passphrase = await showUserPrompt({ inputType: "password", + // TODO: Testing only + contract: "add", metadata: { title: "Signature request", payload: JSON.stringify(signatureRequest.params), diff --git a/packages/web-provider/src/utils/prompts.ts b/packages/web-provider/src/utils/prompts.ts index 107f30ea..428b5d98 100644 --- a/packages/web-provider/src/utils/prompts.ts +++ b/packages/web-provider/src/utils/prompts.ts @@ -9,10 +9,12 @@ type Metadata = { export const showUserPrompt = async ({ inputType, metadata, + contract, emitConnected = false, }: { inputType: InputType metadata: Metadata + contract?: string emitConnected?: boolean }): Promise => { return new Promise((resolve, reject) => { @@ -53,6 +55,7 @@ export const showUserPrompt = async ({ rejectButtonLabel: metadata.rejectButtonLabel, payload: metadata.payload ?? "{}", inputType, + contract, emitConnected, }, })