Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1,4 +1 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

bun run lint
2 changes: 1 addition & 1 deletion apps/extension/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
"@palladco/web-provider": "workspace:*",
"@plasmohq/messaging": "0.7.1",
"buffer": "6.0.3",
"mina-attestations": "0.4.3",
"mina-attestations": "0.5.2",
"mitt": "3.0.1",
"next-themes": "0.4.6",
"o1js": "2.3.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,6 @@ const RequestWithContext = z
})
.strict()

const PublicKeySchema = z.string().length(55).startsWith("B62")

const MinaScanNetwork = z.enum(["devnet", "mainnet"])

const zkAppAccountSchema = z.object({
address: PublicKeySchema,
tokenId: z.string(),
network: MinaScanNetwork,
})

export const StorePrivateCredentialRequestParamsSchema =
RequestWithContext.extend({
method: z.literal("mina_storePrivateCredential"),
Expand All @@ -33,7 +23,6 @@ export const PresentationRequestParamsSchema = RequestWithContext.extend({
.object({
presentationRequest:
PresentationRequestSchema as unknown as z.ZodType<any>,
zkAppAccount: zkAppAccountSchema.optional(),
})
.strict(),
),
Expand Down
33 changes: 12 additions & 21 deletions apps/extension/src/sandbox/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,24 +33,21 @@ type Result = {
type PresentationRequestPayload = {
presentationRequest: PresentationRequest
selectedCredentials: string[]
verifierIdentity:
| string
| {
address: string
tokenId: string
network: "devnet" | "mainnet"
}
origin: string
}

let presentationSignaturePromise: {
resolve: (value: any) => void
reject: (reason: any) => void
} | null = null

// TODO can we get this from an environment variable?
const IS_DEV = false

window.addEventListener("message", async (event) => {
const allowedOrigin = "chrome-extension://bboennpbcdmjdgmbggdlemijpijnaflh"
if (event.origin !== allowedOrigin) {
throw new Error("Invalid origin")
if (event.origin !== allowedOrigin && !IS_DEV) {
throw new Error(`Invalid origin ${event.origin}`)
}
const message = MessageSchema.parse(event.data)

Expand Down Expand Up @@ -103,11 +100,8 @@ window.addEventListener("message", async (event) => {
payload,
) as PresentationRequestPayload

const {
presentationRequest,
selectedCredentials,
verifierIdentity,
} = parsedPayload
const { presentationRequest, selectedCredentials, origin } =
parsedPayload

const stringifiedPresentationRequest =
JSON.stringify(presentationRequest)
Expand All @@ -127,19 +121,16 @@ window.addEventListener("message", async (event) => {
stringifiedPresentationRequest,
)

// format verifierIdentity
const verifierIdentityString =
presentationRequest.type === "zk-app"
? JSON.stringify(verifierIdentity)
: (verifierIdentity as string)

// TODO: cache compiled presentation request?

// prepare presentation request and get fields to sign
const prepared = await Presentation.prepare({
request: deserialized,
credentials: storedCredentials,
context: { verifierIdentity: verifierIdentityString },
context:
presentationRequest.type === "https"
? { verifierIdentity: origin }
: undefined,
})

// ask wallet to sign fields
Expand Down
11 changes: 3 additions & 8 deletions packages/features/src/web-connector/utils/render-payload.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,11 @@ const handleRenderError = (error: Error) => {
const containsPresentationRequest = (
value: unknown,
): value is {
origin: string
presentationRequest: PresentationRequestJSON
verifierIdentity:
| string
| { address: string; tokenId: string; network: "devnet" | "mainnet" }
} => {
if (typeof value !== "object" || value === null) return false
return "presentationRequest" in value
return "presentationRequest" in value && "origin" in value
}

const isCredential = (
Expand All @@ -45,10 +43,7 @@ export const renderPayload = (payload: string) => {
const request = parsedPayload.presentationRequest
const formatted = [
PrettyPrinter.printPresentationRequest(request),
PrettyPrinter.printVerifierIdentity(
request.type as any, // TODO
parsedPayload.verifierIdentity as string,
),
PrettyPrinter.printVerifierIdentity(request, parsedPayload.origin),
].join("\n")

return <div className="whitespace-pre-wrap break-all">{formatted}</div>
Expand Down
8 changes: 2 additions & 6 deletions packages/web-provider/src/mina-network/mina-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -468,10 +468,7 @@ export const createMinaProvider = async (): Promise<
const [request] = params
if (!request) throw createProviderRpcError(4000, "Invalid Request")

const { presentationRequest, zkAppAccount } = request

const verifierIdentity =
presentationRequest.type === "zk-app" ? zkAppAccount : origin
const { presentationRequest } = request

// Ask for approval to proceed with the presentation request
const { value: userConfirmed } = await showUserPrompt<boolean>({
Expand All @@ -481,7 +478,6 @@ export const createMinaProvider = async (): Promise<
payload: JSON.stringify({
origin,
presentationRequest,
verifierIdentity: verifierIdentity,
}),
},
})
Expand Down Expand Up @@ -523,7 +519,7 @@ export const createMinaProvider = async (): Promise<
metadata: {
title: "Create presentation",
payload: JSON.stringify({
verifierIdentity,
origin,
presentationRequest,
selectedCredentials: JSON.parse(selectedCredentials),
}),
Expand Down
Loading