import type { BrowserContext, Page } from "@playwright/test"; import { ActionOptions, BaseActionType, BaseWallet } from "../BaseWallet"; import { CoinbaseConfig } from "../types"; import { PasskeyAuthenticator, WebAuthnCredential } from "./PasskeyAuthenticator"; import { HomePage, NotificationPage, OnboardingPage } from "./pages"; export declare enum CoinbaseSpecificActionType { LOCK = "lock", UNLOCK = "unlock", ADD_TOKEN = "addToken", ADD_ACCOUNT = "addAccount", SWITCH_ACCOUNT = "switchAccount", ADD_NETWORK = "addNetwork", SEND_TOKENS = "sendTokens", HANDLE_PASSKEY_POPUP = "handlePasskeyPopup", ADD_WALLET_WITH_PRIVATE_KEY = "addWalletWithPrivateKey" } type CoinbaseActionType = BaseActionType | CoinbaseSpecificActionType; export type PasskeyConfig = { name: string; rpId: string; rpName: string; userId: string; isUserVerified?: boolean; }; export declare class CoinbaseWallet extends BaseWallet { private readonly context; private readonly extensionId?; readonly config: CoinbaseConfig; private readonly page; readonly onboardingPage: OnboardingPage; readonly homePage: HomePage; readonly notificationPage: NotificationPage; passkeyAuthenticator: PasskeyAuthenticator | null; passkeyCredentials: WebAuthnCredential[]; get authenticator(): PasskeyAuthenticator | null; constructor(walletConfig: CoinbaseConfig, context: BrowserContext, page: Page, extensionId?: string); static initialize(currentContext: BrowserContext, contextPath: string, _walletConfig: CoinbaseConfig): Promise<{ coinbasePage: Page; coinbaseContext: BrowserContext; }>; static createContext(contextPath: string, slowMo?: number): Promise; /** * Handle a passkey popup for registration or authentication. * For registration, receives the main page and the first popup, clicks the switch link, waits for the second popup, and registers there. * For approve, receives the transaction popup directly. * @param mainPage The Playwright Page for the main dapp (only needed for registration) * @param popup The Playwright Page for the popup (first popup for registration, transaction popup for approve) * @param action 'register' or 'approve' * @param config PasskeyConfig (required for 'register') */ handlePasskeyPopup(mainPageOrPopup: Page, popup: Page, action: "registerWithCBExtension" | "registerWithSmartWalletSDK" | "signMessage" | "approve" | "grantSpendPermission" | "signIn" | "signInWithCBExtension", config?: PasskeyConfig): Promise; handleAction(action: CoinbaseActionType, options?: ActionOptions): Promise; get walletContext(): BrowserContext; get walletPage(): Page; get walletExtensionId(): string | undefined; } export * from "./fixtures";