@metamask/connect-multichain 0.13.0 → 0.15.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 +24 -1
- package/README.md +20 -19
- package/dist/browser/es/connect-multichain.d.mts +62 -6
- package/dist/browser/es/connect-multichain.mjs +286 -124
- 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 +62 -6
- package/dist/browser/iife/connect-multichain.js +304 -124
- 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 +62 -6
- package/dist/browser/umd/connect-multichain.js +286 -124
- 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 +62 -6
- package/dist/node/cjs/connect-multichain.js +287 -124
- 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 +62 -6
- package/dist/node/es/connect-multichain.mjs +286 -124
- 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 +62 -6
- package/dist/react-native/es/connect-multichain.mjs +286 -124
- 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/index.d.ts +1 -1
- package/dist/src/domain/multichain/index.d.ts.map +1 -1
- package/dist/src/domain/multichain/index.js +7 -3
- package/dist/src/domain/multichain/index.js.map +1 -1
- package/dist/src/domain/multichain/types.d.ts +15 -3
- package/dist/src/domain/multichain/types.d.ts.map +1 -1
- package/dist/src/domain/utils/index.d.ts +2 -1
- package/dist/src/domain/utils/index.d.ts.map +1 -1
- package/dist/src/domain/utils/index.js +1 -1
- package/dist/src/domain/utils/index.js.map +1 -1
- package/dist/src/multichain/index.d.ts.map +1 -1
- package/dist/src/multichain/index.js +109 -63
- 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 +27 -9
- package/dist/src/multichain/rpc/requestRouter.js.map +1 -1
- package/dist/src/multichain/transports/mwp/index.d.ts.map +1 -1
- package/dist/src/multichain/transports/mwp/index.js +17 -5
- package/dist/src/multichain/transports/mwp/index.js.map +1 -1
- package/dist/src/multichain/utils/analytics.d.ts +82 -1
- package/dist/src/multichain/utils/analytics.d.ts.map +1 -1
- package/dist/src/multichain/utils/analytics.js +252 -17
- package/dist/src/multichain/utils/analytics.js.map +1 -1
- package/dist/types/connect-multichain.d.ts +62 -6
- package/package.json +2 -2
|
@@ -493,7 +493,7 @@ var init_multichain = __esm({
|
|
|
493
493
|
}
|
|
494
494
|
/**
|
|
495
495
|
* Merges the given options into the current instance options.
|
|
496
|
-
* Only the mergeable keys are updated (api.supportedNetworks, versions, ui.*, mobile.*, transport.extensionId, debug).
|
|
496
|
+
* Only the mergeable keys are updated (api.supportedNetworks, analytics, versions, ui.*, mobile.*, transport.extensionId, debug).
|
|
497
497
|
* The main thing to note is that the value for `dapp` is not merged as it does not make sense for
|
|
498
498
|
* subsequent calls to `createMultichainClient` to have a different `dapp` value.
|
|
499
499
|
* Used when createMultichainClient is called with an existing singleton.
|
|
@@ -501,23 +501,28 @@ var init_multichain = __esm({
|
|
|
501
501
|
* @param partial - Options to merge/overwrite onto the current instance
|
|
502
502
|
*/
|
|
503
503
|
mergeOptions(partial) {
|
|
504
|
-
var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o;
|
|
504
|
+
var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
|
|
505
505
|
const opts = this.options;
|
|
506
|
+
const analytics3 = __spreadValues(__spreadValues({}, opts.analytics), (_a2 = partial.analytics) != null ? _a2 : {});
|
|
507
|
+
if (((_b = opts.analytics) == null ? void 0 : _b.enabled) === false) {
|
|
508
|
+
analytics3.enabled = false;
|
|
509
|
+
}
|
|
506
510
|
this.options = __spreadProps(__spreadValues({}, opts), {
|
|
507
511
|
api: __spreadProps(__spreadValues({}, opts.api), {
|
|
508
|
-
supportedNetworks: __spreadValues(__spreadValues({}, opts.api.supportedNetworks), (
|
|
512
|
+
supportedNetworks: __spreadValues(__spreadValues({}, opts.api.supportedNetworks), (_d = (_c = partial.api) == null ? void 0 : _c.supportedNetworks) != null ? _d : {})
|
|
509
513
|
}),
|
|
510
|
-
versions: __spreadValues(__spreadValues({}, opts.versions), (
|
|
514
|
+
versions: __spreadValues(__spreadValues({}, opts.versions), (_e = partial.versions) != null ? _e : {}),
|
|
515
|
+
analytics: __spreadValues({}, analytics3),
|
|
511
516
|
ui: __spreadProps(__spreadValues({}, opts.ui), {
|
|
512
|
-
headless: (
|
|
513
|
-
preferExtension: (
|
|
514
|
-
showInstallModal: (
|
|
517
|
+
headless: (_g = (_f = partial.ui) == null ? void 0 : _f.headless) != null ? _g : opts.ui.headless,
|
|
518
|
+
preferExtension: (_i = (_h = partial.ui) == null ? void 0 : _h.preferExtension) != null ? _i : opts.ui.preferExtension,
|
|
519
|
+
showInstallModal: (_k = (_j = partial.ui) == null ? void 0 : _j.showInstallModal) != null ? _k : opts.ui.showInstallModal
|
|
515
520
|
}),
|
|
516
|
-
mobile: __spreadValues(__spreadValues({}, opts.mobile), (
|
|
517
|
-
transport: __spreadProps(__spreadValues({}, (
|
|
518
|
-
extensionId: (
|
|
521
|
+
mobile: __spreadValues(__spreadValues({}, opts.mobile), (_l = partial.mobile) != null ? _l : {}),
|
|
522
|
+
transport: __spreadProps(__spreadValues({}, (_m = opts.transport) != null ? _m : {}), {
|
|
523
|
+
extensionId: (_p = (_n = partial.transport) == null ? void 0 : _n.extensionId) != null ? _p : (_o = opts.transport) == null ? void 0 : _o.extensionId
|
|
519
524
|
}),
|
|
520
|
-
debug: (
|
|
525
|
+
debug: (_q = partial.debug) != null ? _q : opts.debug
|
|
521
526
|
});
|
|
522
527
|
}
|
|
523
528
|
};
|
|
@@ -967,17 +972,94 @@ var init_utils = __esm({
|
|
|
967
972
|
});
|
|
968
973
|
|
|
969
974
|
// src/multichain/utils/analytics.ts
|
|
975
|
+
function sanitiseErrorMessage(message) {
|
|
976
|
+
if (!message) {
|
|
977
|
+
return void 0;
|
|
978
|
+
}
|
|
979
|
+
let sanitised = message;
|
|
980
|
+
for (const { pattern, replacement } of SANITISE_PATTERNS) {
|
|
981
|
+
sanitised = sanitised.replace(pattern, replacement);
|
|
982
|
+
}
|
|
983
|
+
if (sanitised.length > ERROR_MESSAGE_SAMPLE_MAX_LENGTH) {
|
|
984
|
+
sanitised = `${sanitised.slice(0, ERROR_MESSAGE_SAMPLE_MAX_LENGTH - 1)}\u2026`;
|
|
985
|
+
}
|
|
986
|
+
return sanitised;
|
|
987
|
+
}
|
|
988
|
+
function getUnwrappedErrorDetails(error) {
|
|
989
|
+
var _a2, _b, _c, _d;
|
|
990
|
+
if (typeof error !== "object" || error === null) {
|
|
991
|
+
return { code: void 0, message: "" };
|
|
992
|
+
}
|
|
993
|
+
if (error instanceof RPCInvokeMethodErr) {
|
|
994
|
+
return {
|
|
995
|
+
code: (_a2 = error.rpcCode) != null ? _a2 : error.code,
|
|
996
|
+
message: (_c = (_b = error.rpcMessage) != null ? _b : error.message) != null ? _c : ""
|
|
997
|
+
};
|
|
998
|
+
}
|
|
999
|
+
const errorObj = error;
|
|
1000
|
+
return {
|
|
1001
|
+
code: errorObj.code,
|
|
1002
|
+
message: (_d = errorObj.message) != null ? _d : ""
|
|
1003
|
+
};
|
|
1004
|
+
}
|
|
970
1005
|
function isRejectionError(error) {
|
|
971
|
-
var _a2, _b;
|
|
972
1006
|
if (typeof error !== "object" || error === null) {
|
|
973
1007
|
return false;
|
|
974
1008
|
}
|
|
1009
|
+
const { code, message } = getUnwrappedErrorDetails(error);
|
|
1010
|
+
const errorMessage = message.toLowerCase();
|
|
1011
|
+
return code === 4001 || errorMessage.includes("reject") || errorMessage.includes("denied") || errorMessage.includes("cancel") || // Narrow "user …" matches — bare "user" is too greedy (catches Account
|
|
1012
|
+
// Abstraction errors like "user operation reverted").
|
|
1013
|
+
errorMessage.includes("user rejected") || errorMessage.includes("user denied") || errorMessage.includes("user cancelled") || errorMessage.includes("user canceled");
|
|
1014
|
+
}
|
|
1015
|
+
function classifyFailureReason(error) {
|
|
1016
|
+
var _a2, _b;
|
|
1017
|
+
if (typeof error !== "object" || error === null) {
|
|
1018
|
+
return "unknown";
|
|
1019
|
+
}
|
|
975
1020
|
const errorObj = error;
|
|
976
|
-
const
|
|
977
|
-
const
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
1021
|
+
const errorName = (_a2 = errorObj.name) != null ? _a2 : "";
|
|
1022
|
+
const errorMessageRaw = (_b = errorObj.message) != null ? _b : "";
|
|
1023
|
+
const errorMessage = errorMessageRaw.toLowerCase();
|
|
1024
|
+
const { code } = getUnwrappedErrorDetails(error);
|
|
1025
|
+
if (typeof code === "number") {
|
|
1026
|
+
if (code === -32601) {
|
|
1027
|
+
return "wallet_method_unsupported";
|
|
1028
|
+
}
|
|
1029
|
+
if (code === -32602) {
|
|
1030
|
+
return "wallet_invalid_params";
|
|
1031
|
+
}
|
|
1032
|
+
if (code === -32603) {
|
|
1033
|
+
return "wallet_internal_error";
|
|
1034
|
+
}
|
|
1035
|
+
if (code <= -32e3 && code >= -32099) {
|
|
1036
|
+
return "wallet_internal_error";
|
|
1037
|
+
}
|
|
1038
|
+
if (code === 4100) {
|
|
1039
|
+
return "wallet_unauthorized";
|
|
1040
|
+
}
|
|
1041
|
+
if (code === 4200) {
|
|
1042
|
+
return "wallet_method_unsupported";
|
|
1043
|
+
}
|
|
1044
|
+
if (code === 4902) {
|
|
1045
|
+
return "unrecognized_chain";
|
|
1046
|
+
}
|
|
1047
|
+
}
|
|
1048
|
+
if (errorName === "TransportTimeoutError" || errorMessageRaw === "Request timeout" || errorMessage.includes("timed out") || errorMessage.includes("timeout")) {
|
|
1049
|
+
return "transport_timeout";
|
|
1050
|
+
}
|
|
1051
|
+
if (errorName === "TransportError" || errorMessage.includes("not connected") || errorMessage.includes("transport disconnect") || errorMessage.includes("connection lost") || errorMessage.includes("socket closed")) {
|
|
1052
|
+
return "transport_disconnect";
|
|
1053
|
+
}
|
|
1054
|
+
return "unknown";
|
|
1055
|
+
}
|
|
1056
|
+
function extractErrorDiagnostics(error) {
|
|
1057
|
+
const failureReason = classifyFailureReason(error);
|
|
1058
|
+
const { code, message } = getUnwrappedErrorDetails(error);
|
|
1059
|
+
const messageSample = sanitiseErrorMessage(message);
|
|
1060
|
+
return __spreadValues(__spreadValues({
|
|
1061
|
+
failure_reason: failureReason
|
|
1062
|
+
}, typeof code === "number" ? { error_code: code } : {}), messageSample ? { error_message_sample: messageSample } : {});
|
|
981
1063
|
}
|
|
982
1064
|
function getBaseAnalyticsProperties(options, storage) {
|
|
983
1065
|
return __async(this, null, function* () {
|
|
@@ -993,26 +1075,61 @@ function getBaseAnalyticsProperties(options, storage) {
|
|
|
993
1075
|
};
|
|
994
1076
|
});
|
|
995
1077
|
}
|
|
996
|
-
function getWalletActionAnalyticsProperties(options, storage, invokeOptions, transportType) {
|
|
1078
|
+
function getWalletActionAnalyticsProperties(options, storage, invokeOptions, transportType, extra) {
|
|
997
1079
|
return __async(this, null, function* () {
|
|
998
1080
|
var _a2;
|
|
999
1081
|
const dappId = getDappId(options.dapp);
|
|
1000
1082
|
const anonId = yield storage.getAnonId();
|
|
1001
|
-
return {
|
|
1083
|
+
return __spreadValues(__spreadValues(__spreadValues({
|
|
1002
1084
|
mmconnect_versions: (_a2 = options.versions) != null ? _a2 : {},
|
|
1003
1085
|
dapp_id: dappId,
|
|
1004
1086
|
method: invokeOptions.request.method,
|
|
1005
1087
|
caip_chain_id: invokeOptions.scope,
|
|
1006
1088
|
anon_id: anonId,
|
|
1007
1089
|
transport_type: transportType
|
|
1008
|
-
};
|
|
1090
|
+
}, (extra == null ? void 0 : extra.failure_reason) ? { failure_reason: extra.failure_reason } : {}), typeof (extra == null ? void 0 : extra.error_code) === "number" ? { error_code: extra.error_code } : {}), (extra == null ? void 0 : extra.error_message_sample) ? { error_message_sample: extra.error_message_sample } : {});
|
|
1009
1091
|
});
|
|
1010
1092
|
}
|
|
1093
|
+
var ERROR_MESSAGE_SAMPLE_MAX_LENGTH, SANITISE_PATTERNS;
|
|
1011
1094
|
var init_analytics = __esm({
|
|
1012
1095
|
"src/multichain/utils/analytics.ts"() {
|
|
1013
1096
|
"use strict";
|
|
1014
1097
|
init_utils();
|
|
1015
1098
|
init_domain();
|
|
1099
|
+
ERROR_MESSAGE_SAMPLE_MAX_LENGTH = 200;
|
|
1100
|
+
SANITISE_PATTERNS = [
|
|
1101
|
+
// EVM-style 20-byte hex addresses (e.g. `0x` + 40 hex chars).
|
|
1102
|
+
{ pattern: /0x[a-fA-F0-9]{40}/gu, replacement: "<addr>" },
|
|
1103
|
+
// Other long hex blobs: tx hashes, signatures, raw byte strings, large
|
|
1104
|
+
// hex amounts. 16+ hex chars catches 32-byte hashes/signatures without
|
|
1105
|
+
// snagging EVM method selectors (8 chars) or short hex codes.
|
|
1106
|
+
{ pattern: /(?:0x)?[a-fA-F0-9]{16,}/gu, replacement: "<hex>" },
|
|
1107
|
+
// URLs of any scheme up to the first whitespace / quote / closing paren.
|
|
1108
|
+
// Catches RPC endpoints, dapp deeplinks, query strings with secrets.
|
|
1109
|
+
{ pattern: /https?:\/\/[^\s"')]+/gu, replacement: "<url>" },
|
|
1110
|
+
// Bech32 addresses: short HRP (1-10 lowercase chars) + `1` separator +
|
|
1111
|
+
// ≥38 chars of Bech32 data alphabet `[ac-hj-np-z02-9]` (excludes the
|
|
1112
|
+
// look-alike chars `b`, `i`, `o`, `1`). Covers Bitcoin SegWit
|
|
1113
|
+
// (`bc1…`/`tb1…`) and Cosmos-SDK chains (`cosmos1…`, `osmo1…`,
|
|
1114
|
+
// `juno1…`, `inj1…`, etc.) without enumerating every HRP. Runs before
|
|
1115
|
+
// the Base58 pattern below — see header comment for why.
|
|
1116
|
+
{
|
|
1117
|
+
pattern: /\b[a-z]{1,10}1[ac-hj-np-z02-9]{38,}\b/gu,
|
|
1118
|
+
replacement: "<addr>"
|
|
1119
|
+
},
|
|
1120
|
+
// Base58 tokens (32+ chars, Base58 alphabet `[1-9A-HJ-NP-Za-km-z]`).
|
|
1121
|
+
// Covers Solana pubkeys (32-44 chars), Solana tx signatures (~88 chars),
|
|
1122
|
+
// and Bitcoin Base58 addresses ≥32 chars. The 32-char floor and `\b`
|
|
1123
|
+
// word boundary keep English words and shorter alphanumerics safe.
|
|
1124
|
+
{
|
|
1125
|
+
pattern: /\b[1-9A-HJ-NP-Za-km-z]{32,}\b/gu,
|
|
1126
|
+
replacement: "<addr>"
|
|
1127
|
+
},
|
|
1128
|
+
// Long decimal numbers — token amounts, gas units, timestamps, lamports.
|
|
1129
|
+
// 10+ digits catches typical chain quantities without affecting JSON-RPC
|
|
1130
|
+
// codes (-32601, 4001, etc.) or short numeric IDs.
|
|
1131
|
+
{ pattern: /\d{10,}/gu, replacement: "<num>" }
|
|
1132
|
+
];
|
|
1016
1133
|
}
|
|
1017
1134
|
});
|
|
1018
1135
|
|
|
@@ -1402,13 +1519,24 @@ var init_mwp = __esm({
|
|
|
1402
1519
|
return resolveConnection();
|
|
1403
1520
|
});
|
|
1404
1521
|
this.dappClient.on("message", initialConnectionMessageHandler);
|
|
1522
|
+
const platformType = getPlatformType();
|
|
1523
|
+
const isQRCodeFlow = [
|
|
1524
|
+
"web-desktop" /* DesktopWeb */,
|
|
1525
|
+
"nodejs" /* NonBrowser */
|
|
1526
|
+
].includes(platformType);
|
|
1527
|
+
const initialPayload = {
|
|
1528
|
+
name: MULTICHAIN_PROVIDER_STREAM_NAME,
|
|
1529
|
+
data: request
|
|
1530
|
+
};
|
|
1405
1531
|
dappClient.connect({
|
|
1406
1532
|
mode: "trusted",
|
|
1407
|
-
initialPayload:
|
|
1408
|
-
|
|
1409
|
-
|
|
1533
|
+
initialPayload: isQRCodeFlow ? void 0 : initialPayload
|
|
1534
|
+
}).then(() => __async(this, null, function* () {
|
|
1535
|
+
if (isQRCodeFlow) {
|
|
1536
|
+
return dappClient.sendRequest(initialPayload);
|
|
1410
1537
|
}
|
|
1411
|
-
|
|
1538
|
+
return void 0;
|
|
1539
|
+
})).catch((error) => {
|
|
1412
1540
|
if (initialConnectionMessageHandler) {
|
|
1413
1541
|
this.dappClient.off(
|
|
1414
1542
|
"message",
|
|
@@ -2014,6 +2142,7 @@ __export(index_node_exports, {
|
|
|
2014
2142
|
StoreAdapter: () => StoreAdapter,
|
|
2015
2143
|
StoreClient: () => StoreClient,
|
|
2016
2144
|
TransportType: () => TransportType,
|
|
2145
|
+
classifyFailureReason: () => classifyFailureReason,
|
|
2017
2146
|
createLogger: () => createLogger,
|
|
2018
2147
|
createMultichainClient: () => createMultichainClient,
|
|
2019
2148
|
enableDebug: () => enableDebug,
|
|
@@ -2158,6 +2287,17 @@ var import_analytics2 = require("@metamask/analytics");
|
|
|
2158
2287
|
init_domain();
|
|
2159
2288
|
init_utils();
|
|
2160
2289
|
init_analytics();
|
|
2290
|
+
function toRPCInvokeMethodErr(error) {
|
|
2291
|
+
var _a2;
|
|
2292
|
+
if (error instanceof RPCInvokeMethodErr) {
|
|
2293
|
+
return error;
|
|
2294
|
+
}
|
|
2295
|
+
const castError = error;
|
|
2296
|
+
return new RPCInvokeMethodErr(
|
|
2297
|
+
(_a2 = castError.message) != null ? _a2 : "Unknown error",
|
|
2298
|
+
castError.code
|
|
2299
|
+
);
|
|
2300
|
+
}
|
|
2161
2301
|
var _RequestRouter_instances, withAnalyticsTracking_fn, trackWalletActionRequested_fn, trackWalletActionSucceeded_fn, trackWalletActionFailed_fn, trackWalletActionRejected_fn;
|
|
2162
2302
|
var RequestRouter = class {
|
|
2163
2303
|
constructor(transport, rpcClient, config, transportType) {
|
|
@@ -2264,6 +2404,13 @@ _RequestRouter_instances = new WeakSet();
|
|
|
2264
2404
|
withAnalyticsTracking_fn = function(options, execute) {
|
|
2265
2405
|
return __async(this, null, function* () {
|
|
2266
2406
|
var _a2;
|
|
2407
|
+
if (((_a2 = this.config.analytics) == null ? void 0 : _a2.enabled) === false) {
|
|
2408
|
+
try {
|
|
2409
|
+
return yield execute();
|
|
2410
|
+
} catch (error) {
|
|
2411
|
+
throw toRPCInvokeMethodErr(error);
|
|
2412
|
+
}
|
|
2413
|
+
}
|
|
2267
2414
|
yield __privateMethod(this, _RequestRouter_instances, trackWalletActionRequested_fn).call(this, options);
|
|
2268
2415
|
try {
|
|
2269
2416
|
const result = yield execute();
|
|
@@ -2274,16 +2421,9 @@ withAnalyticsTracking_fn = function(options, execute) {
|
|
|
2274
2421
|
if (isRejection) {
|
|
2275
2422
|
yield __privateMethod(this, _RequestRouter_instances, trackWalletActionRejected_fn).call(this, options);
|
|
2276
2423
|
} else {
|
|
2277
|
-
yield __privateMethod(this, _RequestRouter_instances, trackWalletActionFailed_fn).call(this, options);
|
|
2278
|
-
}
|
|
2279
|
-
if (error instanceof RPCInvokeMethodErr) {
|
|
2280
|
-
throw error;
|
|
2424
|
+
yield __privateMethod(this, _RequestRouter_instances, trackWalletActionFailed_fn).call(this, options, error);
|
|
2281
2425
|
}
|
|
2282
|
-
|
|
2283
|
-
throw new RPCInvokeMethodErr(
|
|
2284
|
-
(_a2 = castError.message) != null ? _a2 : "Unknown error",
|
|
2285
|
-
castError.code
|
|
2286
|
-
);
|
|
2426
|
+
throw toRPCInvokeMethodErr(error);
|
|
2287
2427
|
}
|
|
2288
2428
|
});
|
|
2289
2429
|
};
|
|
@@ -2309,13 +2449,14 @@ trackWalletActionSucceeded_fn = function(options) {
|
|
|
2309
2449
|
import_analytics2.analytics.track("mmconnect_wallet_action_succeeded", props);
|
|
2310
2450
|
});
|
|
2311
2451
|
};
|
|
2312
|
-
trackWalletActionFailed_fn = function(options) {
|
|
2452
|
+
trackWalletActionFailed_fn = function(options, error) {
|
|
2313
2453
|
return __async(this, null, function* () {
|
|
2314
2454
|
const props = yield getWalletActionAnalyticsProperties(
|
|
2315
2455
|
this.config,
|
|
2316
2456
|
this.config.storage,
|
|
2317
2457
|
options,
|
|
2318
|
-
this.transportType
|
|
2458
|
+
this.transportType,
|
|
2459
|
+
extractErrorDiagnostics(error)
|
|
2319
2460
|
);
|
|
2320
2461
|
import_analytics2.analytics.track("mmconnect_wallet_action_failed", props);
|
|
2321
2462
|
});
|
|
@@ -2741,26 +2882,65 @@ walletInvokeMethod_fn = function(request) {
|
|
|
2741
2882
|
init_utils();
|
|
2742
2883
|
var logger2 = createLogger("metamask-sdk:core");
|
|
2743
2884
|
var SINGLETON_KEY = "__METAMASK_CONNECT_MULTICHAIN_SINGLETON__";
|
|
2885
|
+
function normalizeAnalyticsOptions(analyticsOptions) {
|
|
2886
|
+
var _a2;
|
|
2887
|
+
return __spreadProps(__spreadValues({}, analyticsOptions != null ? analyticsOptions : {}), {
|
|
2888
|
+
enabled: (_a2 = analyticsOptions == null ? void 0 : analyticsOptions.enabled) != null ? _a2 : true,
|
|
2889
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
|
|
2890
|
+
integrationType: (analyticsOptions == null ? void 0 : analyticsOptions.integrationType) || "direct"
|
|
2891
|
+
});
|
|
2892
|
+
}
|
|
2893
|
+
function isAnalyticsEnabled(options) {
|
|
2894
|
+
var _a2;
|
|
2895
|
+
return ((_a2 = options.analytics) == null ? void 0 : _a2.enabled) !== false;
|
|
2896
|
+
}
|
|
2897
|
+
function setupAnalyticsGlobals(options, storage, setAnonId) {
|
|
2898
|
+
return __async(this, null, function* () {
|
|
2899
|
+
var _a2, _b;
|
|
2900
|
+
if (!isAnalyticsEnabled(options)) {
|
|
2901
|
+
setAnonId == null ? void 0 : setAnonId(void 0);
|
|
2902
|
+
import_analytics4.analytics.disable();
|
|
2903
|
+
return;
|
|
2904
|
+
}
|
|
2905
|
+
const platform = getPlatformType();
|
|
2906
|
+
const isBrowser = platform === "in-app-browser" /* MetaMaskMobileWebview */ || platform === "web-desktop" /* DesktopWeb */ || platform === "web-mobile" /* MobileWeb */;
|
|
2907
|
+
const isReactNative2 = platform === "react-native" /* ReactNative */;
|
|
2908
|
+
if (!isBrowser && !isReactNative2) {
|
|
2909
|
+
return;
|
|
2910
|
+
}
|
|
2911
|
+
const dappId = getDappId(options.dapp);
|
|
2912
|
+
const anonId = yield storage.getAnonId();
|
|
2913
|
+
setAnonId == null ? void 0 : setAnonId(anonId);
|
|
2914
|
+
const { integrationType } = (_a2 = options.analytics) != null ? _a2 : {
|
|
2915
|
+
integrationType: ""
|
|
2916
|
+
};
|
|
2917
|
+
import_analytics4.analytics.setGlobalProperty("mmconnect_versions", (_b = options.versions) != null ? _b : {});
|
|
2918
|
+
import_analytics4.analytics.setGlobalProperty("dapp_id", dappId);
|
|
2919
|
+
import_analytics4.analytics.setGlobalProperty("anon_id", anonId);
|
|
2920
|
+
import_analytics4.analytics.setGlobalProperty("platform", platform);
|
|
2921
|
+
if (integrationType) {
|
|
2922
|
+
import_analytics4.analytics.setGlobalProperty("integration_types", [integrationType]);
|
|
2923
|
+
}
|
|
2924
|
+
import_analytics4.analytics.enable();
|
|
2925
|
+
});
|
|
2926
|
+
}
|
|
2744
2927
|
var _a, _provider, _providerTransportWrapper, _transport2, _dappClient, _beforeUnloadListener, _transportType, _listener, _anonId, _sdkInfo, _MetaMaskConnectMultichain_instances, setupAnalytics_fn, onTransportNotification_fn, getStoredTransport_fn, setupTransport_fn, buildConnectionMetadata_fn, init_fn2, createDappClient_fn, setupMWP_fn, onBeforeUnload_fn, createBeforeUnloadListener_fn, renderInstallModalAsync_fn, showInstallModal_fn, headlessConnect_fn, setupDefaultTransport_fn, deeplinkConnect_fn, handleConnection_fn, getCaipSession_fn, openConnectDeeplinkIfNeeded_fn;
|
|
2745
2928
|
var _MetaMaskConnectMultichain = class _MetaMaskConnectMultichain extends MultichainCore {
|
|
2746
2929
|
constructor(options) {
|
|
2747
|
-
var _a2, _b, _c, _d
|
|
2930
|
+
var _a2, _b, _c, _d;
|
|
2748
2931
|
const withDappMetadata = setupDappMetadata(options);
|
|
2749
|
-
const integrationType = ((_a2 = options.analytics) == null ? void 0 : _a2.integrationType) || "direct";
|
|
2750
2932
|
const allOptions = __spreadProps(__spreadValues({}, withDappMetadata), {
|
|
2751
2933
|
ui: __spreadProps(__spreadValues({}, withDappMetadata.ui), {
|
|
2752
|
-
preferExtension: (
|
|
2753
|
-
showInstallModal: (
|
|
2754
|
-
headless: (
|
|
2755
|
-
}),
|
|
2756
|
-
analytics: __spreadProps(__spreadValues({}, (_e = options.analytics) != null ? _e : {}), {
|
|
2757
|
-
integrationType
|
|
2934
|
+
preferExtension: (_a2 = withDappMetadata.ui.preferExtension) != null ? _a2 : true,
|
|
2935
|
+
showInstallModal: (_b = withDappMetadata.ui.showInstallModal) != null ? _b : false,
|
|
2936
|
+
headless: (_c = withDappMetadata.ui.headless) != null ? _c : false
|
|
2758
2937
|
}),
|
|
2938
|
+
analytics: normalizeAnalyticsOptions(options.analytics),
|
|
2759
2939
|
versions: __spreadValues({
|
|
2760
2940
|
// typeof guard needed: Metro (React Native) bundles TS source directly,
|
|
2761
2941
|
// bypassing the tsup build that substitutes __PACKAGE_VERSION__.
|
|
2762
|
-
"connect-multichain": false ? "unknown" : "0.
|
|
2763
|
-
}, (
|
|
2942
|
+
"connect-multichain": false ? "unknown" : "0.15.0"
|
|
2943
|
+
}, (_d = options.versions) != null ? _d : {})
|
|
2764
2944
|
});
|
|
2765
2945
|
super(allOptions);
|
|
2766
2946
|
__privateAdd(this, _MetaMaskConnectMultichain_instances);
|
|
@@ -2816,25 +2996,22 @@ var _MetaMaskConnectMultichain = class _MetaMaskConnectMultichain extends Multic
|
|
|
2816
2996
|
// Creates a singleton instance of MetaMaskConnectMultichain.
|
|
2817
2997
|
// If the singleton already exists, it merges the incoming options with the
|
|
2818
2998
|
// existing singleton options for the following keys: `api.supportedNetworks`,
|
|
2819
|
-
// `versions`, `ui.*`, `mobile.*`, `transport.extensionId`,
|
|
2820
|
-
// that the value for `dapp` is not merged as it does not
|
|
2821
|
-
// subsequent calls to `createMultichainClient` to have a
|
|
2999
|
+
// `analytics`, `versions`, `ui.*`, `mobile.*`, `transport.extensionId`,
|
|
3000
|
+
// `debug`. Take note that the value for `dapp` is not merged as it does not
|
|
3001
|
+
// make sense for subsequent calls to `createMultichainClient` to have a
|
|
3002
|
+
// different `dapp` value.
|
|
2822
3003
|
static create(options) {
|
|
2823
3004
|
return __async(this, null, function* () {
|
|
2824
|
-
var _a2
|
|
3005
|
+
var _a2;
|
|
2825
3006
|
const globalObject = getGlobalObject();
|
|
2826
3007
|
const existing = globalObject[SINGLETON_KEY];
|
|
2827
3008
|
if (existing) {
|
|
2828
3009
|
const instance = yield existing;
|
|
2829
3010
|
instance.mergeOptions(options);
|
|
2830
|
-
|
|
2831
|
-
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
if ((_b = options.analytics) == null ? void 0 : _b.integrationType) {
|
|
2835
|
-
import_analytics4.analytics.setGlobalProperty("integration_types", [
|
|
2836
|
-
options.analytics.integrationType
|
|
2837
|
-
]);
|
|
3011
|
+
if (instance instanceof _MetaMaskConnectMultichain) {
|
|
3012
|
+
yield __privateMethod(_a2 = instance, _MetaMaskConnectMultichain_instances, setupAnalytics_fn).call(_a2);
|
|
3013
|
+
} else {
|
|
3014
|
+
yield setupAnalyticsGlobals(instance.options, instance.storage);
|
|
2838
3015
|
}
|
|
2839
3016
|
if (options.debug) {
|
|
2840
3017
|
enableDebug("metamask-sdk:*");
|
|
@@ -2884,21 +3061,23 @@ var _MetaMaskConnectMultichain = class _MetaMaskConnectMultichain extends Multic
|
|
|
2884
3061
|
} else {
|
|
2885
3062
|
transportType = "mwp" /* MWP */;
|
|
2886
3063
|
}
|
|
2887
|
-
|
|
2888
|
-
|
|
2889
|
-
|
|
2890
|
-
|
|
2891
|
-
|
|
2892
|
-
|
|
2893
|
-
|
|
2894
|
-
|
|
2895
|
-
|
|
2896
|
-
|
|
2897
|
-
|
|
2898
|
-
|
|
2899
|
-
|
|
2900
|
-
|
|
2901
|
-
|
|
3064
|
+
if (isAnalyticsEnabled(this.options)) {
|
|
3065
|
+
try {
|
|
3066
|
+
const baseProps = yield getBaseAnalyticsProperties(
|
|
3067
|
+
this.options,
|
|
3068
|
+
this.storage
|
|
3069
|
+
);
|
|
3070
|
+
const dappConfiguredChains = Object.keys(
|
|
3071
|
+
this.options.api.supportedNetworks
|
|
3072
|
+
);
|
|
3073
|
+
import_analytics4.analytics.track("mmconnect_connection_initiated", __spreadProps(__spreadValues({}, baseProps), {
|
|
3074
|
+
transport_type: transportType,
|
|
3075
|
+
dapp_configured_chains: dappConfiguredChains,
|
|
3076
|
+
dapp_requested_chains: scopes
|
|
3077
|
+
}));
|
|
3078
|
+
} catch (error) {
|
|
3079
|
+
logger2("Error tracking connection_initiated event", error);
|
|
3080
|
+
}
|
|
2902
3081
|
}
|
|
2903
3082
|
const sessionData = yield __privateMethod(this, _MetaMaskConnectMultichain_instances, getCaipSession_fn).call(this);
|
|
2904
3083
|
const { mergedScopes, mergedCaipAccountIds, mergedSessionProperties } = mergeRequestedSessionWithExisting(
|
|
@@ -3041,30 +3220,9 @@ _sdkInfo = new WeakMap();
|
|
|
3041
3220
|
_MetaMaskConnectMultichain_instances = new WeakSet();
|
|
3042
3221
|
setupAnalytics_fn = function() {
|
|
3043
3222
|
return __async(this, null, function* () {
|
|
3044
|
-
|
|
3045
|
-
|
|
3046
|
-
|
|
3047
|
-
const isReactNative2 = platform === "react-native" /* ReactNative */;
|
|
3048
|
-
if (!isBrowser && !isReactNative2) {
|
|
3049
|
-
return;
|
|
3050
|
-
}
|
|
3051
|
-
const dappId = getDappId(this.options.dapp);
|
|
3052
|
-
const anonId = yield this.storage.getAnonId();
|
|
3053
|
-
__privateSet(this, _anonId, anonId);
|
|
3054
|
-
const { integrationType } = (_a2 = this.options.analytics) != null ? _a2 : {
|
|
3055
|
-
integrationType: ""
|
|
3056
|
-
};
|
|
3057
|
-
import_analytics4.analytics.setGlobalProperty(
|
|
3058
|
-
"mmconnect_versions",
|
|
3059
|
-
(_b = this.options.versions) != null ? _b : {}
|
|
3060
|
-
);
|
|
3061
|
-
import_analytics4.analytics.setGlobalProperty("dapp_id", dappId);
|
|
3062
|
-
import_analytics4.analytics.setGlobalProperty("anon_id", anonId);
|
|
3063
|
-
import_analytics4.analytics.setGlobalProperty("platform", platform);
|
|
3064
|
-
if (integrationType) {
|
|
3065
|
-
import_analytics4.analytics.setGlobalProperty("integration_types", [integrationType]);
|
|
3066
|
-
}
|
|
3067
|
-
import_analytics4.analytics.enable();
|
|
3223
|
+
yield setupAnalyticsGlobals(this.options, this.storage, (anonId) => {
|
|
3224
|
+
__privateSet(this, _anonId, anonId);
|
|
3225
|
+
});
|
|
3068
3226
|
});
|
|
3069
3227
|
};
|
|
3070
3228
|
onTransportNotification_fn = function(payload) {
|
|
@@ -3153,7 +3311,7 @@ buildConnectionMetadata_fn = function() {
|
|
|
3153
3311
|
dapp: this.options.dapp,
|
|
3154
3312
|
sdk: { version: getVersion(), platform: getPlatformType() }
|
|
3155
3313
|
};
|
|
3156
|
-
if (__privateGet(this, _anonId)) {
|
|
3314
|
+
if (isAnalyticsEnabled(this.options) && __privateGet(this, _anonId)) {
|
|
3157
3315
|
metadata.analytics = { remote_session_id: __privateGet(this, _anonId) };
|
|
3158
3316
|
}
|
|
3159
3317
|
return metadata;
|
|
@@ -3435,38 +3593,42 @@ handleConnection_fn = function(promise, scopes, transportType) {
|
|
|
3435
3593
|
this.status = "connecting";
|
|
3436
3594
|
return promise.then(() => __async(this, null, function* () {
|
|
3437
3595
|
this.status = "connected";
|
|
3438
|
-
|
|
3439
|
-
|
|
3440
|
-
|
|
3441
|
-
|
|
3442
|
-
|
|
3443
|
-
|
|
3444
|
-
|
|
3445
|
-
|
|
3446
|
-
|
|
3447
|
-
|
|
3448
|
-
|
|
3596
|
+
if (isAnalyticsEnabled(this.options)) {
|
|
3597
|
+
try {
|
|
3598
|
+
const baseProps = yield getBaseAnalyticsProperties(
|
|
3599
|
+
this.options,
|
|
3600
|
+
this.storage
|
|
3601
|
+
);
|
|
3602
|
+
import_analytics4.analytics.track("mmconnect_connection_established", __spreadProps(__spreadValues({}, baseProps), {
|
|
3603
|
+
transport_type: transportType,
|
|
3604
|
+
user_permissioned_chains: scopes
|
|
3605
|
+
}));
|
|
3606
|
+
} catch (error) {
|
|
3607
|
+
logger2("Error tracking connection_established event", error);
|
|
3608
|
+
}
|
|
3449
3609
|
}
|
|
3450
3610
|
return void 0;
|
|
3451
3611
|
})).catch((error) => __async(this, null, function* () {
|
|
3452
3612
|
this.status = "disconnected";
|
|
3453
|
-
|
|
3454
|
-
|
|
3455
|
-
|
|
3456
|
-
|
|
3457
|
-
|
|
3458
|
-
|
|
3459
|
-
|
|
3460
|
-
|
|
3461
|
-
|
|
3462
|
-
|
|
3463
|
-
|
|
3464
|
-
|
|
3465
|
-
|
|
3466
|
-
|
|
3613
|
+
if (isAnalyticsEnabled(this.options)) {
|
|
3614
|
+
try {
|
|
3615
|
+
const baseProps = yield getBaseAnalyticsProperties(
|
|
3616
|
+
this.options,
|
|
3617
|
+
this.storage
|
|
3618
|
+
);
|
|
3619
|
+
const isRejection = isRejectionError(error);
|
|
3620
|
+
if (isRejection) {
|
|
3621
|
+
import_analytics4.analytics.track("mmconnect_connection_rejected", __spreadProps(__spreadValues({}, baseProps), {
|
|
3622
|
+
transport_type: transportType
|
|
3623
|
+
}));
|
|
3624
|
+
} else {
|
|
3625
|
+
import_analytics4.analytics.track("mmconnect_connection_failed", __spreadValues(__spreadProps(__spreadValues({}, baseProps), {
|
|
3626
|
+
transport_type: transportType
|
|
3627
|
+
}), extractErrorDiagnostics(error)));
|
|
3628
|
+
}
|
|
3629
|
+
} catch (e) {
|
|
3630
|
+
logger2("Error tracking connection failed/rejected event", error);
|
|
3467
3631
|
}
|
|
3468
|
-
} catch (e) {
|
|
3469
|
-
logger2("Error tracking connection failed/rejected event", error);
|
|
3470
3632
|
}
|
|
3471
3633
|
throw error;
|
|
3472
3634
|
}));
|
|
@@ -3909,6 +4071,7 @@ var createMultichainClient = (options) => __async(null, null, function* () {
|
|
|
3909
4071
|
StoreAdapter,
|
|
3910
4072
|
StoreClient,
|
|
3911
4073
|
TransportType,
|
|
4074
|
+
classifyFailureReason,
|
|
3912
4075
|
createLogger,
|
|
3913
4076
|
createMultichainClient,
|
|
3914
4077
|
enableDebug,
|