@ledgerhq/live-common 34.55.0 → 34.55.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.
Files changed (34) hide show
  1. package/lib/wallet-api/helpers.d.ts +3 -3
  2. package/lib/wallet-api/helpers.d.ts.map +1 -1
  3. package/lib/wallet-api/helpers.js +37 -10
  4. package/lib/wallet-api/helpers.js.map +1 -1
  5. package/lib/wallet-api/manifestDomainUtils.d.ts +18 -0
  6. package/lib/wallet-api/manifestDomainUtils.d.ts.map +1 -0
  7. package/lib/wallet-api/manifestDomainUtils.js +77 -0
  8. package/lib/wallet-api/manifestDomainUtils.js.map +1 -0
  9. package/lib/wallet-api/useLiveAppManifest.d.ts +2 -0
  10. package/lib/wallet-api/useLiveAppManifest.d.ts.map +1 -0
  11. package/lib/wallet-api/useLiveAppManifest.js +18 -0
  12. package/lib/wallet-api/useLiveAppManifest.js.map +1 -0
  13. package/lib-es/wallet-api/helpers.d.ts +3 -3
  14. package/lib-es/wallet-api/helpers.d.ts.map +1 -1
  15. package/lib-es/wallet-api/helpers.js +37 -10
  16. package/lib-es/wallet-api/helpers.js.map +1 -1
  17. package/lib-es/wallet-api/manifestDomainUtils.d.ts +18 -0
  18. package/lib-es/wallet-api/manifestDomainUtils.d.ts.map +1 -0
  19. package/lib-es/wallet-api/manifestDomainUtils.js +70 -0
  20. package/lib-es/wallet-api/manifestDomainUtils.js.map +1 -0
  21. package/lib-es/wallet-api/useLiveAppManifest.d.ts +2 -0
  22. package/lib-es/wallet-api/useLiveAppManifest.d.ts.map +1 -0
  23. package/lib-es/wallet-api/useLiveAppManifest.js +14 -0
  24. package/lib-es/wallet-api/useLiveAppManifest.js.map +1 -0
  25. package/package.json +48 -48
  26. package/src/families/cardano/__snapshots__/bridge.integration.test.ts.snap +33 -2
  27. package/src/families/cosmos/datasets/__snapshots__/cosmos.integration.test.ts.snap +3 -3
  28. package/src/families/hedera/__snapshots__/bridge.integration.test.ts.snap +862 -34
  29. package/src/families/stellar/__snapshots__/bridge.integration.test.ts.snap +588 -57
  30. package/src/wallet-api/helpers.test.ts +411 -0
  31. package/src/wallet-api/helpers.ts +53 -18
  32. package/src/wallet-api/manifestDomainUtils.test.ts +355 -0
  33. package/src/wallet-api/manifestDomainUtils.ts +81 -0
  34. package/src/wallet-api/useLiveAppManifest.ts +16 -0
@@ -1,16 +1,16 @@
1
1
  import { Currency } from "@ledgerhq/types-cryptoassets";
2
- import { WalletAPICurrency, WalletAPISupportedCurrency, WalletAPIERC20TokenCurrency, WalletAPICryptoCurrency } from "./types";
2
+ import type { WalletAPICurrency, WalletAPISupportedCurrency, WalletAPIERC20TokenCurrency, WalletAPICryptoCurrency, AppManifest } from "./types";
3
3
  export declare function isWalletAPISupportedCurrency(currency: Currency): currency is WalletAPISupportedCurrency;
4
4
  export declare function isWalletAPICryptoCurrency(currency: WalletAPICurrency): currency is WalletAPICryptoCurrency;
5
5
  export declare function isWalletAPITokenCurrency(currency: WalletAPICurrency): currency is WalletAPIERC20TokenCurrency;
6
6
  export declare function isWalletAPIERC20TokenCurrency(currency: WalletAPICurrency): currency is WalletAPIERC20TokenCurrency;
7
- export declare function addParamsToURL(url: URL, inputs?: Record<string, string | undefined>): void;
7
+ export declare function addParamsToURL(url: URL, inputs?: Record<string, string | boolean | undefined>): void;
8
8
  type getHostHeadersParams = {
9
9
  client: string;
10
10
  theme: "light" | "dark";
11
11
  };
12
12
  export declare function getClientHeaders(params: getHostHeadersParams): Record<string, string>;
13
- export declare const getInitialURL: (inputs: any, manifest: any) => any;
13
+ export declare const getInitialURL: (inputs: Record<string, string | boolean | undefined> | undefined, manifest: AppManifest) => string;
14
14
  export declare const safeUrl: (url: string) => URL | null;
15
15
  export declare const isHexPrefixed: (str: string) => boolean;
16
16
  export declare const stripHexPrefix: (str: string) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/wallet-api/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,2BAA2B,EAC3B,uBAAuB,EACxB,MAAM,SAAS,CAAC;AAIjB,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,QAAQ,GACjB,QAAQ,IAAI,0BAA0B,CASxC;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,iBAAiB,GAC1B,QAAQ,IAAI,uBAAuB,CAErC;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,iBAAiB,GAC1B,QAAQ,IAAI,2BAA2B,CAEzC;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,iBAAiB,GAC1B,QAAQ,IAAI,2BAA2B,CAEzC;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,CAa1F;AAED,KAAK,oBAAoB,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKrF;AAgBD,eAAO,MAAM,aAAa,qCAoBzB,CAAC;AAEF,eAAO,MAAM,OAAO,QAAS,MAAM,eAMlC,CAAC;AAGF,eAAO,MAAM,aAAa,QAAS,MAAM,KAAG,OAM3C,CAAC;AAGF,eAAO,MAAM,cAAc,QAAS,MAAM,KAAG,MAK5C,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAcrF"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/wallet-api/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,KAAK,EACV,iBAAiB,EACjB,0BAA0B,EAC1B,2BAA2B,EAC3B,uBAAuB,EACvB,WAAW,EACZ,MAAM,SAAS,CAAC;AAKjB,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,QAAQ,GACjB,QAAQ,IAAI,0BAA0B,CASxC;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,iBAAiB,GAC1B,QAAQ,IAAI,uBAAuB,CAErC;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,iBAAiB,GAC1B,QAAQ,IAAI,2BAA2B,CAEzC;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,iBAAiB,GAC1B,QAAQ,IAAI,2BAA2B,CAEzC;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE,GAAG,EACR,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GACpD,IAAI,CAaN;AAED,KAAK,oBAAoB,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKrF;AAoCD,eAAO,MAAM,aAAa,WAChB,OAAO,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAAG,SAAS,YACtD,WAAW,WA4BtB,CAAC;AAEF,eAAO,MAAM,OAAO,QAAS,MAAM,eAMlC,CAAC;AAGF,eAAO,MAAM,aAAa,QAAS,MAAM,KAAG,OAM3C,CAAC;AAGF,eAAO,MAAM,cAAc,QAAS,MAAM,KAAG,MAK5C,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAcrF"}
@@ -4,6 +4,7 @@ exports.objectToURLSearchParams = exports.stripHexPrefix = exports.isHexPrefixed
4
4
  const currencies_1 = require("../currencies");
5
5
  const constants_1 = require("./constants");
6
6
  const helpers_1 = require("../helpers");
7
+ const manifestDomainUtils_1 = require("./manifestDomainUtils");
7
8
  function isWalletAPISupportedCurrency(currency) {
8
9
  if ((0, currencies_1.isCryptoCurrency)(currency)) {
9
10
  return (0, helpers_1.includes)(constants_1.WALLET_API_FAMILIES, currency.family);
@@ -23,7 +24,7 @@ function isWalletAPITokenCurrency(currency) {
23
24
  }
24
25
  exports.isWalletAPITokenCurrency = isWalletAPITokenCurrency;
25
26
  function isWalletAPIERC20TokenCurrency(currency) {
26
- return currency.standard === "ERC20";
27
+ return currency.type === "TokenCurrency" && currency.standard === "ERC20";
27
28
  }
28
29
  exports.isWalletAPIERC20TokenCurrency = isWalletAPIERC20TokenCurrency;
29
30
  function addParamsToURL(url, inputs) {
@@ -33,7 +34,7 @@ function addParamsToURL(url, inputs) {
33
34
  const key = keys[i];
34
35
  const value = inputs[key];
35
36
  if (value !== undefined) {
36
- url.searchParams.set(key, value);
37
+ url.searchParams.set(key, String(value));
37
38
  }
38
39
  }
39
40
  }
@@ -46,20 +47,46 @@ function getClientHeaders(params) {
46
47
  };
47
48
  }
48
49
  exports.getClientHeaders = getClientHeaders;
49
- const isWhitelistedDomain = (url, whitelistedDomains) => {
50
- const isValid = whitelistedDomains.reduce((acc, whitelistedDomain) => acc ? acc : new RegExp(whitelistedDomain).test(url), false);
51
- if (!isValid) {
52
- console.error("#isWhitelistedDomain:: invalid URL: url is not whitelisted");
50
+ /**
51
+ * Validates a URL by checking if it's on the same domain as the manifest URL.
52
+ * Only HTTPS URLs are allowed.
53
+ * @param url - The URL to validate
54
+ * @param manifestUrl - The manifest URL to check same domain against
55
+ * @returns true if the URL is valid and is on the same domain as manifestUrl
56
+ */
57
+ const isWhitelistedDomain = (url, manifestUrl) => {
58
+ try {
59
+ // Parse the URL
60
+ const parsedUrl = new URL(url);
61
+ // Only allow HTTPS scheme
62
+ if (parsedUrl.protocol !== "https:") {
63
+ console.error(`#isWhitelistedDomain:: invalid URL: non-HTTPS scheme '${parsedUrl.protocol}' is not allowed`);
64
+ return false;
65
+ }
66
+ // Check if URL is on the same domain as manifest URL
67
+ if (!(0, manifestDomainUtils_1.isSameDomain)(url, manifestUrl)) {
68
+ console.error(`#isWhitelistedDomain:: invalid URL: not on the same domain as manifest URL`);
69
+ return false;
70
+ }
71
+ return true;
72
+ }
73
+ catch (error) {
74
+ // Invalid URL format
75
+ console.error(`#isWhitelistedDomain:: invalid URL format: ${error}`);
76
+ return false;
53
77
  }
54
- return isValid;
55
78
  };
56
79
  const getInitialURL = (inputs, manifest) => {
57
80
  try {
58
- if (inputs?.goToURL && isWhitelistedDomain(inputs?.goToURL, manifest.domains)) {
81
+ if (typeof inputs?.goToURL === "string" &&
82
+ isWhitelistedDomain(inputs.goToURL, manifest.url.toString())) {
59
83
  return inputs?.goToURL;
60
84
  }
61
- const url = new URL(manifest.url);
62
- addParamsToURL(url, inputs);
85
+ const url = new URL(manifest.url.toString());
86
+ // Filter out goToURL from inputs to prevent it from being added as a query parameter
87
+ // when validation fails
88
+ const { goToURL, ...filteredInputs } = inputs || {};
89
+ addParamsToURL(url, filteredInputs);
63
90
  if (manifest.params) {
64
91
  url.searchParams.set("params", JSON.stringify(manifest.params));
65
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/wallet-api/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/wallet-api/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { LiveAppManifest } from "../platform/types";
2
+ /**
3
+ * Extracts the domain from a URL string
4
+ */
5
+ export declare function getDomain(url: string): string | null;
6
+ /**
7
+ * Extracts the protocol from a URL string
8
+ */
9
+ export declare function getProtocol(url: string): string | null;
10
+ /**
11
+ * Checks if two URLs are on the same domain and protocol
12
+ */
13
+ export declare function isSameDomain(url1: string | undefined, url2: string | undefined): boolean;
14
+ /**
15
+ * Applies a custom dapp URL to a manifest if it's on the same domain as the original URL
16
+ */
17
+ export declare function applyCustomDappUrl<T extends LiveAppManifest>(manifest: T | null | undefined, customDappUrl: string | null | undefined): T | null | undefined;
18
+ //# sourceMappingURL=manifestDomainUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestDomainUtils.d.ts","sourceRoot":"","sources":["../../src/wallet-api/manifestDomainUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOpD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOtD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAcxF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,eAAe,EAC1D,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACvC,CAAC,GAAG,IAAI,GAAG,SAAS,CA6BtB"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyCustomDappUrl = exports.isSameDomain = exports.getProtocol = exports.getDomain = void 0;
4
+ /**
5
+ * Extracts the domain from a URL string
6
+ */
7
+ function getDomain(url) {
8
+ try {
9
+ const urlObj = new URL(url);
10
+ return urlObj.hostname;
11
+ }
12
+ catch {
13
+ return null;
14
+ }
15
+ }
16
+ exports.getDomain = getDomain;
17
+ /**
18
+ * Extracts the protocol from a URL string
19
+ */
20
+ function getProtocol(url) {
21
+ try {
22
+ const urlObj = new URL(url);
23
+ return urlObj.protocol;
24
+ }
25
+ catch {
26
+ return null;
27
+ }
28
+ }
29
+ exports.getProtocol = getProtocol;
30
+ /**
31
+ * Checks if two URLs are on the same domain and protocol
32
+ */
33
+ function isSameDomain(url1, url2) {
34
+ if (!url1 || !url2)
35
+ return false;
36
+ const domain1 = getDomain(url1);
37
+ const domain2 = getDomain(url2);
38
+ const protocol1 = getProtocol(url1);
39
+ const protocol2 = getProtocol(url2);
40
+ return (domain1 !== null &&
41
+ domain2 !== null &&
42
+ protocol1 !== null &&
43
+ protocol2 !== null &&
44
+ domain1 === domain2 &&
45
+ protocol1 === protocol2);
46
+ }
47
+ exports.isSameDomain = isSameDomain;
48
+ /**
49
+ * Applies a custom dapp URL to a manifest if it's on the same domain as the original URL
50
+ */
51
+ function applyCustomDappUrl(manifest, customDappUrl) {
52
+ if (!customDappUrl || !manifest) {
53
+ return manifest;
54
+ }
55
+ // Handle manifest with params.dappUrl
56
+ if (manifest.params &&
57
+ "dappUrl" in manifest.params &&
58
+ isSameDomain(customDappUrl, manifest.params.dappUrl)) {
59
+ return {
60
+ ...manifest,
61
+ params: {
62
+ ...manifest.params,
63
+ dappUrl: customDappUrl,
64
+ },
65
+ };
66
+ }
67
+ // Handle manifest.dapp case
68
+ if (manifest.dapp && isSameDomain(customDappUrl, String(manifest.url))) {
69
+ return {
70
+ ...manifest,
71
+ url: customDappUrl,
72
+ };
73
+ }
74
+ return manifest;
75
+ }
76
+ exports.applyCustomDappUrl = applyCustomDappUrl;
77
+ //# sourceMappingURL=manifestDomainUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestDomainUtils.js","sourceRoot":"","sources":["../../src/wallet-api/manifestDomainUtils.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACH,SAAgB,SAAS,CAAC,GAAW;IACnC,IAAI;QACF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC;KACxB;IAAC,MAAM;QACN,OAAO,IAAI,CAAC;KACb;AACH,CAAC;AAPD,8BAOC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,GAAW;IACrC,IAAI;QACF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC;KACxB;IAAC,MAAM;QACN,OAAO,IAAI,CAAC;KACb;AACH,CAAC;AAPD,kCAOC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,IAAwB,EAAE,IAAwB;IAC7E,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACjC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,CACL,OAAO,KAAK,IAAI;QAChB,OAAO,KAAK,IAAI;QAChB,SAAS,KAAK,IAAI;QAClB,SAAS,KAAK,IAAI;QAClB,OAAO,KAAK,OAAO;QACnB,SAAS,KAAK,SAAS,CACxB,CAAC;AACJ,CAAC;AAdD,oCAcC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAChC,QAA8B,EAC9B,aAAwC;IAExC,IAAI,CAAC,aAAa,IAAI,CAAC,QAAQ,EAAE;QAC/B,OAAO,QAAQ,CAAC;KACjB;IAED,sCAAsC;IACtC,IACE,QAAQ,CAAC,MAAM;QACf,SAAS,IAAI,QAAQ,CAAC,MAAM;QAC5B,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EACpD;QACA,OAAO;YACL,GAAG,QAAQ;YACX,MAAM,EAAE;gBACN,GAAG,QAAQ,CAAC,MAAM;gBAClB,OAAO,EAAE,aAAa;aACvB;SACF,CAAC;KACH;IAED,4BAA4B;IAC5B,IAAI,QAAQ,CAAC,IAAI,IAAI,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;QACtE,OAAO;YACL,GAAG,QAAQ;YACX,GAAG,EAAE,aAAa;SACnB,CAAC;KACH;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAhCD,gDAgCC"}
@@ -0,0 +1,2 @@
1
+ export declare function useLiveAppManifest(appId: string | undefined, customDappUrl?: string | null): import("../platform/types").LiveAppManifest | null | undefined;
2
+ //# sourceMappingURL=useLiveAppManifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLiveAppManifest.d.ts","sourceRoot":"","sources":["../../src/wallet-api/useLiveAppManifest.ts"],"names":[],"mappings":"AAKA,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,kEAU1F"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useLiveAppManifest = void 0;
4
+ const react_1 = require("react");
5
+ const index_1 = require("./LocalLiveAppProvider/index");
6
+ const index_2 = require("../platform/providers/RemoteLiveAppProvider/index");
7
+ const manifestDomainUtils_1 = require("./manifestDomainUtils");
8
+ function useLiveAppManifest(appId, customDappUrl) {
9
+ const localManifest = (0, index_1.useLocalLiveAppManifest)(appId);
10
+ const remoteManifest = (0, index_2.useRemoteLiveAppManifest)(appId);
11
+ const manifest = (0, react_1.useMemo)(() => {
12
+ const baseManifest = localManifest || remoteManifest;
13
+ return (0, manifestDomainUtils_1.applyCustomDappUrl)(baseManifest, customDappUrl);
14
+ }, [localManifest, remoteManifest, customDappUrl]);
15
+ return manifest;
16
+ }
17
+ exports.useLiveAppManifest = useLiveAppManifest;
18
+ //# sourceMappingURL=useLiveAppManifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLiveAppManifest.js","sourceRoot":"","sources":["../../src/wallet-api/useLiveAppManifest.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAChC,wDAAuE;AACvE,6EAA6F;AAC7F,+DAA2D;AAE3D,SAAgB,kBAAkB,CAAC,KAAyB,EAAE,aAA6B;IACzF,MAAM,aAAa,GAAG,IAAA,+BAAuB,EAAC,KAAK,CAAC,CAAC;IACrD,MAAM,cAAc,GAAG,IAAA,gCAAwB,EAAC,KAAK,CAAC,CAAC;IAEvD,MAAM,QAAQ,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC5B,MAAM,YAAY,GAAG,aAAa,IAAI,cAAc,CAAC;QACrD,OAAO,IAAA,wCAAkB,EAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IACzD,CAAC,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;IAEnD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAVD,gDAUC"}
@@ -1,16 +1,16 @@
1
1
  import { Currency } from "@ledgerhq/types-cryptoassets";
2
- import { WalletAPICurrency, WalletAPISupportedCurrency, WalletAPIERC20TokenCurrency, WalletAPICryptoCurrency } from "./types";
2
+ import type { WalletAPICurrency, WalletAPISupportedCurrency, WalletAPIERC20TokenCurrency, WalletAPICryptoCurrency, AppManifest } from "./types";
3
3
  export declare function isWalletAPISupportedCurrency(currency: Currency): currency is WalletAPISupportedCurrency;
4
4
  export declare function isWalletAPICryptoCurrency(currency: WalletAPICurrency): currency is WalletAPICryptoCurrency;
5
5
  export declare function isWalletAPITokenCurrency(currency: WalletAPICurrency): currency is WalletAPIERC20TokenCurrency;
6
6
  export declare function isWalletAPIERC20TokenCurrency(currency: WalletAPICurrency): currency is WalletAPIERC20TokenCurrency;
7
- export declare function addParamsToURL(url: URL, inputs?: Record<string, string | undefined>): void;
7
+ export declare function addParamsToURL(url: URL, inputs?: Record<string, string | boolean | undefined>): void;
8
8
  type getHostHeadersParams = {
9
9
  client: string;
10
10
  theme: "light" | "dark";
11
11
  };
12
12
  export declare function getClientHeaders(params: getHostHeadersParams): Record<string, string>;
13
- export declare const getInitialURL: (inputs: any, manifest: any) => any;
13
+ export declare const getInitialURL: (inputs: Record<string, string | boolean | undefined> | undefined, manifest: AppManifest) => string;
14
14
  export declare const safeUrl: (url: string) => URL | null;
15
15
  export declare const isHexPrefixed: (str: string) => boolean;
16
16
  export declare const stripHexPrefix: (str: string) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/wallet-api/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,2BAA2B,EAC3B,uBAAuB,EACxB,MAAM,SAAS,CAAC;AAIjB,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,QAAQ,GACjB,QAAQ,IAAI,0BAA0B,CASxC;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,iBAAiB,GAC1B,QAAQ,IAAI,uBAAuB,CAErC;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,iBAAiB,GAC1B,QAAQ,IAAI,2BAA2B,CAEzC;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,iBAAiB,GAC1B,QAAQ,IAAI,2BAA2B,CAEzC;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,CAa1F;AAED,KAAK,oBAAoB,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKrF;AAgBD,eAAO,MAAM,aAAa,qCAoBzB,CAAC;AAEF,eAAO,MAAM,OAAO,QAAS,MAAM,eAMlC,CAAC;AAGF,eAAO,MAAM,aAAa,QAAS,MAAM,KAAG,OAM3C,CAAC;AAGF,eAAO,MAAM,cAAc,QAAS,MAAM,KAAG,MAK5C,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAcrF"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/wallet-api/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,KAAK,EACV,iBAAiB,EACjB,0BAA0B,EAC1B,2BAA2B,EAC3B,uBAAuB,EACvB,WAAW,EACZ,MAAM,SAAS,CAAC;AAKjB,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,QAAQ,GACjB,QAAQ,IAAI,0BAA0B,CASxC;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,iBAAiB,GAC1B,QAAQ,IAAI,uBAAuB,CAErC;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,iBAAiB,GAC1B,QAAQ,IAAI,2BAA2B,CAEzC;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,iBAAiB,GAC1B,QAAQ,IAAI,2BAA2B,CAEzC;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE,GAAG,EACR,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GACpD,IAAI,CAaN;AAED,KAAK,oBAAoB,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKrF;AAoCD,eAAO,MAAM,aAAa,WAChB,OAAO,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAAG,SAAS,YACtD,WAAW,WA4BtB,CAAC;AAEF,eAAO,MAAM,OAAO,QAAS,MAAM,eAMlC,CAAC;AAGF,eAAO,MAAM,aAAa,QAAS,MAAM,KAAG,OAM3C,CAAC;AAGF,eAAO,MAAM,cAAc,QAAS,MAAM,KAAG,MAK5C,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAcrF"}
@@ -1,6 +1,7 @@
1
1
  import { isCryptoCurrency, isTokenCurrency } from "../currencies";
2
2
  import { WALLET_API_FAMILIES } from "./constants";
3
3
  import { includes } from "../helpers";
4
+ import { isSameDomain } from "./manifestDomainUtils";
4
5
  export function isWalletAPISupportedCurrency(currency) {
5
6
  if (isCryptoCurrency(currency)) {
6
7
  return includes(WALLET_API_FAMILIES, currency.family);
@@ -17,7 +18,7 @@ export function isWalletAPITokenCurrency(currency) {
17
18
  return currency.type === "TokenCurrency";
18
19
  }
19
20
  export function isWalletAPIERC20TokenCurrency(currency) {
20
- return currency.standard === "ERC20";
21
+ return currency.type === "TokenCurrency" && currency.standard === "ERC20";
21
22
  }
22
23
  export function addParamsToURL(url, inputs) {
23
24
  if (inputs) {
@@ -26,7 +27,7 @@ export function addParamsToURL(url, inputs) {
26
27
  const key = keys[i];
27
28
  const value = inputs[key];
28
29
  if (value !== undefined) {
29
- url.searchParams.set(key, value);
30
+ url.searchParams.set(key, String(value));
30
31
  }
31
32
  }
32
33
  }
@@ -37,20 +38,46 @@ export function getClientHeaders(params) {
37
38
  "x-ledger-host-theme": params.theme,
38
39
  };
39
40
  }
40
- const isWhitelistedDomain = (url, whitelistedDomains) => {
41
- const isValid = whitelistedDomains.reduce((acc, whitelistedDomain) => acc ? acc : new RegExp(whitelistedDomain).test(url), false);
42
- if (!isValid) {
43
- console.error("#isWhitelistedDomain:: invalid URL: url is not whitelisted");
41
+ /**
42
+ * Validates a URL by checking if it's on the same domain as the manifest URL.
43
+ * Only HTTPS URLs are allowed.
44
+ * @param url - The URL to validate
45
+ * @param manifestUrl - The manifest URL to check same domain against
46
+ * @returns true if the URL is valid and is on the same domain as manifestUrl
47
+ */
48
+ const isWhitelistedDomain = (url, manifestUrl) => {
49
+ try {
50
+ // Parse the URL
51
+ const parsedUrl = new URL(url);
52
+ // Only allow HTTPS scheme
53
+ if (parsedUrl.protocol !== "https:") {
54
+ console.error(`#isWhitelistedDomain:: invalid URL: non-HTTPS scheme '${parsedUrl.protocol}' is not allowed`);
55
+ return false;
56
+ }
57
+ // Check if URL is on the same domain as manifest URL
58
+ if (!isSameDomain(url, manifestUrl)) {
59
+ console.error(`#isWhitelistedDomain:: invalid URL: not on the same domain as manifest URL`);
60
+ return false;
61
+ }
62
+ return true;
63
+ }
64
+ catch (error) {
65
+ // Invalid URL format
66
+ console.error(`#isWhitelistedDomain:: invalid URL format: ${error}`);
67
+ return false;
44
68
  }
45
- return isValid;
46
69
  };
47
70
  export const getInitialURL = (inputs, manifest) => {
48
71
  try {
49
- if (inputs?.goToURL && isWhitelistedDomain(inputs?.goToURL, manifest.domains)) {
72
+ if (typeof inputs?.goToURL === "string" &&
73
+ isWhitelistedDomain(inputs.goToURL, manifest.url.toString())) {
50
74
  return inputs?.goToURL;
51
75
  }
52
- const url = new URL(manifest.url);
53
- addParamsToURL(url, inputs);
76
+ const url = new URL(manifest.url.toString());
77
+ // Filter out goToURL from inputs to prevent it from being added as a query parameter
78
+ // when validation fails
79
+ const { goToURL, ...filteredInputs } = inputs || {};
80
+ addParamsToURL(url, filteredInputs);
54
81
  if (manifest.params) {
55
82
  url.searchParams.set("params", JSON.stringify(manifest.params));
56
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/wallet-api/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAQlE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,UAAU,4BAA4B,CAC1C,QAAkB;IAElB,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE;QAC9B,OAAO,QAAQ,CAAC,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;KACvD;IAED,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE;QAC7B,OAAO,QAAQ,CAAC,mBAAmB,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;KACtE;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,QAA2B;IAE3B,OAAO,QAAQ,CAAC,IAAI,KAAK,gBAAgB,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,QAA2B;IAE3B,OAAO,QAAQ,CAAC,IAAI,KAAK,eAAe,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,QAA2B;IAE3B,OAAQ,QAAwC,CAAC,QAAQ,KAAK,OAAO,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAQ,EAAE,MAA2C;IAClF,IAAI,MAAM,EAAE;QACV,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAE1B,IAAI,KAAK,KAAK,SAAS,EAAE;gBACvB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;aAClC;SACF;KACF;AACH,CAAC;AAOD,MAAM,UAAU,gBAAgB,CAAC,MAA4B;IAC3D,OAAO;QACL,eAAe,EAAE,MAAM,CAAC,MAAM;QAC9B,qBAAqB,EAAE,MAAM,CAAC,KAAK;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,mBAAmB,GAAG,CAAC,GAAW,EAAE,kBAA4B,EAAW,EAAE;IACjF,MAAM,OAAO,GAAY,kBAAkB,CAAC,MAAM,CAChD,CAAC,GAAY,EAAE,iBAAyB,EAAE,EAAE,CAC1C,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EACrD,KAAK,CACN,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;KAC7E;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;IAChD,IAAI;QACF,IAAI,MAAM,EAAE,OAAO,IAAI,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC7E,OAAO,MAAM,EAAE,OAAO,CAAC;SACxB;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAElC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAE5B,IAAI,QAAQ,CAAC,MAAM,EAAE;YACnB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;SACjE;QAED,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;KACvB;IAAC,OAAO,CAAC,EAAE;QACV,IAAI,CAAC,YAAY,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAEjD,OAAO,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;KAChC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,EAAE;IACrC,IAAI;QACF,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;KACrB;IAAC,MAAM;QACN,OAAO,IAAI,CAAC;KACb;AACH,CAAC,CAAC;AAEF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAW,EAAW,EAAE;IACpD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QAC3B,MAAM,IAAI,KAAK,CAAC,8DAA8D,OAAO,GAAG,EAAE,CAAC,CAAC;KAC7F;IAED,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;AAC1C,CAAC,CAAC;AAEF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAU,EAAE;IACpD,IAAI,OAAO,GAAG,KAAK,QAAQ;QACzB,MAAM,IAAI,KAAK,CAAC,0DAA0D,OAAO,GAAG,EAAE,CAAC,CAAC;IAE1F,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,UAAU,uBAAuB,CAAC,GAA4B;IAClE,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;IAE3C,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC3C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;YACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC7B,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;aACjD;iBAAM;gBACL,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;aACzC;SACF;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/wallet-api/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { LiveAppManifest } from "../platform/types";
2
+ /**
3
+ * Extracts the domain from a URL string
4
+ */
5
+ export declare function getDomain(url: string): string | null;
6
+ /**
7
+ * Extracts the protocol from a URL string
8
+ */
9
+ export declare function getProtocol(url: string): string | null;
10
+ /**
11
+ * Checks if two URLs are on the same domain and protocol
12
+ */
13
+ export declare function isSameDomain(url1: string | undefined, url2: string | undefined): boolean;
14
+ /**
15
+ * Applies a custom dapp URL to a manifest if it's on the same domain as the original URL
16
+ */
17
+ export declare function applyCustomDappUrl<T extends LiveAppManifest>(manifest: T | null | undefined, customDappUrl: string | null | undefined): T | null | undefined;
18
+ //# sourceMappingURL=manifestDomainUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestDomainUtils.d.ts","sourceRoot":"","sources":["../../src/wallet-api/manifestDomainUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOpD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOtD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAcxF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,eAAe,EAC1D,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACvC,CAAC,GAAG,IAAI,GAAG,SAAS,CA6BtB"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Extracts the domain from a URL string
3
+ */
4
+ export function getDomain(url) {
5
+ try {
6
+ const urlObj = new URL(url);
7
+ return urlObj.hostname;
8
+ }
9
+ catch {
10
+ return null;
11
+ }
12
+ }
13
+ /**
14
+ * Extracts the protocol from a URL string
15
+ */
16
+ export function getProtocol(url) {
17
+ try {
18
+ const urlObj = new URL(url);
19
+ return urlObj.protocol;
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ }
25
+ /**
26
+ * Checks if two URLs are on the same domain and protocol
27
+ */
28
+ export function isSameDomain(url1, url2) {
29
+ if (!url1 || !url2)
30
+ return false;
31
+ const domain1 = getDomain(url1);
32
+ const domain2 = getDomain(url2);
33
+ const protocol1 = getProtocol(url1);
34
+ const protocol2 = getProtocol(url2);
35
+ return (domain1 !== null &&
36
+ domain2 !== null &&
37
+ protocol1 !== null &&
38
+ protocol2 !== null &&
39
+ domain1 === domain2 &&
40
+ protocol1 === protocol2);
41
+ }
42
+ /**
43
+ * Applies a custom dapp URL to a manifest if it's on the same domain as the original URL
44
+ */
45
+ export function applyCustomDappUrl(manifest, customDappUrl) {
46
+ if (!customDappUrl || !manifest) {
47
+ return manifest;
48
+ }
49
+ // Handle manifest with params.dappUrl
50
+ if (manifest.params &&
51
+ "dappUrl" in manifest.params &&
52
+ isSameDomain(customDappUrl, manifest.params.dappUrl)) {
53
+ return {
54
+ ...manifest,
55
+ params: {
56
+ ...manifest.params,
57
+ dappUrl: customDappUrl,
58
+ },
59
+ };
60
+ }
61
+ // Handle manifest.dapp case
62
+ if (manifest.dapp && isSameDomain(customDappUrl, String(manifest.url))) {
63
+ return {
64
+ ...manifest,
65
+ url: customDappUrl,
66
+ };
67
+ }
68
+ return manifest;
69
+ }
70
+ //# sourceMappingURL=manifestDomainUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestDomainUtils.js","sourceRoot":"","sources":["../../src/wallet-api/manifestDomainUtils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,IAAI;QACF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC;KACxB;IAAC,MAAM;QACN,OAAO,IAAI,CAAC;KACb;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI;QACF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC;KACxB;IAAC,MAAM;QACN,OAAO,IAAI,CAAC;KACb;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAwB,EAAE,IAAwB;IAC7E,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACjC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,CACL,OAAO,KAAK,IAAI;QAChB,OAAO,KAAK,IAAI;QAChB,SAAS,KAAK,IAAI;QAClB,SAAS,KAAK,IAAI;QAClB,OAAO,KAAK,OAAO;QACnB,SAAS,KAAK,SAAS,CACxB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAA8B,EAC9B,aAAwC;IAExC,IAAI,CAAC,aAAa,IAAI,CAAC,QAAQ,EAAE;QAC/B,OAAO,QAAQ,CAAC;KACjB;IAED,sCAAsC;IACtC,IACE,QAAQ,CAAC,MAAM;QACf,SAAS,IAAI,QAAQ,CAAC,MAAM;QAC5B,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EACpD;QACA,OAAO;YACL,GAAG,QAAQ;YACX,MAAM,EAAE;gBACN,GAAG,QAAQ,CAAC,MAAM;gBAClB,OAAO,EAAE,aAAa;aACvB;SACF,CAAC;KACH;IAED,4BAA4B;IAC5B,IAAI,QAAQ,CAAC,IAAI,IAAI,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;QACtE,OAAO;YACL,GAAG,QAAQ;YACX,GAAG,EAAE,aAAa;SACnB,CAAC;KACH;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function useLiveAppManifest(appId: string | undefined, customDappUrl?: string | null): import("../platform/types").LiveAppManifest | null | undefined;
2
+ //# sourceMappingURL=useLiveAppManifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLiveAppManifest.d.ts","sourceRoot":"","sources":["../../src/wallet-api/useLiveAppManifest.ts"],"names":[],"mappings":"AAKA,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,kEAU1F"}
@@ -0,0 +1,14 @@
1
+ import { useMemo } from "react";
2
+ import { useLocalLiveAppManifest } from "./LocalLiveAppProvider/index";
3
+ import { useRemoteLiveAppManifest } from "../platform/providers/RemoteLiveAppProvider/index";
4
+ import { applyCustomDappUrl } from "./manifestDomainUtils";
5
+ export function useLiveAppManifest(appId, customDappUrl) {
6
+ const localManifest = useLocalLiveAppManifest(appId);
7
+ const remoteManifest = useRemoteLiveAppManifest(appId);
8
+ const manifest = useMemo(() => {
9
+ const baseManifest = localManifest || remoteManifest;
10
+ return applyCustomDappUrl(baseManifest, customDappUrl);
11
+ }, [localManifest, remoteManifest, customDappUrl]);
12
+ return manifest;
13
+ }
14
+ //# sourceMappingURL=useLiveAppManifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLiveAppManifest.js","sourceRoot":"","sources":["../../src/wallet-api/useLiveAppManifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,UAAU,kBAAkB,CAAC,KAAyB,EAAE,aAA6B;IACzF,MAAM,aAAa,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,cAAc,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAEvD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;QAC5B,MAAM,YAAY,GAAG,aAAa,IAAI,cAAc,CAAC;QACrD,OAAO,kBAAkB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IACzD,CAAC,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;IAEnD,OAAO,QAAQ,CAAC;AAClB,CAAC"}