@0xsequence/provider 0.0.0-2021823181734
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +909 -0
- package/README.md +4 -0
- package/dist/0xsequence-provider.cjs.d.ts +1 -0
- package/dist/0xsequence-provider.cjs.dev.js +3540 -0
- package/dist/0xsequence-provider.cjs.js +7 -0
- package/dist/0xsequence-provider.cjs.prod.js +3540 -0
- package/dist/0xsequence-provider.esm.js +3508 -0
- package/dist/declarations/src/commands/index.d.ts +20 -0
- package/dist/declarations/src/index.d.ts +5 -0
- package/dist/declarations/src/provider.d.ts +59 -0
- package/dist/declarations/src/transports/base-provider-transport.d.ts +40 -0
- package/dist/declarations/src/transports/base-wallet-transport.d.ts +38 -0
- package/dist/declarations/src/transports/extension-transport/base-injected-transport.d.ts +18 -0
- package/dist/declarations/src/transports/extension-transport/extension-message-handler.d.ts +12 -0
- package/dist/declarations/src/transports/extension-transport/extension-message-provider.d.ts +11 -0
- package/dist/declarations/src/transports/extension-transport/index.d.ts +3 -0
- package/dist/declarations/src/transports/index.d.ts +7 -0
- package/dist/declarations/src/transports/mux-transport/index.d.ts +1 -0
- package/dist/declarations/src/transports/mux-transport/mux-message-provider.d.ts +22 -0
- package/dist/declarations/src/transports/proxy-transport/index.d.ts +3 -0
- package/dist/declarations/src/transports/proxy-transport/proxy-message-channel.d.ts +15 -0
- package/dist/declarations/src/transports/proxy-transport/proxy-message-handler.d.ts +12 -0
- package/dist/declarations/src/transports/proxy-transport/proxy-message-provider.d.ts +12 -0
- package/dist/declarations/src/transports/wallet-request-handler.d.ts +51 -0
- package/dist/declarations/src/transports/window-transport/index.d.ts +2 -0
- package/dist/declarations/src/transports/window-transport/window-message-handler.d.ts +15 -0
- package/dist/declarations/src/transports/window-transport/window-message-provider.d.ts +13 -0
- package/dist/declarations/src/types.d.ts +170 -0
- package/dist/declarations/src/utils.d.ts +14 -0
- package/dist/declarations/src/wallet.d.ts +99 -0
- package/package.json +37 -0
- package/src/commands/index.ts +146 -0
- package/src/index.ts +5 -0
- package/src/provider.ts +494 -0
- package/src/transports/base-provider-transport.ts +411 -0
- package/src/transports/base-wallet-transport.ts +441 -0
- package/src/transports/extension-transport/base-injected-transport.ts +100 -0
- package/src/transports/extension-transport/extension-message-handler.ts +25 -0
- package/src/transports/extension-transport/extension-message-provider.ts +41 -0
- package/src/transports/extension-transport/index.ts +3 -0
- package/src/transports/index.ts +7 -0
- package/src/transports/mux-transport/index.ts +1 -0
- package/src/transports/mux-transport/mux-message-provider.ts +160 -0
- package/src/transports/proxy-transport/index.ts +3 -0
- package/src/transports/proxy-transport/proxy-message-channel.ts +58 -0
- package/src/transports/proxy-transport/proxy-message-handler.ts +46 -0
- package/src/transports/proxy-transport/proxy-message-provider.ts +81 -0
- package/src/transports/wallet-request-handler.ts +702 -0
- package/src/transports/window-transport/index.ts +2 -0
- package/src/transports/window-transport/window-message-handler.ts +166 -0
- package/src/transports/window-transport/window-message-provider.ts +183 -0
- package/src/types.ts +252 -0
- package/src/utils.ts +76 -0
- package/src/wallet.ts +692 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BigNumberish, BytesLike } from 'ethers';
|
|
2
|
+
import { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer';
|
|
3
|
+
import { WalletContext, ChainIdLike } from '@0xsequence/network';
|
|
4
|
+
import { TypedData } from '@0xsequence/utils';
|
|
5
|
+
import { DecodedSignature, WalletConfig } from '@0xsequence/config';
|
|
6
|
+
import { Wallet } from '../wallet';
|
|
7
|
+
export declare class WalletCommands {
|
|
8
|
+
private wallet;
|
|
9
|
+
constructor(walletProvider: Wallet);
|
|
10
|
+
signMessage(message: BytesLike, chainId?: ChainIdLike, allSigners?: boolean): Promise<string>;
|
|
11
|
+
signAuthMessage(message: BytesLike, allSigners?: boolean): Promise<string>;
|
|
12
|
+
signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, message: Record<string, any>, chainId?: ChainIdLike, allSigners?: boolean): Promise<string>;
|
|
13
|
+
signAuthTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, message: Record<string, any>, allSigners?: boolean): Promise<string>;
|
|
14
|
+
isValidSignature(address: string, digest: Uint8Array, signature: string, chainId: number, walletContext?: WalletContext): Promise<boolean | undefined>;
|
|
15
|
+
isValidMessageSignature(address: string, message: string | Uint8Array, signature: string, chainId: number, walletContext?: WalletContext): Promise<boolean | undefined>;
|
|
16
|
+
isValidTypedDataSignature(address: string, typedData: TypedData, signature: string, chainId: number, walletContext?: WalletContext): Promise<boolean | undefined>;
|
|
17
|
+
recoverWalletConfig: (address: string, digest: BytesLike, signature: string | DecodedSignature, chainId: BigNumberish, walletContext?: any) => Promise<WalletConfig>;
|
|
18
|
+
recoverWalletConfigFromMessage: (address: string, message: string | Uint8Array, signature: string | DecodedSignature, chainId: BigNumberish, walletContext?: any) => Promise<WalletConfig>;
|
|
19
|
+
recoverWalletConfigFromTypedData: (address: string, typedData: TypedData, signature: string | DecodedSignature, chainId: BigNumberish, walletContext?: any) => Promise<WalletConfig>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ethers } from 'ethers';
|
|
2
|
+
import { BytesLike } from '@ethersproject/bytes';
|
|
3
|
+
import { Web3Provider as EthersWeb3Provider, JsonRpcProvider } from '@ethersproject/providers';
|
|
4
|
+
import { TypedDataDomain, TypedDataField, TypedDataSigner } from '@ethersproject/abstract-signer';
|
|
5
|
+
import { NetworkConfig, Networks, WalletContext, ChainIdLike, JsonRpcHandler, JsonRpcFetchFunc, JsonRpcRequest, JsonRpcResponseCallback, JsonRpcSender } from '@0xsequence/network';
|
|
6
|
+
import { Signer } from '@0xsequence/wallet';
|
|
7
|
+
import { WalletConfig, WalletState } from '@0xsequence/config';
|
|
8
|
+
import { Relayer } from '@0xsequence/relayer';
|
|
9
|
+
import { Deferrable } from '@0xsequence/utils';
|
|
10
|
+
import { Transaction, TransactionRequest, TransactionResponse, SignedTransactions } from '@0xsequence/transactions';
|
|
11
|
+
export declare class Web3Provider extends EthersWeb3Provider implements JsonRpcHandler {
|
|
12
|
+
static isSequenceProvider(cand: any): cand is Web3Provider;
|
|
13
|
+
readonly _sender: JsonRpcSender;
|
|
14
|
+
readonly _isSequenceProvider: boolean;
|
|
15
|
+
readonly _defaultChainId?: number;
|
|
16
|
+
constructor(provider: JsonRpcProvider | JsonRpcHandler | JsonRpcFetchFunc, defaultChainId?: ChainIdLike);
|
|
17
|
+
sendAsync(request: JsonRpcRequest, callback: JsonRpcResponseCallback | ((error: any, response: any) => void), chainId?: number): void;
|
|
18
|
+
send(method: string, params: Array<any>, chainId?: number): Promise<any>;
|
|
19
|
+
getSigner(): Web3Signer;
|
|
20
|
+
getChainId(): Promise<number>;
|
|
21
|
+
}
|
|
22
|
+
export declare function isSequenceProvider(provider: any): provider is Web3Provider;
|
|
23
|
+
export declare class LocalWeb3Provider extends Web3Provider {
|
|
24
|
+
constructor(signer: Signer, networks?: Networks);
|
|
25
|
+
}
|
|
26
|
+
export declare class Web3Signer extends Signer implements TypedDataSigner {
|
|
27
|
+
readonly provider: Web3Provider;
|
|
28
|
+
readonly defaultChainId?: number;
|
|
29
|
+
constructor(provider: Web3Provider, defaultChainId?: number);
|
|
30
|
+
_address: string;
|
|
31
|
+
_index: number;
|
|
32
|
+
_context: WalletContext;
|
|
33
|
+
_networks: NetworkConfig[];
|
|
34
|
+
private _providers;
|
|
35
|
+
getAddress(): Promise<string>;
|
|
36
|
+
signTransaction(transaction: Deferrable<TransactionRequest>): Promise<string>;
|
|
37
|
+
connect(provider: ethers.providers.Provider): ethers.providers.JsonRpcSigner;
|
|
38
|
+
getProvider(chainId?: number): Promise<Web3Provider | undefined>;
|
|
39
|
+
getSender(chainId?: number): Promise<Web3Provider | undefined>;
|
|
40
|
+
getRelayer(chainId?: number): Promise<Relayer | undefined>;
|
|
41
|
+
getWalletContext(): Promise<WalletContext>;
|
|
42
|
+
getWalletConfig(chainId?: ChainIdLike): Promise<WalletConfig[]>;
|
|
43
|
+
getWalletState(chainId?: ChainIdLike): Promise<WalletState[]>;
|
|
44
|
+
getNetworks(): Promise<NetworkConfig[]>;
|
|
45
|
+
getSigners(): Promise<string[]>;
|
|
46
|
+
signMessage(message: BytesLike, chainId?: ChainIdLike, allSigners?: boolean): Promise<string>;
|
|
47
|
+
signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, message: Record<string, any>, chainId?: ChainIdLike, allSigners?: boolean): Promise<string>;
|
|
48
|
+
sendTransaction(transaction: Deferrable<TransactionRequest>, chainId?: ChainIdLike, allSigners?: boolean): Promise<TransactionResponse>;
|
|
49
|
+
sendTransactionBatch(transactions: Deferrable<TransactionRequest[] | Transaction[]>, chainId?: ChainIdLike, allSigners?: boolean): Promise<TransactionResponse>;
|
|
50
|
+
signTransactions(transaction: Deferrable<TransactionRequest>, chainId?: ChainIdLike, allSigners?: boolean): Promise<SignedTransactions>;
|
|
51
|
+
sendSignedTransactions(signedTxs: SignedTransactions, chainId?: ChainIdLike): Promise<TransactionResponse>;
|
|
52
|
+
updateConfig(newConfig?: WalletConfig): Promise<[WalletConfig, TransactionResponse | undefined]>;
|
|
53
|
+
publishConfig(): Promise<TransactionResponse | undefined>;
|
|
54
|
+
isDeployed(chainId?: ChainIdLike): Promise<boolean>;
|
|
55
|
+
_signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, message: Record<string, any>, chainId?: ChainIdLike, allSigners?: boolean): Promise<string>;
|
|
56
|
+
sendUncheckedTransaction(transaction: Deferrable<TransactionRequest>, chainId?: ChainIdLike): Promise<string>;
|
|
57
|
+
connectUnchecked(): ethers.providers.JsonRpcSigner;
|
|
58
|
+
unlock(password: string): Promise<boolean>;
|
|
59
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ProviderTransport, ProviderMessage, ProviderMessageRequest, ProviderEventTypes, ProviderMessageResponse, ProviderMessageResponseCallback, OpenState, OpenWalletIntent, ConnectDetails, WalletSession, ProviderRpcError, InitState, TypedEventEmitter } from '../types';
|
|
2
|
+
import { NetworkConfig, WalletContext } from '@0xsequence/network';
|
|
3
|
+
export declare const PROVIDER_OPEN_TIMEOUT = 30000;
|
|
4
|
+
export declare const nextMessageIdx: () => number;
|
|
5
|
+
export declare abstract class BaseProviderTransport implements ProviderTransport {
|
|
6
|
+
protected pendingMessageRequests: ProviderMessageRequest[];
|
|
7
|
+
protected responseCallbacks: Map<number, ProviderMessageResponseCallback>;
|
|
8
|
+
protected state: OpenState;
|
|
9
|
+
protected confirmationOnly: boolean;
|
|
10
|
+
protected events: TypedEventEmitter<ProviderEventTypes>;
|
|
11
|
+
protected openPayload: {
|
|
12
|
+
sessionId?: string;
|
|
13
|
+
session?: WalletSession;
|
|
14
|
+
} | undefined;
|
|
15
|
+
protected connectPayload: ConnectDetails | undefined;
|
|
16
|
+
protected accountsChangedPayload: string | undefined;
|
|
17
|
+
protected networksPayload: NetworkConfig[] | undefined;
|
|
18
|
+
protected walletContextPayload: WalletContext | undefined;
|
|
19
|
+
protected _sessionId?: string;
|
|
20
|
+
protected _init: InitState;
|
|
21
|
+
protected _registered: boolean;
|
|
22
|
+
constructor();
|
|
23
|
+
get registered(): boolean;
|
|
24
|
+
register(): void;
|
|
25
|
+
unregister(): void;
|
|
26
|
+
openWallet(path?: string, intent?: OpenWalletIntent, networkId?: string | number): void;
|
|
27
|
+
closeWallet(): void;
|
|
28
|
+
isOpened(): boolean;
|
|
29
|
+
isConnected(): boolean;
|
|
30
|
+
sendAsync: (request: any, callback: any, chainId?: number | undefined) => Promise<void>;
|
|
31
|
+
handleMessage(message: ProviderMessage<any>): void;
|
|
32
|
+
sendMessageRequest: (message: ProviderMessageRequest) => Promise<ProviderMessageResponse>;
|
|
33
|
+
sendMessage(message: ProviderMessage<any>): void;
|
|
34
|
+
on<K extends keyof ProviderEventTypes>(event: K, fn: ProviderEventTypes[K]): void;
|
|
35
|
+
once<K extends keyof ProviderEventTypes>(event: K, fn: ProviderEventTypes[K]): void;
|
|
36
|
+
emit<K extends keyof ProviderEventTypes>(event: K, ...args: Parameters<ProviderEventTypes[K]>): boolean;
|
|
37
|
+
waitUntilOpened: (openTimeout?: number) => Promise<WalletSession | undefined>;
|
|
38
|
+
waitUntilConnected: () => Promise<ConnectDetails>;
|
|
39
|
+
protected close(error?: ProviderRpcError): void;
|
|
40
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { WalletTransport, ProviderMessage, ProviderMessageRequest, ProviderMessageResponse, ProviderRpcError, InitState, ConnectDetails, WalletSession, TransportSession } from '../types';
|
|
2
|
+
import { WalletRequestHandler } from './wallet-request-handler';
|
|
3
|
+
import { NetworkConfig, WalletContext } from '@0xsequence/network';
|
|
4
|
+
export declare abstract class BaseWalletTransport implements WalletTransport {
|
|
5
|
+
protected walletRequestHandler: WalletRequestHandler;
|
|
6
|
+
protected _sessionId: string;
|
|
7
|
+
protected _registered: boolean;
|
|
8
|
+
protected _init: InitState;
|
|
9
|
+
protected _initNonce: string;
|
|
10
|
+
protected _initCallback?: (error?: string) => void;
|
|
11
|
+
protected appOrigin?: string;
|
|
12
|
+
constructor(walletRequestHandler: WalletRequestHandler);
|
|
13
|
+
get registered(): boolean;
|
|
14
|
+
register(): void;
|
|
15
|
+
unregister(): void;
|
|
16
|
+
sendAsync: (request: any, callback: any, chainId?: number | undefined) => Promise<never>;
|
|
17
|
+
handleMessage: (message: ProviderMessage<any>) => Promise<void>;
|
|
18
|
+
sendMessageRequest: (message: ProviderMessageRequest) => Promise<ProviderMessageResponse>;
|
|
19
|
+
sendMessage(message: ProviderMessage<any>): void;
|
|
20
|
+
notifyOpen(openInfo: {
|
|
21
|
+
chainId?: string;
|
|
22
|
+
sessionId?: string;
|
|
23
|
+
session?: WalletSession;
|
|
24
|
+
error?: string;
|
|
25
|
+
}): void;
|
|
26
|
+
notifyClose(error?: ProviderRpcError): void;
|
|
27
|
+
notifyConnect(connectDetails: ConnectDetails): void;
|
|
28
|
+
notifyDisconnect(error?: ProviderRpcError): void;
|
|
29
|
+
notifyAccountsChanged(accounts: string[]): void;
|
|
30
|
+
notifyChainChanged(chainIdHex: string): void;
|
|
31
|
+
notifyNetworks(networks: NetworkConfig[]): void;
|
|
32
|
+
notifyWalletContext(walletContext: WalletContext): void;
|
|
33
|
+
protected isValidInitAck(message: ProviderMessage<any>): boolean;
|
|
34
|
+
private init;
|
|
35
|
+
protected open: ({ sessionId, intent, networkId }: TransportSession) => Promise<boolean>;
|
|
36
|
+
private saveTransportSession;
|
|
37
|
+
protected getCachedTransportSession: () => TransportSession | null;
|
|
38
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { EventEmitter2 as EventEmitter } from 'eventemitter2';
|
|
2
|
+
import { ProviderMessageResponseCallback, ProviderMessageRequest, ProviderMessageResponse } from '../../types';
|
|
3
|
+
interface Stream {
|
|
4
|
+
on(ev: string | symbol, fn: (...args: any[]) => void): void;
|
|
5
|
+
writable: boolean;
|
|
6
|
+
write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare abstract class BaseInjectedTransport extends EventEmitter {
|
|
9
|
+
private stream;
|
|
10
|
+
protected responseCallbacks: Map<number, ProviderMessageResponseCallback>;
|
|
11
|
+
private _messageIdx;
|
|
12
|
+
protected nextMessageIdx: () => number;
|
|
13
|
+
constructor(stream: Stream);
|
|
14
|
+
private handleMessage;
|
|
15
|
+
protected sendMessageRequest: (message: ProviderMessageRequest) => Promise<ProviderMessageResponse>;
|
|
16
|
+
private sendMessage;
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { WalletRequestHandler } from '../wallet-request-handler';
|
|
2
|
+
import { BaseWalletTransport } from '../base-wallet-transport';
|
|
3
|
+
import { ProviderMessage } from '../../types';
|
|
4
|
+
import { Runtime } from 'webextension-polyfill-ts';
|
|
5
|
+
export declare const CHANNEL_ID = "sequence-extension-message-handler";
|
|
6
|
+
export declare class ExtensionMessageHandler extends BaseWalletTransport {
|
|
7
|
+
runtime: Runtime.Static;
|
|
8
|
+
private port;
|
|
9
|
+
constructor(walletRequestHandler: WalletRequestHandler, runtime: Runtime.Static);
|
|
10
|
+
register(): void;
|
|
11
|
+
sendMessage(message: ProviderMessage<any>): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { OpenWalletIntent, ProviderMessage } from '../../types';
|
|
2
|
+
import { BaseProviderTransport } from '../base-provider-transport';
|
|
3
|
+
import { Runtime } from 'webextension-polyfill-ts';
|
|
4
|
+
export declare class ExtensionMessageProvider extends BaseProviderTransport {
|
|
5
|
+
constructor(runtime: Runtime.Static);
|
|
6
|
+
register: () => void;
|
|
7
|
+
sendMessage(message: ProviderMessage<any>): void;
|
|
8
|
+
unregister(): void;
|
|
9
|
+
openWallet(path?: string, intent?: OpenWalletIntent, networkId?: string | number): void;
|
|
10
|
+
closeWallet(): void;
|
|
11
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './base-provider-transport';
|
|
2
|
+
export * from './base-wallet-transport';
|
|
3
|
+
export * from './proxy-transport';
|
|
4
|
+
export * from './mux-transport';
|
|
5
|
+
export * from './window-transport';
|
|
6
|
+
export * from './wallet-request-handler';
|
|
7
|
+
export * from './extension-transport';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './mux-message-provider';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ProviderMessage, ProviderTransport, ProviderEventTypes, ProviderMessageRequest, ProviderMessageResponse, WalletSession, OpenWalletIntent, ConnectDetails } from '../../types';
|
|
2
|
+
export declare class MuxMessageProvider implements ProviderTransport {
|
|
3
|
+
private messageProviders;
|
|
4
|
+
private provider;
|
|
5
|
+
constructor(...messageProviders: ProviderTransport[]);
|
|
6
|
+
add(...messageProviders: ProviderTransport[]): void;
|
|
7
|
+
register: () => void;
|
|
8
|
+
unregister: () => void;
|
|
9
|
+
openWallet: (path?: string | undefined, intent?: OpenWalletIntent | undefined, networkId?: string | number | undefined) => void;
|
|
10
|
+
closeWallet(): void;
|
|
11
|
+
isOpened(): boolean;
|
|
12
|
+
isConnected(): boolean;
|
|
13
|
+
on<K extends keyof ProviderEventTypes>(event: K, fn: ProviderEventTypes[K]): void;
|
|
14
|
+
once<K extends keyof ProviderEventTypes>(event: K, fn: ProviderEventTypes[K]): void;
|
|
15
|
+
emit<K extends keyof ProviderEventTypes>(event: K, ...args: Parameters<ProviderEventTypes[K]>): boolean;
|
|
16
|
+
sendAsync: (request: any, callback: any, chainId?: number | undefined) => Promise<void>;
|
|
17
|
+
sendMessage(message: ProviderMessage<any>): void;
|
|
18
|
+
sendMessageRequest: (message: ProviderMessageRequest) => Promise<ProviderMessageResponse>;
|
|
19
|
+
handleMessage(message: ProviderMessage<any>): void;
|
|
20
|
+
waitUntilOpened: () => Promise<WalletSession | undefined>;
|
|
21
|
+
waitUntilConnected: () => Promise<ConnectDetails>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ProviderMessage, ProviderMessageTransport, ProviderEventTypes, TypedEventEmitter } from '../../types';
|
|
2
|
+
export declare class ProxyMessageChannel {
|
|
3
|
+
app: ProxyMessageChannelPort;
|
|
4
|
+
wallet: ProxyMessageChannelPort;
|
|
5
|
+
constructor();
|
|
6
|
+
}
|
|
7
|
+
export declare class ProxyMessageChannelPort implements ProviderMessageTransport {
|
|
8
|
+
conn: ProviderMessageTransport;
|
|
9
|
+
events: TypedEventEmitter<ProxyEventTypes>;
|
|
10
|
+
handleMessage: (message: ProviderMessage<any>) => void;
|
|
11
|
+
sendMessage: (message: ProviderMessage<any>) => void;
|
|
12
|
+
on<K extends keyof ProxyEventTypes>(event: K, fn: ProxyEventTypes[K]): void;
|
|
13
|
+
once<K extends keyof ProxyEventTypes>(event: K, fn: ProxyEventTypes[K]): void;
|
|
14
|
+
}
|
|
15
|
+
export declare type ProxyEventTypes = Pick<ProviderEventTypes, 'open' | 'close' | 'connect' | 'disconnect'>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseWalletTransport } from '../base-wallet-transport';
|
|
2
|
+
import { WalletRequestHandler } from '../wallet-request-handler';
|
|
3
|
+
import { ProviderMessage } from '../../types';
|
|
4
|
+
import { ProxyMessageChannelPort } from './proxy-message-channel';
|
|
5
|
+
export declare class ProxyMessageHandler extends BaseWalletTransport {
|
|
6
|
+
private port;
|
|
7
|
+
constructor(walletRequestHandler: WalletRequestHandler, port: ProxyMessageChannelPort);
|
|
8
|
+
register(): void;
|
|
9
|
+
restoreSession(): void;
|
|
10
|
+
unregister(): void;
|
|
11
|
+
sendMessage(message: ProviderMessage<any>): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseProviderTransport } from '../base-provider-transport';
|
|
2
|
+
import { ProviderMessage, OpenWalletIntent } from '../../types';
|
|
3
|
+
import { ProxyMessageChannelPort } from './proxy-message-channel';
|
|
4
|
+
export declare class ProxyMessageProvider extends BaseProviderTransport {
|
|
5
|
+
private port;
|
|
6
|
+
constructor(port: ProxyMessageChannelPort);
|
|
7
|
+
register: () => void;
|
|
8
|
+
unregister: () => void;
|
|
9
|
+
openWallet: (path?: string | undefined, intent?: OpenWalletIntent | undefined, networkId?: string | number | undefined) => void;
|
|
10
|
+
closeWallet(): void;
|
|
11
|
+
sendMessage(message: ProviderMessage<any>): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ProviderMessageRequest, ProviderMessageResponse, ProviderMessageRequestHandler, MessageToSign, ProviderRpcError, ConnectOptions, ConnectDetails, PromptConnectDetails, WalletSession, ProviderEventTypes } from '../types';
|
|
2
|
+
import { ExternalProvider } from '@ethersproject/providers';
|
|
3
|
+
import { Networks, NetworkConfig, JsonRpcHandler } from '@0xsequence/network';
|
|
4
|
+
import { Signer } from '@0xsequence/wallet';
|
|
5
|
+
import { TransactionRequest } from '@0xsequence/transactions';
|
|
6
|
+
export interface WalletSignInOptions {
|
|
7
|
+
connect?: boolean;
|
|
8
|
+
mainnetNetworks?: Networks;
|
|
9
|
+
testnetNetworks?: Networks;
|
|
10
|
+
defaultNetworkId?: string | number;
|
|
11
|
+
}
|
|
12
|
+
export declare class WalletRequestHandler implements ExternalProvider, JsonRpcHandler, ProviderMessageRequestHandler {
|
|
13
|
+
private signer;
|
|
14
|
+
private prompter;
|
|
15
|
+
private mainnetNetworks;
|
|
16
|
+
private testnetNetworks;
|
|
17
|
+
private _connectOptions?;
|
|
18
|
+
private _defaultNetworkId?;
|
|
19
|
+
private _chainId?;
|
|
20
|
+
private events;
|
|
21
|
+
constructor(signer: Signer | null, prompter: WalletUserPrompter | null, mainnetNetworks: Networks, testnetNetworks?: Networks);
|
|
22
|
+
signIn(signer: Signer | null, options?: WalletSignInOptions): Promise<void>;
|
|
23
|
+
connect(options?: ConnectOptions): Promise<ConnectDetails>;
|
|
24
|
+
promptConnect: (options?: ConnectOptions | undefined) => Promise<ConnectDetails>;
|
|
25
|
+
sendMessageRequest(message: ProviderMessageRequest): Promise<ProviderMessageResponse>;
|
|
26
|
+
sendAsync: (request: any, callback: any, chainId?: number | undefined) => Promise<void>;
|
|
27
|
+
on<K extends keyof ProviderEventTypes>(event: K, fn: ProviderEventTypes[K]): void;
|
|
28
|
+
once<K extends keyof ProviderEventTypes>(event: K, fn: ProviderEventTypes[K]): void;
|
|
29
|
+
getAddress(): Promise<string>;
|
|
30
|
+
getChainId(): Promise<number>;
|
|
31
|
+
get connectOptions(): ConnectOptions | undefined;
|
|
32
|
+
setConnectOptions(options: ConnectOptions | undefined): void;
|
|
33
|
+
get defaultNetworkId(): string | number | undefined;
|
|
34
|
+
setDefaultNetwork(chainId: string | number, notifyNetworks?: boolean): Promise<number | undefined>;
|
|
35
|
+
getNetworks(jsonRpcResponse?: boolean): Promise<NetworkConfig[]>;
|
|
36
|
+
walletSession(): Promise<WalletSession | undefined>;
|
|
37
|
+
notifyConnect(connectDetails: ConnectDetails): void;
|
|
38
|
+
notifyDisconnect(): void;
|
|
39
|
+
notifyNetworks(networks?: NetworkConfig[]): Promise<void>;
|
|
40
|
+
notifyWalletContext(): Promise<void>;
|
|
41
|
+
notifyClose(error?: ProviderRpcError): void;
|
|
42
|
+
isSignedIn(): boolean;
|
|
43
|
+
getSigner(): Signer | null;
|
|
44
|
+
setSigner(signer: Signer | null): void;
|
|
45
|
+
}
|
|
46
|
+
export interface WalletUserPrompter {
|
|
47
|
+
promptConnect(options?: ConnectOptions): Promise<PromptConnectDetails>;
|
|
48
|
+
promptSignMessage(message: MessageToSign): Promise<string>;
|
|
49
|
+
promptSignTransaction(txn: TransactionRequest, chaindId?: number): Promise<string>;
|
|
50
|
+
promptSendTransaction(txn: TransactionRequest, chaindId?: number): Promise<string>;
|
|
51
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ProviderMessage } from '../../types';
|
|
2
|
+
import { WalletRequestHandler } from '../wallet-request-handler';
|
|
3
|
+
import { BaseWalletTransport } from '../base-wallet-transport';
|
|
4
|
+
export declare class WindowMessageHandler extends BaseWalletTransport {
|
|
5
|
+
protected parentWindow: Window;
|
|
6
|
+
private _isPopup;
|
|
7
|
+
constructor(walletRequestHandler: WalletRequestHandler);
|
|
8
|
+
register(): void;
|
|
9
|
+
unregister(): void;
|
|
10
|
+
private onWindowEvent;
|
|
11
|
+
sendMessage(message: ProviderMessage<any>): void;
|
|
12
|
+
get isPopup(): boolean;
|
|
13
|
+
private postMessage;
|
|
14
|
+
private getWindowTransportSession;
|
|
15
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { OpenWalletIntent, ProviderMessage } from '../../types';
|
|
2
|
+
import { BaseProviderTransport } from '../base-provider-transport';
|
|
3
|
+
export declare class WindowMessageProvider extends BaseProviderTransport {
|
|
4
|
+
private walletURL;
|
|
5
|
+
private walletWindow;
|
|
6
|
+
constructor(walletAppURL: string);
|
|
7
|
+
register: () => void;
|
|
8
|
+
unregister: () => void;
|
|
9
|
+
openWallet: (path?: string | undefined, intent?: OpenWalletIntent | undefined, networkId?: string | number | undefined) => void;
|
|
10
|
+
closeWallet(): void;
|
|
11
|
+
private onWindowEvent;
|
|
12
|
+
sendMessage(message: ProviderMessage<any>): void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { NetworkConfig, WalletContext, JsonRpcRequest, JsonRpcResponse, JsonRpcHandler } from '@0xsequence/network';
|
|
2
|
+
import { TypedData } from '@0xsequence/utils';
|
|
3
|
+
export interface ProviderTransport extends JsonRpcHandler, ProviderMessageTransport, ProviderMessageRequestHandler {
|
|
4
|
+
register(): void;
|
|
5
|
+
unregister(): void;
|
|
6
|
+
openWallet(path?: string, intent?: OpenWalletIntent, networkId?: string | number): void;
|
|
7
|
+
closeWallet(): void;
|
|
8
|
+
isOpened(): boolean;
|
|
9
|
+
isConnected(): boolean;
|
|
10
|
+
on<K extends keyof ProviderEventTypes>(event: K, fn: ProviderEventTypes[K]): void;
|
|
11
|
+
once<K extends keyof ProviderEventTypes>(event: K, fn: ProviderEventTypes[K]): void;
|
|
12
|
+
emit<K extends keyof ProviderEventTypes>(event: K, ...args: Parameters<ProviderEventTypes[K]>): boolean;
|
|
13
|
+
waitUntilOpened(): Promise<WalletSession | undefined>;
|
|
14
|
+
waitUntilConnected(): Promise<ConnectDetails>;
|
|
15
|
+
}
|
|
16
|
+
export interface WalletTransport extends JsonRpcHandler, ProviderMessageTransport, ProviderMessageRequestHandler {
|
|
17
|
+
register(): void;
|
|
18
|
+
unregister(): void;
|
|
19
|
+
notifyOpen(openInfo: {
|
|
20
|
+
chainId?: string;
|
|
21
|
+
sessionId?: string;
|
|
22
|
+
session?: WalletSession;
|
|
23
|
+
error?: string;
|
|
24
|
+
}): void;
|
|
25
|
+
notifyClose(error?: ProviderRpcError): void;
|
|
26
|
+
notifyConnect(connectDetails: ConnectDetails): void;
|
|
27
|
+
notifyAccountsChanged(accounts: string[]): void;
|
|
28
|
+
notifyChainChanged(chainIdHex: string): void;
|
|
29
|
+
notifyNetworks(networks: NetworkConfig[]): void;
|
|
30
|
+
}
|
|
31
|
+
export interface ProviderMessage<T> {
|
|
32
|
+
idx: number;
|
|
33
|
+
type: string;
|
|
34
|
+
data: T;
|
|
35
|
+
chainId?: number;
|
|
36
|
+
}
|
|
37
|
+
export declare type ProviderMessageRequest = ProviderMessage<JsonRpcRequest>;
|
|
38
|
+
export declare type ProviderMessageResponse = ProviderMessage<JsonRpcResponse>;
|
|
39
|
+
export declare type ProviderMessageResponseCallback = (error?: ProviderRpcError, response?: ProviderMessageResponse) => void;
|
|
40
|
+
export interface ProviderRpcError extends Error {
|
|
41
|
+
message: string;
|
|
42
|
+
code?: number;
|
|
43
|
+
data?: {
|
|
44
|
+
[key: string]: any;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export interface ProviderMessageRequestHandler {
|
|
48
|
+
sendMessageRequest(message: ProviderMessageRequest): Promise<ProviderMessageResponse>;
|
|
49
|
+
}
|
|
50
|
+
export interface ProviderMessageTransport {
|
|
51
|
+
handleMessage(message: ProviderMessage<any>): void;
|
|
52
|
+
sendMessage(message: ProviderMessage<any>): void;
|
|
53
|
+
}
|
|
54
|
+
export declare type WindowSessionParam = 'sid' | 'net' | 'intent';
|
|
55
|
+
export interface WindowSessionParams extends URLSearchParams {
|
|
56
|
+
get(name: WindowSessionParam): string | null;
|
|
57
|
+
set(name: WindowSessionParam, value: string): void;
|
|
58
|
+
}
|
|
59
|
+
export declare class WindowSessionParams extends URLSearchParams {
|
|
60
|
+
static new(init?: Record<WindowSessionParam, string> | string): WindowSessionParams;
|
|
61
|
+
}
|
|
62
|
+
export interface TransportSession {
|
|
63
|
+
sessionId?: string | null;
|
|
64
|
+
networkId?: string | number | null;
|
|
65
|
+
intent?: OpenWalletIntent;
|
|
66
|
+
}
|
|
67
|
+
export declare enum EventType {
|
|
68
|
+
OPEN = "open",
|
|
69
|
+
CLOSE = "close",
|
|
70
|
+
MESSAGE = "message",
|
|
71
|
+
CONNECT = "connect",
|
|
72
|
+
DISCONNECT = "disconnect",
|
|
73
|
+
ACCOUNTS_CHANGED = "accountsChanged",
|
|
74
|
+
CHAIN_CHANGED = "chainChanged",
|
|
75
|
+
NETWORKS = "networks",
|
|
76
|
+
WALLET_CONTEXT = "walletContext",
|
|
77
|
+
INIT = "init",
|
|
78
|
+
DEBUG = "_debug"
|
|
79
|
+
}
|
|
80
|
+
export interface WalletEventTypes {
|
|
81
|
+
'open': (openInfo: {
|
|
82
|
+
chainId?: string;
|
|
83
|
+
sessionId?: string;
|
|
84
|
+
session?: WalletSession;
|
|
85
|
+
error?: string;
|
|
86
|
+
}) => void;
|
|
87
|
+
'close': (error?: ProviderRpcError) => void;
|
|
88
|
+
'connect': (connectDetails: ConnectDetails) => void;
|
|
89
|
+
'disconnect': (error?: ProviderRpcError) => void;
|
|
90
|
+
'accountsChanged': (accounts: string[]) => void;
|
|
91
|
+
'chainChanged': (chainIdHex: string) => void;
|
|
92
|
+
'networks': (networks: NetworkConfig[]) => void;
|
|
93
|
+
'walletContext': (walletContext: WalletContext) => void;
|
|
94
|
+
}
|
|
95
|
+
export interface ProviderEventTypes extends WalletEventTypes {
|
|
96
|
+
'message': (message: ProviderMessageResponse) => void;
|
|
97
|
+
}
|
|
98
|
+
export declare enum OpenState {
|
|
99
|
+
CLOSED = 0,
|
|
100
|
+
OPENING = 1,
|
|
101
|
+
OPENED = 2
|
|
102
|
+
}
|
|
103
|
+
export declare enum InitState {
|
|
104
|
+
NIL = 0,
|
|
105
|
+
SENT_NONCE = 1,
|
|
106
|
+
OK = 2
|
|
107
|
+
}
|
|
108
|
+
export interface ConnectOptions {
|
|
109
|
+
networkId?: string | number;
|
|
110
|
+
app?: string;
|
|
111
|
+
origin?: string;
|
|
112
|
+
expiry?: number;
|
|
113
|
+
authorize?: boolean;
|
|
114
|
+
askForEmail?: boolean;
|
|
115
|
+
refresh?: boolean;
|
|
116
|
+
keepWalletOpened?: boolean;
|
|
117
|
+
}
|
|
118
|
+
export interface ConnectDetails {
|
|
119
|
+
chainId?: string;
|
|
120
|
+
error?: string;
|
|
121
|
+
connected: boolean;
|
|
122
|
+
session?: WalletSession;
|
|
123
|
+
proof?: ETHAuthProof;
|
|
124
|
+
email?: string;
|
|
125
|
+
}
|
|
126
|
+
export declare type PromptConnectDetails = Pick<ConnectDetails, 'chainId' | 'error' | 'connected' | 'proof' | 'email'>;
|
|
127
|
+
export declare type OpenWalletIntent = {
|
|
128
|
+
type: 'connect';
|
|
129
|
+
options?: ConnectOptions;
|
|
130
|
+
} | {
|
|
131
|
+
type: 'jsonRpcRequest';
|
|
132
|
+
method: string;
|
|
133
|
+
};
|
|
134
|
+
export interface MessageToSign {
|
|
135
|
+
message?: string;
|
|
136
|
+
typedData?: TypedData;
|
|
137
|
+
chainId?: number;
|
|
138
|
+
}
|
|
139
|
+
export interface ETHAuthProof {
|
|
140
|
+
typedData: TypedData;
|
|
141
|
+
proofString: string;
|
|
142
|
+
}
|
|
143
|
+
export interface WalletSession {
|
|
144
|
+
walletContext?: WalletContext;
|
|
145
|
+
accountAddress?: string;
|
|
146
|
+
networks?: NetworkConfig[];
|
|
147
|
+
providerCache?: {
|
|
148
|
+
[key: string]: any;
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
export declare class ProviderError extends Error {
|
|
152
|
+
constructor(message?: string);
|
|
153
|
+
}
|
|
154
|
+
export declare const ErrSignedInRequired: ProviderError;
|
|
155
|
+
export interface TypedEventEmitter<Events> {
|
|
156
|
+
addListener<E extends keyof Events>(event: E, listener: Events[E]): this;
|
|
157
|
+
on<E extends keyof Events>(event: E, listener: Events[E]): this;
|
|
158
|
+
once<E extends keyof Events>(event: E, listener: Events[E]): this;
|
|
159
|
+
prependListener<E extends keyof Events>(event: E, listener: Events[E]): this;
|
|
160
|
+
prependOnceListener<E extends keyof Events>(event: E, listener: Events[E]): this;
|
|
161
|
+
off<E extends keyof Events>(event: E, listener: Events[E]): this;
|
|
162
|
+
removeAllListeners<E extends keyof Events>(event?: E): this;
|
|
163
|
+
removeListener<E extends keyof Events>(event: E, listener: Events[E]): this;
|
|
164
|
+
emit<E extends keyof Events>(event: E, ...args: Arguments<Events[E]>): boolean;
|
|
165
|
+
eventNames(): (keyof Events | string | symbol)[];
|
|
166
|
+
listeners<E extends keyof Events>(event: E): Function[];
|
|
167
|
+
listenerCount<E extends keyof Events>(event: E): number;
|
|
168
|
+
}
|
|
169
|
+
declare type Arguments<T> = [T] extends [(...args: infer U) => any] ? U : [T] extends [void] ? [] : [T];
|
|
170
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BigNumberish, BytesLike } from 'ethers';
|
|
2
|
+
import { WalletConfig, DecodedSignature } from '@0xsequence/config';
|
|
3
|
+
import { Web3Provider } from './provider';
|
|
4
|
+
export declare const isValidSignature: (address: string, digest: Uint8Array, sig: string, provider: Web3Provider, chainId?: number | undefined, walletContext?: any) => Promise<boolean | undefined>;
|
|
5
|
+
export declare const recoverWalletConfig: (address: string, digest: BytesLike, signature: string | DecodedSignature, chainId: BigNumberish, walletContext?: any) => Promise<WalletConfig>;
|
|
6
|
+
export declare const isBrowserExtension: () => boolean;
|
|
7
|
+
export declare class LocalStore<T extends Object = string> {
|
|
8
|
+
def?: T | undefined;
|
|
9
|
+
readonly key: string;
|
|
10
|
+
constructor(key: string, def?: T | undefined);
|
|
11
|
+
get(): T | undefined;
|
|
12
|
+
set(val: T | undefined): void;
|
|
13
|
+
del(): void;
|
|
14
|
+
}
|