import { toLegacyAccount } from "./utils"; export interface Account { publicKey: string[]; address: string; authKey: string; minKeysRequired: number; } export interface LegacyAccount { address: string, publicKey: string, } export type Option = Partial<{ max_gas_amount: string | bigint, gas_unit_price: string | bigint, expiration_timestamp_secs: string | bigint, sequence_number: string | bigint, sender: string, }>; type Array = T[]; type Base = string | number | BigInt | Uint8Array | boolean; type Arg = T | Array; type Args = Array>; export type Payload = { function: string, type_arguments: string[], arguments: Args, } | Uint8Array; export interface WalletAPI { connect(): Promise, disconnect(): Promise, isConnected(): Promise, network(): Promise, account(): Promise, chainId(): Promise, signAndSubmit(payload: Payload, option?: Option): Promise, signTransaction(payload: Payload, option?: Option): Promise, signMessage(message: string | Uint8Array): Promise, } export enum WalletEvent { ChangeAccount = 'ChangeAccountEvent', ChangeNetwork = 'ChangeNetworkEvent', } export enum WalletRPC { connect = 'connect', disconnect = 'disconnect', isConnected = 'isConnected', network = 'network', account = 'account', chainId = 'chainId', signAndSubmit = 'signAndSubmit', signTransaction = 'signTransaction', signMessage = 'signMessage', } // LegacyWalletAPI is the adapted version of walletAPI. // It allows backward compatibility with legacy clients with account format `LegacyAccount` interface LegacyWalletAPI { connect(): Promise, disconnect(): Promise, isConnected(): Promise, network(): Promise, account(): Promise, chainId(): Promise, signAndSubmit(payload: Payload, option?: Option): Promise, signTransaction(payload: Payload, option?: Option): Promise, signMessage(message: string | Uint8Array): Promise, } export function adaptLegacyAccount(methods: WalletAPI): LegacyWalletAPI { // Adapt legacy account return { connect(): Promise { return methods.connect().then(account => toLegacyAccount(account)); }, disconnect(): Promise { return methods.disconnect(); }, isConnected(): Promise { return methods.isConnected(); }, network(): Promise { return methods.network(); }, account(): Promise { return methods.account().then(account => toLegacyAccount(account)); }, chainId(): Promise { return methods.chainId(); }, signAndSubmit(payload: Payload, option?: Option): Promise { return methods.signAndSubmit(payload, option); }, signTransaction(payload: Payload, option?: Option): Promise { return methods.signTransaction(payload, option); }, signMessage(message: string | Uint8Array): Promise { return methods.signMessage(message); } }; }