@metamask/connect-multichain 0.6.0 → 0.7.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.
Files changed (39) hide show
  1. package/CHANGELOG.md +15 -1
  2. package/README.md +21 -19
  3. package/dist/browser/es/connect-multichain.d.mts +2 -0
  4. package/dist/browser/es/connect-multichain.mjs +38 -7
  5. package/dist/browser/es/connect-multichain.mjs.map +1 -1
  6. package/dist/browser/es/metafile-esm.json +1 -1
  7. package/dist/browser/iife/connect-multichain.d.ts +2 -0
  8. package/dist/browser/iife/connect-multichain.js +128 -83
  9. package/dist/browser/iife/connect-multichain.js.map +1 -1
  10. package/dist/browser/iife/metafile-iife.json +1 -1
  11. package/dist/browser/umd/connect-multichain.d.ts +2 -0
  12. package/dist/browser/umd/connect-multichain.js +37 -6
  13. package/dist/browser/umd/connect-multichain.js.map +1 -1
  14. package/dist/browser/umd/metafile-cjs.json +1 -1
  15. package/dist/node/cjs/connect-multichain.d.ts +2 -0
  16. package/dist/node/cjs/connect-multichain.js +37 -6
  17. package/dist/node/cjs/connect-multichain.js.map +1 -1
  18. package/dist/node/cjs/metafile-cjs.json +1 -1
  19. package/dist/node/es/connect-multichain.d.mts +2 -0
  20. package/dist/node/es/connect-multichain.mjs +38 -7
  21. package/dist/node/es/connect-multichain.mjs.map +1 -1
  22. package/dist/node/es/metafile-esm.json +1 -1
  23. package/dist/react-native/es/connect-multichain.d.mts +2 -0
  24. package/dist/react-native/es/connect-multichain.mjs +38 -7
  25. package/dist/react-native/es/connect-multichain.mjs.map +1 -1
  26. package/dist/react-native/es/metafile-esm.json +1 -1
  27. package/dist/src/domain/multichain/types.d.ts +2 -0
  28. package/dist/src/domain/multichain/types.d.ts.map +1 -1
  29. package/dist/src/multichain/transports/multichainApiClientWrapper/index.d.ts.map +1 -1
  30. package/dist/src/multichain/transports/multichainApiClientWrapper/index.js +0 -1
  31. package/dist/src/multichain/transports/multichainApiClientWrapper/index.js.map +1 -1
  32. package/dist/src/multichain/transports/mwp/index.d.ts.map +1 -1
  33. package/dist/src/multichain/transports/mwp/index.js +11 -6
  34. package/dist/src/multichain/transports/mwp/index.js.map +1 -1
  35. package/dist/src/multichain/utils/index.d.ts.map +1 -1
  36. package/dist/src/multichain/utils/index.js +37 -0
  37. package/dist/src/multichain/utils/index.js.map +1 -1
  38. package/dist/types/connect-multichain.d.ts +2 -0
  39. package/package.json +2 -2
@@ -369,6 +369,8 @@ declare function hasExtension(): Promise<boolean>;
369
369
  type DappSettings = {
370
370
  name: string;
371
371
  url?: string;
372
+ /** The original non-http(s) URL before normalization on React Native platforms */
373
+ nativeScheme?: string;
372
374
  } & ({
373
375
  iconUrl?: string;
374
376
  } | {
@@ -797,6 +797,21 @@ function getOptionalScopes(scopes) {
797
797
  {}
798
798
  );
799
799
  }
800
+ function normalizeNativeUrl(url) {
801
+ var _a3;
802
+ const httpPattern = /^https?:\/\//u;
803
+ if (httpPattern.test(url)) {
804
+ return void 0;
805
+ }
806
+ const schemeMatch = url.match(/^([^:]*):\/\//u);
807
+ const rawScheme = (_a3 = schemeMatch == null ? void 0 : schemeMatch[1]) != null ? _a3 : url;
808
+ const sanitized = rawScheme.toLowerCase().replace(/[^a-z0-9-]/gu, "-").replace(/^-+|-+$/gu, "");
809
+ const subdomain = (sanitized || "unknown").slice(0, 63).replace(/-+$/u, "");
810
+ return {
811
+ url: `https://${subdomain}.rn.dapp.local`,
812
+ nativeScheme: url
813
+ };
814
+ }
800
815
  function setupDappMetadata(options) {
801
816
  var _a3, _b;
802
817
  const platform = getPlatformType();
@@ -812,6 +827,18 @@ function setupDappMetadata(options) {
812
827
  if (!((_b = options.dapp) == null ? void 0 : _b.url)) {
813
828
  throw new Error("You must provide dapp url");
814
829
  }
830
+ if (platform === "react-native" /* ReactNative */ && options.dapp.url) {
831
+ const normalized = normalizeNativeUrl(options.dapp.url);
832
+ if (normalized) {
833
+ console.info(
834
+ `Normalizing dapp URL for React Native: "${options.dapp.url}" -> "${normalized.url}"`
835
+ );
836
+ options.dapp = __spreadProps(__spreadValues({}, options.dapp), {
837
+ url: normalized.url,
838
+ nativeScheme: normalized.nativeScheme
839
+ });
840
+ }
841
+ }
815
842
  const BASE_64_ICON_MAX_LENGTH = 163400;
816
843
  const urlPattern = /^(http|https):\/\/[^\s]*$/u;
817
844
  if (options.dapp) {
@@ -1920,7 +1947,6 @@ _notificationCallbacks2 = new WeakMap();
1920
1947
  _MultichainApiClientWrapperTransport_instances = new WeakSet();
1921
1948
  walletCreateSession_fn = function(request) {
1922
1949
  return __async(this, null, function* () {
1923
- console.log("\u{1F4DA} #walletCreateSession", request);
1924
1950
  const createSessionParams = request.params;
1925
1951
  const scopes = Object.keys(__spreadValues(__spreadValues({}, createSessionParams.optionalScopes), createSessionParams.requiredScopes));
1926
1952
  const scopeAccounts = [];
@@ -2102,10 +2128,11 @@ var MWPTransport = class {
2102
2128
  parseWalletError(errorPayload) {
2103
2129
  const errorData = errorPayload;
2104
2130
  if (typeof errorData.code === "number" && typeof errorData.message === "string") {
2105
- return import_rpc_errors2.providerErrors.custom({
2106
- code: errorData.code,
2107
- message: errorData.message
2108
- });
2131
+ const { code, message: message2 } = errorData;
2132
+ if (code >= 1e3 && code <= 4999) {
2133
+ return import_rpc_errors2.providerErrors.custom({ code, message: message2 });
2134
+ }
2135
+ return new import_rpc_errors2.JsonRpcError(code, message2);
2109
2136
  }
2110
2137
  const message = errorPayload instanceof Error ? errorPayload.message : JSON.stringify(errorPayload);
2111
2138
  return import_rpc_errors2.rpcErrors.internal({ message });
@@ -2269,7 +2296,11 @@ var MWPTransport = class {
2269
2296
  const { dappClient } = this;
2270
2297
  const session = yield this.getActiveSession();
2271
2298
  if (session) {
2272
- logger("active session found", session);
2299
+ logger("active session found", {
2300
+ id: session.id,
2301
+ channel: session.channel,
2302
+ expiresAt: session.expiresAt
2303
+ });
2273
2304
  }
2274
2305
  const storedSessionRequestBeforeConnectionAttempt = yield this.getStoredPendingSessionRequest();
2275
2306
  let timeout;