@metamask/connect-multichain 0.3.0 → 0.3.2
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 +19 -1
- package/dist/browser/es/connect-multichain.d.mts +4 -3
- package/dist/browser/es/connect-multichain.mjs +52 -25
- 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 +4 -3
- package/dist/browser/iife/connect-multichain.js +68 -33
- 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 +4 -3
- package/dist/browser/umd/connect-multichain.js +52 -25
- 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 +4 -3
- package/dist/node/cjs/connect-multichain.js +52 -25
- 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 +4 -3
- package/dist/node/es/connect-multichain.mjs +52 -25
- 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 +4 -3
- package/dist/react-native/es/connect-multichain.mjs +52 -25
- 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/multichain/types.d.ts +2 -1
- package/dist/src/domain/multichain/types.d.ts.map +1 -1
- package/dist/src/multichain/index.d.ts.map +1 -1
- package/dist/src/multichain/index.js +11 -6
- package/dist/src/multichain/index.js.map +1 -1
- package/dist/src/multichain/rpc/requestRouter.d.ts.map +1 -1
- package/dist/src/multichain/rpc/requestRouter.js +9 -4
- package/dist/src/multichain/rpc/requestRouter.js.map +1 -1
- package/dist/src/multichain/transports/default/index.d.ts +2 -0
- package/dist/src/multichain/transports/default/index.d.ts.map +1 -1
- package/dist/src/multichain/transports/default/index.js +13 -0
- package/dist/src/multichain/transports/default/index.js.map +1 -1
- package/dist/src/multichain/transports/mwp/index.d.ts +2 -1
- package/dist/src/multichain/transports/mwp/index.d.ts.map +1 -1
- package/dist/src/multichain/transports/mwp/index.js +22 -12
- package/dist/src/multichain/transports/mwp/index.js.map +1 -1
- package/dist/src/ui/index.d.ts +2 -2
- package/dist/src/ui/index.d.ts.map +1 -1
- package/dist/src/ui/index.js +5 -5
- package/dist/src/ui/index.js.map +1 -1
- package/dist/types/connect-multichain.d.ts +4 -3
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.3.2]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Add connection id to simple deeplinks ([#63](https://github.com/MetaMask/metamask-connect-monorepo/pull/63))
|
|
15
|
+
|
|
16
|
+
## [0.3.1]
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- Bump `@metamask/multichain-api-client` to prevent `RPC request with id already seen.` error on extension when using firefox ([#60](https://github.com/MetaMask/connect-monorepo/pull/60))
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- Fixed incorrect caching of error responses for some requests/events ([#59](https://github.com/MetaMask/connect-monorepo/pull/59))
|
|
25
|
+
|
|
10
26
|
## [0.3.0]
|
|
11
27
|
|
|
12
28
|
### Changed
|
|
@@ -56,7 +72,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
56
72
|
|
|
57
73
|
- Initial release
|
|
58
74
|
|
|
59
|
-
[Unreleased]: https://github.com/MetaMask/metamask-connect-monorepo/compare/@metamask/connect-multichain@0.3.
|
|
75
|
+
[Unreleased]: https://github.com/MetaMask/metamask-connect-monorepo/compare/@metamask/connect-multichain@0.3.2...HEAD
|
|
76
|
+
[0.3.2]: https://github.com/MetaMask/metamask-connect-monorepo/compare/@metamask/connect-multichain@0.3.1...@metamask/connect-multichain@0.3.2
|
|
77
|
+
[0.3.1]: https://github.com/MetaMask/metamask-connect-monorepo/compare/@metamask/connect-multichain@0.3.0...@metamask/connect-multichain@0.3.1
|
|
60
78
|
[0.3.0]: https://github.com/MetaMask/metamask-connect-monorepo/compare/@metamask/connect-multichain@0.2.1...@metamask/connect-multichain@0.3.0
|
|
61
79
|
[0.2.1]: https://github.com/MetaMask/metamask-connect-monorepo/compare/@metamask/connect-multichain@0.2.0...@metamask/connect-multichain@0.2.1
|
|
62
80
|
[0.2.0]: https://github.com/MetaMask/metamask-connect-monorepo/compare/@metamask/connect-multichain@0.1.0...@metamask/connect-multichain@0.2.0
|
|
@@ -2,7 +2,7 @@ import debug from 'debug';
|
|
|
2
2
|
import { SessionData, Transport, TransportRequest, TransportResponse, MultichainApiClient } from '@metamask/multichain-api-client';
|
|
3
3
|
export { SessionData } from '@metamask/multichain-api-client';
|
|
4
4
|
import { CaipAccountId, Json } from '@metamask/utils';
|
|
5
|
-
import { SessionRequest } from '@metamask/mobile-wallet-protocol-core';
|
|
5
|
+
import { SessionRequest, Session } from '@metamask/mobile-wallet-protocol-core';
|
|
6
6
|
import { Components } from '@metamask/multichain-ui';
|
|
7
7
|
|
|
8
8
|
type Enumerate<N extends number, Acc extends number[] = []> = Acc['length'] extends N ? Acc[number] : Enumerate<N, [...Acc, Acc['length']]>;
|
|
@@ -326,8 +326,8 @@ declare class ModalFactory<T extends FactoryModals = FactoryModals> {
|
|
|
326
326
|
get isWeb(): boolean;
|
|
327
327
|
private getContainer;
|
|
328
328
|
private getMountedContainer;
|
|
329
|
-
|
|
330
|
-
|
|
329
|
+
createConnectionDeeplink(connectionRequest?: ConnectionRequest): string;
|
|
330
|
+
createConnectionUniversalLink(connectionRequest?: ConnectionRequest): string;
|
|
331
331
|
private onCloseModal;
|
|
332
332
|
private onStartDesktopOnboarding;
|
|
333
333
|
renderInstallModal(showInstallModal: boolean, createConnectionRequest: () => Promise<ConnectionRequest>, successCallback: (error?: Error) => Promise<void>): Promise<void>;
|
|
@@ -444,6 +444,7 @@ type ExtendedTransport = Omit<Transport, 'connect'> & {
|
|
|
444
444
|
sendEip1193Message: <TRequest extends TransportRequest, TResponse extends TransportResponse>(request: TRequest, options?: {
|
|
445
445
|
timeout?: number;
|
|
446
446
|
}) => Promise<TResponse>;
|
|
447
|
+
getActiveSession: () => Promise<Session | undefined>;
|
|
447
448
|
};
|
|
448
449
|
|
|
449
450
|
declare const infuraRpcUrls: RpcUrlsMap;
|
|
@@ -1337,13 +1337,18 @@ var RequestRouter = class {
|
|
|
1337
1337
|
const secure = isSecure();
|
|
1338
1338
|
const shouldOpenDeeplink = secure && !showInstallModal;
|
|
1339
1339
|
if (shouldOpenDeeplink) {
|
|
1340
|
-
setTimeout(() => {
|
|
1340
|
+
setTimeout(() => __async(this, null, function* () {
|
|
1341
|
+
const session = yield this.transport.getActiveSession();
|
|
1342
|
+
if (!session) {
|
|
1343
|
+
throw new Error("No active session found");
|
|
1344
|
+
}
|
|
1345
|
+
const url = `${METAMASK_DEEPLINK_BASE}/mwp?id=${encodeURIComponent(session.id)}`;
|
|
1341
1346
|
if (mobile == null ? void 0 : mobile.preferredOpenLink) {
|
|
1342
|
-
mobile.preferredOpenLink(
|
|
1347
|
+
mobile.preferredOpenLink(url, "_self");
|
|
1343
1348
|
} else {
|
|
1344
|
-
openDeeplink(this.config,
|
|
1349
|
+
openDeeplink(this.config, url, METAMASK_CONNECT_BASE_URL);
|
|
1345
1350
|
}
|
|
1346
|
-
}, 10);
|
|
1351
|
+
}), 10);
|
|
1347
1352
|
}
|
|
1348
1353
|
const response = yield request;
|
|
1349
1354
|
if (response.error) {
|
|
@@ -1565,6 +1570,10 @@ var DefaultTransport = class {
|
|
|
1565
1570
|
window.removeEventListener("message", __privateGet(this, _handleResponseListener));
|
|
1566
1571
|
__privateSet(this, _handleResponseListener, void 0);
|
|
1567
1572
|
}
|
|
1573
|
+
if (__privateGet(this, _handleNotificationListener)) {
|
|
1574
|
+
window.removeEventListener("message", __privateGet(this, _handleNotificationListener));
|
|
1575
|
+
__privateSet(this, _handleNotificationListener, void 0);
|
|
1576
|
+
}
|
|
1568
1577
|
for (const [, request] of __privateGet(this, _pendingRequests)) {
|
|
1569
1578
|
clearTimeout(request.timeout);
|
|
1570
1579
|
request.reject(new Error("Transport disconnected"));
|
|
@@ -1588,6 +1597,9 @@ var DefaultTransport = class {
|
|
|
1588
1597
|
__privateGet(this, _notificationCallbacks).delete(callback);
|
|
1589
1598
|
};
|
|
1590
1599
|
}
|
|
1600
|
+
getActiveSession() {
|
|
1601
|
+
throw new Error("getActiveSession is purposely not implemented for the DefaultTransport");
|
|
1602
|
+
}
|
|
1591
1603
|
};
|
|
1592
1604
|
_notificationCallbacks = new WeakMap();
|
|
1593
1605
|
_transport = new WeakMap();
|
|
@@ -1872,16 +1884,10 @@ var MWPTransport = class {
|
|
|
1872
1884
|
}
|
|
1873
1885
|
connect(options) {
|
|
1874
1886
|
return __async(this, null, function* () {
|
|
1875
|
-
const { dappClient
|
|
1876
|
-
const
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
const [activeSession] = yield sessionStore.list();
|
|
1880
|
-
if (activeSession) {
|
|
1881
|
-
logger("active session found", activeSession);
|
|
1882
|
-
session = activeSession;
|
|
1883
|
-
}
|
|
1884
|
-
} catch (e) {
|
|
1887
|
+
const { dappClient } = this;
|
|
1888
|
+
const session = yield this.getActiveSession();
|
|
1889
|
+
if (session) {
|
|
1890
|
+
logger("active session found", session);
|
|
1885
1891
|
}
|
|
1886
1892
|
let timeout;
|
|
1887
1893
|
const connectionPromise = new Promise((resolve, reject) => {
|
|
@@ -2052,6 +2058,9 @@ var MWPTransport = class {
|
|
|
2052
2058
|
}
|
|
2053
2059
|
storeWalletSession(request, response) {
|
|
2054
2060
|
return __async(this, null, function* () {
|
|
2061
|
+
if (response.error) {
|
|
2062
|
+
return;
|
|
2063
|
+
}
|
|
2055
2064
|
if (CACHED_METHOD_LIST.includes(request.method)) {
|
|
2056
2065
|
yield this.kvstore.set(SESSION_STORE_KEY, JSON.stringify(response));
|
|
2057
2066
|
} else if (request.method === "eth_accounts") {
|
|
@@ -2110,6 +2119,19 @@ var MWPTransport = class {
|
|
|
2110
2119
|
this.notificationCallbacks.delete(callback);
|
|
2111
2120
|
};
|
|
2112
2121
|
}
|
|
2122
|
+
getActiveSession() {
|
|
2123
|
+
return __async(this, null, function* () {
|
|
2124
|
+
const { kvstore } = this;
|
|
2125
|
+
const sessionStore = new SessionStore(kvstore);
|
|
2126
|
+
try {
|
|
2127
|
+
const [activeSession] = yield sessionStore.list();
|
|
2128
|
+
return activeSession;
|
|
2129
|
+
} catch (error) {
|
|
2130
|
+
logger("error getting active session", error);
|
|
2131
|
+
return void 0;
|
|
2132
|
+
}
|
|
2133
|
+
});
|
|
2134
|
+
}
|
|
2113
2135
|
};
|
|
2114
2136
|
|
|
2115
2137
|
// src/multichain/transports/mwp/KeyManager.ts
|
|
@@ -2493,8 +2515,8 @@ var MultichainSDK = class _MultichainSDK extends MultichainCore {
|
|
|
2493
2515
|
sdk: { version: getVersion(), platform: getPlatformType() }
|
|
2494
2516
|
}
|
|
2495
2517
|
};
|
|
2496
|
-
const deeplink = this.options.ui.factory.
|
|
2497
|
-
const universalLink = this.options.ui.factory.
|
|
2518
|
+
const deeplink = this.options.ui.factory.createConnectionDeeplink(connectionRequest);
|
|
2519
|
+
const universalLink = this.options.ui.factory.createConnectionUniversalLink(connectionRequest);
|
|
2498
2520
|
if ((_a = this.options.mobile) == null ? void 0 : _a.preferredOpenLink) {
|
|
2499
2521
|
this.options.mobile.preferredOpenLink(deeplink, "_self");
|
|
2500
2522
|
} else {
|
|
@@ -2677,17 +2699,22 @@ var MultichainSDK = class _MultichainSDK extends MultichainCore {
|
|
|
2677
2699
|
const secure = isSecure();
|
|
2678
2700
|
const shouldOpenDeeplink = secure && !showInstallModal;
|
|
2679
2701
|
if (shouldOpenDeeplink) {
|
|
2680
|
-
setTimeout(() => {
|
|
2702
|
+
setTimeout(() => __async(this, null, function* () {
|
|
2703
|
+
const session = yield this.transport.getActiveSession();
|
|
2704
|
+
if (!session) {
|
|
2705
|
+
throw new Error("No active session found");
|
|
2706
|
+
}
|
|
2707
|
+
const url = `${METAMASK_DEEPLINK_BASE}/mwp?id=${encodeURIComponent(session.id)}`;
|
|
2681
2708
|
if (mobile == null ? void 0 : mobile.preferredOpenLink) {
|
|
2682
|
-
mobile.preferredOpenLink(
|
|
2709
|
+
mobile.preferredOpenLink(url, "_self");
|
|
2683
2710
|
} else {
|
|
2684
2711
|
openDeeplink(
|
|
2685
2712
|
this.options,
|
|
2686
|
-
|
|
2713
|
+
url,
|
|
2687
2714
|
METAMASK_CONNECT_BASE_URL
|
|
2688
2715
|
);
|
|
2689
2716
|
}
|
|
2690
|
-
}, 10);
|
|
2717
|
+
}), 10);
|
|
2691
2718
|
}
|
|
2692
2719
|
}
|
|
2693
2720
|
};
|
|
@@ -2979,16 +3006,16 @@ var ModalFactory = class {
|
|
|
2979
3006
|
}
|
|
2980
3007
|
return container;
|
|
2981
3008
|
}
|
|
2982
|
-
|
|
3009
|
+
createConnectionDeeplink(connectionRequest) {
|
|
2983
3010
|
if (!connectionRequest) {
|
|
2984
|
-
throw new Error("
|
|
3011
|
+
throw new Error("createConnectionDeeplink can only be called with a connection request");
|
|
2985
3012
|
}
|
|
2986
3013
|
const json = JSON.stringify(connectionRequest);
|
|
2987
3014
|
const compressed = compressString(json);
|
|
2988
3015
|
const urlEncoded = encodeURIComponent(compressed);
|
|
2989
3016
|
return `${METAMASK_DEEPLINK_BASE}/mwp?p=${urlEncoded}&c=1`;
|
|
2990
3017
|
}
|
|
2991
|
-
|
|
3018
|
+
createConnectionUniversalLink(connectionRequest) {
|
|
2992
3019
|
if (!connectionRequest) {
|
|
2993
3020
|
return `${METAMASK_CONNECT_BASE_URL}`;
|
|
2994
3021
|
}
|
|
@@ -3015,7 +3042,7 @@ var ModalFactory = class {
|
|
|
3015
3042
|
this.successCallback = successCallback;
|
|
3016
3043
|
const parentElement = this.getMountedContainer();
|
|
3017
3044
|
const connectionRequest = yield createConnectionRequest();
|
|
3018
|
-
const qrCodeLink = this.
|
|
3045
|
+
const qrCodeLink = this.createConnectionDeeplink(connectionRequest);
|
|
3019
3046
|
const modal = new this.options.InstallModal({
|
|
3020
3047
|
expiresIn: (connectionRequest.sessionRequest.expiresAt - Date.now()) / 1e3,
|
|
3021
3048
|
connectionRequest,
|
|
@@ -3024,7 +3051,7 @@ var ModalFactory = class {
|
|
|
3024
3051
|
link: qrCodeLink,
|
|
3025
3052
|
sdkVersion: getVersion(),
|
|
3026
3053
|
generateQRCode: (request) => __async(this, null, function* () {
|
|
3027
|
-
return this.
|
|
3054
|
+
return this.createConnectionDeeplink(request);
|
|
3028
3055
|
}),
|
|
3029
3056
|
onClose: this.onCloseModal.bind(this),
|
|
3030
3057
|
startDesktopOnboarding: this.onStartDesktopOnboarding.bind(this),
|