import { VesselMessage } from "@opensea/vessel" import { PromptMfaPayload } from "@opensea/wallet-messages" import { MfaMethod, eventEmitter } from "./base" const handleMfaRequired = (mfaMethods: MfaMethod[], onComplete: () => void) => { eventEmitter.emit("mfa-required", mfaMethods, onComplete) } const isPromptMfaMessage = (payload: unknown): payload is PromptMfaPayload => !!payload && typeof payload === "object" && "type" in payload && payload.type === "action" && "action" in payload && payload.action === "PromptMfa" export const mfaListener = ( message: VesselMessage, reply: (response: unknown) => void, ): boolean => { if (isPromptMfaMessage(message.payload)) { handleMfaRequired(message.payload.mfaMethods, () => reply({ success: true }), ) return true } return false } export const onMfaRequired = ( callback: (mfaMethods: MfaMethod[], onComplete: () => void) => unknown, ): (() => void) => { eventEmitter.addListener("mfa-required", callback) return () => eventEmitter.removeListener("mfa-required", callback) }