@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,99 @@
|
|
|
1
|
+
import { NetworkConfig, WalletContext, ChainIdLike } from '@0xsequence/network';
|
|
2
|
+
import { WalletConfig, WalletState } from '@0xsequence/config';
|
|
3
|
+
import { Web3Provider, Web3Signer } from './provider';
|
|
4
|
+
import { ProxyMessageChannelPort } from './transports';
|
|
5
|
+
import { WalletSession, ProviderEventTypes, ConnectOptions, OpenWalletIntent, ConnectDetails } from './types';
|
|
6
|
+
import { WalletCommands } from './commands';
|
|
7
|
+
import { Runtime } from 'webextension-polyfill-ts';
|
|
8
|
+
export interface WalletProvider {
|
|
9
|
+
connect(options?: ConnectOptions): Promise<ConnectDetails>;
|
|
10
|
+
disconnect(): void;
|
|
11
|
+
isOpened(): boolean;
|
|
12
|
+
isConnected(): boolean;
|
|
13
|
+
getSession(): WalletSession | undefined;
|
|
14
|
+
getAddress(): Promise<string>;
|
|
15
|
+
getNetworks(chainId?: ChainIdLike): Promise<NetworkConfig[]>;
|
|
16
|
+
getChainId(): Promise<number>;
|
|
17
|
+
getAuthChainId(): Promise<number>;
|
|
18
|
+
openWallet(path?: string, intent?: OpenWalletIntent, networkId?: string | number): Promise<boolean>;
|
|
19
|
+
closeWallet(): void;
|
|
20
|
+
getProvider(chainId?: ChainIdLike): Web3Provider | undefined;
|
|
21
|
+
getSigner(chainId?: ChainIdLike): Web3Signer;
|
|
22
|
+
getWalletContext(): Promise<WalletContext>;
|
|
23
|
+
getWalletConfig(chainId?: ChainIdLike): Promise<WalletConfig[]>;
|
|
24
|
+
getWalletState(chainId?: ChainIdLike): Promise<WalletState[]>;
|
|
25
|
+
isDeployed(chainId?: ChainIdLike): Promise<boolean>;
|
|
26
|
+
getProviderConfig(): ProviderConfig;
|
|
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
|
+
commands: WalletCommands;
|
|
30
|
+
}
|
|
31
|
+
export declare class Wallet implements WalletProvider {
|
|
32
|
+
commands: WalletCommands;
|
|
33
|
+
private config;
|
|
34
|
+
private session?;
|
|
35
|
+
private connectedSites;
|
|
36
|
+
private transport;
|
|
37
|
+
private networks;
|
|
38
|
+
private providers;
|
|
39
|
+
constructor(defaultNetworkId?: string | number, config?: Partial<ProviderConfig>);
|
|
40
|
+
private init;
|
|
41
|
+
connect: (options?: ConnectOptions | undefined) => Promise<ConnectDetails>;
|
|
42
|
+
addConnectedSite(origin: string | undefined): void;
|
|
43
|
+
removeConnectedSite(origin: string): void;
|
|
44
|
+
getConnectedSites(): string[] | undefined;
|
|
45
|
+
private isSiteConnected;
|
|
46
|
+
authorize: (options?: ConnectOptions | undefined) => Promise<ConnectDetails>;
|
|
47
|
+
disconnect(): void;
|
|
48
|
+
getProviderConfig(): ProviderConfig;
|
|
49
|
+
isOpened(): boolean;
|
|
50
|
+
isConnected(): boolean;
|
|
51
|
+
getSession: () => WalletSession | undefined;
|
|
52
|
+
getAddress: () => Promise<string>;
|
|
53
|
+
getNetworks: (chainId?: any) => Promise<NetworkConfig[]>;
|
|
54
|
+
getChainId: () => Promise<number>;
|
|
55
|
+
getAuthChainId: () => Promise<number>;
|
|
56
|
+
openWallet: (path?: string | undefined, intent?: OpenWalletIntent | undefined, networkId?: string | number | undefined) => Promise<boolean>;
|
|
57
|
+
closeWallet: () => void;
|
|
58
|
+
getProvider(chainId?: ChainIdLike): Web3Provider | undefined;
|
|
59
|
+
getAuthProvider(): Promise<Web3Provider>;
|
|
60
|
+
getAuthNetwork(): Promise<NetworkConfig>;
|
|
61
|
+
getAllProviders(): {
|
|
62
|
+
[chainId: number]: Web3Provider;
|
|
63
|
+
};
|
|
64
|
+
getSigner(chainId?: ChainIdLike): Web3Signer;
|
|
65
|
+
getAuthSigner(): Promise<Web3Signer>;
|
|
66
|
+
getWalletConfig(chainId?: ChainIdLike): Promise<WalletConfig[]>;
|
|
67
|
+
getWalletState(chainId?: ChainIdLike): Promise<WalletState[]>;
|
|
68
|
+
getWalletContext(): Promise<WalletContext>;
|
|
69
|
+
isDeployed(chainId?: ChainIdLike): Promise<boolean>;
|
|
70
|
+
on<K extends keyof ProviderEventTypes>(event: K, fn: ProviderEventTypes[K]): void;
|
|
71
|
+
once<K extends keyof ProviderEventTypes>(event: K, fn: ProviderEventTypes[K]): void;
|
|
72
|
+
private loadSession;
|
|
73
|
+
private saveSession;
|
|
74
|
+
private useSession;
|
|
75
|
+
private useAccountAddress;
|
|
76
|
+
private useNetworks;
|
|
77
|
+
private clearSession;
|
|
78
|
+
}
|
|
79
|
+
export interface ProviderConfig {
|
|
80
|
+
walletAppURL: string;
|
|
81
|
+
networks?: Partial<NetworkConfig>[];
|
|
82
|
+
networkRpcUrl?: string;
|
|
83
|
+
defaultNetworkId?: string | number;
|
|
84
|
+
transports?: {
|
|
85
|
+
windowTransport?: {
|
|
86
|
+
enabled: boolean;
|
|
87
|
+
};
|
|
88
|
+
proxyTransport?: {
|
|
89
|
+
enabled: boolean;
|
|
90
|
+
appPort?: ProxyMessageChannelPort;
|
|
91
|
+
};
|
|
92
|
+
extensionTransport?: {
|
|
93
|
+
enabled: boolean;
|
|
94
|
+
runtime: Runtime.Static;
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
walletContext?: WalletContext;
|
|
98
|
+
}
|
|
99
|
+
export declare const DefaultProviderConfig: ProviderConfig;
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@0xsequence/provider",
|
|
3
|
+
"version": "0.0.0-2021823181734",
|
|
4
|
+
"description": "provider sub-package for Sequence",
|
|
5
|
+
"repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/provider",
|
|
6
|
+
"source": "src/index.ts",
|
|
7
|
+
"main": "dist/0xsequence-provider.cjs.js",
|
|
8
|
+
"module": "dist/0xsequence-provider.esm.js",
|
|
9
|
+
"author": "Horizon Blockchain Games",
|
|
10
|
+
"license": "Apache-2.0",
|
|
11
|
+
"scripts": {
|
|
12
|
+
"test": "echo",
|
|
13
|
+
"typecheck": "tsc --noEmit"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@0xsequence/abi": "^0.28.0",
|
|
17
|
+
"@0xsequence/auth": "^0.0.0-2021823181734",
|
|
18
|
+
"@0xsequence/config": "^0.0.0-2021823181734",
|
|
19
|
+
"@0xsequence/network": "^0.0.0-2021823181734",
|
|
20
|
+
"@0xsequence/transactions": "^0.0.0-2021823181734",
|
|
21
|
+
"@0xsequence/utils": "^0.28.0",
|
|
22
|
+
"@0xsequence/wallet": "^0.0.0-2021823181734",
|
|
23
|
+
"@ethersproject/abstract-signer": "5.0.14",
|
|
24
|
+
"@ethersproject/hash": "^5.0.12",
|
|
25
|
+
"@ethersproject/providers": "^5.0.24",
|
|
26
|
+
"@ethersproject/web": "^5.0.14",
|
|
27
|
+
"ethers": "^5.0.32",
|
|
28
|
+
"eventemitter2": "^6.4.4",
|
|
29
|
+
"webextension-polyfill-ts": "^0.26.0"
|
|
30
|
+
},
|
|
31
|
+
"peerDependencies": {},
|
|
32
|
+
"devDependencies": {},
|
|
33
|
+
"files": [
|
|
34
|
+
"src",
|
|
35
|
+
"dist"
|
|
36
|
+
]
|
|
37
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { BigNumberish, BytesLike } from 'ethers'
|
|
2
|
+
import { TypedDataDomain, TypedDataField, TypedDataSigner } from '@ethersproject/abstract-signer'
|
|
3
|
+
import { WalletContext, ChainIdLike } from '@0xsequence/network'
|
|
4
|
+
import { encodeMessageDigest, TypedData, encodeTypedDataDigest } from '@0xsequence/utils'
|
|
5
|
+
import { DecodedSignature, WalletConfig } from '@0xsequence/config'
|
|
6
|
+
import { Wallet } from '../wallet'
|
|
7
|
+
import { isValidSignature, recoverWalletConfig } from '../utils'
|
|
8
|
+
|
|
9
|
+
export class WalletCommands {
|
|
10
|
+
private wallet: Wallet
|
|
11
|
+
|
|
12
|
+
constructor(walletProvider: Wallet) {
|
|
13
|
+
this.wallet = walletProvider
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// Sign message on a specified chain, or DefaultChain by default
|
|
17
|
+
signMessage(message: BytesLike, chainId?: ChainIdLike, allSigners?: boolean): Promise<string> {
|
|
18
|
+
const signer = this.wallet.getSigner()
|
|
19
|
+
if (!signer) throw new Error('unable to get signer')
|
|
20
|
+
return signer.signMessage(message, chainId, allSigners)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Sign message on the AuthChain
|
|
24
|
+
async signAuthMessage(message: BytesLike, allSigners?: boolean): Promise<string> {
|
|
25
|
+
const signer = await this.wallet.getAuthSigner()
|
|
26
|
+
if (!signer) throw new Error('unable to get AuthChain signer')
|
|
27
|
+
return signer.signMessage(message, await signer.getChainId(), allSigners)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Sign EIP-712 TypedData on a specified chain, or DefaultChain by default
|
|
31
|
+
signTypedData(
|
|
32
|
+
domain: TypedDataDomain,
|
|
33
|
+
types: Record<string, Array<TypedDataField>>,
|
|
34
|
+
message: Record<string, any>,
|
|
35
|
+
chainId?: ChainIdLike,
|
|
36
|
+
allSigners?: boolean
|
|
37
|
+
): Promise<string> {
|
|
38
|
+
const signer = this.wallet.getSigner()
|
|
39
|
+
if (!signer) throw new Error('unable to get signer')
|
|
40
|
+
return signer.signTypedData(domain, types, message, chainId, allSigners)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Sign EIP-712 TypedData on the AuthChain
|
|
44
|
+
async signAuthTypedData(
|
|
45
|
+
domain: TypedDataDomain,
|
|
46
|
+
types: Record<string, Array<TypedDataField>>,
|
|
47
|
+
message: Record<string, any>,
|
|
48
|
+
allSigners?: boolean
|
|
49
|
+
): Promise<string> {
|
|
50
|
+
const signer = await this.wallet.getAuthSigner()
|
|
51
|
+
if (!signer) throw new Error('unable to get AuthChain signer')
|
|
52
|
+
return signer.signTypedData(domain, types, message, await signer.getChainId(), allSigners)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Verify signature of a digest, one of a message, typedData or other
|
|
56
|
+
async isValidSignature(
|
|
57
|
+
address: string,
|
|
58
|
+
digest: Uint8Array,
|
|
59
|
+
signature: string,
|
|
60
|
+
chainId: number,
|
|
61
|
+
walletContext?: WalletContext
|
|
62
|
+
): Promise<boolean | undefined> {
|
|
63
|
+
const provider = this.wallet.getProvider(chainId)
|
|
64
|
+
if (!provider) throw new Error(`unable to get provider for chainId ${chainId}`)
|
|
65
|
+
return isValidSignature(address, digest, signature, provider, chainId, walletContext)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Verify message signature
|
|
69
|
+
isValidMessageSignature(
|
|
70
|
+
address: string,
|
|
71
|
+
message: string | Uint8Array,
|
|
72
|
+
signature: string,
|
|
73
|
+
chainId: number,
|
|
74
|
+
walletContext?: WalletContext
|
|
75
|
+
): Promise<boolean | undefined> {
|
|
76
|
+
return this.isValidSignature(address, encodeMessageDigest(message), signature, chainId, walletContext)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Verify typedData signature
|
|
80
|
+
isValidTypedDataSignature(
|
|
81
|
+
address: string,
|
|
82
|
+
typedData: TypedData,
|
|
83
|
+
signature: string,
|
|
84
|
+
chainId: number,
|
|
85
|
+
walletContext?: WalletContext
|
|
86
|
+
): Promise<boolean | undefined> {
|
|
87
|
+
return this.isValidSignature(address, encodeTypedDataDigest(typedData), signature, chainId, walletContext)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Recover the WalletConfig from a signature + digest combo
|
|
91
|
+
recoverWalletConfig = async (
|
|
92
|
+
address: string,
|
|
93
|
+
digest: BytesLike,
|
|
94
|
+
signature: string | DecodedSignature,
|
|
95
|
+
chainId: BigNumberish,
|
|
96
|
+
walletContext?: WalletContext
|
|
97
|
+
): Promise<WalletConfig> => {
|
|
98
|
+
walletContext = walletContext || (await this.wallet.getWalletContext())
|
|
99
|
+
return recoverWalletConfig(address, digest, signature, chainId, walletContext)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Recover the WalletConfig from a signature of a message
|
|
103
|
+
recoverWalletConfigFromMessage = async (
|
|
104
|
+
address: string,
|
|
105
|
+
message: string | Uint8Array,
|
|
106
|
+
signature: string | DecodedSignature,
|
|
107
|
+
chainId: BigNumberish,
|
|
108
|
+
walletContext?: WalletContext
|
|
109
|
+
): Promise<WalletConfig> => {
|
|
110
|
+
walletContext = walletContext || (await this.wallet.getWalletContext())
|
|
111
|
+
return recoverWalletConfig(address, encodeMessageDigest(message), signature, chainId, walletContext)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Recover the WalletConfig from a signature of a typedData object
|
|
115
|
+
recoverWalletConfigFromTypedData = async (
|
|
116
|
+
address: string,
|
|
117
|
+
typedData: TypedData,
|
|
118
|
+
signature: string | DecodedSignature,
|
|
119
|
+
chainId: BigNumberish,
|
|
120
|
+
walletContext?: WalletContext
|
|
121
|
+
): Promise<WalletConfig> => {
|
|
122
|
+
walletContext = walletContext || (await this.wallet.getWalletContext())
|
|
123
|
+
return recoverWalletConfig(address, encodeTypedDataDigest(typedData), signature, chainId, walletContext)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// sendTransaction()
|
|
127
|
+
// sendTransactions()
|
|
128
|
+
|
|
129
|
+
// sendETH()
|
|
130
|
+
// sendToken()
|
|
131
|
+
// sendCoin() -- sugar for sendToken()
|
|
132
|
+
// sendCollectible() -- sugar for sendToken()
|
|
133
|
+
// callContract()
|
|
134
|
+
|
|
135
|
+
// transactionHistory()
|
|
136
|
+
// getReceipt()
|
|
137
|
+
// getLogs()
|
|
138
|
+
// // ..
|
|
139
|
+
|
|
140
|
+
// isWalletDeployed()
|
|
141
|
+
// deployWallet()
|
|
142
|
+
|
|
143
|
+
// validateSignature()
|
|
144
|
+
// recoverWalletConfig()
|
|
145
|
+
// recoverAddress()
|
|
146
|
+
}
|