@fastnear/wallet-adapter
Version:
Wallet adapter implementations for Meteor Wallet and Near Mobile
179 lines (174 loc) • 6.32 kB
text/typescript
type WalletNetwork = "mainnet" | "testnet";
interface WalletAccount {
accountId: string;
publicKey: string;
}
interface ConnectorActionLike {
type: string;
params?: Record<string, any>;
}
interface SignInParams {
network: WalletNetwork;
contractId?: string;
methodNames?: string[];
allowance?: string;
}
interface SignOutParams {
network: WalletNetwork;
}
interface GetAccountsParams {
network: WalletNetwork;
}
interface SignMessageParams {
network: WalletNetwork;
message: string;
nonce: number[];
recipient: string;
callbackUrl?: string;
state?: string;
accountId?: string;
}
interface SignAndSendTransactionParams {
network: WalletNetwork;
signerId?: string;
receiverId: string;
actions: ConnectorActionLike[];
}
interface SignAndSendTransactionsParams {
network: WalletNetwork;
signerId?: string;
transactions: Array<{
receiverId: string;
actions: ConnectorActionLike[];
signerId?: string;
}>;
}
interface WalletAdapter {
signIn(params: SignInParams): Promise<WalletAccount[]>;
signOut(params: SignOutParams): Promise<void>;
getAccounts(params: GetAccountsParams): Promise<WalletAccount[]>;
signMessage(params: SignMessageParams): Promise<{
accountId: string;
publicKey: string;
signature: string;
state?: string;
}>;
signAndSendTransaction(params: SignAndSendTransactionParams): Promise<any>;
signAndSendTransactions(params: SignAndSendTransactionsParams): Promise<any[]>;
}
interface AdapterStorage {
get(key: string): Promise<string | null | undefined> | string | null | undefined;
set(key: string, value: string): Promise<void> | void;
remove(key: string): Promise<void> | void;
}
interface PopupWindowLike {
close?: () => void;
focus?: () => void;
postMessage?: (message: any, targetOrigin?: string) => void;
closed?: boolean;
windowIdPromise?: Promise<string | null>;
}
interface MeteorExtensionBridge {
addMessageDataListener: (listener: (data: any) => void) => void;
sendMessageData: (data: any) => void;
}
interface MeteorAdapterOptions {
walletBaseUrl?: string;
appKeyPrefix?: string;
getLocation?: () => string;
storage?: AdapterStorage;
getNetworkProviders?: (network: WalletNetwork) => string[];
openWindow?: (url: string, name?: string, features?: string) => PopupWindowLike | null | undefined;
getExtensionBridge?: () => MeteorExtensionBridge | undefined;
}
interface NearMobileMetadata {
name: string;
logoUrl: string;
url?: string;
}
interface NearMobileRequestPayload {
id: string;
kind: "request" | "message";
network: WalletNetwork;
requestUrl: string;
request: unknown;
close: () => Promise<void>;
}
interface NearMobileAdapterOptions {
signerBackendUrl?: string;
nearMobileWalletUrl?: string;
storage?: AdapterStorage;
metadata?: NearMobileMetadata;
getNetworkProviders?: (network: WalletNetwork) => string[];
onRequested?: (payload: NearMobileRequestPayload) => void;
onApproved?: () => void;
onSuccess?: () => void;
onError?: (error?: Error) => void;
fetcher?: typeof fetch;
polling?: {
delayMs?: number;
maxIterations?: number;
requestTimeoutMs?: number;
backgroundVisibilityCheckIntervalMs?: number;
backgroundVisibilityCheckTimeoutMs?: number;
};
}
declare const createMeteorAdapter: (options?: MeteorAdapterOptions) => {
signIn: ({ network, contractId, methodNames }: SignInParams) => Promise<WalletAccount[]>;
signOut: ({ network }: {
network: WalletNetwork;
}) => Promise<void>;
getAccounts: ({ network }: {
network: WalletNetwork;
}) => Promise<WalletAccount[]>;
verifyOwner: ({ network, message, accountId }: {
network: WalletNetwork;
message: string;
accountId?: string;
}) => Promise<unknown>;
signMessage: ({ network, message, nonce, recipient, callbackUrl, state, accountId, }: SignMessageParams) => Promise<{
accountId: string;
publicKey: string;
signature: string;
state?: string;
}>;
signAndSendTransaction: ({ network, signerId, receiverId, actions, }: SignAndSendTransactionParams) => Promise<any>;
signAndSendTransactions: ({ network, signerId, transactions, }: SignAndSendTransactionsParams) => Promise<any[]>;
};
declare const createNearMobileAdapter: (options?: NearMobileAdapterOptions) => {
signIn(params: SignInParams): Promise<WalletAccount[]>;
signOut({ network }: {
network: WalletNetwork;
}): Promise<void>;
getAccounts({ network }: {
network: WalletNetwork;
}): Promise<WalletAccount[]>;
signMessage(params: SignMessageParams): Promise<{
accountId: string;
publicKey: string;
signature: string;
}>;
signAndSendTransaction(params: SignAndSendTransactionParams): Promise<any>;
signAndSendTransactions(params: SignAndSendTransactionsParams): Promise<any[]>;
};
declare class TransportError extends Error {
readonly code: string;
readonly cause?: unknown;
readonly details?: unknown;
constructor(code: string, message: string, options?: {
cause?: unknown;
details?: unknown;
});
}
declare class UserRejectedError extends Error {
readonly code: string;
readonly cause?: unknown;
readonly details?: unknown;
constructor(code: string, message: string, options?: {
cause?: unknown;
details?: unknown;
});
}
declare const isUserRejectedError: (error: unknown) => error is UserRejectedError;
declare const isTransportError: (error: unknown) => error is TransportError;
export { type AdapterStorage, type ConnectorActionLike, type GetAccountsParams, type MeteorAdapterOptions, type MeteorExtensionBridge, type NearMobileAdapterOptions, type NearMobileMetadata, type NearMobileRequestPayload, type PopupWindowLike, type SignAndSendTransactionParams, type SignAndSendTransactionsParams, type SignInParams, type SignMessageParams, type SignOutParams, TransportError, UserRejectedError, type WalletAccount, type WalletAdapter, type WalletNetwork, createMeteorAdapter, createNearMobileAdapter, isTransportError, isUserRejectedError };