thirdweb 5.54.0 → 5.55.0-nightly-8035923cdad943a47fc909e04522c351d06804f0-20240913000407

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 (37) hide show
  1. package/dist/cjs/exports/extensions/common.js +3 -1
  2. package/dist/cjs/exports/extensions/common.js.map +1 -1
  3. package/dist/cjs/exports/extensions/ens.js +3 -1
  4. package/dist/cjs/exports/extensions/ens.js.map +1 -1
  5. package/dist/cjs/utils/ens/avatar.js +25 -59
  6. package/dist/cjs/utils/ens/avatar.js.map +1 -1
  7. package/dist/cjs/utils/nft/parseNft.js +76 -0
  8. package/dist/cjs/utils/nft/parseNft.js.map +1 -1
  9. package/dist/cjs/version.js +1 -1
  10. package/dist/cjs/version.js.map +1 -1
  11. package/dist/esm/exports/extensions/common.js +1 -0
  12. package/dist/esm/exports/extensions/common.js.map +1 -1
  13. package/dist/esm/exports/extensions/ens.js +1 -0
  14. package/dist/esm/exports/extensions/ens.js.map +1 -1
  15. package/dist/esm/utils/ens/avatar.js +24 -58
  16. package/dist/esm/utils/ens/avatar.js.map +1 -1
  17. package/dist/esm/utils/nft/parseNft.js +75 -0
  18. package/dist/esm/utils/nft/parseNft.js.map +1 -1
  19. package/dist/esm/version.js +1 -1
  20. package/dist/esm/version.js.map +1 -1
  21. package/dist/types/exports/extensions/common.d.ts +1 -0
  22. package/dist/types/exports/extensions/common.d.ts.map +1 -1
  23. package/dist/types/exports/extensions/ens.d.ts +1 -0
  24. package/dist/types/exports/extensions/ens.d.ts.map +1 -1
  25. package/dist/types/utils/ens/avatar.d.ts +25 -4
  26. package/dist/types/utils/ens/avatar.d.ts.map +1 -1
  27. package/dist/types/utils/nft/parseNft.d.ts +26 -0
  28. package/dist/types/utils/nft/parseNft.d.ts.map +1 -1
  29. package/dist/types/version.d.ts +1 -1
  30. package/dist/types/version.d.ts.map +1 -1
  31. package/package.json +1 -1
  32. package/src/exports/extensions/common.ts +1 -0
  33. package/src/exports/extensions/ens.ts +5 -0
  34. package/src/utils/bytecode/resolveImplementation.test.ts +1 -1
  35. package/src/utils/ens/avatar.ts +27 -71
  36. package/src/utils/nft/parseNft.ts +89 -0
  37. package/src/version.ts +1 -1
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isSetPrimarySaleRecipientSupported = exports.setPrimarySaleRecipient = exports.isPrimarySaleRecipientSupported = exports.primarySaleRecipient = exports.isSetPlatformFeeInfoSupported = exports.setPlatformFeeInfo = exports.isGetPlatformFeeInfoSupported = exports.getPlatformFeeInfo = exports.isSetRoyaltyInfoForTokenSupported = exports.setRoyaltyInfoForToken = exports.isSetDefaultRoyaltyInfoSupported = exports.setDefaultRoyaltyInfo = exports.isGetRoyaltyInfoForTokenSupported = exports.getRoyaltyInfoForToken = exports.isGetDefaultRoyaltyInfoSupported = exports.getDefaultRoyaltyInfo = exports.ownerUpdatedEvent = exports.isMulticallSupported = exports.multicall = exports.isSetContractMetadataSupported = exports.setContractMetadata = exports.setOwner = exports.isSetContractURISupported = exports.setContractURI = exports.isSymbolSupported = exports.symbol = exports.isNameSupported = exports.name = exports.isOwnerSupported = exports.owner = exports.isGetContractMetadataSupported = exports.getContractMetadata = exports.contractURI = void 0;
3
+ exports.isSetPrimarySaleRecipientSupported = exports.setPrimarySaleRecipient = exports.isPrimarySaleRecipientSupported = exports.primarySaleRecipient = exports.isSetPlatformFeeInfoSupported = exports.setPlatformFeeInfo = exports.isGetPlatformFeeInfoSupported = exports.getPlatformFeeInfo = exports.isSetRoyaltyInfoForTokenSupported = exports.setRoyaltyInfoForToken = exports.isSetDefaultRoyaltyInfoSupported = exports.setDefaultRoyaltyInfo = exports.isGetRoyaltyInfoForTokenSupported = exports.getRoyaltyInfoForToken = exports.isGetDefaultRoyaltyInfoSupported = exports.getDefaultRoyaltyInfo = exports.ownerUpdatedEvent = exports.isMulticallSupported = exports.multicall = exports.isSetContractMetadataSupported = exports.setContractMetadata = exports.setOwner = exports.isSetContractURISupported = exports.setContractURI = exports.parseNftUri = exports.isSymbolSupported = exports.symbol = exports.isNameSupported = exports.name = exports.isOwnerSupported = exports.owner = exports.isGetContractMetadataSupported = exports.getContractMetadata = exports.contractURI = void 0;
4
4
  // read
5
5
  var contractURI_js_1 = require("../../extensions/common/__generated__/IContractMetadata/read/contractURI.js");
6
6
  Object.defineProperty(exports, "contractURI", { enumerable: true, get: function () { return contractURI_js_1.contractURI; } });
@@ -16,6 +16,8 @@ Object.defineProperty(exports, "isNameSupported", { enumerable: true, get: funct
16
16
  var symbol_js_1 = require("../../extensions/common/read/symbol.js");
17
17
  Object.defineProperty(exports, "symbol", { enumerable: true, get: function () { return symbol_js_1.symbol; } });
18
18
  Object.defineProperty(exports, "isSymbolSupported", { enumerable: true, get: function () { return symbol_js_1.isSymbolSupported; } });
19
+ var parseNft_js_1 = require("../../utils/nft/parseNft.js");
20
+ Object.defineProperty(exports, "parseNftUri", { enumerable: true, get: function () { return parseNft_js_1.parseNftUri; } });
19
21
  // write
20
22
  var setContractURI_js_1 = require("../../extensions/common/__generated__/IContractMetadata/write/setContractURI.js");
21
23
  Object.defineProperty(exports, "setContractURI", { enumerable: true, get: function () { return setContractURI_js_1.setContractURI; } });
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/exports/extensions/common.ts"],"names":[],"mappings":";;;AAAA,OAAO;AACP,8GAA0G;AAAjG,6GAAA,WAAW,OAAA;AACpB,8FAG6D;AAF3D,6HAAA,mBAAmB,OAAA;AACnB,wIAAA,8BAA8B,OAAA;AAEhC,yFAGsE;AAFpE,iGAAA,KAAK,OAAA;AACL,4GAAA,gBAAgB,OAAA;AAElB,gEAA6E;AAApE,+FAAA,IAAI,OAAA;AAAE,0GAAA,eAAe,OAAA;AAC9B,oEAGgD;AAF9C,mGAAA,MAAM,OAAA;AACN,8GAAA,iBAAiB,OAAA;AAGnB,QAAQ;AACR,qHAIyF;AAHvF,mHAAA,cAAc,OAAA;AAEd,8HAAA,yBAAyB,OAAA;AAG3B,gGAG0E;AAFxE,uGAAA,QAAQ,OAAA;AAIV,+FAI8D;AAH5D,6HAAA,mBAAmB,OAAA;AAEnB,wIAAA,8BAA8B,OAAA;AAGhC,oGAI6E;AAH3E,yGAAA,SAAS,OAAA;AAET,oHAAA,oBAAoB,OAAA;AAGtB,SAAS;AAET,yGAG+E;AAF7E,oHAAA,iBAAiB,OAAA;AAInB,2DAA2D;AAC3D,UAAU;AACV,2DAA2D;AAC3D,OAAO;AACP,yHAGsF;AAFpF,iIAAA,qBAAqB,OAAA;AACrB,4IAAA,gCAAgC,OAAA;AAElC,2HAIuF;AAHrF,mIAAA,sBAAsB,OAAA;AAEtB,8IAAA,iCAAiC,OAAA;AAGnC,QAAQ;AACR,0HAIuF;AAHrF,iIAAA,qBAAqB,OAAA;AAErB,4IAAA,gCAAgC,OAAA;AAElC,4HAIwF;AAHtF,mIAAA,sBAAsB,OAAA;AAEtB,8IAAA,iCAAiC,OAAA;AAGnC,2DAA2D;AAC3D,gBAAgB;AAChB,2DAA2D;AAE3D,uHAGuF;AAFrF,2HAAA,kBAAkB,OAAA;AAClB,sIAAA,6BAA6B,OAAA;AAE/B,wHAIwF;AAHtF,2HAAA,kBAAkB,OAAA;AAClB,sIAAA,6BAA6B,OAAA;AAI/B,2DAA2D;AAC3D,eAAe;AACf,2DAA2D;AAC3D,2HAGyF;AAFvF,+HAAA,oBAAoB,OAAA;AACpB,0IAAA,+BAA+B,OAAA;AAEjC,kIAI6F;AAH3F,qIAAA,uBAAuB,OAAA;AAEvB,gJAAA,kCAAkC,OAAA"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/exports/extensions/common.ts"],"names":[],"mappings":";;;AAAA,OAAO;AACP,8GAA0G;AAAjG,6GAAA,WAAW,OAAA;AACpB,8FAG6D;AAF3D,6HAAA,mBAAmB,OAAA;AACnB,wIAAA,8BAA8B,OAAA;AAEhC,yFAGsE;AAFpE,iGAAA,KAAK,OAAA;AACL,4GAAA,gBAAgB,OAAA;AAElB,gEAA6E;AAApE,+FAAA,IAAI,OAAA;AAAE,0GAAA,eAAe,OAAA;AAC9B,oEAGgD;AAF9C,mGAAA,MAAM,OAAA;AACN,8GAAA,iBAAiB,OAAA;AAEnB,2DAA0D;AAAjD,0GAAA,WAAW,OAAA;AAEpB,QAAQ;AACR,qHAIyF;AAHvF,mHAAA,cAAc,OAAA;AAEd,8HAAA,yBAAyB,OAAA;AAG3B,gGAG0E;AAFxE,uGAAA,QAAQ,OAAA;AAIV,+FAI8D;AAH5D,6HAAA,mBAAmB,OAAA;AAEnB,wIAAA,8BAA8B,OAAA;AAGhC,oGAI6E;AAH3E,yGAAA,SAAS,OAAA;AAET,oHAAA,oBAAoB,OAAA;AAGtB,SAAS;AAET,yGAG+E;AAF7E,oHAAA,iBAAiB,OAAA;AAInB,2DAA2D;AAC3D,UAAU;AACV,2DAA2D;AAC3D,OAAO;AACP,yHAGsF;AAFpF,iIAAA,qBAAqB,OAAA;AACrB,4IAAA,gCAAgC,OAAA;AAElC,2HAIuF;AAHrF,mIAAA,sBAAsB,OAAA;AAEtB,8IAAA,iCAAiC,OAAA;AAGnC,QAAQ;AACR,0HAIuF;AAHrF,iIAAA,qBAAqB,OAAA;AAErB,4IAAA,gCAAgC,OAAA;AAElC,4HAIwF;AAHtF,mIAAA,sBAAsB,OAAA;AAEtB,8IAAA,iCAAiC,OAAA;AAGnC,2DAA2D;AAC3D,gBAAgB;AAChB,2DAA2D;AAE3D,uHAGuF;AAFrF,2HAAA,kBAAkB,OAAA;AAClB,sIAAA,6BAA6B,OAAA;AAE/B,wHAIwF;AAHtF,2HAAA,kBAAkB,OAAA;AAClB,sIAAA,6BAA6B,OAAA;AAI/B,2DAA2D;AAC3D,eAAe;AACf,2DAA2D;AAC3D,2HAGyF;AAFvF,+HAAA,oBAAoB,OAAA;AACpB,0IAAA,+BAA+B,OAAA;AAEjC,kIAI6F;AAH3F,qIAAA,uBAAuB,OAAA;AAEvB,gJAAA,kCAAkC,OAAA"}
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BASE_SEPOLIA_BASENAME_RESOLVER_ADDRESS = exports.BASENAME_RESOLVER_ADDRESS = exports.resolveL2Name = exports.resolveName = exports.resolveText = exports.resolveAvatar = exports.resolveAddress = void 0;
3
+ exports.BASE_SEPOLIA_BASENAME_RESOLVER_ADDRESS = exports.BASENAME_RESOLVER_ADDRESS = exports.resolveL2Name = exports.resolveName = exports.resolveText = exports.parseAvatarRecord = exports.resolveAvatar = exports.resolveAddress = void 0;
4
4
  var resolve_address_js_1 = require("../../extensions/ens/resolve-address.js");
5
5
  Object.defineProperty(exports, "resolveAddress", { enumerable: true, get: function () { return resolve_address_js_1.resolveAddress; } });
6
6
  var resolve_avatar_js_1 = require("../../extensions/ens/resolve-avatar.js");
7
7
  Object.defineProperty(exports, "resolveAvatar", { enumerable: true, get: function () { return resolve_avatar_js_1.resolveAvatar; } });
8
+ var avatar_js_1 = require("../../utils/ens/avatar.js");
9
+ Object.defineProperty(exports, "parseAvatarRecord", { enumerable: true, get: function () { return avatar_js_1.parseAvatarRecord; } });
8
10
  var resolve_text_js_1 = require("../../extensions/ens/resolve-text.js");
9
11
  Object.defineProperty(exports, "resolveText", { enumerable: true, get: function () { return resolve_text_js_1.resolveText; } });
10
12
  var resolve_name_js_1 = require("../../extensions/ens/resolve-name.js");
@@ -1 +1 @@
1
- {"version":3,"file":"ens.js","sourceRoot":"","sources":["../../../../src/exports/extensions/ens.ts"],"names":[],"mappings":";;;AAAA,8EAGiD;AAD/C,oHAAA,cAAc,OAAA;AAGhB,4EAGgD;AAD9C,kHAAA,aAAa,OAAA;AAGf,wEAG8C;AAD5C,8GAAA,WAAW,OAAA;AAGb,wEAG8C;AAD5C,8GAAA,WAAW,OAAA;AAGb,8EAGiD;AAD/C,mHAAA,aAAa,OAAA;AAGf,kEAG2C;AAFzC,yHAAA,yBAAyB,OAAA;AACzB,sIAAA,sCAAsC,OAAA"}
1
+ {"version":3,"file":"ens.js","sourceRoot":"","sources":["../../../../src/exports/extensions/ens.ts"],"names":[],"mappings":";;;AAAA,8EAGiD;AAD/C,oHAAA,cAAc,OAAA;AAGhB,4EAGgD;AAD9C,kHAAA,aAAa,OAAA;AAGf,uDAGmC;AAFjC,8GAAA,iBAAiB,OAAA;AAInB,wEAG8C;AAD5C,8GAAA,WAAW,OAAA;AAGb,wEAG8C;AAD5C,8GAAA,WAAW,OAAA;AAGb,8EAGiD;AAD/C,mHAAA,aAAa,OAAA;AAGf,kEAG2C;AAFzC,yHAAA,yBAAyB,OAAA;AACzB,sIAAA,sCAAsC,OAAA"}
@@ -1,19 +1,39 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseAvatarRecord = parseAvatarRecord;
4
- const utils_js_1 = require("../../chains/utils.js");
5
- const contract_js_1 = require("../../contract/contract.js");
6
- const address_js_1 = require("../address.js");
7
4
  const fetch_js_1 = require("../fetch.js");
8
5
  const ipfs_js_1 = require("../ipfs.js");
6
+ const parseNft_js_1 = require("../nft/parseNft.js");
9
7
  /**
10
- * @internal
8
+ * Parses an ENS or similar avatar record. Supports NFT URIs, IPFS scheme, and HTTPS URIs.
9
+ * @param options - The options for parsing an ENS avatar record.
10
+ * @param options.client - The Thirdweb client.
11
+ * @param options.uri - The URI to parse.
12
+ * @returns A promise that resolves to the avatar URL, or null if the URI could not be parsed.
13
+ * @example
14
+ * ```ts
15
+ * import { parseAvatarRecord } from "thirdweb/utils/ens";
16
+ * const avatarUrl = await parseAvatarRecord({
17
+ * client,
18
+ * uri: "ipfs://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/",
19
+ * });
20
+ *
21
+ * console.log(avatarUrl); // "https://ipfs.io/ipfs/bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/"
22
+ *
23
+ * const avatarUrl2 = await parseAvatarRecord({
24
+ * client,
25
+ * uri: "eip155:1/erc1155:0xb32979486938aa9694bfc898f35dbed459f44424/10063",
26
+ * });
27
+ *
28
+ * console.log(avatarUrl2); // "https://opensea.io/assets/0xb32979486938aa9694bfc898f35dbed459f44424/10063"
29
+ * ```
30
+ * @extension ENS
11
31
  */
12
32
  async function parseAvatarRecord(options) {
13
33
  let uri = options.uri;
14
34
  if (/eip155:/i.test(options.uri)) {
15
35
  // do nft uri parsing
16
- uri = await parseNftUri(options);
36
+ uri = await (0, parseNft_js_1.parseNftUri)(options);
17
37
  }
18
38
  if (!uri) {
19
39
  return null;
@@ -28,60 +48,6 @@ async function parseAvatarRecord(options) {
28
48
  }
29
49
  return null;
30
50
  }
31
- /**
32
- * @internal
33
- */
34
- async function parseNftUri(options) {
35
- let uri = options.uri;
36
- // parse valid nft spec (CAIP-22/CAIP-29)
37
- // @see: https://github.com/ChainAgnostic/CAIPs/tree/master/CAIPs
38
- if (uri.startsWith("did:nft:")) {
39
- // convert DID to CAIP
40
- uri = uri.replace("did:nft:", "").replace(/_/g, "/");
41
- }
42
- const [reference = "", asset_namespace = "", tokenID = ""] = uri.split("/");
43
- const [eip_namespace, chainID] = reference.split(":");
44
- const [erc_namespace, contractAddress] = asset_namespace.split(":");
45
- if (!eip_namespace || eip_namespace.toLowerCase() !== "eip155") {
46
- throw new Error(`Invalid EIP namespace, expected EIP155, got: "${eip_namespace}"`);
47
- }
48
- if (!chainID) {
49
- throw new Error("Chain ID not found");
50
- }
51
- if (!contractAddress || !(0, address_js_1.isAddress)(contractAddress)) {
52
- throw new Error("Contract address not found");
53
- }
54
- if (!tokenID) {
55
- throw new Error("Token ID not found");
56
- }
57
- const chain = (0, utils_js_1.getCachedChain)(Number(chainID));
58
- const contract = (0, contract_js_1.getContract)({
59
- client: options.client,
60
- chain,
61
- address: contractAddress,
62
- });
63
- switch (erc_namespace) {
64
- case "erc721": {
65
- const { getNFT } = await Promise.resolve().then(() => require("../../extensions/erc721/read/getNFT.js"));
66
- const nft = await getNFT({
67
- contract,
68
- tokenId: BigInt(tokenID),
69
- });
70
- return nft.metadata.image ?? null;
71
- }
72
- case "erc1155": {
73
- const { getNFT } = await Promise.resolve().then(() => require("../../extensions/erc1155/read/getNFT.js"));
74
- const nft = await getNFT({
75
- contract,
76
- tokenId: BigInt(tokenID),
77
- });
78
- return nft.metadata.image ?? null;
79
- }
80
- default: {
81
- throw new Error(`Invalid ERC namespace, expected ERC721 or ERC1155, got: "${erc_namespace}"`);
82
- }
83
- }
84
- }
85
51
  async function isImageUri(options) {
86
52
  try {
87
53
  const res = await (0, fetch_js_1.getClientFetch)(options.client)(options.uri, {
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.js","sourceRoot":"","sources":["../../../../src/utils/ens/avatar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"avatar.js","sourceRoot":"","sources":["../../../../src/utils/ens/avatar.ts"],"names":[],"mappings":";;AAmCA,8CAqBC;AAvDD,0CAA6C;AAC7C,wCAA2C;AAC3C,oDAAiD;AAOjD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACI,KAAK,UAAU,iBAAiB,CACrC,OAA2B;IAE3B,IAAI,GAAG,GAAkB,OAAO,CAAC,GAAG,CAAC;IACrC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,qBAAqB;QACrB,GAAG,GAAG,MAAM,IAAA,yBAAW,EAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,cAAc,GAAG,IAAA,uBAAa,EAAC;QACnC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG;KACJ,CAAC,CAAC;IAEH,yBAAyB;IACzB,IAAI,MAAM,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QACtE,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,OAA2B;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,IAAA,yBAAc,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YAC5D,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QACH,4DAA4D;QAC5D,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACpD,OAAO,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,KAAK,CAAC;QACb,4DAA4D;IAC9D,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,yCAAyC;QACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;YACvE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,0EAA0E;QAC1E,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;YACvC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,6EAA6E;QAC7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;gBAChB,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC;YACF,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE;gBACjB,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC;YACF,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseNFT = parseNFT;
4
+ exports.parseNftUri = parseNftUri;
5
+ const utils_js_1 = require("../../chains/utils.js");
6
+ const contract_js_1 = require("../../contract/contract.js");
7
+ const address_js_1 = require("../address.js");
4
8
  /**
5
9
  * Parses the NFT metadata and options to create an NFT object.
6
10
  * @param base - The base NFT metadata.
@@ -31,4 +35,76 @@ function parseNFT(base, options) {
31
35
  throw new Error("Invalid NFT type");
32
36
  }
33
37
  }
38
+ /**
39
+ * Parses an NFT URI.
40
+ * @param options - The options for parsing an NFT URI.
41
+ * @param options.client - The Thirdweb client.
42
+ * @param options.uri - The NFT URI to parse.
43
+ * @returns A promise that resolves to the NFT URI, or null if the URI could not be parsed.
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * import { parseNftUri } from "thirdweb/utils/ens";
48
+ * const nftUri = await parseNftUri({
49
+ * client,
50
+ * uri: "eip155:1/erc1155:0xb32979486938aa9694bfc898f35dbed459f44424/10063",
51
+ * });
52
+ *
53
+ * console.log(nftUri); // ipfs://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/
54
+ * ```
55
+ *
56
+ * @extension ENS
57
+ *
58
+ */
59
+ async function parseNftUri(options) {
60
+ let uri = options.uri;
61
+ // parse valid nft spec (CAIP-22/CAIP-29)
62
+ // @see: https://github.com/ChainAgnostic/CAIPs/tree/master/CAIPs
63
+ if (uri.startsWith("did:nft:")) {
64
+ // convert DID to CAIP
65
+ uri = uri.replace("did:nft:", "").replace(/_/g, "/");
66
+ }
67
+ const [reference = "", asset_namespace = "", tokenID = ""] = uri.split("/");
68
+ const [eip_namespace, chainID] = reference.split(":");
69
+ const [erc_namespace, contractAddress] = asset_namespace.split(":");
70
+ if (!eip_namespace || eip_namespace.toLowerCase() !== "eip155") {
71
+ throw new Error(`Invalid EIP namespace, expected EIP155, got: "${eip_namespace}"`);
72
+ }
73
+ if (!chainID) {
74
+ throw new Error("Chain ID not found");
75
+ }
76
+ if (!contractAddress || !(0, address_js_1.isAddress)(contractAddress)) {
77
+ throw new Error("Contract address not found");
78
+ }
79
+ if (!tokenID) {
80
+ throw new Error("Token ID not found");
81
+ }
82
+ const chain = (0, utils_js_1.getCachedChain)(Number(chainID));
83
+ const contract = (0, contract_js_1.getContract)({
84
+ client: options.client,
85
+ chain,
86
+ address: contractAddress,
87
+ });
88
+ switch (erc_namespace) {
89
+ case "erc721": {
90
+ const { getNFT } = await Promise.resolve().then(() => require("../../extensions/erc721/read/getNFT.js"));
91
+ const nft = await getNFT({
92
+ contract,
93
+ tokenId: BigInt(tokenID),
94
+ });
95
+ return nft.metadata.image ?? null;
96
+ }
97
+ case "erc1155": {
98
+ const { getNFT } = await Promise.resolve().then(() => require("../../extensions/erc1155/read/getNFT.js"));
99
+ const nft = await getNFT({
100
+ contract,
101
+ tokenId: BigInt(tokenID),
102
+ });
103
+ return nft.metadata.image ?? null;
104
+ }
105
+ default: {
106
+ throw new Error(`Invalid ERC namespace, expected ERC721 or ERC1155, got: "${erc_namespace}"`);
107
+ }
108
+ }
109
+ }
34
110
  //# sourceMappingURL=parseNft.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseNft.js","sourceRoot":"","sources":["../../../../src/utils/nft/parseNft.ts"],"names":[],"mappings":";;AA0EA,4BAsBC;AA7BD;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,IAAiB,EAAE,OAAwB;IAClE,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO;gBACL,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI;gBAC7B,EAAE,EAAE,OAAO,CAAC,OAAO;gBACnB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO;gBACL,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI;gBAC7B,EAAE,EAAE,OAAO,CAAC,OAAO;gBACnB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC;QACJ;YACE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"parseNft.js","sourceRoot":"","sources":["../../../../src/utils/nft/parseNft.ts"],"names":[],"mappings":";;AA8EA,4BAsBC;AAuBD,kCA8DC;AAzLD,oDAAuD;AAEvD,4DAAyD;AAEzD,8CAA0C;AAmE1C;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,IAAiB,EAAE,OAAwB;IAClE,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO;gBACL,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI;gBAC7B,EAAE,EAAE,OAAO,CAAC,OAAO;gBACnB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO;gBACL,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI;gBAC7B,EAAE,EAAE,OAAO,CAAC,OAAO;gBACnB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC;QACJ;YACE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACI,KAAK,UAAU,WAAW,CAAC,OAGjC;IACC,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACtB,yCAAyC;IACzC,iEAAiE;IACjE,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,sBAAsB;QACtB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,SAAS,GAAG,EAAE,EAAE,eAAe,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5E,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEpE,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CACb,iDAAiD,aAAa,GAAG,CAClE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,CAAC,eAAe,IAAI,CAAC,IAAA,sBAAS,EAAC,eAAe,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,KAAK,GAAG,IAAA,yBAAc,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAA,yBAAW,EAAC;QAC3B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK;QACL,OAAO,EAAE,eAAe;KACzB,CAAC,CAAC;IACH,QAAQ,aAAa,EAAE,CAAC;QACtB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,MAAM,EAAE,GAAG,2CAAa,wCAAwC,EAAC,CAAC;YAC1E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC;gBACvB,QAAQ;gBACR,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;aACzB,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC;QACpC,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,EAAE,MAAM,EAAE,GAAG,2CACjB,yCAAyC,EAC1C,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC;gBACvB,QAAQ;gBACR,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;aACzB,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC;QACpC,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,IAAI,KAAK,CACb,4DAA4D,aAAa,GAAG,CAC7E,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.version = void 0;
4
- exports.version = "5.54.0";
4
+ exports.version = "5.55.0-nightly-8035923cdad943a47fc909e04522c351d06804f0-20240913000407";
5
5
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,QAAQ,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,wEAAwE,CAAC"}
@@ -4,6 +4,7 @@ export { getContractMetadata, isGetContractMetadataSupported, } from "../../exte
4
4
  export { owner, isOwnerSupported, } from "../../extensions/common/__generated__/IOwnable/read/owner.js";
5
5
  export { name, isNameSupported } from "../../extensions/common/read/name.js";
6
6
  export { symbol, isSymbolSupported, } from "../../extensions/common/read/symbol.js";
7
+ export { parseNftUri } from "../../utils/nft/parseNft.js";
7
8
  // write
8
9
  export { setContractURI, isSetContractURISupported, } from "../../extensions/common/__generated__/IContractMetadata/write/setContractURI.js";
9
10
  export { setOwner, } from "../../extensions/common/__generated__/IOwnable/write/setOwner.js";
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/exports/extensions/common.ts"],"names":[],"mappings":"AAAA,OAAO;AACP,OAAO,EAAE,WAAW,EAAE,MAAM,6EAA6E,CAAC;AAC1G,OAAO,EACL,mBAAmB,EACnB,8BAA8B,GAC/B,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EACL,KAAK,EACL,gBAAgB,GACjB,MAAM,8DAA8D,CAAC;AACtE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EACL,MAAM,EACN,iBAAiB,GAClB,MAAM,wCAAwC,CAAC;AAEhD,QAAQ;AACR,OAAO,EACL,cAAc,EAEd,yBAAyB,GAC1B,MAAM,iFAAiF,CAAC;AAEzF,OAAO,EACL,QAAQ,GAET,MAAM,kEAAkE,CAAC;AAE1E,OAAO,EACL,mBAAmB,EAEnB,8BAA8B,GAC/B,MAAM,sDAAsD,CAAC;AAE9D,OAAO,EACL,SAAS,EAET,oBAAoB,GACrB,MAAM,qEAAqE,CAAC;AAE7E,SAAS;AAET,OAAO,EACL,iBAAiB,GAElB,MAAM,uEAAuE,CAAC;AAE/E,2DAA2D;AAC3D,UAAU;AACV,2DAA2D;AAC3D,OAAO;AACP,OAAO,EACL,qBAAqB,EACrB,gCAAgC,GACjC,MAAM,8EAA8E,CAAC;AACtF,OAAO,EACL,sBAAsB,EAEtB,iCAAiC,GAClC,MAAM,+EAA+E,CAAC;AAEvF,QAAQ;AACR,OAAO,EACL,qBAAqB,EAErB,gCAAgC,GACjC,MAAM,+EAA+E,CAAC;AACvF,OAAO,EACL,sBAAsB,EAEtB,iCAAiC,GAClC,MAAM,gFAAgF,CAAC;AAExF,2DAA2D;AAC3D,gBAAgB;AAChB,2DAA2D;AAE3D,OAAO,EACL,kBAAkB,EAClB,6BAA6B,GAC9B,MAAM,+EAA+E,CAAC;AACvF,OAAO,EACL,kBAAkB,EAClB,6BAA6B,GAE9B,MAAM,gFAAgF,CAAC;AAExF,2DAA2D;AAC3D,eAAe;AACf,2DAA2D;AAC3D,OAAO,EACL,oBAAoB,EACpB,+BAA+B,GAChC,MAAM,iFAAiF,CAAC;AACzF,OAAO,EACL,uBAAuB,EAEvB,kCAAkC,GACnC,MAAM,qFAAqF,CAAC"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/exports/extensions/common.ts"],"names":[],"mappings":"AAAA,OAAO;AACP,OAAO,EAAE,WAAW,EAAE,MAAM,6EAA6E,CAAC;AAC1G,OAAO,EACL,mBAAmB,EACnB,8BAA8B,GAC/B,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EACL,KAAK,EACL,gBAAgB,GACjB,MAAM,8DAA8D,CAAC;AACtE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EACL,MAAM,EACN,iBAAiB,GAClB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,QAAQ;AACR,OAAO,EACL,cAAc,EAEd,yBAAyB,GAC1B,MAAM,iFAAiF,CAAC;AAEzF,OAAO,EACL,QAAQ,GAET,MAAM,kEAAkE,CAAC;AAE1E,OAAO,EACL,mBAAmB,EAEnB,8BAA8B,GAC/B,MAAM,sDAAsD,CAAC;AAE9D,OAAO,EACL,SAAS,EAET,oBAAoB,GACrB,MAAM,qEAAqE,CAAC;AAE7E,SAAS;AAET,OAAO,EACL,iBAAiB,GAElB,MAAM,uEAAuE,CAAC;AAE/E,2DAA2D;AAC3D,UAAU;AACV,2DAA2D;AAC3D,OAAO;AACP,OAAO,EACL,qBAAqB,EACrB,gCAAgC,GACjC,MAAM,8EAA8E,CAAC;AACtF,OAAO,EACL,sBAAsB,EAEtB,iCAAiC,GAClC,MAAM,+EAA+E,CAAC;AAEvF,QAAQ;AACR,OAAO,EACL,qBAAqB,EAErB,gCAAgC,GACjC,MAAM,+EAA+E,CAAC;AACvF,OAAO,EACL,sBAAsB,EAEtB,iCAAiC,GAClC,MAAM,gFAAgF,CAAC;AAExF,2DAA2D;AAC3D,gBAAgB;AAChB,2DAA2D;AAE3D,OAAO,EACL,kBAAkB,EAClB,6BAA6B,GAC9B,MAAM,+EAA+E,CAAC;AACvF,OAAO,EACL,kBAAkB,EAClB,6BAA6B,GAE9B,MAAM,gFAAgF,CAAC;AAExF,2DAA2D;AAC3D,eAAe;AACf,2DAA2D;AAC3D,OAAO,EACL,oBAAoB,EACpB,+BAA+B,GAChC,MAAM,iFAAiF,CAAC;AACzF,OAAO,EACL,uBAAuB,EAEvB,kCAAkC,GACnC,MAAM,qFAAqF,CAAC"}
@@ -1,5 +1,6 @@
1
1
  export { resolveAddress, } from "../../extensions/ens/resolve-address.js";
2
2
  export { resolveAvatar, } from "../../extensions/ens/resolve-avatar.js";
3
+ export { parseAvatarRecord, } from "../../utils/ens/avatar.js";
3
4
  export { resolveText, } from "../../extensions/ens/resolve-text.js";
4
5
  export { resolveName, } from "../../extensions/ens/resolve-name.js";
5
6
  export { resolveL2Name, } from "../../extensions/ens/resolve-l2-name.js";
@@ -1 +1 @@
1
- {"version":3,"file":"ens.js","sourceRoot":"","sources":["../../../../src/exports/extensions/ens.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,GACf,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EAEL,aAAa,GACd,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAEL,WAAW,GACZ,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAEL,WAAW,GACZ,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAEL,aAAa,GACd,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EACL,yBAAyB,EACzB,sCAAsC,GACvC,MAAM,mCAAmC,CAAC"}
1
+ {"version":3,"file":"ens.js","sourceRoot":"","sources":["../../../../src/exports/extensions/ens.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,GACf,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EAEL,aAAa,GACd,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EACL,iBAAiB,GAElB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAEL,WAAW,GACZ,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAEL,WAAW,GACZ,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAEL,aAAa,GACd,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EACL,yBAAyB,EACzB,sCAAsC,GACvC,MAAM,mCAAmC,CAAC"}
@@ -1,10 +1,30 @@
1
- import { getCachedChain } from "../../chains/utils.js";
2
- import { getContract } from "../../contract/contract.js";
3
- import { isAddress } from "../address.js";
4
1
  import { getClientFetch } from "../fetch.js";
5
2
  import { resolveScheme } from "../ipfs.js";
3
+ import { parseNftUri } from "../nft/parseNft.js";
6
4
  /**
7
- * @internal
5
+ * Parses an ENS or similar avatar record. Supports NFT URIs, IPFS scheme, and HTTPS URIs.
6
+ * @param options - The options for parsing an ENS avatar record.
7
+ * @param options.client - The Thirdweb client.
8
+ * @param options.uri - The URI to parse.
9
+ * @returns A promise that resolves to the avatar URL, or null if the URI could not be parsed.
10
+ * @example
11
+ * ```ts
12
+ * import { parseAvatarRecord } from "thirdweb/utils/ens";
13
+ * const avatarUrl = await parseAvatarRecord({
14
+ * client,
15
+ * uri: "ipfs://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/",
16
+ * });
17
+ *
18
+ * console.log(avatarUrl); // "https://ipfs.io/ipfs/bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/"
19
+ *
20
+ * const avatarUrl2 = await parseAvatarRecord({
21
+ * client,
22
+ * uri: "eip155:1/erc1155:0xb32979486938aa9694bfc898f35dbed459f44424/10063",
23
+ * });
24
+ *
25
+ * console.log(avatarUrl2); // "https://opensea.io/assets/0xb32979486938aa9694bfc898f35dbed459f44424/10063"
26
+ * ```
27
+ * @extension ENS
8
28
  */
9
29
  export async function parseAvatarRecord(options) {
10
30
  let uri = options.uri;
@@ -25,60 +45,6 @@ export async function parseAvatarRecord(options) {
25
45
  }
26
46
  return null;
27
47
  }
28
- /**
29
- * @internal
30
- */
31
- async function parseNftUri(options) {
32
- let uri = options.uri;
33
- // parse valid nft spec (CAIP-22/CAIP-29)
34
- // @see: https://github.com/ChainAgnostic/CAIPs/tree/master/CAIPs
35
- if (uri.startsWith("did:nft:")) {
36
- // convert DID to CAIP
37
- uri = uri.replace("did:nft:", "").replace(/_/g, "/");
38
- }
39
- const [reference = "", asset_namespace = "", tokenID = ""] = uri.split("/");
40
- const [eip_namespace, chainID] = reference.split(":");
41
- const [erc_namespace, contractAddress] = asset_namespace.split(":");
42
- if (!eip_namespace || eip_namespace.toLowerCase() !== "eip155") {
43
- throw new Error(`Invalid EIP namespace, expected EIP155, got: "${eip_namespace}"`);
44
- }
45
- if (!chainID) {
46
- throw new Error("Chain ID not found");
47
- }
48
- if (!contractAddress || !isAddress(contractAddress)) {
49
- throw new Error("Contract address not found");
50
- }
51
- if (!tokenID) {
52
- throw new Error("Token ID not found");
53
- }
54
- const chain = getCachedChain(Number(chainID));
55
- const contract = getContract({
56
- client: options.client,
57
- chain,
58
- address: contractAddress,
59
- });
60
- switch (erc_namespace) {
61
- case "erc721": {
62
- const { getNFT } = await import("../../extensions/erc721/read/getNFT.js");
63
- const nft = await getNFT({
64
- contract,
65
- tokenId: BigInt(tokenID),
66
- });
67
- return nft.metadata.image ?? null;
68
- }
69
- case "erc1155": {
70
- const { getNFT } = await import("../../extensions/erc1155/read/getNFT.js");
71
- const nft = await getNFT({
72
- contract,
73
- tokenId: BigInt(tokenID),
74
- });
75
- return nft.metadata.image ?? null;
76
- }
77
- default: {
78
- throw new Error(`Invalid ERC namespace, expected ERC721 or ERC1155, got: "${erc_namespace}"`);
79
- }
80
- }
81
- }
82
48
  async function isImageUri(options) {
83
49
  try {
84
50
  const res = await getClientFetch(options.client)(options.uri, {
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.js","sourceRoot":"","sources":["../../../../src/utils/ens/avatar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAO3C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAsB;IAEtB,IAAI,GAAG,GAAkB,OAAO,CAAC,GAAG,CAAC;IACrC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,qBAAqB;QACrB,GAAG,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,cAAc,GAAG,aAAa,CAAC;QACnC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG;KACJ,CAAC,CAAC;IAEH,yBAAyB;IACzB,IAAI,MAAM,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QACtE,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW,CAAC,OAAsB;IAC/C,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACtB,yCAAyC;IACzC,iEAAiE;IACjE,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,sBAAsB;QACtB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,SAAS,GAAG,EAAE,EAAE,eAAe,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5E,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEpE,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CACb,iDAAiD,aAAa,GAAG,CAClE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC;QAC3B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK;QACL,OAAO,EAAE,eAAe;KACzB,CAAC,CAAC;IACH,QAAQ,aAAa,EAAE,CAAC;QACtB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,wCAAwC,CAAC,CAAC;YAC1E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC;gBACvB,QAAQ;gBACR,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;aACzB,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC;QACpC,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAC7B,yCAAyC,CAC1C,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC;gBACvB,QAAQ;gBACR,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;aACzB,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC;QACpC,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,IAAI,KAAK,CACb,4DAA4D,aAAa,GAAG,CAC7E,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,OAAsB;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YAC5D,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QACH,4DAA4D;QAC5D,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACpD,OAAO,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,KAAK,CAAC;QACb,4DAA4D;IAC9D,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,yCAAyC;QACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;YACvE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,0EAA0E;QAC1E,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;YACvC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,6EAA6E;QAC7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;gBAChB,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC;YACF,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE;gBACjB,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC;YACF,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"avatar.js","sourceRoot":"","sources":["../../../../src/utils/ens/avatar.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAOjD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAA2B;IAE3B,IAAI,GAAG,GAAkB,OAAO,CAAC,GAAG,CAAC;IACrC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,qBAAqB;QACrB,GAAG,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,cAAc,GAAG,aAAa,CAAC;QACnC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG;KACJ,CAAC,CAAC;IAEH,yBAAyB;IACzB,IAAI,MAAM,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QACtE,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,OAA2B;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YAC5D,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QACH,4DAA4D;QAC5D,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACpD,OAAO,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,KAAK,CAAC;QACb,4DAA4D;IAC9D,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,yCAAyC;QACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;YACvE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,0EAA0E;QAC1E,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;YACvC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,6EAA6E;QAC7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;gBAChB,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC;YACF,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE;gBACjB,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC;YACF,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -1,3 +1,6 @@
1
+ import { getCachedChain } from "../../chains/utils.js";
2
+ import { getContract } from "../../contract/contract.js";
3
+ import { isAddress } from "../address.js";
1
4
  /**
2
5
  * Parses the NFT metadata and options to create an NFT object.
3
6
  * @param base - The base NFT metadata.
@@ -28,4 +31,76 @@ export function parseNFT(base, options) {
28
31
  throw new Error("Invalid NFT type");
29
32
  }
30
33
  }
34
+ /**
35
+ * Parses an NFT URI.
36
+ * @param options - The options for parsing an NFT URI.
37
+ * @param options.client - The Thirdweb client.
38
+ * @param options.uri - The NFT URI to parse.
39
+ * @returns A promise that resolves to the NFT URI, or null if the URI could not be parsed.
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * import { parseNftUri } from "thirdweb/utils/ens";
44
+ * const nftUri = await parseNftUri({
45
+ * client,
46
+ * uri: "eip155:1/erc1155:0xb32979486938aa9694bfc898f35dbed459f44424/10063",
47
+ * });
48
+ *
49
+ * console.log(nftUri); // ipfs://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/
50
+ * ```
51
+ *
52
+ * @extension ENS
53
+ *
54
+ */
55
+ export async function parseNftUri(options) {
56
+ let uri = options.uri;
57
+ // parse valid nft spec (CAIP-22/CAIP-29)
58
+ // @see: https://github.com/ChainAgnostic/CAIPs/tree/master/CAIPs
59
+ if (uri.startsWith("did:nft:")) {
60
+ // convert DID to CAIP
61
+ uri = uri.replace("did:nft:", "").replace(/_/g, "/");
62
+ }
63
+ const [reference = "", asset_namespace = "", tokenID = ""] = uri.split("/");
64
+ const [eip_namespace, chainID] = reference.split(":");
65
+ const [erc_namespace, contractAddress] = asset_namespace.split(":");
66
+ if (!eip_namespace || eip_namespace.toLowerCase() !== "eip155") {
67
+ throw new Error(`Invalid EIP namespace, expected EIP155, got: "${eip_namespace}"`);
68
+ }
69
+ if (!chainID) {
70
+ throw new Error("Chain ID not found");
71
+ }
72
+ if (!contractAddress || !isAddress(contractAddress)) {
73
+ throw new Error("Contract address not found");
74
+ }
75
+ if (!tokenID) {
76
+ throw new Error("Token ID not found");
77
+ }
78
+ const chain = getCachedChain(Number(chainID));
79
+ const contract = getContract({
80
+ client: options.client,
81
+ chain,
82
+ address: contractAddress,
83
+ });
84
+ switch (erc_namespace) {
85
+ case "erc721": {
86
+ const { getNFT } = await import("../../extensions/erc721/read/getNFT.js");
87
+ const nft = await getNFT({
88
+ contract,
89
+ tokenId: BigInt(tokenID),
90
+ });
91
+ return nft.metadata.image ?? null;
92
+ }
93
+ case "erc1155": {
94
+ const { getNFT } = await import("../../extensions/erc1155/read/getNFT.js");
95
+ const nft = await getNFT({
96
+ contract,
97
+ tokenId: BigInt(tokenID),
98
+ });
99
+ return nft.metadata.image ?? null;
100
+ }
101
+ default: {
102
+ throw new Error(`Invalid ERC namespace, expected ERC721 or ERC1155, got: "${erc_namespace}"`);
103
+ }
104
+ }
105
+ }
31
106
  //# sourceMappingURL=parseNft.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseNft.js","sourceRoot":"","sources":["../../../../src/utils/nft/parseNft.ts"],"names":[],"mappings":"AAmEA;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAiB,EAAE,OAAwB;IAClE,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO;gBACL,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI;gBAC7B,EAAE,EAAE,OAAO,CAAC,OAAO;gBACnB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO;gBACL,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI;gBAC7B,EAAE,EAAE,OAAO,CAAC,OAAO;gBACnB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC;QACJ;YACE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"parseNft.js","sourceRoot":"","sources":["../../../../src/utils/nft/parseNft.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export const version = "5.54.0";
1
+ export const version = "5.55.0-nightly-8035923cdad943a47fc909e04522c351d06804f0-20240913000407";
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,wEAAwE,CAAC"}
@@ -3,6 +3,7 @@ export { getContractMetadata, isGetContractMetadataSupported, } from "../../exte
3
3
  export { owner, isOwnerSupported, } from "../../extensions/common/__generated__/IOwnable/read/owner.js";
4
4
  export { name, isNameSupported } from "../../extensions/common/read/name.js";
5
5
  export { symbol, isSymbolSupported, } from "../../extensions/common/read/symbol.js";
6
+ export { parseNftUri } from "../../utils/nft/parseNft.js";
6
7
  export { setContractURI, type SetContractURIParams, isSetContractURISupported, } from "../../extensions/common/__generated__/IContractMetadata/write/setContractURI.js";
7
8
  export { setOwner, type SetOwnerParams, } from "../../extensions/common/__generated__/IOwnable/write/setOwner.js";
8
9
  export { setContractMetadata, type SetContractMetadataParams, isSetContractMetadataSupported, } from "../../extensions/common/write/setContractMetadata.js";
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/exports/extensions/common.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,6EAA6E,CAAC;AAC1G,OAAO,EACL,mBAAmB,EACnB,8BAA8B,GAC/B,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EACL,KAAK,EACL,gBAAgB,GACjB,MAAM,8DAA8D,CAAC;AACtE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EACL,MAAM,EACN,iBAAiB,GAClB,MAAM,wCAAwC,CAAC;AAGhD,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,EACzB,yBAAyB,GAC1B,MAAM,iFAAiF,CAAC;AAEzF,OAAO,EACL,QAAQ,EACR,KAAK,cAAc,GACpB,MAAM,kEAAkE,CAAC;AAE1E,OAAO,EACL,mBAAmB,EACnB,KAAK,yBAAyB,EAC9B,8BAA8B,GAC/B,MAAM,sDAAsD,CAAC;AAE9D,OAAO,EACL,SAAS,EACT,KAAK,eAAe,EACpB,oBAAoB,GACrB,MAAM,qEAAqE,CAAC;AAI7E,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,GAC9B,MAAM,uEAAuE,CAAC;AAM/E,OAAO,EACL,qBAAqB,EACrB,gCAAgC,GACjC,MAAM,8EAA8E,CAAC;AACtF,OAAO,EACL,sBAAsB,EACtB,KAAK,4BAA4B,EACjC,iCAAiC,GAClC,MAAM,+EAA+E,CAAC;AAGvF,OAAO,EACL,qBAAqB,EACrB,KAAK,2BAA2B,EAChC,gCAAgC,GACjC,MAAM,+EAA+E,CAAC;AACvF,OAAO,EACL,sBAAsB,EACtB,KAAK,4BAA4B,EACjC,iCAAiC,GAClC,MAAM,gFAAgF,CAAC;AAMxF,OAAO,EACL,kBAAkB,EAClB,6BAA6B,GAC9B,MAAM,+EAA+E,CAAC;AACvF,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,KAAK,wBAAwB,GAC9B,MAAM,gFAAgF,CAAC;AAKxF,OAAO,EACL,oBAAoB,EACpB,+BAA+B,GAChC,MAAM,iFAAiF,CAAC;AACzF,OAAO,EACL,uBAAuB,EACvB,KAAK,6BAA6B,EAClC,kCAAkC,GACnC,MAAM,qFAAqF,CAAC"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/exports/extensions/common.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,6EAA6E,CAAC;AAC1G,OAAO,EACL,mBAAmB,EACnB,8BAA8B,GAC/B,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EACL,KAAK,EACL,gBAAgB,GACjB,MAAM,8DAA8D,CAAC;AACtE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EACL,MAAM,EACN,iBAAiB,GAClB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG1D,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,EACzB,yBAAyB,GAC1B,MAAM,iFAAiF,CAAC;AAEzF,OAAO,EACL,QAAQ,EACR,KAAK,cAAc,GACpB,MAAM,kEAAkE,CAAC;AAE1E,OAAO,EACL,mBAAmB,EACnB,KAAK,yBAAyB,EAC9B,8BAA8B,GAC/B,MAAM,sDAAsD,CAAC;AAE9D,OAAO,EACL,SAAS,EACT,KAAK,eAAe,EACpB,oBAAoB,GACrB,MAAM,qEAAqE,CAAC;AAI7E,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,GAC9B,MAAM,uEAAuE,CAAC;AAM/E,OAAO,EACL,qBAAqB,EACrB,gCAAgC,GACjC,MAAM,8EAA8E,CAAC;AACtF,OAAO,EACL,sBAAsB,EACtB,KAAK,4BAA4B,EACjC,iCAAiC,GAClC,MAAM,+EAA+E,CAAC;AAGvF,OAAO,EACL,qBAAqB,EACrB,KAAK,2BAA2B,EAChC,gCAAgC,GACjC,MAAM,+EAA+E,CAAC;AACvF,OAAO,EACL,sBAAsB,EACtB,KAAK,4BAA4B,EACjC,iCAAiC,GAClC,MAAM,gFAAgF,CAAC;AAMxF,OAAO,EACL,kBAAkB,EAClB,6BAA6B,GAC9B,MAAM,+EAA+E,CAAC;AACvF,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,KAAK,wBAAwB,GAC9B,MAAM,gFAAgF,CAAC;AAKxF,OAAO,EACL,oBAAoB,EACpB,+BAA+B,GAChC,MAAM,iFAAiF,CAAC;AACzF,OAAO,EACL,uBAAuB,EACvB,KAAK,6BAA6B,EAClC,kCAAkC,GACnC,MAAM,qFAAqF,CAAC"}
@@ -1,5 +1,6 @@
1
1
  export { type ResolveAddressOptions, resolveAddress, } from "../../extensions/ens/resolve-address.js";
2
2
  export { type ResolveAvatarOptions, resolveAvatar, } from "../../extensions/ens/resolve-avatar.js";
3
+ export { parseAvatarRecord, type ParseAvatarOptions, } from "../../utils/ens/avatar.js";
3
4
  export { type ResolveTextOptions, resolveText, } from "../../extensions/ens/resolve-text.js";
4
5
  export { type ResolveNameOptions, resolveName, } from "../../extensions/ens/resolve-name.js";
5
6
  export { type ResolveL2NameOptions, resolveL2Name, } from "../../extensions/ens/resolve-l2-name.js";
@@ -1 +1 @@
1
- {"version":3,"file":"ens.d.ts","sourceRoot":"","sources":["../../../../src/exports/extensions/ens.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAC1B,cAAc,GACf,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EACL,KAAK,oBAAoB,EACzB,aAAa,GACd,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EACL,KAAK,kBAAkB,EACvB,WAAW,GACZ,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EACL,KAAK,kBAAkB,EACvB,WAAW,GACZ,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EACL,KAAK,oBAAoB,EACzB,aAAa,GACd,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EACL,yBAAyB,EACzB,sCAAsC,GACvC,MAAM,mCAAmC,CAAC"}
1
+ {"version":3,"file":"ens.d.ts","sourceRoot":"","sources":["../../../../src/exports/extensions/ens.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAC1B,cAAc,GACf,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EACL,KAAK,oBAAoB,EACzB,aAAa,GACd,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EACL,iBAAiB,EACjB,KAAK,kBAAkB,GACxB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,KAAK,kBAAkB,EACvB,WAAW,GACZ,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EACL,KAAK,kBAAkB,EACvB,WAAW,GACZ,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EACL,KAAK,oBAAoB,EACzB,aAAa,GACd,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EACL,yBAAyB,EACzB,sCAAsC,GACvC,MAAM,mCAAmC,CAAC"}
@@ -1,11 +1,32 @@
1
1
  import type { ThirdwebClient } from "../../client/client.js";
2
- type AvatarOptions = {
2
+ export type ParseAvatarOptions = {
3
3
  client: ThirdwebClient;
4
4
  uri: string;
5
5
  };
6
6
  /**
7
- * @internal
7
+ * Parses an ENS or similar avatar record. Supports NFT URIs, IPFS scheme, and HTTPS URIs.
8
+ * @param options - The options for parsing an ENS avatar record.
9
+ * @param options.client - The Thirdweb client.
10
+ * @param options.uri - The URI to parse.
11
+ * @returns A promise that resolves to the avatar URL, or null if the URI could not be parsed.
12
+ * @example
13
+ * ```ts
14
+ * import { parseAvatarRecord } from "thirdweb/utils/ens";
15
+ * const avatarUrl = await parseAvatarRecord({
16
+ * client,
17
+ * uri: "ipfs://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/",
18
+ * });
19
+ *
20
+ * console.log(avatarUrl); // "https://ipfs.io/ipfs/bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/"
21
+ *
22
+ * const avatarUrl2 = await parseAvatarRecord({
23
+ * client,
24
+ * uri: "eip155:1/erc1155:0xb32979486938aa9694bfc898f35dbed459f44424/10063",
25
+ * });
26
+ *
27
+ * console.log(avatarUrl2); // "https://opensea.io/assets/0xb32979486938aa9694bfc898f35dbed459f44424/10063"
28
+ * ```
29
+ * @extension ENS
8
30
  */
9
- export declare function parseAvatarRecord(options: AvatarOptions): Promise<string | null>;
10
- export {};
31
+ export declare function parseAvatarRecord(options: ParseAvatarOptions): Promise<string | null>;
11
32
  //# sourceMappingURL=avatar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../../../src/utils/ens/avatar.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAM7D,KAAK,aAAa,GAAG;IACnB,MAAM,EAAE,cAAc,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBxB"}
1
+ {"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../../../src/utils/ens/avatar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAK7D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,cAAc,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBxB"}
@@ -1,3 +1,4 @@
1
+ import type { ThirdwebClient } from "../../client/client.js";
1
2
  import type { FileOrBufferOrString } from "../../storage/upload/types.js";
2
3
  import type { Prettify } from "../type-utils.js";
3
4
  /**
@@ -61,4 +62,29 @@ export type ParseNFTOptions = {
61
62
  * @internal
62
63
  */
63
64
  export declare function parseNFT(base: NFTMetadata, options: ParseNFTOptions): NFT;
65
+ /**
66
+ * Parses an NFT URI.
67
+ * @param options - The options for parsing an NFT URI.
68
+ * @param options.client - The Thirdweb client.
69
+ * @param options.uri - The NFT URI to parse.
70
+ * @returns A promise that resolves to the NFT URI, or null if the URI could not be parsed.
71
+ *
72
+ * @example
73
+ * ```ts
74
+ * import { parseNftUri } from "thirdweb/utils/ens";
75
+ * const nftUri = await parseNftUri({
76
+ * client,
77
+ * uri: "eip155:1/erc1155:0xb32979486938aa9694bfc898f35dbed459f44424/10063",
78
+ * });
79
+ *
80
+ * console.log(nftUri); // ipfs://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/
81
+ * ```
82
+ *
83
+ * @extension ENS
84
+ *
85
+ */
86
+ export declare function parseNftUri(options: {
87
+ client: ThirdwebClient;
88
+ uri: string;
89
+ }): Promise<string | null>;
64
90
  //# sourceMappingURL=parseNft.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseNft.d.ts","sourceRoot":"","sources":["../../../../src/utils/nft/parseNft.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAC7B;IACE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC5B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5B,MAAM,MAAM,GAAG,GACX;IACE,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;CAChB,GACD;IACE,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEN;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,GACD;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEN;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,GAAG,GAAG,CAsBzE"}
1
+ {"version":3,"file":"parseNft.d.ts","sourceRoot":"","sources":["../../../../src/utils/nft/parseNft.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAE1E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAC7B;IACE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC5B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5B,MAAM,MAAM,GAAG,GACX;IACE,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;CAChB,GACD;IACE,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEN;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,GACD;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEN;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,GAAG,GAAG,CAsBzE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE;IACzC,MAAM,EAAE,cAAc,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2DzB"}
@@ -1,2 +1,2 @@
1
- export declare const version = "5.54.0";
1
+ export declare const version = "5.55.0-nightly-8035923cdad943a47fc909e04522c351d06804f0-20240913000407";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,WAAW,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,2EAA2E,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thirdweb",
3
- "version": "5.54.0",
3
+ "version": "5.55.0-nightly-8035923cdad943a47fc909e04522c351d06804f0-20240913000407",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/thirdweb-dev/js.git#main"
@@ -13,6 +13,7 @@ export {
13
13
  symbol,
14
14
  isSymbolSupported,
15
15
  } from "../../extensions/common/read/symbol.js";
16
+ export { parseNftUri } from "../../utils/nft/parseNft.js";
16
17
 
17
18
  // write
18
19
  export {
@@ -8,6 +8,11 @@ export {
8
8
  resolveAvatar,
9
9
  } from "../../extensions/ens/resolve-avatar.js";
10
10
 
11
+ export {
12
+ parseAvatarRecord,
13
+ type ParseAvatarOptions,
14
+ } from "../../utils/ens/avatar.js";
15
+
11
16
  export {
12
17
  type ResolveTextOptions,
13
18
  resolveText,
@@ -57,7 +57,7 @@ describe("Resolve implementation", async () => {
57
57
  abi: ERC1967_PROXY_CONSTRUCTOR_ABI as Abi,
58
58
  constructorParams: {
59
59
  logic: implementationAddress,
60
- data: "",
60
+ data: "0x",
61
61
  },
62
62
  });
63
63
 
@@ -1,20 +1,40 @@
1
- import { getCachedChain } from "../../chains/utils.js";
2
1
  import type { ThirdwebClient } from "../../client/client.js";
3
- import { getContract } from "../../contract/contract.js";
4
- import { isAddress } from "../address.js";
5
2
  import { getClientFetch } from "../fetch.js";
6
3
  import { resolveScheme } from "../ipfs.js";
4
+ import { parseNftUri } from "../nft/parseNft.js";
7
5
 
8
- type AvatarOptions = {
6
+ export type ParseAvatarOptions = {
9
7
  client: ThirdwebClient;
10
8
  uri: string;
11
9
  };
12
10
 
13
11
  /**
14
- * @internal
12
+ * Parses an ENS or similar avatar record. Supports NFT URIs, IPFS scheme, and HTTPS URIs.
13
+ * @param options - The options for parsing an ENS avatar record.
14
+ * @param options.client - The Thirdweb client.
15
+ * @param options.uri - The URI to parse.
16
+ * @returns A promise that resolves to the avatar URL, or null if the URI could not be parsed.
17
+ * @example
18
+ * ```ts
19
+ * import { parseAvatarRecord } from "thirdweb/utils/ens";
20
+ * const avatarUrl = await parseAvatarRecord({
21
+ * client,
22
+ * uri: "ipfs://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/",
23
+ * });
24
+ *
25
+ * console.log(avatarUrl); // "https://ipfs.io/ipfs/bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/"
26
+ *
27
+ * const avatarUrl2 = await parseAvatarRecord({
28
+ * client,
29
+ * uri: "eip155:1/erc1155:0xb32979486938aa9694bfc898f35dbed459f44424/10063",
30
+ * });
31
+ *
32
+ * console.log(avatarUrl2); // "https://opensea.io/assets/0xb32979486938aa9694bfc898f35dbed459f44424/10063"
33
+ * ```
34
+ * @extension ENS
15
35
  */
16
36
  export async function parseAvatarRecord(
17
- options: AvatarOptions,
37
+ options: ParseAvatarOptions,
18
38
  ): Promise<string | null> {
19
39
  let uri: string | null = options.uri;
20
40
  if (/eip155:/i.test(options.uri)) {
@@ -36,71 +56,7 @@ export async function parseAvatarRecord(
36
56
  return null;
37
57
  }
38
58
 
39
- /**
40
- * @internal
41
- */
42
- async function parseNftUri(options: AvatarOptions): Promise<string | null> {
43
- let uri = options.uri;
44
- // parse valid nft spec (CAIP-22/CAIP-29)
45
- // @see: https://github.com/ChainAgnostic/CAIPs/tree/master/CAIPs
46
- if (uri.startsWith("did:nft:")) {
47
- // convert DID to CAIP
48
- uri = uri.replace("did:nft:", "").replace(/_/g, "/");
49
- }
50
-
51
- const [reference = "", asset_namespace = "", tokenID = ""] = uri.split("/");
52
- const [eip_namespace, chainID] = reference.split(":");
53
- const [erc_namespace, contractAddress] = asset_namespace.split(":");
54
-
55
- if (!eip_namespace || eip_namespace.toLowerCase() !== "eip155") {
56
- throw new Error(
57
- `Invalid EIP namespace, expected EIP155, got: "${eip_namespace}"`,
58
- );
59
- }
60
- if (!chainID) {
61
- throw new Error("Chain ID not found");
62
- }
63
- if (!contractAddress || !isAddress(contractAddress)) {
64
- throw new Error("Contract address not found");
65
- }
66
- if (!tokenID) {
67
- throw new Error("Token ID not found");
68
- }
69
- const chain = getCachedChain(Number(chainID));
70
- const contract = getContract({
71
- client: options.client,
72
- chain,
73
- address: contractAddress,
74
- });
75
- switch (erc_namespace) {
76
- case "erc721": {
77
- const { getNFT } = await import("../../extensions/erc721/read/getNFT.js");
78
- const nft = await getNFT({
79
- contract,
80
- tokenId: BigInt(tokenID),
81
- });
82
- return nft.metadata.image ?? null;
83
- }
84
- case "erc1155": {
85
- const { getNFT } = await import(
86
- "../../extensions/erc1155/read/getNFT.js"
87
- );
88
- const nft = await getNFT({
89
- contract,
90
- tokenId: BigInt(tokenID),
91
- });
92
- return nft.metadata.image ?? null;
93
- }
94
-
95
- default: {
96
- throw new Error(
97
- `Invalid ERC namespace, expected ERC721 or ERC1155, got: "${erc_namespace}"`,
98
- );
99
- }
100
- }
101
- }
102
-
103
- async function isImageUri(options: AvatarOptions): Promise<boolean> {
59
+ async function isImageUri(options: ParseAvatarOptions): Promise<boolean> {
104
60
  try {
105
61
  const res = await getClientFetch(options.client)(options.uri, {
106
62
  method: "HEAD",
@@ -1,4 +1,8 @@
1
+ import { getCachedChain } from "../../chains/utils.js";
2
+ import type { ThirdwebClient } from "../../client/client.js";
3
+ import { getContract } from "../../contract/contract.js";
1
4
  import type { FileOrBufferOrString } from "../../storage/upload/types.js";
5
+ import { isAddress } from "../address.js";
2
6
  import type { Prettify } from "../type-utils.js";
3
7
 
4
8
  /**
@@ -95,3 +99,88 @@ export function parseNFT(base: NFTMetadata, options: ParseNFTOptions): NFT {
95
99
  throw new Error("Invalid NFT type");
96
100
  }
97
101
  }
102
+
103
+ /**
104
+ * Parses an NFT URI.
105
+ * @param options - The options for parsing an NFT URI.
106
+ * @param options.client - The Thirdweb client.
107
+ * @param options.uri - The NFT URI to parse.
108
+ * @returns A promise that resolves to the NFT URI, or null if the URI could not be parsed.
109
+ *
110
+ * @example
111
+ * ```ts
112
+ * import { parseNftUri } from "thirdweb/utils/ens";
113
+ * const nftUri = await parseNftUri({
114
+ * client,
115
+ * uri: "eip155:1/erc1155:0xb32979486938aa9694bfc898f35dbed459f44424/10063",
116
+ * });
117
+ *
118
+ * console.log(nftUri); // ipfs://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/
119
+ * ```
120
+ *
121
+ * @extension ENS
122
+ *
123
+ */
124
+ export async function parseNftUri(options: {
125
+ client: ThirdwebClient;
126
+ uri: string;
127
+ }): Promise<string | null> {
128
+ let uri = options.uri;
129
+ // parse valid nft spec (CAIP-22/CAIP-29)
130
+ // @see: https://github.com/ChainAgnostic/CAIPs/tree/master/CAIPs
131
+ if (uri.startsWith("did:nft:")) {
132
+ // convert DID to CAIP
133
+ uri = uri.replace("did:nft:", "").replace(/_/g, "/");
134
+ }
135
+
136
+ const [reference = "", asset_namespace = "", tokenID = ""] = uri.split("/");
137
+ const [eip_namespace, chainID] = reference.split(":");
138
+ const [erc_namespace, contractAddress] = asset_namespace.split(":");
139
+
140
+ if (!eip_namespace || eip_namespace.toLowerCase() !== "eip155") {
141
+ throw new Error(
142
+ `Invalid EIP namespace, expected EIP155, got: "${eip_namespace}"`,
143
+ );
144
+ }
145
+ if (!chainID) {
146
+ throw new Error("Chain ID not found");
147
+ }
148
+ if (!contractAddress || !isAddress(contractAddress)) {
149
+ throw new Error("Contract address not found");
150
+ }
151
+ if (!tokenID) {
152
+ throw new Error("Token ID not found");
153
+ }
154
+ const chain = getCachedChain(Number(chainID));
155
+ const contract = getContract({
156
+ client: options.client,
157
+ chain,
158
+ address: contractAddress,
159
+ });
160
+ switch (erc_namespace) {
161
+ case "erc721": {
162
+ const { getNFT } = await import("../../extensions/erc721/read/getNFT.js");
163
+ const nft = await getNFT({
164
+ contract,
165
+ tokenId: BigInt(tokenID),
166
+ });
167
+ return nft.metadata.image ?? null;
168
+ }
169
+ case "erc1155": {
170
+ const { getNFT } = await import(
171
+ "../../extensions/erc1155/read/getNFT.js"
172
+ );
173
+ const nft = await getNFT({
174
+ contract,
175
+ tokenId: BigInt(tokenID),
176
+ });
177
+ return nft.metadata.image ?? null;
178
+ }
179
+
180
+ default: {
181
+ throw new Error(
182
+ `Invalid ERC namespace, expected ERC721 or ERC1155, got: "${erc_namespace}"`,
183
+ );
184
+ }
185
+ }
186
+ }
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = "5.54.0";
1
+ export const version = "5.55.0-nightly-8035923cdad943a47fc909e04522c351d06804f0-20240913000407";