import {WalletTransport} from "./WalletTransport"; import { PeraWalletArbitraryData, PeraWalletArc60SignData, PeraWalletArc60SignDataResponse, SignMetadata, PeraWalletTransaction } from "../util/model/peraWalletModels"; import {AlgorandChainIDs} from "../util/peraWalletTypes"; import {runWebSignTransactionFlow} from "../util/sign/signTransactionFlow"; export interface WebTransportDeps { getWebWalletURL: () => Promise; } export class WebTransport implements WalletTransport { readonly platform = "web" as const; private deps: WebTransportDeps; constructor(deps: WebTransportDeps) { this.deps = deps; } async signTransaction( signTxnRequestParams: PeraWalletTransaction[] ): Promise { const webWalletURL = await this.deps.getWebWalletURL(); return new Promise((resolve, reject) => runWebSignTransactionFlow({ signTxnRequestParams, webWalletURL, method: "SIGN_TXN", resolve, reject }) ); } async signData( data: PeraWalletArbitraryData[], signer: string, chainId: AlgorandChainIDs ): Promise { const webWalletURL = await this.deps.getWebWalletURL(); return new Promise((resolve, reject) => runWebSignTransactionFlow({ method: "SIGN_DATA", signTxnRequestParams: data, signer, chainId, webWalletURL, resolve, reject }) ); } signArc60Data( _payload: PeraWalletArc60SignData, _metadata: SignMetadata ): Promise { return Promise.reject( new Error( "ARC-60 signing is currently only supported via the Pera mobile wallet or the Pera extension." ) ); } }