@metamask/connect-multichain 0.15.0 → 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/CHANGELOG.md +36 -1
- package/README.md +0 -1
- package/dist/browser/es/connect-multichain.d.mts +18 -8
- package/dist/browser/es/connect-multichain.mjs +558 -378
- 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 +18 -8
- package/dist/browser/iife/connect-multichain.js +571 -378
- 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 +18 -8
- package/dist/browser/umd/connect-multichain.js +558 -378
- 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 +18 -8
- package/dist/node/cjs/connect-multichain.js +560 -376
- 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 +18 -8
- package/dist/node/es/connect-multichain.mjs +557 -375
- 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 +18 -8
- package/dist/react-native/es/connect-multichain.mjs +556 -374
- 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/errors/rpc.d.ts +11 -1
- package/dist/src/domain/errors/rpc.d.ts.map +1 -1
- package/dist/src/domain/errors/rpc.js +10 -2
- package/dist/src/domain/errors/rpc.js.map +1 -1
- package/dist/src/domain/multichain/api/constants.d.ts +1 -0
- package/dist/src/domain/multichain/api/constants.d.ts.map +1 -1
- package/dist/src/domain/multichain/api/constants.js +13 -0
- package/dist/src/domain/multichain/api/constants.js.map +1 -1
- package/dist/src/domain/multichain/index.d.ts +2 -2
- 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 +0 -1
- 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 +27 -5
- package/dist/src/domain/platform/index.js.map +1 -1
- package/dist/src/domain/store/client.d.ts +3 -3
- package/dist/src/domain/store/client.d.ts.map +1 -1
- package/dist/src/domain/utils/index.d.ts +1 -0
- package/dist/src/domain/utils/index.d.ts.map +1 -1
- package/dist/src/domain/utils/index.js +5 -1
- package/dist/src/domain/utils/index.js.map +1 -1
- package/dist/src/multichain/index.d.ts +2 -3
- package/dist/src/multichain/index.d.ts.map +1 -1
- package/dist/src/multichain/index.js +142 -147
- package/dist/src/multichain/index.js.map +1 -1
- package/dist/src/multichain/rpc/invocationError.d.ts +9 -0
- package/dist/src/multichain/rpc/invocationError.d.ts.map +1 -0
- package/dist/src/multichain/rpc/invocationError.js +99 -0
- package/dist/src/multichain/rpc/invocationError.js.map +1 -0
- package/dist/src/multichain/rpc/requestRouter.d.ts +15 -0
- package/dist/src/multichain/rpc/requestRouter.d.ts.map +1 -1
- package/dist/src/multichain/rpc/requestRouter.js +38 -20
- package/dist/src/multichain/rpc/requestRouter.js.map +1 -1
- package/dist/src/multichain/transports/default/index.d.ts.map +1 -1
- package/dist/src/multichain/transports/default/index.js +25 -10
- package/dist/src/multichain/transports/default/index.js.map +1 -1
- package/dist/src/multichain/transports/multichainApiClientWrapper/index.d.ts +2 -1
- package/dist/src/multichain/transports/multichainApiClientWrapper/index.d.ts.map +1 -1
- package/dist/src/multichain/transports/multichainApiClientWrapper/index.js +25 -17
- package/dist/src/multichain/transports/multichainApiClientWrapper/index.js.map +1 -1
- package/dist/src/multichain/transports/mwp/index.d.ts +3 -1
- package/dist/src/multichain/transports/mwp/index.d.ts.map +1 -1
- package/dist/src/multichain/transports/mwp/index.js +235 -172
- package/dist/src/multichain/transports/mwp/index.js.map +1 -1
- package/dist/src/store/index.d.ts +3 -3
- package/dist/src/store/index.d.ts.map +1 -1
- package/dist/src/store/index.js +8 -8
- 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 +5 -1
- package/dist/src/ui/ModalFactory.js.map +1 -1
- package/dist/src/ui/index.js +1 -1
- package/dist/src/ui/index.js.map +1 -1
- package/dist/src/ui/modals/web/install.d.ts.map +1 -1
- package/dist/src/ui/modals/web/install.js.map +1 -1
- package/dist/types/connect-multichain.d.ts +18 -8
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,39 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.1.0]
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- Normalize `invokeMethod()` wallet errors across transports. Wallet-side JSON-RPC / EIP-1193 `code`, `message`, and `data` fields are now preserved in `RPCInvokeMethodErr` as `rpcCode`, `rpcMessage`, and `rpcData` whether the wallet error arrives as a resolved JSON-RPC error response or as a rejected transport error. Wrapped transport errors now walk a capped `cause` chain so wallet error details are not hidden by transport/API wrapper errors. ([#312](https://github.com/MetaMask/connect-monorepo/pull/312))
|
|
15
|
+
- `DefaultTransport` and `MWPTransport` now preserve the wallet's JSON-RPC error `data` when parsing a failed wallet response. Previously both transports dropped `data` while constructing the rejected error, so revert reasons / custom-error bytes never reached `RequestRouter` (leaving `RPCInvokeMethodErr.rpcData` unset). ([#312](https://github.com/MetaMask/connect-monorepo/pull/312))
|
|
16
|
+
|
|
17
|
+
## [1.0.0]
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- Add `version` getter to `MultichainCore` and `MetaMaskConnectMultichain` that returns the runtime package version ([#253](https://github.com/MetaMask/connect-monorepo/pull/253))
|
|
22
|
+
- Warn at runtime when an existing singleton has a different version than the newly requested instance, indicating duplicate `@metamask/connect-multichain` resolutions ([#253](https://github.com/MetaMask/connect-monorepo/pull/253))
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- This release promotes @metamask/connect-multichain to a stable 1.0. From here it follows semver strictly — 1.x minor and patch releases will be backward-compatible, and breaking changes will only land in a future major. This lets the ecosystem packages (connect-evm, connect-solana, any future ecosystem packages) depend on ^1.0.0 and pick up all future 1.x improvements without a coordinated re-release, and gives consumers a dependable compatibility contract. ([#317](https://github.com/MetaMask/connect-monorepo/pull/317))
|
|
27
|
+
- Rename the storage API methods for the persisted transport type from `getTransport`, `setTransport`, and `removeTransport` to `getTransportType`, `setTransportType`, and `removeTransportType`. The existing `multichain-transport` storage key is unchanged, so no persisted data migration is required. ([#307](https://github.com/MetaMask/connect-monorepo/pull/307))
|
|
28
|
+
- `getVersion()` now returns the real package version injected at build time via `__PACKAGE_VERSION__`, instead of a hardcoded `'0.0.0'` ([#253](https://github.com/MetaMask/connect-monorepo/pull/253))
|
|
29
|
+
- Refactor `MWPTransport.connect()` and other internals to replace deeply nested `new Promise()` and event-callback patterns with deferred promises, reducing nesting and breaking `connect()` into smaller helpers. No behavior change. ([#305](https://github.com/MetaMask/connect-monorepo/pull/305))
|
|
30
|
+
|
|
31
|
+
### Removed
|
|
32
|
+
|
|
33
|
+
- **BREAKING:** Remove the `transport.onNotification` constructor option from `createMultichainClient()`. The option was a fan-out of every typed event already exposed via `client.on(...)`. Migrate to the typed event API: `client.on('stateChanged' | 'wallet_sessionChanged' | 'metamask_accountsChanged' | 'metamask_chainChanged' | 'display_uri', handler)`. ([#318](https://github.com/MetaMask/connect-monorepo/pull/318))
|
|
34
|
+
- **BREAKING:** Remove the public `transport` accessor from `MultichainCore` and `MetaMaskConnectMultichain`. Consumers that previously reached the underlying transport to invoke EIP-1193 / legacy provider methods (`wallet_addEthereumChain`, `wallet_switchEthereumChain`, `eth_accounts`) should now go through `client.invokeMethod({ scope, request: { method, params } })`. `RequestRouter` recognizes those methods as EIP-1193 passthroughs and forwards the raw payload to the active transport's `sendEip1193Message`, so behavior is preserved. All other RPCs continue to flow through `invokeMethod` unchanged. ([#318](https://github.com/MetaMask/connect-monorepo/pull/318))
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
|
|
38
|
+
- Restrict EIP-6963 extension detection to native MetaMask RDNS values so MMConnect-managed provider announcements do not select the browser-extension transport. ([#304](https://github.com/MetaMask/connect-monorepo/pull/304))
|
|
39
|
+
- Failed `createMultichainClient()` singleton initialization now rethrows after clearing the stored singleton promise, preventing the cleanup path from resolving to `undefined` and preserving retry behavior. ([#306](https://github.com/MetaMask/connect-monorepo/pull/306))
|
|
40
|
+
- `MWPTransport.request()` and `sendEip1193Message()` now reject wallet response errors returned as `result.error`, matching `DefaultTransport` error handling and preserving wallet error codes. ([#311](https://github.com/MetaMask/connect-monorepo/pull/311))
|
|
41
|
+
- `MetaMaskConnectMultichain.#headlessConnect()` now removes the `dappClient` `session_request` listener once the connection settles, preventing each headless `connect()` call from leaking a listener that would re-emit `display_uri` with stale deeplinks for every subsequent session request. ([#314](https://github.com/MetaMask/connect-monorepo/pull/314))
|
|
42
|
+
|
|
10
43
|
## [0.15.0]
|
|
11
44
|
|
|
12
45
|
### Added
|
|
@@ -283,7 +316,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
283
316
|
|
|
284
317
|
- Initial release
|
|
285
318
|
|
|
286
|
-
[Unreleased]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-multichain@
|
|
319
|
+
[Unreleased]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-multichain@1.1.0...HEAD
|
|
320
|
+
[1.1.0]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-multichain@1.0.0...@metamask/connect-multichain@1.1.0
|
|
321
|
+
[1.0.0]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-multichain@0.15.0...@metamask/connect-multichain@1.0.0
|
|
287
322
|
[0.15.0]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-multichain@0.14.0...@metamask/connect-multichain@0.15.0
|
|
288
323
|
[0.14.0]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-multichain@0.13.0...@metamask/connect-multichain@0.14.0
|
|
289
324
|
[0.13.0]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-multichain@0.12.1...@metamask/connect-multichain@0.13.0
|
package/README.md
CHANGED
|
@@ -155,7 +155,6 @@ Factory function to create a new Multichain SDK instance.
|
|
|
155
155
|
| `analytics.enabled` | `boolean` | No | Enables dapp-side analytics. Defaults to `true`; set to `false` to disable analytics events and wallet correlation metadata. |
|
|
156
156
|
| `analytics.integrationType` | `string` | No | Integration type for analytics |
|
|
157
157
|
| `transport.extensionId` | `string` | No | Custom extension ID |
|
|
158
|
-
| `transport.onNotification` | `(notification: unknown) => void` | No | Notification handler |
|
|
159
158
|
| `versions` | `Partial<ConnectVersions>` | No | Internal: set automatically by `createEVMClient` / `createSolanaClient`. Consumers do not need to provide this. |
|
|
160
159
|
| `debug` | `boolean` | No | Enable debug logging |
|
|
161
160
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { Json, CaipAccountId, CaipChainId } from '@metamask/utils';
|
|
1
2
|
import debug from 'debug';
|
|
2
3
|
import { SessionData, Transport, SessionProperties, TransportRequest, TransportResponse, MultichainApiClient } from '@metamask/multichain-api-client';
|
|
3
4
|
export { SessionData } from '@metamask/multichain-api-client';
|
|
4
|
-
import { CaipAccountId, CaipChainId, Json } from '@metamask/utils';
|
|
5
5
|
import { SessionRequest, Session } from '@metamask/mobile-wallet-protocol-core';
|
|
6
6
|
import { Components } from '@metamask/multichain-ui';
|
|
7
7
|
|
|
@@ -39,8 +39,17 @@ declare class RPCInvokeMethodErr extends BaseErr<'RPC', RPCErrorCodes> {
|
|
|
39
39
|
readonly reason: string;
|
|
40
40
|
readonly rpcCode?: number | undefined;
|
|
41
41
|
readonly rpcMessage?: string | undefined;
|
|
42
|
+
readonly rpcData?: Json | undefined;
|
|
42
43
|
static readonly code = 53;
|
|
43
|
-
|
|
44
|
+
/**
|
|
45
|
+
* @param reason - MetaMask Connect invokeMethod reason.
|
|
46
|
+
* @param rpcCode - Original wallet JSON-RPC / EIP-1193 error code.
|
|
47
|
+
* @param rpcMessage - Original provider-facing wallet message, sourced only
|
|
48
|
+
* from the wallet's coded error. Unset when the wallet provides no message,
|
|
49
|
+
* so it may differ from `reason`, which can fall back through the cause chain.
|
|
50
|
+
* @param rpcData - Original JSON-RPC error data, when provided by the wallet.
|
|
51
|
+
*/
|
|
52
|
+
constructor(reason: string, rpcCode?: number | undefined, rpcMessage?: string | undefined, rpcData?: Json | undefined);
|
|
44
53
|
}
|
|
45
54
|
|
|
46
55
|
type SDKEvents = {
|
|
@@ -458,7 +467,6 @@ type MultichainOptions = {
|
|
|
458
467
|
transport?: {
|
|
459
468
|
/** Extension ID for browser extension transport */
|
|
460
469
|
extensionId?: string;
|
|
461
|
-
onNotification?: (notification: unknown) => void;
|
|
462
470
|
};
|
|
463
471
|
/** Enable debug logging */
|
|
464
472
|
debug?: boolean;
|
|
@@ -508,6 +516,7 @@ type ExtendedTransport = Omit<Transport, 'connect'> & {
|
|
|
508
516
|
declare const infuraRpcUrls: RpcUrlsMap;
|
|
509
517
|
declare const RPC_HANDLED_METHODS: Set<string>;
|
|
510
518
|
declare const SDK_HANDLED_METHODS: Set<string>;
|
|
519
|
+
declare const EIP1193_PASSTHROUGH_METHODS: Set<string>;
|
|
511
520
|
|
|
512
521
|
/**
|
|
513
522
|
* Generates Infura RPC URLs for common networks keyed by CAIP Chain ID.
|
|
@@ -539,8 +548,8 @@ declare abstract class MultichainCore extends EventEmitter<SDKEvents> {
|
|
|
539
548
|
abstract storage: StoreClient;
|
|
540
549
|
abstract status: ConnectionStatus;
|
|
541
550
|
abstract provider: MultichainApiClient<RPCAPI>;
|
|
542
|
-
abstract transport: ExtendedTransport;
|
|
543
551
|
abstract transportType: TransportType;
|
|
552
|
+
abstract version: string;
|
|
544
553
|
/**
|
|
545
554
|
* Establishes a connection to the multichain provider, or re-use existing session
|
|
546
555
|
*
|
|
@@ -581,9 +590,9 @@ declare abstract class StoreClient {
|
|
|
581
590
|
abstract getAnonId(): Promise<string>;
|
|
582
591
|
abstract getExtensionId(): Promise<string | null>;
|
|
583
592
|
abstract setExtensionId(extensionId: string): Promise<void>;
|
|
584
|
-
abstract
|
|
585
|
-
abstract
|
|
586
|
-
abstract
|
|
593
|
+
abstract getTransportType(): Promise<TransportType | null>;
|
|
594
|
+
abstract setTransportType(transportType: TransportType): Promise<void>;
|
|
595
|
+
abstract removeTransportType(): Promise<void>;
|
|
587
596
|
abstract setAnonId(anonId: string): Promise<void>;
|
|
588
597
|
abstract removeExtensionId(): Promise<void>;
|
|
589
598
|
abstract removeAnonId(): Promise<void>;
|
|
@@ -760,6 +769,7 @@ declare function getWalletActionAnalyticsProperties(options: MultichainOptions,
|
|
|
760
769
|
error_message_sample?: string;
|
|
761
770
|
}>;
|
|
762
771
|
|
|
772
|
+
declare const packageVersion: string;
|
|
763
773
|
/**
|
|
764
774
|
* Returns the version of the Multichain SDK.
|
|
765
775
|
*
|
|
@@ -769,4 +779,4 @@ declare function getVersion(): string;
|
|
|
769
779
|
|
|
770
780
|
declare const createMultichainClient: CreateMultichainFN;
|
|
771
781
|
|
|
772
|
-
export { type AnalyticsOptions, type ConnectVersions, type ConnectionRequest, type ConnectionStatus, type CreateMultichainFN, type DappSettings, type DataType, type DomainErrorCodes, type Enumerate, type ErrorCodeRange, type ErrorCodes, EventEmitter, type EventTypes, type ExtendedTransport, type FailureReason, type InstallWidgetProps, type InvokeMethodOptions, type LoggerNameSpaces, type MergeableMultichainOptions, Modal, type ModalFactoryConnectOptions, type ModalFactoryOptions, MultichainCore, type MultichainOptions, type NotificationCallback, type OTPCode, type OTPCodeWidgetProps, PlatformType, type QRLink, type RPCAPI, type RPCErrorCodes, RPCHttpErr, RPCInvokeMethodErr, RPCReadonlyRequestErr, RPCReadonlyResponseErr, type RPCResponse, RPC_HANDLED_METHODS, type RpcMethod, type RpcUrlsMap, type SDKEvents, SDK_HANDLED_METHODS, type Scope, type StorageErrorCodes, StoreAdapter, StoreClient, type StoreOptions, TransportType, classifyFailureReason, createLogger, createMultichainClient, enableDebug, getInfuraRpcUrls, getPlatformType, getTransportType, getVersion, getWalletActionAnalyticsProperties, hasExtension, infuraRpcUrls, isEnabled, isMetamaskExtensionInstalled, isRejectionError, isSecure };
|
|
782
|
+
export { type AnalyticsOptions, type ConnectVersions, type ConnectionRequest, type ConnectionStatus, type CreateMultichainFN, type DappSettings, type DataType, type DomainErrorCodes, EIP1193_PASSTHROUGH_METHODS, type Enumerate, type ErrorCodeRange, type ErrorCodes, EventEmitter, type EventTypes, type ExtendedTransport, type FailureReason, type InstallWidgetProps, type InvokeMethodOptions, type LoggerNameSpaces, type MergeableMultichainOptions, Modal, type ModalFactoryConnectOptions, type ModalFactoryOptions, MultichainCore, type MultichainOptions, type NotificationCallback, type OTPCode, type OTPCodeWidgetProps, PlatformType, type QRLink, type RPCAPI, type RPCErrorCodes, RPCHttpErr, RPCInvokeMethodErr, RPCReadonlyRequestErr, RPCReadonlyResponseErr, type RPCResponse, RPC_HANDLED_METHODS, type RpcMethod, type RpcUrlsMap, type SDKEvents, SDK_HANDLED_METHODS, type Scope, type StorageErrorCodes, StoreAdapter, StoreClient, type StoreOptions, TransportType, classifyFailureReason, createLogger, createMultichainClient, enableDebug, getInfuraRpcUrls, getPlatformType, getTransportType, getVersion, getWalletActionAnalyticsProperties, hasExtension, infuraRpcUrls, isEnabled, isMetamaskExtensionInstalled, isRejectionError, isSecure, packageVersion };
|