@metamask/connect-multichain 0.5.2 → 0.5.3
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 +12 -1
- package/README.md +409 -3
- package/dist/browser/es/connect-multichain.d.mts +6 -5
- package/dist/browser/es/connect-multichain.mjs +308 -224
- package/dist/browser/es/connect-multichain.mjs.map +1 -1
- package/dist/browser/es/metafile-esm.json +1 -1
- package/dist/browser/iife/connect-multichain.d.ts +6 -5
- package/dist/browser/iife/connect-multichain.js +24209 -24108
- package/dist/browser/iife/connect-multichain.js.map +1 -1
- package/dist/browser/iife/metafile-iife.json +1 -1
- package/dist/browser/umd/connect-multichain.d.ts +6 -5
- package/dist/browser/umd/connect-multichain.js +309 -225
- package/dist/browser/umd/connect-multichain.js.map +1 -1
- package/dist/browser/umd/metafile-cjs.json +1 -1
- package/dist/node/cjs/connect-multichain.d.ts +6 -5
- package/dist/node/cjs/connect-multichain.js +311 -228
- package/dist/node/cjs/connect-multichain.js.map +1 -1
- package/dist/node/cjs/metafile-cjs.json +1 -1
- package/dist/node/es/connect-multichain.d.mts +6 -5
- package/dist/node/es/connect-multichain.mjs +311 -226
- package/dist/node/es/connect-multichain.mjs.map +1 -1
- package/dist/node/es/metafile-esm.json +1 -1
- package/dist/react-native/es/connect-multichain.d.mts +6 -5
- package/dist/react-native/es/connect-multichain.mjs +308 -224
- package/dist/react-native/es/connect-multichain.mjs.map +1 -1
- package/dist/react-native/es/metafile-esm.json +1 -1
- package/dist/src/domain/logger/index.d.ts +1 -1
- package/dist/src/domain/logger/index.d.ts.map +1 -1
- package/dist/src/domain/logger/index.js.map +1 -1
- package/dist/src/domain/multichain/api/constants.js.map +1 -1
- package/dist/src/domain/multichain/api/types.d.ts +1 -1
- package/dist/src/domain/multichain/api/types.d.ts.map +1 -1
- package/dist/src/domain/multichain/index.d.ts.map +1 -1
- package/dist/src/domain/multichain/index.js.map +1 -1
- package/dist/src/domain/multichain/types.d.ts +2 -0
- package/dist/src/domain/multichain/types.d.ts.map +1 -1
- package/dist/src/domain/platform/index.d.ts.map +1 -1
- package/dist/src/domain/platform/index.js +1 -0
- package/dist/src/domain/platform/index.js.map +1 -1
- package/dist/src/index.browser.d.ts.map +1 -1
- package/dist/src/index.browser.js +9 -4
- package/dist/src/index.browser.js.map +1 -1
- package/dist/src/index.native.d.ts.map +1 -1
- package/dist/src/index.native.js +9 -4
- package/dist/src/index.native.js.map +1 -1
- package/dist/src/index.node.d.ts.map +1 -1
- package/dist/src/index.node.js +8 -4
- package/dist/src/index.node.js.map +1 -1
- package/dist/src/multichain/index.d.ts +1 -1
- package/dist/src/multichain/index.d.ts.map +1 -1
- package/dist/src/multichain/index.js +34 -9
- package/dist/src/multichain/index.js.map +1 -1
- package/dist/src/multichain/rpc/handlers/rpcClient.d.ts +9 -2
- package/dist/src/multichain/rpc/handlers/rpcClient.d.ts.map +1 -1
- package/dist/src/multichain/rpc/handlers/rpcClient.js +13 -3
- package/dist/src/multichain/rpc/handlers/rpcClient.js.map +1 -1
- package/dist/src/multichain/rpc/requestRouter.d.ts +14 -1
- package/dist/src/multichain/rpc/requestRouter.d.ts.map +1 -1
- package/dist/src/multichain/rpc/requestRouter.js +27 -5
- package/dist/src/multichain/rpc/requestRouter.js.map +1 -1
- package/dist/src/multichain/transports/default/index.d.ts +2 -2
- package/dist/src/multichain/transports/default/index.d.ts.map +1 -1
- package/dist/src/multichain/transports/default/index.js +14 -17
- package/dist/src/multichain/transports/default/index.js.map +1 -1
- package/dist/src/multichain/transports/multichainApiClientWrapper/index.d.ts +0 -2
- package/dist/src/multichain/transports/multichainApiClientWrapper/index.d.ts.map +1 -1
- package/dist/src/multichain/transports/multichainApiClientWrapper/index.js +18 -11
- package/dist/src/multichain/transports/multichainApiClientWrapper/index.js.map +1 -1
- package/dist/src/multichain/transports/mwp/KeyManager.d.ts.map +1 -1
- package/dist/src/multichain/transports/mwp/KeyManager.js.map +1 -1
- package/dist/src/multichain/transports/mwp/index.d.ts +1 -1
- package/dist/src/multichain/transports/mwp/index.d.ts.map +1 -1
- package/dist/src/multichain/transports/mwp/index.js +2 -1
- package/dist/src/multichain/transports/mwp/index.js.map +1 -1
- package/dist/src/multichain/utils/analytics.d.ts.map +1 -1
- package/dist/src/multichain/utils/analytics.js +1 -0
- package/dist/src/multichain/utils/analytics.js.map +1 -1
- package/dist/src/multichain/utils/index.d.ts +25 -0
- package/dist/src/multichain/utils/index.d.ts.map +1 -1
- package/dist/src/multichain/utils/index.js +38 -6
- package/dist/src/multichain/utils/index.js.map +1 -1
- package/dist/src/polyfills/buffer-shim.js +7 -3
- package/dist/src/polyfills/buffer-shim.js.map +1 -1
- package/dist/src/store/adapters/node.d.ts +1 -1
- package/dist/src/store/adapters/node.d.ts.map +1 -1
- package/dist/src/store/adapters/node.js +11 -4
- package/dist/src/store/adapters/node.js.map +1 -1
- package/dist/src/store/adapters/rn.d.ts.map +1 -1
- package/dist/src/store/adapters/rn.js +1 -0
- package/dist/src/store/adapters/rn.js.map +1 -1
- package/dist/src/store/adapters/web.d.ts +4 -4
- package/dist/src/store/adapters/web.d.ts.map +1 -1
- package/dist/src/store/adapters/web.js +6 -0
- package/dist/src/store/adapters/web.js.map +1 -1
- package/dist/src/store/index.d.ts.map +1 -1
- package/dist/src/store/index.js +2 -0
- package/dist/src/store/index.js.map +1 -1
- package/dist/src/ui/ModalFactory.d.ts.map +1 -1
- package/dist/src/ui/ModalFactory.js +1 -4
- package/dist/src/ui/ModalFactory.js.map +1 -1
- package/dist/src/ui/index.d.ts.map +1 -1
- package/dist/src/ui/index.js +2 -0
- package/dist/src/ui/index.js.map +1 -1
- package/dist/src/ui/index.native.d.ts.map +1 -1
- package/dist/src/ui/index.native.js +4 -1
- package/dist/src/ui/index.native.js.map +1 -1
- package/dist/src/ui/modals/base/AbstractInstallModal.d.ts +2 -3
- package/dist/src/ui/modals/base/AbstractInstallModal.d.ts.map +1 -1
- package/dist/src/ui/modals/base/AbstractInstallModal.js +28 -12
- package/dist/src/ui/modals/base/AbstractInstallModal.js.map +1 -1
- package/dist/src/ui/modals/base/AbstractOTPModal.d.ts +2 -2
- package/dist/src/ui/modals/base/AbstractOTPModal.d.ts.map +1 -1
- package/dist/src/ui/modals/base/AbstractOTPModal.js.map +1 -1
- package/dist/src/ui/modals/base/utils.d.ts +12 -0
- package/dist/src/ui/modals/base/utils.d.ts.map +1 -1
- package/dist/src/ui/modals/base/utils.js +16 -5
- package/dist/src/ui/modals/base/utils.js.map +1 -1
- package/dist/src/ui/modals/node/install.d.ts.map +1 -1
- package/dist/src/ui/modals/node/install.js +1 -1
- package/dist/src/ui/modals/node/install.js.map +1 -1
- package/dist/src/ui/modals/node/otp.d.ts.map +1 -1
- package/dist/src/ui/modals/node/otp.js +6 -2
- package/dist/src/ui/modals/node/otp.js.map +1 -1
- package/dist/src/ui/modals/rn/install.d.ts.map +1 -1
- package/dist/src/ui/modals/rn/install.js +7 -3
- package/dist/src/ui/modals/rn/install.js.map +1 -1
- package/dist/src/ui/modals/rn/otp.d.ts.map +1 -1
- package/dist/src/ui/modals/rn/otp.js +6 -2
- package/dist/src/ui/modals/rn/otp.js.map +1 -1
- package/dist/src/ui/modals/web/install.d.ts.map +1 -1
- package/dist/src/ui/modals/web/install.js +1 -1
- package/dist/src/ui/modals/web/install.js.map +1 -1
- package/dist/src/ui/modals/web/otp.d.ts.map +1 -1
- package/dist/src/ui/modals/web/otp.js +6 -2
- package/dist/src/ui/modals/web/otp.js.map +1 -1
- package/dist/types/connect-multichain.d.ts +6 -5
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.5.3]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- `createMultichainClient()` now accepts an optional `debug` param option which enables console debug logs when set to `true`. Defaults to `false`. ([#149](https://github.com/MetaMask/connect-monorepo/pull/149))
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Fix `sessionProperties` not being passed to `wallet_createSession` when recreating a session after scope/account changes ([#123](https://github.com/MetaMask/connect-monorepo/pull/123))
|
|
19
|
+
|
|
10
20
|
## [0.5.2]
|
|
11
21
|
|
|
12
22
|
### Changed
|
|
@@ -122,7 +132,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
122
132
|
|
|
123
133
|
- Initial release
|
|
124
134
|
|
|
125
|
-
[Unreleased]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-multichain@0.5.
|
|
135
|
+
[Unreleased]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-multichain@0.5.3...HEAD
|
|
136
|
+
[0.5.3]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-multichain@0.5.2...@metamask/connect-multichain@0.5.3
|
|
126
137
|
[0.5.2]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-multichain@0.5.1...@metamask/connect-multichain@0.5.2
|
|
127
138
|
[0.5.1]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-multichain@0.5.0...@metamask/connect-multichain@0.5.1
|
|
128
139
|
[0.5.0]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-multichain@0.4.0...@metamask/connect-multichain@0.5.0
|
package/README.md
CHANGED
|
@@ -1,15 +1,421 @@
|
|
|
1
1
|
# `@metamask/connect-multichain`
|
|
2
2
|
|
|
3
|
-
multichain
|
|
3
|
+
> Core multichain connectivity library for MetaMask Connect SDK. Supports multiple blockchain networks including EVM chains (Ethereum, Polygon, etc.) and non-EVM chains (Solana, etc.).
|
|
4
|
+
|
|
5
|
+
This package provides support for connecting to MetaMask and using the [CAIP Multichain API](https://github.com/MetaMask/metamask-improvement-proposals/blob/main/MIPs/mip-5.md) which agnostically supports making requests to multiple blockchain ecosystems simultaneously.
|
|
4
6
|
|
|
5
7
|
## Installation
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
```bash
|
|
10
|
+
yarn add @metamask/connect-multichain
|
|
11
|
+
```
|
|
8
12
|
|
|
9
13
|
or
|
|
10
14
|
|
|
11
|
-
|
|
15
|
+
```bash
|
|
16
|
+
npm install @metamask/connect-multichain
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Quick Start
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import {
|
|
23
|
+
createMultichainClient,
|
|
24
|
+
getInfuraRpcUrls,
|
|
25
|
+
} from '@metamask/connect-multichain';
|
|
26
|
+
|
|
27
|
+
const client = await createMultichainClient({
|
|
28
|
+
dapp: {
|
|
29
|
+
name: 'My DApp',
|
|
30
|
+
url: 'https://mydapp.com',
|
|
31
|
+
},
|
|
32
|
+
api: {
|
|
33
|
+
supportedNetworks: {
|
|
34
|
+
// use the `getInfuraRpcUrls` helper to generate a map of Infura RPC endpoints
|
|
35
|
+
...getInfuraRpcUrls(INFURA_API_KEY),
|
|
36
|
+
// or specify your own CAIP Chain ID to rpc endpoint mapping
|
|
37
|
+
'eip155:1': 'https://mainnet.example.io/rpc',
|
|
38
|
+
'eip155:137': 'https://polygon-mainnet.example.io/rpc',
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// Connect to MetaMask with specific chain scopes
|
|
44
|
+
await client.connect(['eip155:1', 'eip155:137'], []);
|
|
45
|
+
|
|
46
|
+
// Invoke methods on specific chains
|
|
47
|
+
const blockNumber = await client.invokeMethod({
|
|
48
|
+
scope: 'eip155:1',
|
|
49
|
+
request: {
|
|
50
|
+
method: 'eth_blockNumber',
|
|
51
|
+
params: [],
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Usage
|
|
57
|
+
|
|
58
|
+
### Browser (Web)
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
import { createMultichainClient } from '@metamask/connect-multichain';
|
|
62
|
+
|
|
63
|
+
const client = await createMultichainClient({
|
|
64
|
+
dapp: {
|
|
65
|
+
name: 'My Web DApp',
|
|
66
|
+
url: 'https://mydapp.com',
|
|
67
|
+
iconUrl: 'https://mydapp.com/icon.png',
|
|
68
|
+
},
|
|
69
|
+
api: {
|
|
70
|
+
supportedNetworks: {
|
|
71
|
+
'eip155:1': 'https://mainnet.infura.io/v3/YOUR_KEY',
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
ui: {
|
|
75
|
+
preferExtension: true, // Prefer browser extension over mobile QR
|
|
76
|
+
showInstallModal: false, // Show modal to install extension
|
|
77
|
+
headless: false, // Set true for custom QR UI
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Node.js
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
import { createMultichainClient } from '@metamask/connect-multichain';
|
|
86
|
+
|
|
87
|
+
const client = await createMultichainClient({
|
|
88
|
+
dapp: {
|
|
89
|
+
name: 'My Node App',
|
|
90
|
+
url: 'https://mydapp.com',
|
|
91
|
+
},
|
|
92
|
+
api: {
|
|
93
|
+
supportedNetworks: {
|
|
94
|
+
'eip155:1': 'https://mainnet.infura.io/v3/YOUR_KEY',
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
// Connect will display QR code in terminal
|
|
100
|
+
await client.connect(['eip155:1'], []);
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### React Native
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
import { Linking } from 'react-native';
|
|
107
|
+
import { createMultichainClient } from '@metamask/connect-multichain';
|
|
108
|
+
|
|
109
|
+
const client = await createMultichainClient({
|
|
110
|
+
dapp: {
|
|
111
|
+
name: 'My RN App',
|
|
112
|
+
url: 'https://mydapp.com',
|
|
113
|
+
},
|
|
114
|
+
api: {
|
|
115
|
+
supportedNetworks: {
|
|
116
|
+
'eip155:1': 'https://mainnet.infura.io/v3/YOUR_KEY',
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
mobile: {
|
|
120
|
+
preferredOpenLink: (deeplink) => {
|
|
121
|
+
Linking.openURL(deeplink);
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## TypeScript
|
|
128
|
+
|
|
129
|
+
This package is written in TypeScript and includes full type definitions. No additional `@types` package is required.
|
|
130
|
+
|
|
131
|
+
## API Reference
|
|
132
|
+
|
|
133
|
+
### `createMultichainClient(options)`
|
|
134
|
+
|
|
135
|
+
Factory function to create a new Multichain SDK instance.
|
|
136
|
+
|
|
137
|
+
#### Parameters
|
|
138
|
+
|
|
139
|
+
| Option | Type | Required | Description |
|
|
140
|
+
| --------------------------- | --------------------------------------------- | -------- | ---------------------------------------------- |
|
|
141
|
+
| `dapp.name` | `string` | Yes | Name of your dApp |
|
|
142
|
+
| `api.supportedNetworks` | `RpcUrlsMap` | Yes | Map of CAIP chain IDs to RPC URLs |
|
|
143
|
+
| `dapp.url` | `string` | No | URL of your dApp |
|
|
144
|
+
| `dapp.iconUrl` | `string` | No | Icon URL for your dApp |
|
|
145
|
+
| `dapp.base64Icon` | `string` | No | Base64-encoded icon (alternative to iconUrl) |
|
|
146
|
+
| `storage` | `StoreClient` | No | Custom storage adapter |
|
|
147
|
+
| `ui.factory` | `BaseModalFactory` | No | Custom modal factory |
|
|
148
|
+
| `ui.headless` | `boolean` | No | Run without UI (for custom QR implementations) |
|
|
149
|
+
| `ui.preferExtension` | `boolean` | No | Prefer browser extension (default: true) |
|
|
150
|
+
| `ui.showInstallModal` | `boolean` | No | Show installation modal |
|
|
151
|
+
| `mobile.preferredOpenLink` | `(deeplink: string, target?: string) => void` | No | Custom deeplink handler |
|
|
152
|
+
| `mobile.useDeeplink` | `boolean` | No | Use `metamask://` instead of universal links |
|
|
153
|
+
| `analytics.integrationType` | `string` | No | Integration type for analytics |
|
|
154
|
+
| `transport.extensionId` | `string` | No | Custom extension ID |
|
|
155
|
+
| `transport.onNotification` | `(notification: unknown) => void` | No | Notification handler |
|
|
156
|
+
| `debug` | `boolean` | No | Enable debug logging |
|
|
157
|
+
|
|
158
|
+
#### Returns
|
|
159
|
+
|
|
160
|
+
`Promise<MetaMaskConnectMultichain>` - A fully initialized SDK instance.
|
|
161
|
+
|
|
162
|
+
```typescript
|
|
163
|
+
const client = await createMultichainClient({
|
|
164
|
+
dapp: { name: 'My DApp', url: 'https://mydapp.com' },
|
|
165
|
+
api: {
|
|
166
|
+
supportedNetworks: {
|
|
167
|
+
'eip155:1': 'https://mainnet.infura.io/v3/KEY',
|
|
168
|
+
'eip155:137': 'https://polygon-mainnet.infura.io/v3/KEY',
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
### `MetaMaskConnectMultichain`
|
|
177
|
+
|
|
178
|
+
The main SDK class extending `MultichainCore`.
|
|
179
|
+
|
|
180
|
+
#### Methods
|
|
181
|
+
|
|
182
|
+
##### `connect(scopes, caipAccountIds, sessionProperties?, forceRequest?)`
|
|
183
|
+
|
|
184
|
+
Connects to MetaMask with specified chain scopes.
|
|
185
|
+
|
|
186
|
+
**Parameters**
|
|
187
|
+
|
|
188
|
+
| Name | Type | Required | Description |
|
|
189
|
+
| ------------------- | ------------------- | -------- | ------------------------------------------------------------------------------------------------------- |
|
|
190
|
+
| `scopes` | `Scope[]` | Yes | Array of CAIP-2 chain identifiers to request permission for |
|
|
191
|
+
| `caipAccountIds` | `CaipAccountId[]` | Yes | Array of CAIP-10 account identifiers to request (pass `[]` if no specific accounts should be requested) |
|
|
192
|
+
| `sessionProperties` | `SessionProperties` | No | Additional session properties |
|
|
193
|
+
| `forceRequest` | `boolean` | No | Force a new connection request even if already connected |
|
|
194
|
+
|
|
195
|
+
**Returns**
|
|
196
|
+
|
|
197
|
+
`Promise<void>`
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
await client.connect(
|
|
201
|
+
['eip155:1', 'eip155:137'], // Chain scopes to request
|
|
202
|
+
['eip155:1:0x...'], // Specific accounts to request
|
|
203
|
+
);
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
##### `disconnect()`
|
|
207
|
+
|
|
208
|
+
Disconnects from the wallet and cleans up resources.
|
|
209
|
+
|
|
210
|
+
**Parameters**
|
|
211
|
+
|
|
212
|
+
None.
|
|
213
|
+
|
|
214
|
+
**Returns**
|
|
215
|
+
|
|
216
|
+
`Promise<void>`
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
await client.disconnect();
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
##### `invokeMethod(options)`
|
|
223
|
+
|
|
224
|
+
Invokes an RPC method on a specific chain.
|
|
225
|
+
|
|
226
|
+
**Parameters**
|
|
227
|
+
|
|
228
|
+
| Name | Type | Required | Description |
|
|
229
|
+
| ------------------------ | ----------- | -------- | --------------------------------------------------- |
|
|
230
|
+
| `options.scope` | `Scope` | Yes | The CAIP-2 chain identifier to invoke the method on |
|
|
231
|
+
| `options.request.method` | `string` | Yes | The RPC method name |
|
|
232
|
+
| `options.request.params` | `unknown[]` | No | The method parameters |
|
|
233
|
+
|
|
234
|
+
**Returns**
|
|
235
|
+
|
|
236
|
+
`Promise<Json>` - The result of the RPC method call.
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
const result = await client.invokeMethod({
|
|
240
|
+
scope: 'eip155:1',
|
|
241
|
+
request: {
|
|
242
|
+
method: 'eth_getBalance',
|
|
243
|
+
params: ['0x...', 'latest'],
|
|
244
|
+
},
|
|
245
|
+
});
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
#### Properties
|
|
249
|
+
|
|
250
|
+
| Property | Type | Description |
|
|
251
|
+
| ----------- | --------------------- | --------------------------------------------------------------------------------------------- |
|
|
252
|
+
| `status` | `ConnectionStatus` | Connection status ( `'loaded'`, `'pending'`, `'connecting'`, `'connected'`, `'disconnected'`) |
|
|
253
|
+
| `provider` | `MultichainApiClient` | Multichain API client |
|
|
254
|
+
| `transport` | `ExtendedTransport` | Active transport layer |
|
|
255
|
+
|
|
256
|
+
#### Events
|
|
257
|
+
|
|
258
|
+
```typescript
|
|
259
|
+
// Session changes
|
|
260
|
+
client.on('wallet_sessionChanged', (session) => {
|
|
261
|
+
console.log('Session updated:', session);
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
// QR code display (for custom UI)
|
|
265
|
+
client.on('display_uri', (uri) => {
|
|
266
|
+
console.log('Display QR code:', uri);
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
// Connection state changes
|
|
270
|
+
client.on('stateChanged', (status) => {
|
|
271
|
+
console.log('Status:', status);
|
|
272
|
+
});
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
### `MultichainCore`
|
|
278
|
+
|
|
279
|
+
Abstract base class providing core multichain functionality.
|
|
280
|
+
|
|
281
|
+
#### Methods
|
|
282
|
+
|
|
283
|
+
##### `on(event, handler)`
|
|
284
|
+
|
|
285
|
+
Registers an event handler.
|
|
286
|
+
|
|
287
|
+
**Parameters**
|
|
288
|
+
|
|
289
|
+
| Name | Type | Required | Description |
|
|
290
|
+
| --------- | ---------- | -------- | --------------------------------------------------------- |
|
|
291
|
+
| `event` | `string` | Yes | The event name to listen for |
|
|
292
|
+
| `handler` | `Function` | Yes | The callback function to invoke when the event is emitted |
|
|
293
|
+
|
|
294
|
+
**Returns**
|
|
295
|
+
|
|
296
|
+
`void`
|
|
297
|
+
|
|
298
|
+
##### `off(event, handler)`
|
|
299
|
+
|
|
300
|
+
Removes an event handler.
|
|
301
|
+
|
|
302
|
+
**Parameters**
|
|
303
|
+
|
|
304
|
+
| Name | Type | Required | Description |
|
|
305
|
+
| --------- | ---------- | -------- | ------------------------------------ |
|
|
306
|
+
| `event` | `string` | Yes | The event name to stop listening for |
|
|
307
|
+
| `handler` | `Function` | Yes | The callback function to remove |
|
|
308
|
+
|
|
309
|
+
**Returns**
|
|
310
|
+
|
|
311
|
+
`void`
|
|
312
|
+
|
|
313
|
+
##### `emit(event, args)`
|
|
314
|
+
|
|
315
|
+
Emits an event to all registered handlers.
|
|
316
|
+
|
|
317
|
+
**Parameters**
|
|
318
|
+
|
|
319
|
+
| Name | Type | Required | Description |
|
|
320
|
+
| ------- | -------- | -------- | --------------------------------------- |
|
|
321
|
+
| `event` | `string` | Yes | The event name to emit |
|
|
322
|
+
| `args` | `any` | No | Arguments to pass to the event handlers |
|
|
323
|
+
|
|
324
|
+
**Returns**
|
|
325
|
+
|
|
326
|
+
`void`
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
### Utilities
|
|
331
|
+
|
|
332
|
+
#### `getInfuraRpcUrls(infuraApiKey)`
|
|
333
|
+
|
|
334
|
+
Generates Infura RPC URLs for common networks keyed by CAIP Chain ID.
|
|
335
|
+
|
|
336
|
+
**Parameters**
|
|
337
|
+
|
|
338
|
+
| Name | Type | Required | Description |
|
|
339
|
+
| -------------- | -------- | -------- | ------------------- |
|
|
340
|
+
| `infuraApiKey` | `string` | Yes | Your Infura API key |
|
|
341
|
+
|
|
342
|
+
**Returns**
|
|
343
|
+
|
|
344
|
+
A map of hex chain IDs to Infura RPC URLs. See https://docs.metamask.io/services
|
|
345
|
+
|
|
346
|
+
```typescript
|
|
347
|
+
import { getInfuraRpcUrls } from '@metamask/connect-multichain';
|
|
348
|
+
|
|
349
|
+
const rpcUrls = getInfuraRpcUrls('YOUR_INFURA_KEY');
|
|
350
|
+
// {
|
|
351
|
+
// 'eip155:1': 'https://mainnet.infura.io/v3/YOUR_KEY',
|
|
352
|
+
// 'eip155:137': 'https://polygon-mainnet.infura.io/v3/YOUR_KEY',
|
|
353
|
+
// 'eip155:11155111': 'https://sepolia.infura.io/v3/YOUR_KEY',
|
|
354
|
+
// ...
|
|
355
|
+
// }
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
---
|
|
359
|
+
|
|
360
|
+
### Errors
|
|
361
|
+
|
|
362
|
+
The package exports various error classes for handling specific error conditions:
|
|
363
|
+
|
|
364
|
+
- `ProtocolError` - Base protocol error
|
|
365
|
+
- `StorageError` - Storage operation errors
|
|
366
|
+
- `RpcError` - RPC request errors
|
|
367
|
+
|
|
368
|
+
```typescript
|
|
369
|
+
import { ProtocolError } from '@metamask/connect-multichain';
|
|
370
|
+
|
|
371
|
+
try {
|
|
372
|
+
await client.connect(['eip155:1'], []);
|
|
373
|
+
} catch (error) {
|
|
374
|
+
if (error instanceof ProtocolError) {
|
|
375
|
+
console.log('Protocol error:', error.code, error.message);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
---
|
|
381
|
+
|
|
382
|
+
## Headless Mode
|
|
383
|
+
|
|
384
|
+
For custom QR code implementations, use headless mode:
|
|
385
|
+
|
|
386
|
+
```typescript
|
|
387
|
+
const client = await createMultichainClient({
|
|
388
|
+
dapp: { name: 'My DApp' },
|
|
389
|
+
api: { supportedNetworks: { 'eip155:1': 'https://...' } },
|
|
390
|
+
ui: { headless: true },
|
|
391
|
+
});
|
|
392
|
+
|
|
393
|
+
// Listen for QR code URIs
|
|
394
|
+
client.on('display_uri', (uri) => {
|
|
395
|
+
// Display your custom QR code with this URI
|
|
396
|
+
displayMyCustomQRCode(uri);
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
await client.connect(['eip155:1'], []);
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
## Standards
|
|
403
|
+
|
|
404
|
+
- [CAIP-25](https://chainagnostic.org/CAIPs/caip-25) (please see CAIP Multichain API)
|
|
405
|
+
- [CAIP-27](https://chainagnostic.org/CAIPs/caip-27)
|
|
406
|
+
- [CAIP-2](https://chainagnostic.org/CAIPs/caip-2)
|
|
407
|
+
- [CAIP-10](https://chainagnostic.org/CAIPs/caip-10)
|
|
408
|
+
- [CAIP-217](https://chainagnostic.org/CAIPs/caip-217)
|
|
409
|
+
- [CAIP-316](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-316.md)
|
|
410
|
+
- [CAIP-312](https://chainagnostic.org/CAIPs/caip-312)
|
|
411
|
+
- [CAIP-311](https://chainagnostic.org/CAIPs/caip-311)
|
|
412
|
+
- [CAIP-285](https://chainagnostic.org/CAIPs/caip-285)
|
|
413
|
+
- [CAIP Multichain API](https://github.com/MetaMask/metamask-improvement-proposals/blob/main/MIPs/mip-5.md)
|
|
12
414
|
|
|
13
415
|
## Contributing
|
|
14
416
|
|
|
15
417
|
This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/connect-monorepo#readme).
|
|
418
|
+
|
|
419
|
+
## License
|
|
420
|
+
|
|
421
|
+
MIT
|
|
@@ -265,17 +265,16 @@ type RPCResponse = {
|
|
|
265
265
|
result: unknown;
|
|
266
266
|
};
|
|
267
267
|
|
|
268
|
-
declare abstract class AbstractOTPCodeModal extends Modal<OTPCodeWidgetProps
|
|
268
|
+
declare abstract class AbstractOTPCodeModal extends Modal<OTPCodeWidgetProps> {
|
|
269
269
|
protected instance?: HTMLMmOtpModalElement | undefined;
|
|
270
270
|
get otpCode(): string;
|
|
271
271
|
set otpCode(code: string);
|
|
272
272
|
updateOTPCode(code: string): void;
|
|
273
273
|
}
|
|
274
274
|
|
|
275
|
-
declare abstract class AbstractInstallModal extends Modal<InstallWidgetProps
|
|
275
|
+
declare abstract class AbstractInstallModal extends Modal<InstallWidgetProps> {
|
|
276
|
+
#private;
|
|
276
277
|
protected instance?: HTMLMmInstallModalElement | undefined;
|
|
277
|
-
private expirationInterval;
|
|
278
|
-
private lastLoggedCountdown;
|
|
279
278
|
abstract renderQRCode(link: QRLink, connectionRequest: ConnectionRequest): void;
|
|
280
279
|
get link(): QRLink;
|
|
281
280
|
set link(link: QRLink);
|
|
@@ -428,6 +427,8 @@ type MultichainOptions = {
|
|
|
428
427
|
extensionId?: string;
|
|
429
428
|
onNotification?: (notification: unknown) => void;
|
|
430
429
|
};
|
|
430
|
+
/** Enable debug logging */
|
|
431
|
+
debug?: boolean;
|
|
431
432
|
};
|
|
432
433
|
type MultiChainFNOptions = Omit<MultichainOptions, 'storage' | 'ui'> & {
|
|
433
434
|
ui?: Omit<MultichainOptions['ui'], 'factory'>;
|
|
@@ -521,7 +522,7 @@ declare abstract class StoreClient {
|
|
|
521
522
|
* Supported debug namespace types for the MetaMask SDK logger.
|
|
522
523
|
* These namespaces help categorize and filter debug output.
|
|
523
524
|
*/
|
|
524
|
-
type LoggerNameSpaces = 'metamask-sdk' | 'metamask-sdk:core' | 'metamask-sdk:provider' | 'metamask-sdk:ui' | 'metamask-sdk:transport';
|
|
525
|
+
type LoggerNameSpaces = 'metamask-sdk:*' | 'metamask-sdk' | 'metamask-sdk:core' | 'metamask-sdk:provider' | 'metamask-sdk:ui' | 'metamask-sdk:transport';
|
|
525
526
|
/**
|
|
526
527
|
* Creates a debug logger instance with the specified namespace and color.
|
|
527
528
|
*
|