import WalletConnect from "@perawallet/walletconnect"; import { PeraWalletArbitraryData, PeraWalletArc60SignData, PeraWalletArc60SignDataResponse, SignerTransaction, SignMetadata } from "./util/model/peraWalletModels"; import { AlgorandChainIDs } from "./util/peraWalletTypes"; import { ConnectOptions } from "./transport/WalletTransport"; interface PeraWalletConnectOptions { bridge?: string; shouldShowSignTxnToast?: boolean; chainId?: AlgorandChainIDs; compactMode?: boolean; singleAccount?: boolean; shouldPreferExtension?: boolean; /** * Enables experimental features — currently ARC-0027 browser-extension * support (extension detection on `connect()`, the extension option in the * connect modal and the extension transport). Off by default and subject to * change. */ experimental?: boolean; } declare class PeraWalletConnect { bridge: string; connector: WalletConnect | null; shouldShowSignTxnToast: boolean; isInWebview: boolean; chainId?: AlgorandChainIDs; compactMode?: boolean; singleAccount?: boolean; shouldPreferExtension: boolean; private isExperimentalEnabled; private arc0027Client; private extensionTransport; private algodClients; private _configPromise; private _webviewCheckPromise; constructor(options?: PeraWalletConnectOptions); get platform(): import("./util/peraWalletTypes").PeraWalletPlatformType; isExtensionAvailable(): Promise; get isConnected(): boolean; get isPeraDiscoverBrowser(): boolean; private checkIsInWebview; connect(options?: ConnectOptions): Promise; reconnectSession(): Promise; disconnect(): Promise; verifySignature(data: Uint8Array, signature: Uint8Array, signerAddress: string): boolean; verifyArc60Signature(data: Uint8Array, authenticatorData: Uint8Array, signature: Uint8Array, signerAddress: string): Promise; private checkIsPeraDiscoverBrowser; private getAlgodClient; private getAccountAuthAddr; private getTransport; signTransaction(txGroups: SignerTransaction[][], signerAddress?: string): Promise; signData(data: PeraWalletArbitraryData[], signer: string, verifySignature?: boolean): Promise; /** * Sign an ARC-60 payload (e.g. an auth request). * * Sends `algo_signData` with a single object as `params` so the Pera mobile * wallet routes it to the ARC-60 handler instead of the legacy * arbitrary-data handler. The signature returned is * `ed25519(sha256(data) || sha256(authenticatorData))` per ARC-60, not a * raw signature over `data`. * * Resolves with the full ARC-60 `SignDataResponse` shape (signed payload, * signer public key, domain, authenticatorData and signature) so responses * are interchangeable with use-wallet / lute-connect. * * Mirrors ARC-60's `signData(signingData, metadata)` signature: `payload` * is the spec's `StdSigData` and `metadata` (scope + encoding) is passed * separately; the two are unified into one object on the wire. * * `payload.domain` MUST match the dApp's page origin (SIWA origin binding) * on every transport. Connect pre-validates this and throws * `SIGN_DATA_DOMAIN_MISMATCH` before contacting the wallet; the extension * additionally enforces the same rule independently. */ /** * SIWA origin binding: reject early on every transport when the requested * domain does not match the page origin. This is a client-side guard for * honest integrations — the extension enforces the rule independently. */ private assertArc60DomainMatchesOrigin; signArc60Data(payload: PeraWalletArc60SignData, metadata: SignMetadata, verifySignature?: boolean): Promise; } export default PeraWalletConnect;