@0xsequence/provider 1.0.4 → 1.1.0
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/dist/0xsequence-provider.cjs.d.ts +1 -0
- package/dist/0xsequence-provider.cjs.d.ts.map +1 -0
- package/dist/0xsequence-provider.cjs.dev.js +1742 -1678
- package/dist/0xsequence-provider.cjs.prod.js +1742 -1678
- package/dist/0xsequence-provider.esm.js +1735 -1676
- package/dist/declarations/src/client.d.ts +74 -0
- package/dist/declarations/src/index.d.ts +7 -5
- package/dist/declarations/src/init.d.ts +25 -0
- package/dist/declarations/src/provider.d.ts +127 -63
- package/dist/declarations/src/signer.d.ts +87 -0
- package/dist/declarations/src/transports/base-provider-transport.d.ts +1 -1
- package/dist/declarations/src/transports/base-wallet-transport.d.ts +2 -2
- package/dist/declarations/src/transports/extension-transport/base-injected-transport.d.ts +1 -1
- package/dist/declarations/src/transports/extension-transport/extension-message-handler.d.ts +3 -3
- package/dist/declarations/src/transports/extension-transport/extension-message-provider.d.ts +2 -2
- package/dist/declarations/src/transports/extension-transport/index.d.ts +3 -3
- package/dist/declarations/src/transports/index.d.ts +8 -8
- package/dist/declarations/src/transports/mux-transport/index.d.ts +1 -1
- package/dist/declarations/src/transports/mux-transport/mux-message-provider.d.ts +22 -1
- package/dist/declarations/src/transports/proxy-transport/index.d.ts +3 -3
- package/dist/declarations/src/transports/proxy-transport/proxy-message-channel.d.ts +1 -1
- package/dist/declarations/src/transports/proxy-transport/proxy-message-handler.d.ts +4 -4
- package/dist/declarations/src/transports/proxy-transport/proxy-message-provider.d.ts +3 -3
- package/dist/declarations/src/transports/unreal-transport/index.d.ts +2 -2
- package/dist/declarations/src/transports/unreal-transport/unreal-message-handler.d.ts +3 -3
- package/dist/declarations/src/transports/unreal-transport/unreal-message-provider.d.ts +2 -2
- package/dist/declarations/src/transports/wallet-request-handler.d.ts +1 -2
- package/dist/declarations/src/transports/window-transport/index.d.ts +2 -2
- package/dist/declarations/src/transports/window-transport/window-message-handler.d.ts +3 -3
- package/dist/declarations/src/transports/window-transport/window-message-provider.d.ts +2 -2
- package/dist/declarations/src/types.d.ts +25 -9
- package/dist/declarations/src/utils/index.d.ts +10 -7
- package/dist/declarations/src/utils.d.ts +21 -15
- package/package.json +19 -12
- package/src/client.ts +423 -0
- package/src/extended.ts +4 -0
- package/src/index.ts +3 -1
- package/src/init.ts +134 -0
- package/src/provider.ts +447 -424
- package/src/signer.ts +316 -0
- package/src/transports/base-wallet-transport.ts +3 -8
- package/src/transports/mux-transport/mux-message-provider.ts +86 -2
- package/src/transports/proxy-transport/proxy-message-provider.ts +1 -1
- package/src/transports/wallet-request-handler.ts +3 -33
- package/src/transports/window-transport/window-message-provider.ts +4 -2
- package/src/types.ts +41 -10
- package/src/utils/index.ts +16 -76
- package/src/utils.ts +81 -51
- package/dist/declarations/src/eip191exceptions.d.ts +0 -3
- package/dist/declarations/src/extended.d.ts +0 -6
- package/dist/declarations/src/transports/unreal-transport/overridelogs.d.ts +0 -4
- package/dist/declarations/src/wallet.d.ts +0 -105
- package/src/wallet.ts +0 -770
package/src/init.ts
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { CachedProvider, ChainIdLike, JsonRpcRouter, JsonRpcSender, NetworkConfig, allNetworks, exceptionProviderMiddleware, findNetworkConfig, loggingProviderMiddleware } from "@0xsequence/network"
|
|
2
|
+
import { MuxTransportTemplate } from "./transports"
|
|
3
|
+
import { ItemStore, useBestStore } from "./utils"
|
|
4
|
+
import { ethers } from "ethers"
|
|
5
|
+
import { SequenceClient } from "./client"
|
|
6
|
+
import { SequenceProvider } from "./provider"
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
export interface ProviderConfig {
|
|
10
|
+
// The local storage dependency for the wallet provider, defaults to window.localStorage.
|
|
11
|
+
// For example, this option should be used when using React Native since window.localStorage is not available.
|
|
12
|
+
localStorage?: ItemStore
|
|
13
|
+
|
|
14
|
+
// defaultNetwork is the primary network of a dapp and the default network a
|
|
15
|
+
// provider will communicate. Note: this setting is also configurable from the
|
|
16
|
+
// Wallet constructor's first argument. If both are specified, then they
|
|
17
|
+
// need to match
|
|
18
|
+
defaultNetwork?: ChainIdLike
|
|
19
|
+
|
|
20
|
+
// networks is a configuration list of networks used by the wallet. This list
|
|
21
|
+
// is combined with the network list specified by sequence.js.
|
|
22
|
+
// notice that this can only replace the rpc urls on the dapp side,
|
|
23
|
+
// the networks on wallet-webapp side remain the same.
|
|
24
|
+
//
|
|
25
|
+
// NOTICE: It's not possible to define networks that aren't already
|
|
26
|
+
// defined in sequence.js.
|
|
27
|
+
networks?: Partial<NetworkConfig>[]
|
|
28
|
+
|
|
29
|
+
// transports for dapp to wallet jron-rpc communication
|
|
30
|
+
transports?: MuxTransportTemplate
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export const DefaultProviderConfig = {
|
|
34
|
+
transports: {
|
|
35
|
+
walletAppURL: 'https://sequence.app',
|
|
36
|
+
windowTransport: { enabled: true },
|
|
37
|
+
proxyTransport: { enabled: false }
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
defaultNetwork: 1,
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
let sequenceWalletProvider: SequenceProvider | undefined
|
|
44
|
+
|
|
45
|
+
export const initWallet = (
|
|
46
|
+
partialConfig?: Partial<ProviderConfig>
|
|
47
|
+
) => {
|
|
48
|
+
if (sequenceWalletProvider) {
|
|
49
|
+
return sequenceWalletProvider
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Combine both the provided config and the default config
|
|
53
|
+
const config = {
|
|
54
|
+
...DefaultProviderConfig,
|
|
55
|
+
...partialConfig,
|
|
56
|
+
transports: {
|
|
57
|
+
...DefaultProviderConfig.transports,
|
|
58
|
+
...partialConfig?.transports,
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const rpcProviders: Record<number, ethers.providers.JsonRpcProvider> = {}
|
|
63
|
+
|
|
64
|
+
// Find any new networks that aren't already defined in sequence.js
|
|
65
|
+
// and add them to the list of networks, (they must have a rpcUrl and chainId)
|
|
66
|
+
const newNetworks = (config.networks?.filter((n) => {
|
|
67
|
+
n.rpcUrl !== undefined &&
|
|
68
|
+
n.chainId !== undefined &&
|
|
69
|
+
!allNetworks.find((an) => an.chainId === n.chainId)
|
|
70
|
+
}) ?? []) as NetworkConfig[]
|
|
71
|
+
|
|
72
|
+
// Override any information about the networks using the config
|
|
73
|
+
const combinedNetworks = allNetworks.map((n) => {
|
|
74
|
+
const network = config.networks?.find((cn) => cn.chainId === n.chainId)
|
|
75
|
+
return network ? { ...n, ...network } : n
|
|
76
|
+
}).concat(newNetworks)
|
|
77
|
+
|
|
78
|
+
// This build a "public rpc" on demand, we build them on demand because we don't want to
|
|
79
|
+
// generate a bunch of providers for networks that aren't used.
|
|
80
|
+
const providerForChainId = (chainId: number) => {
|
|
81
|
+
if (!rpcProviders[chainId]) {
|
|
82
|
+
const rpcUrl = combinedNetworks.find((n) => n.chainId === chainId)?.rpcUrl
|
|
83
|
+
if (!rpcUrl) {
|
|
84
|
+
throw new Error(`no rpcUrl found for chainId: ${chainId}`)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const baseProvider = new ethers.providers.JsonRpcProvider(rpcUrl)
|
|
88
|
+
const router = new JsonRpcRouter(
|
|
89
|
+
[
|
|
90
|
+
loggingProviderMiddleware,
|
|
91
|
+
exceptionProviderMiddleware,
|
|
92
|
+
new CachedProvider()
|
|
93
|
+
],
|
|
94
|
+
new JsonRpcSender(baseProvider)
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
rpcProviders[chainId] = new ethers.providers.Web3Provider(router, chainId)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return rpcProviders[chainId]
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// This is the starting default network (as defined by the config)
|
|
104
|
+
// it can be later be changed using `wallet_switchEthereumChain` or some
|
|
105
|
+
// of the other methods on the provider.
|
|
106
|
+
const defaultNetwork = config.defaultNetwork ? findNetworkConfig(combinedNetworks, config.defaultNetwork)?.chainId : undefined
|
|
107
|
+
if (!defaultNetwork && config.defaultNetwork) {
|
|
108
|
+
throw new Error(`defaultNetwork not found for chainId: ${config.defaultNetwork}`)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Generate ItemStore
|
|
112
|
+
const itemStore = config.localStorage || useBestStore()
|
|
113
|
+
|
|
114
|
+
// Create client, provider and return signer
|
|
115
|
+
const client = new SequenceClient(config.transports, itemStore, defaultNetwork)
|
|
116
|
+
sequenceWalletProvider = new SequenceProvider(client, providerForChainId)
|
|
117
|
+
|
|
118
|
+
return sequenceWalletProvider
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export const unregisterWallet = () => {
|
|
122
|
+
if (!sequenceWalletProvider) return
|
|
123
|
+
sequenceWalletProvider.client.closeWallet()
|
|
124
|
+
sequenceWalletProvider.client.transport.unregister()
|
|
125
|
+
sequenceWalletProvider = undefined
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export const getWallet = () => {
|
|
129
|
+
if (!sequenceWalletProvider) {
|
|
130
|
+
throw new Error('Wallet has not been initialized, call sequence.initWallet(config) first.')
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return sequenceWalletProvider
|
|
134
|
+
}
|