thirdweb 5.53.0-nightly-9d84aff26615b6a553ac002e7f51a0ed5172eb5d-20240909000344 → 5.53.1-nightly-865c5e3b16af70c3660f30ba8cffc5d6e360a389-20240911000352

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 (246) hide show
  1. package/dist/cjs/chains/chain-definitions/assetchain-testnet.js +25 -0
  2. package/dist/cjs/chains/chain-definitions/assetchain-testnet.js.map +1 -0
  3. package/dist/cjs/contract/deployment/utils/bootstrap.js +1 -1
  4. package/dist/cjs/contract/deployment/utils/bootstrap.js.map +1 -1
  5. package/dist/cjs/exports/contract.js +4 -1
  6. package/dist/cjs/exports/contract.js.map +1 -1
  7. package/dist/cjs/exports/deploys.js +2 -1
  8. package/dist/cjs/exports/deploys.js.map +1 -1
  9. package/dist/cjs/exports/extensions/erc721.js +4 -2
  10. package/dist/cjs/exports/extensions/erc721.js.map +1 -1
  11. package/dist/cjs/exports/react.native.js +4 -1
  12. package/dist/cjs/exports/react.native.js.map +1 -1
  13. package/dist/cjs/extensions/erc721/lazyMinting/read/getBatchesToReveal.js +14 -16
  14. package/dist/cjs/extensions/erc721/lazyMinting/read/getBatchesToReveal.js.map +1 -1
  15. package/dist/cjs/extensions/erc721/lazyMinting/write/createDelayedRevealBatch.js +19 -0
  16. package/dist/cjs/extensions/erc721/lazyMinting/write/createDelayedRevealBatch.js.map +1 -1
  17. package/dist/cjs/extensions/erc721/lazyMinting/write/reveal.js +3 -20
  18. package/dist/cjs/extensions/erc721/lazyMinting/write/reveal.js.map +1 -1
  19. package/dist/cjs/extensions/prebuilts/deploy-published.js +30 -14
  20. package/dist/cjs/extensions/prebuilts/deploy-published.js.map +1 -1
  21. package/dist/cjs/react/core/hooks/others/useProfiles.js +1 -1
  22. package/dist/cjs/react/core/hooks/transaction/useSendTransaction.js +4 -2
  23. package/dist/cjs/react/core/hooks/transaction/useSendTransaction.js.map +1 -1
  24. package/dist/cjs/react/core/utils/walletIcon.js +5 -1
  25. package/dist/cjs/react/core/utils/walletIcon.js.map +1 -1
  26. package/dist/cjs/react/native/ui/components/WalletImage.js +2 -0
  27. package/dist/cjs/react/native/ui/components/WalletImage.js.map +1 -1
  28. package/dist/cjs/react/native/ui/connect/InAppWalletUI.js +1 -0
  29. package/dist/cjs/react/native/ui/connect/InAppWalletUI.js.map +1 -1
  30. package/dist/cjs/react/native/ui/icons/svgs.js +2 -1
  31. package/dist/cjs/react/native/ui/icons/svgs.js.map +1 -1
  32. package/dist/cjs/react/web/wallets/shared/ConnectWalletSocialOptions.js +1 -0
  33. package/dist/cjs/react/web/wallets/shared/ConnectWalletSocialOptions.js.map +1 -1
  34. package/dist/cjs/react/web/wallets/shared/oauthSignIn.js +1 -0
  35. package/dist/cjs/react/web/wallets/shared/oauthSignIn.js.map +1 -1
  36. package/dist/cjs/social/profiles.js.map +1 -1
  37. package/dist/cjs/utils/any-evm/compute-published-contract-address.js +0 -4
  38. package/dist/cjs/utils/any-evm/compute-published-contract-address.js.map +1 -1
  39. package/dist/cjs/utils/any-evm/compute-published-contract-deploy-info.js +2 -3
  40. package/dist/cjs/utils/any-evm/compute-published-contract-deploy-info.js.map +1 -1
  41. package/dist/cjs/utils/any-evm/deploy-metadata.js +0 -19
  42. package/dist/cjs/utils/any-evm/deploy-metadata.js.map +1 -1
  43. package/dist/cjs/utils/bytecode/resolveImplementation.js +17 -10
  44. package/dist/cjs/utils/bytecode/resolveImplementation.js.map +1 -1
  45. package/dist/cjs/utils/domains.js +1 -1
  46. package/dist/cjs/utils/domains.js.map +1 -1
  47. package/dist/cjs/utils/ipfs.js +2 -0
  48. package/dist/cjs/utils/ipfs.js.map +1 -1
  49. package/dist/cjs/version.js +1 -1
  50. package/dist/cjs/wallets/coinbase/coinbaseMobileSDK.js +52 -24
  51. package/dist/cjs/wallets/coinbase/coinbaseMobileSDK.js.map +1 -1
  52. package/dist/cjs/wallets/coinbase/coinbaseWebSDK.js.map +1 -1
  53. package/dist/cjs/wallets/coinbase/utils.js +1 -1
  54. package/dist/cjs/wallets/coinbase/utils.js.map +1 -1
  55. package/dist/cjs/wallets/in-app/core/authentication/types.js +1 -0
  56. package/dist/cjs/wallets/in-app/core/authentication/types.js.map +1 -1
  57. package/dist/cjs/wallets/in-app/native/native-connector.js +2 -0
  58. package/dist/cjs/wallets/in-app/native/native-connector.js.map +1 -1
  59. package/dist/cjs/wallets/in-app/web/in-app.js +2 -0
  60. package/dist/cjs/wallets/in-app/web/in-app.js.map +1 -1
  61. package/dist/cjs/wallets/in-app/web/lib/web-connector.js +2 -0
  62. package/dist/cjs/wallets/in-app/web/lib/web-connector.js.map +1 -1
  63. package/dist/cjs/wallets/types.js +1 -0
  64. package/dist/cjs/wallets/types.js.map +1 -1
  65. package/dist/esm/chains/chain-definitions/assetchain-testnet.js +22 -0
  66. package/dist/esm/chains/chain-definitions/assetchain-testnet.js.map +1 -0
  67. package/dist/esm/contract/deployment/utils/bootstrap.js +1 -1
  68. package/dist/esm/contract/deployment/utils/bootstrap.js.map +1 -1
  69. package/dist/esm/exports/contract.js +2 -0
  70. package/dist/esm/exports/contract.js.map +1 -1
  71. package/dist/esm/exports/deploys.js +1 -1
  72. package/dist/esm/exports/deploys.js.map +1 -1
  73. package/dist/esm/exports/extensions/erc721.js +3 -3
  74. package/dist/esm/exports/extensions/erc721.js.map +1 -1
  75. package/dist/esm/exports/react.native.js +2 -0
  76. package/dist/esm/exports/react.native.js.map +1 -1
  77. package/dist/esm/exports/social.js +0 -1
  78. package/dist/esm/exports/social.js.map +1 -1
  79. package/dist/esm/extensions/erc721/lazyMinting/read/getBatchesToReveal.js +13 -15
  80. package/dist/esm/extensions/erc721/lazyMinting/read/getBatchesToReveal.js.map +1 -1
  81. package/dist/esm/extensions/erc721/lazyMinting/write/createDelayedRevealBatch.js +21 -3
  82. package/dist/esm/extensions/erc721/lazyMinting/write/createDelayedRevealBatch.js.map +1 -1
  83. package/dist/esm/extensions/erc721/lazyMinting/write/reveal.js +1 -20
  84. package/dist/esm/extensions/erc721/lazyMinting/write/reveal.js.map +1 -1
  85. package/dist/esm/extensions/prebuilts/deploy-published.js +29 -14
  86. package/dist/esm/extensions/prebuilts/deploy-published.js.map +1 -1
  87. package/dist/esm/react/core/hooks/others/useProfiles.js +1 -1
  88. package/dist/esm/react/core/hooks/transaction/useSendTransaction.js +4 -2
  89. package/dist/esm/react/core/hooks/transaction/useSendTransaction.js.map +1 -1
  90. package/dist/esm/react/core/utils/walletIcon.js +4 -0
  91. package/dist/esm/react/core/utils/walletIcon.js.map +1 -1
  92. package/dist/esm/react/native/ui/components/WalletImage.js +3 -1
  93. package/dist/esm/react/native/ui/components/WalletImage.js.map +1 -1
  94. package/dist/esm/react/native/ui/connect/InAppWalletUI.js +2 -1
  95. package/dist/esm/react/native/ui/connect/InAppWalletUI.js.map +1 -1
  96. package/dist/esm/react/native/ui/icons/svgs.js +1 -0
  97. package/dist/esm/react/native/ui/icons/svgs.js.map +1 -1
  98. package/dist/esm/react/web/wallets/shared/ConnectWalletSocialOptions.js +1 -0
  99. package/dist/esm/react/web/wallets/shared/ConnectWalletSocialOptions.js.map +1 -1
  100. package/dist/esm/react/web/wallets/shared/oauthSignIn.js +1 -0
  101. package/dist/esm/react/web/wallets/shared/oauthSignIn.js.map +1 -1
  102. package/dist/esm/social/profiles.js.map +1 -1
  103. package/dist/esm/utils/any-evm/compute-published-contract-address.js +0 -4
  104. package/dist/esm/utils/any-evm/compute-published-contract-address.js.map +1 -1
  105. package/dist/esm/utils/any-evm/compute-published-contract-deploy-info.js +2 -3
  106. package/dist/esm/utils/any-evm/compute-published-contract-deploy-info.js.map +1 -1
  107. package/dist/esm/utils/any-evm/deploy-metadata.js +0 -19
  108. package/dist/esm/utils/any-evm/deploy-metadata.js.map +1 -1
  109. package/dist/esm/utils/bytecode/resolveImplementation.js +17 -10
  110. package/dist/esm/utils/bytecode/resolveImplementation.js.map +1 -1
  111. package/dist/esm/utils/domains.js +1 -1
  112. package/dist/esm/utils/domains.js.map +1 -1
  113. package/dist/esm/utils/ipfs.js +2 -0
  114. package/dist/esm/utils/ipfs.js.map +1 -1
  115. package/dist/esm/version.js +1 -1
  116. package/dist/esm/wallets/coinbase/coinbaseMobileSDK.js +50 -22
  117. package/dist/esm/wallets/coinbase/coinbaseMobileSDK.js.map +1 -1
  118. package/dist/esm/wallets/coinbase/coinbaseWebSDK.js.map +1 -1
  119. package/dist/esm/wallets/coinbase/utils.js +1 -1
  120. package/dist/esm/wallets/coinbase/utils.js.map +1 -1
  121. package/dist/esm/wallets/in-app/core/authentication/types.js +1 -0
  122. package/dist/esm/wallets/in-app/core/authentication/types.js.map +1 -1
  123. package/dist/esm/wallets/in-app/native/native-connector.js +2 -0
  124. package/dist/esm/wallets/in-app/native/native-connector.js.map +1 -1
  125. package/dist/esm/wallets/in-app/web/in-app.js +2 -0
  126. package/dist/esm/wallets/in-app/web/in-app.js.map +1 -1
  127. package/dist/esm/wallets/in-app/web/lib/web-connector.js +2 -0
  128. package/dist/esm/wallets/in-app/web/lib/web-connector.js.map +1 -1
  129. package/dist/esm/wallets/types.js +1 -0
  130. package/dist/esm/wallets/types.js.map +1 -1
  131. package/dist/types/chains/chain-definitions/assetchain-testnet.d.ts +7 -0
  132. package/dist/types/chains/chain-definitions/assetchain-testnet.d.ts.map +1 -0
  133. package/dist/types/contract/actions/compiler-metadata.d.ts +2 -2
  134. package/dist/types/contract/actions/compiler-metadata.d.ts.map +1 -1
  135. package/dist/types/contract/actions/get-compiler-metadata.d.ts +1 -1
  136. package/dist/types/contract/actions/get-compiler-metadata.d.ts.map +1 -1
  137. package/dist/types/contract/verification/source-files.d.ts +2 -2
  138. package/dist/types/contract/verification/source-files.d.ts.map +1 -1
  139. package/dist/types/exports/contract.d.ts +1 -0
  140. package/dist/types/exports/contract.d.ts.map +1 -1
  141. package/dist/types/exports/deploys.d.ts +1 -1
  142. package/dist/types/exports/deploys.d.ts.map +1 -1
  143. package/dist/types/exports/extensions/erc721.d.ts +3 -3
  144. package/dist/types/exports/extensions/erc721.d.ts.map +1 -1
  145. package/dist/types/exports/react.d.ts +1 -0
  146. package/dist/types/exports/react.d.ts.map +1 -1
  147. package/dist/types/exports/react.native.d.ts +2 -0
  148. package/dist/types/exports/react.native.d.ts.map +1 -1
  149. package/dist/types/exports/social.d.ts +1 -1
  150. package/dist/types/exports/social.d.ts.map +1 -1
  151. package/dist/types/extensions/erc721/lazyMinting/read/getBatchesToReveal.d.ts +1 -1
  152. package/dist/types/extensions/erc721/lazyMinting/read/getBatchesToReveal.d.ts.map +1 -1
  153. package/dist/types/extensions/erc721/lazyMinting/write/createDelayedRevealBatch.d.ts +12 -0
  154. package/dist/types/extensions/erc721/lazyMinting/write/createDelayedRevealBatch.d.ts.map +1 -1
  155. package/dist/types/extensions/erc721/lazyMinting/write/reveal.d.ts +1 -0
  156. package/dist/types/extensions/erc721/lazyMinting/write/reveal.d.ts.map +1 -1
  157. package/dist/types/extensions/prebuilts/deploy-published.d.ts +16 -0
  158. package/dist/types/extensions/prebuilts/deploy-published.d.ts.map +1 -1
  159. package/dist/types/react/core/hooks/others/useProfiles.d.ts +1 -1
  160. package/dist/types/react/core/hooks/transaction/useSendTransaction.d.ts.map +1 -1
  161. package/dist/types/react/core/social/useSocialProfiles.d.ts +1 -1
  162. package/dist/types/react/core/social/useSocialProfiles.d.ts.map +1 -1
  163. package/dist/types/react/core/utils/storage.d.ts +1 -1
  164. package/dist/types/react/core/utils/storage.d.ts.map +1 -1
  165. package/dist/types/react/core/utils/wallet.d.ts +1 -1
  166. package/dist/types/react/core/utils/walletIcon.d.ts +3 -1
  167. package/dist/types/react/core/utils/walletIcon.d.ts.map +1 -1
  168. package/dist/types/react/native/ui/components/WalletImage.d.ts.map +1 -1
  169. package/dist/types/react/native/ui/connect/InAppWalletUI.d.ts.map +1 -1
  170. package/dist/types/react/native/ui/icons/svgs.d.ts +1 -0
  171. package/dist/types/react/native/ui/icons/svgs.d.ts.map +1 -1
  172. package/dist/types/react/web/wallets/shared/ConnectWalletSocialOptions.d.ts.map +1 -1
  173. package/dist/types/react/web/wallets/shared/oauthSignIn.d.ts.map +1 -1
  174. package/dist/types/social/profiles.d.ts +2 -2
  175. package/dist/types/social/profiles.d.ts.map +1 -1
  176. package/dist/types/social/types.d.ts +2 -2
  177. package/dist/types/social/types.d.ts.map +1 -1
  178. package/dist/types/utils/any-evm/compute-published-contract-address.d.ts +0 -4
  179. package/dist/types/utils/any-evm/compute-published-contract-address.d.ts.map +1 -1
  180. package/dist/types/utils/any-evm/compute-published-contract-deploy-info.d.ts.map +1 -1
  181. package/dist/types/utils/any-evm/deploy-metadata.d.ts +3 -6
  182. package/dist/types/utils/any-evm/deploy-metadata.d.ts.map +1 -1
  183. package/dist/types/utils/ipfs.d.ts +1 -1
  184. package/dist/types/utils/ipfs.d.ts.map +1 -1
  185. package/dist/types/version.d.ts +1 -1
  186. package/dist/types/wallets/coinbase/coinbaseMobileSDK.d.ts +2 -3
  187. package/dist/types/wallets/coinbase/coinbaseMobileSDK.d.ts.map +1 -1
  188. package/dist/types/wallets/coinbase/coinbaseWebSDK.d.ts.map +1 -1
  189. package/dist/types/wallets/in-app/core/authentication/types.d.ts +1 -0
  190. package/dist/types/wallets/in-app/core/authentication/types.d.ts.map +1 -1
  191. package/dist/types/wallets/in-app/native/native-connector.d.ts.map +1 -1
  192. package/dist/types/wallets/in-app/web/in-app.d.ts +2 -0
  193. package/dist/types/wallets/in-app/web/in-app.d.ts.map +1 -1
  194. package/dist/types/wallets/in-app/web/lib/web-connector.d.ts.map +1 -1
  195. package/dist/types/wallets/types.d.ts +2 -2
  196. package/dist/types/wallets/types.d.ts.map +1 -1
  197. package/package.json +15 -2
  198. package/src/chains/chain-definitions/assetchain-testnet.ts +22 -0
  199. package/src/contract/actions/compiler-metadata.ts +2 -2
  200. package/src/contract/deployment/publisher.test.ts +2 -2
  201. package/src/contract/deployment/utils/bootstrap.ts +1 -1
  202. package/src/contract/verification/source-files.ts +2 -2
  203. package/src/event/actions/get-events.test.ts +13 -0
  204. package/src/exports/contract.ts +6 -0
  205. package/src/exports/deploys.ts +2 -0
  206. package/src/exports/extensions/erc721.ts +3 -1
  207. package/src/exports/react.native.ts +9 -0
  208. package/src/exports/react.ts +6 -0
  209. package/src/exports/social.ts +6 -1
  210. package/src/extensions/erc721/lazyMinting/read/getBatchesToReveal.ts +15 -15
  211. package/src/extensions/erc721/lazyMinting/write/createAndReveal.test.ts +84 -0
  212. package/src/extensions/erc721/lazyMinting/write/createDelayedRevealBatch.ts +33 -3
  213. package/src/extensions/erc721/lazyMinting/write/reveal.test.ts +1 -45
  214. package/src/extensions/erc721/lazyMinting/write/reveal.ts +2 -23
  215. package/src/extensions/modules/ClaimableERC1155/claimableERC1155.test.ts +1 -1
  216. package/src/extensions/modules/ClaimableERC20/claimableERC20.test.ts +1 -1
  217. package/src/extensions/modules/ClaimableERC721/claimableERC721.test.ts +1 -1
  218. package/src/extensions/modules/OpenEditionMetadataERC721/openEditionERC721.test.ts +1 -1
  219. package/src/extensions/prebuilts/deploy-modular-core.test.ts +1 -1
  220. package/src/extensions/prebuilts/deploy-published.ts +61 -22
  221. package/src/react/core/hooks/others/useProfiles.ts +1 -1
  222. package/src/react/core/hooks/transaction/useSendTransaction.ts +4 -2
  223. package/src/react/core/utils/walletIcon.ts +5 -0
  224. package/src/react/native/ui/components/WalletImage.tsx +3 -0
  225. package/src/react/native/ui/connect/InAppWalletUI.tsx +2 -0
  226. package/src/react/native/ui/icons/svgs.ts +2 -0
  227. package/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx +1 -0
  228. package/src/react/web/wallets/shared/oauthSignIn.ts +1 -0
  229. package/src/social/profiles.ts +3 -3
  230. package/src/social/types.ts +2 -2
  231. package/src/utils/any-evm/compute-published-contract-address.ts +0 -4
  232. package/src/utils/any-evm/compute-published-contract-deploy-info.ts +2 -3
  233. package/src/utils/any-evm/deploy-metadata.ts +9 -34
  234. package/src/utils/bytecode/resolveImplementation.test.ts +9 -0
  235. package/src/utils/bytecode/resolveImplementation.ts +21 -13
  236. package/src/utils/domains.ts +1 -1
  237. package/src/utils/ipfs.ts +3 -1
  238. package/src/version.ts +1 -1
  239. package/src/wallets/coinbase/coinbaseMobileSDK.ts +66 -35
  240. package/src/wallets/coinbase/coinbaseWebSDK.ts +0 -1
  241. package/src/wallets/coinbase/utils.ts +1 -1
  242. package/src/wallets/in-app/core/authentication/types.ts +1 -0
  243. package/src/wallets/in-app/native/native-connector.ts +2 -0
  244. package/src/wallets/in-app/web/in-app.ts +2 -0
  245. package/src/wallets/in-app/web/lib/web-connector.ts +2 -0
  246. package/src/wallets/types.ts +1 -0
@@ -9,6 +9,7 @@ import { simulateTransaction } from "../../transaction/actions/simulate.js";
9
9
  import { prepareContractCall } from "../../transaction/prepare-contract-call.js";
10
10
  import { resolveMethod } from "../../transaction/resolve-method.js";
11
11
  import type { CompilerMetadata } from "../../utils/any-evm/deploy-metadata.js";
12
+ import type { FetchDeployMetadataResult } from "../../utils/any-evm/deploy-metadata.js";
12
13
  import { isZkSyncChain } from "../../utils/any-evm/zksync/isZkSyncChain.js";
13
14
  import type { Account } from "../../wallets/interfaces/wallet.js";
14
15
 
@@ -58,21 +59,56 @@ export async function deployPublishedContract(
58
59
  version,
59
60
  implementationConstructorParams,
60
61
  } = options;
61
- const { compilerMetadata, extendedMetadata } =
62
- await fetchPublishedContractMetadata({
63
- client,
64
- contractId: isZkSyncChain(chain) ? `${contractId}_ZkSync` : contractId,
65
- publisher,
66
- version,
67
- });
62
+ const deployMetadata = await fetchPublishedContractMetadata({
63
+ client,
64
+ contractId: isZkSyncChain(chain) ? `${contractId}_ZkSync` : contractId,
65
+ publisher,
66
+ version,
67
+ });
68
+
69
+ return deployContractfromDeployMetadata({
70
+ account,
71
+ chain,
72
+ deployMetadata,
73
+ client,
74
+ contractParams,
75
+ implementationConstructorParams,
76
+ });
77
+ }
78
+
79
+ /**
80
+ * @internal
81
+ */
82
+ export type DeployContractfromDeployMetadataOptions = {
83
+ client: ThirdwebClient;
84
+ chain: Chain;
85
+ account: Account;
86
+ deployMetadata: FetchDeployMetadataResult;
87
+ contractParams: unknown[];
88
+ implementationConstructorParams?: unknown[];
89
+ };
68
90
 
69
- switch (extendedMetadata?.deployType) {
91
+ /**
92
+ * @internal
93
+ */
94
+ export async function deployContractfromDeployMetadata(
95
+ options: DeployContractfromDeployMetadataOptions,
96
+ ) {
97
+ const {
98
+ client,
99
+ account,
100
+ chain,
101
+ contractParams,
102
+ deployMetadata,
103
+ implementationConstructorParams,
104
+ } = options;
105
+ switch (deployMetadata?.deployType) {
70
106
  case "standard": {
71
107
  return directDeploy({
72
108
  account,
73
109
  client,
74
110
  chain,
75
- compilerMetadata,
111
+ compilerMetadata: deployMetadata,
76
112
  contractParams,
77
113
  });
78
114
  }
@@ -89,19 +125,21 @@ export async function deployPublishedContract(
89
125
  chain,
90
126
  client,
91
127
  account,
92
- contractId,
128
+ contractId: deployMetadata.name,
93
129
  constructorParams: implementationConstructorParams || [],
94
- publisher,
130
+ publisher: deployMetadata.publisher,
95
131
  });
96
- const initializeFunction = compilerMetadata.abi.find(
132
+ const initializeFunction = deployMetadata.abi.find(
97
133
  (i) =>
98
134
  i.type === "function" &&
99
135
  i.name ===
100
- (extendedMetadata.factoryDeploymentData
136
+ (deployMetadata.factoryDeploymentData
101
137
  ?.implementationInitializerFunction || "initialize"),
102
138
  ) as AbiFunction;
103
139
  if (!initializeFunction) {
104
- throw new Error(`Could not find initialize function for ${contractId}`);
140
+ throw new Error(
141
+ `Could not find initialize function for ${deployMetadata.name}`,
142
+ );
105
143
  }
106
144
  const initializeTransaction = prepareContractCall({
107
145
  contract: getContract({
@@ -109,7 +147,10 @@ export async function deployPublishedContract(
109
147
  chain,
110
148
  address: implementationContract.address,
111
149
  }),
112
- method: initializeFunction,
150
+ method: resolveMethod(
151
+ deployMetadata.factoryDeploymentData
152
+ ?.implementationInitializerFunction || "initialize",
153
+ ),
113
154
  params: contractParams,
114
155
  });
115
156
 
@@ -122,14 +163,14 @@ export async function deployPublishedContract(
122
163
  });
123
164
  }
124
165
  case "customFactory": {
125
- if (!extendedMetadata?.factoryDeploymentData?.customFactoryInput) {
166
+ if (!deployMetadata?.factoryDeploymentData?.customFactoryInput) {
126
167
  throw new Error("No custom factory info found");
127
168
  }
128
169
  const factoryAddress =
129
- extendedMetadata?.factoryDeploymentData?.customFactoryInput
170
+ deployMetadata?.factoryDeploymentData?.customFactoryInput
130
171
  ?.customFactoryAddresses?.[chain.id];
131
172
  const factoryFunction =
132
- extendedMetadata.factoryDeploymentData?.customFactoryInput
173
+ deployMetadata.factoryDeploymentData?.customFactoryInput
133
174
  ?.factoryFunction;
134
175
  if (!factoryAddress || !factoryFunction) {
135
176
  throw new Error(`No factory address found on chain ${chain.id}`);
@@ -161,15 +202,13 @@ export async function deployPublishedContract(
161
202
  account,
162
203
  client,
163
204
  chain,
164
- compilerMetadata,
205
+ compilerMetadata: deployMetadata,
165
206
  contractParams,
166
207
  });
167
208
  }
168
209
  default:
169
210
  // If a deployType was specified but we don't support it, throw an error
170
- throw new Error(
171
- `Unsupported deploy type: ${extendedMetadata?.deployType}`,
172
- );
211
+ throw new Error(`Unsupported deploy type: ${deployMetadata?.deployType}`);
173
212
  }
174
213
  }
175
214
 
@@ -13,7 +13,7 @@ import { useActiveWallet } from "../wallets/useActiveWallet.js";
13
13
  *
14
14
  * @example
15
15
  * ```jsx
16
- * import { use } from "thirdweb/react";
16
+ * import { useProfiles } from "thirdweb/react";
17
17
  *
18
18
  * const { data: profiles } = useProfiles();
19
19
  *
@@ -10,6 +10,7 @@ import type { WaitForReceiptOptions } from "../../../../transaction/actions/wait
10
10
  import type { PreparedTransaction } from "../../../../transaction/prepare-transaction.js";
11
11
  import { resolvePromisedValue } from "../../../../utils/promise/resolve-promised-value.js";
12
12
  import type { Wallet } from "../../../../wallets/interfaces/wallet.js";
13
+ import { getTokenBalance } from "../../../../wallets/utils/getTokenBalance.js";
13
14
  import { getWalletBalance } from "../../../../wallets/utils/getWalletBalance.js";
14
15
  import type { LocaleId } from "../../../web/ui/types.js";
15
16
  import type { Theme } from "../../design-system/index.js";
@@ -175,10 +176,11 @@ export function useSendTransactionCore(args: {
175
176
  chain: tx.chain,
176
177
  }),
177
178
  _erc20Value?.tokenAddress
178
- ? getWalletBalance({
179
+ ? getTokenBalance({
179
180
  client: tx.client,
180
- address: account.address,
181
+ account,
181
182
  chain: tx.chain,
183
+ tokenAddress: _erc20Value.tokenAddress,
182
184
  })
183
185
  : undefined,
184
186
  getTotalTxCostForBuy(tx, account.address),
@@ -19,6 +19,8 @@ export const twitchIconUri =
19
19
  "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgdmlld0JveD0iMCAwIDExMS43ODY2NyAxMjcuMzg2NjciCiAgIGhlaWdodD0iMTI3LjM4NjY3IgogICB3aWR0aD0iMTExLjc4NjY3IgogICB4bWw6c3BhY2U9InByZXNlcnZlIgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmczMzU1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJUd2l0Y2hfbG9nby5zdmciCiAgIGlua3NjYXBlOnZlcnNpb249IjEuMS4xICgzYmY1YWUwZDI1LCAyMDIxLTA5LTIwKSIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcwogICBpZD0iZGVmczI5Ij4KICAgIAogICAgCiAgPC9kZWZzPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgaWQ9Im5hbWVkdmlldzI3IgogICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiCiAgIHNob3dncmlkPSJmYWxzZSIKICAgaW5rc2NhcGU6em9vbT0iNC4xOTkyMjg0IgogICBpbmtzY2FwZTpjeD0iLTUwLjYwNDUzNSIKICAgaW5rc2NhcGU6Y3k9IjE0MC4zODI5MyIKICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIyNTYwIgogICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMzg3IgogICBpbmtzY2FwZTp3aW5kb3cteD0iMTkxMiIKICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmczMzU1IiAvPgogIDxnCiAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMzMzMzMzMywwLDAsLTEuMzMzMzMzMywxMDEuMzkzMzMsNjcuNTg5MzMyKSIKICAgaWQ9ImczMzY1Ij4KICAgICAgPHBhdGgKICAgaWQ9InBhdGgzMzY3IgogICBzdHlsZT0iZmlsbDojNjQ0MWE1O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIgogICBkPSJtIDAsMCAtMTMuNjUyLC0xMy42NTEgaCAtMjEuNDQ1IGwgLTExLjY5OSwtMTEuNjk3IHYgMTEuNjk3IEggLTY0LjM0NCBWIDQyLjg5MyBIIDAgWiBtIC03Mi4xNDYsNTAuNjkyIC0zLjg5OSwtMTUuNTk5IHYgLTcwLjE5IGggMTcuNTUgdiAtOS43NTEgaCA5Ljc0NiBsIDkuNzUyLDkuNzUxIGggMTUuNTk2IEwgNy43OTUsLTMuOTA1IHYgNTQuNTk3IHoiIC8+CiAgICA8L2c+PHBhdGgKICAgaWQ9InBhdGgzMzY5IgogICBzdHlsZT0iZmlsbDojNjQ0MWE1O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjMzMzMzIgogICBkPSJtIDQ0LjE5NzMzMSw2Mi4zOTQyNjYgaCAxMC4zOTg2NyBWIDMxLjE5MjkzMyBoIC0xMC4zOTg2NyB6IG0gMjguNTk0NjcsMCBoIDEwLjM5ODY2IFYgMzEuMTkyOTMzIGggLTEwLjM5ODY2IHoiIC8+Cjwvc3ZnPgo=";
20
20
  export const discordIconUri =
21
21
  "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEwMCAxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBpZD0iZGlzY29yZCI+PHBhdGggZmlsbD0iIzY2NjVkMiIgZD0iTTg1LjIyLDI0Ljk1OGMtMTEuNDU5LTguNTc1LTIyLjQzOC04LjMzNC0yMi40MzgtOC4zMzRsLTEuMTIyLDEuMjgyCgkJCQljMTMuNjIzLDQuMDg3LDE5Ljk1NCwxMC4wOTcsMTkuOTU0LDEwLjA5N2MtMTkuNDkxLTEwLjczMS00NC4zMTctMTAuNjU0LTY0LjU5LDBjMCwwLDYuNTcxLTYuMzMxLDIwLjk5Ni0xMC40MThsLTAuODAxLTAuOTYyCgkJCQljMCwwLTEwLjg5OS0wLjI0LTIyLjQzOCw4LjMzNGMwLDAtMTEuNTQsMjAuNzU1LTExLjU0LDQ2LjMxOWMwLDAsNi43MzIsMTEuNTQsMjQuNDQyLDEyLjEwMWMwLDAsMi45NjUtMy41MjYsNS4zNjktNi41NzEKCQkJCWMtMTAuMTc3LTMuMDQ1LTE0LjAyNC05LjM3Ni0xNC4wMjQtOS4zNzZjNi4zOTQsNC4wMDEsMTIuODU5LDYuNTA1LDIwLjkxNiw4LjA5NGMxMy4xMDgsMi42OTgsMjkuNDEzLTAuMDc2LDQxLjU5MS04LjA5NAoJCQkJYzAsMC00LjAwNyw2LjQ5MS0xNC41MDUsOS40NTZjMi40MDQsMi45NjUsNS4yODksNi40MTEsNS4yODksNi40MTFjMTcuNzEtMC41NjEsMjQuNDQxLTEyLjEwMSwyNC40NDEtMTIuMDIKCQkJCUM5Ni43NTksNDUuNzEzLDg1LjIyLDI0Ljk1OCw4NS4yMiwyNC45NTh6IE0zNS4wNTUsNjMuODI0Yy00LjQ4OCwwLTguMTc0LTMuOTI3LTguMTc0LTguODE1CgkJCQljMC4zMjgtMTEuNzA3LDE2LjEwMi0xMS42NzEsMTYuMzQ4LDBDNDMuMjI5LDU5Ljg5NywzOS42MjIsNjMuODI0LDM1LjA1NSw2My44MjR6IE02NC4zMDQsNjMuODI0CgkJCQljLTQuNDg4LDAtOC4xNzQtMy45MjctOC4xNzQtOC44MTVjMC4zNi0xMS42ODQsMTUuOTM3LTExLjY4OSwxNi4zNDgsMEM3Mi40NzgsNTkuODk3LDY4Ljg3Miw2My44MjQsNjQuMzA0LDYzLjgyNHoiPjwvcGF0aD48L3N2Zz4=";
22
+ export const lineIconUri =
23
+ "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMjAiIGhlaWdodD0iMzIwIiB2aWV3Qm94PSIwIDAgMzIwIDMyMCI+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOiMwNmM3NTU7fS5jbHMtMntmaWxsOiNmZmY7fTwvc3R5bGU+PC9kZWZzPjxnIGlkPSJMYXllcl8yIiBkYXRhLW5hbWU9IkxheWVyIDIiPjxnIGlkPSJMSU5FX0xPR08iIGRhdGEtbmFtZT0iTElORSBMT0dPIj48cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIzMjAiIGhlaWdodD0iMzIwIiByeD0iNzIuMTQiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0yNjYuNjYsMTQ0LjkyYzAtNDcuNzQtNDcuODYtODYuNTgtMTA2LjY5LTg2LjU4UzUzLjI4LDk3LjE4LDUzLjI4LDE0NC45MmMwLDQyLjgsMzgsNzguNjUsODkuMjIsODUuNDIsMy40OC43NSw4LjIxLDIuMjksOS40LDUuMjYsMS4wOCwyLjcuNzEsNi45My4zNSw5LjY1LDAsMC0xLjI1LDcuNTMtMS41Miw5LjEzLS40NywyLjctMi4xNSwxMC41NSw5LjI0LDUuNzZzNjEuNDQtMzYuMTgsODMuODItNjEuOTVoMEMyNTkuMjUsMTgxLjI0LDI2Ni42NiwxNjQsMjY2LjY2LDE0NC45MloiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0yMzEuMTYsMTcyLjQ5aC0zMGEyLDIsMCwwLDEtMi0ydjBoMFYxMjMuOTRoMHYwYTIsMiwwLDAsMSwyLTJoMzBhMiwyLDAsMCwxLDIsMnY3LjU3YTIsMiwwLDAsMS0yLDJIMjEwLjc5djcuODVoMjAuMzdhMiwyLDAsMCwxLDIsMlYxNTFhMiwyLDAsMCwxLTIsMkgyMTAuNzl2Ny44NmgyMC4zN2EyLDIsMCwwLDEsMiwydjcuNTZBMiwyLDAsMCwxLDIzMS4xNiwxNzIuNDlaIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMTIwLjI5LDE3Mi40OWEyLDIsMCwwLDAsMi0ydi03LjU2YTIsMiwwLDAsMC0yLTJIOTkuOTJ2LTM3YTIsMiwwLDAsMC0yLTJIOTAuMzJhMiwyLDAsMCwwLTIsMnY0Ni41M2gwdjBhMiwyLDAsMCwwLDIsMmgzMFoiLz48cmVjdCBjbGFzcz0iY2xzLTEiIHg9IjEyOC43MyIgeT0iMTIxLjg1IiB3aWR0aD0iMTEuNjQiIGhlaWdodD0iNTAuNjQiIHJ4PSIyLjA0Ii8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMTg5Ljg0LDEyMS44NWgtNy41NmEyLDIsMCwwLDAtMiwydjI3LjY2bC0yMS4zLTI4Ljc3YTEuMiwxLjIsMCwwLDAtLjE3LS4yMXYwbC0uMTItLjEyLDAsMC0uMTEtLjA5LS4wNiwwLS4xMS0uMDgtLjA2LDAtLjExLS4wNi0uMDcsMC0uMTEsMC0uMDcsMC0uMTIsMC0uMDgsMC0uMTIsMGgtLjA4bC0uMTEsMGgtNy43MWEyLDIsMCwwLDAtMiwydjQ2LjU2YTIsMiwwLDAsMCwyLDJoNy41N2EyLDIsMCwwLDAsMi0yVjE0Mi44MWwyMS4zMywyOC44YTIsMiwwLDAsMCwuNTIuNTJoMGwuMTIuMDguMDYsMCwuMS4wNS4xLDAsLjA3LDAsLjE0LDBoMGEyLjQyLDIuNDIsMCwwLDAsLjU0LjA3aDcuNTJhMiwyLDAsMCwwLDItMlYxMjMuODlBMiwyLDAsMCwwLDE4OS44NCwxMjEuODVaIi8+PC9nPjwvZz48L3N2Zz4=";
22
24
  export const farcasterIconUri =
23
25
  "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwMCIgaGVpZ2h0PSIxMDAwIiB2aWV3Qm94PSIwIDAgMTAwMCAxMDAwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cmVjdCB3aWR0aD0iMTAwMCIgaGVpZ2h0PSIxMDAwIiByeD0iMjAwIiBmaWxsPSIjODU1RENEIi8+CjxwYXRoIGQ9Ik0yNTcuNzc4IDE1NS41NTZINzQyLjIyMlY4NDQuNDQ0SDY3MS4xMTFWNTI4Ljg4OUg2NzAuNDE0QzY2Mi41NTQgNDQxLjY3NyA1ODkuMjU4IDM3My4zMzMgNTAwIDM3My4zMzNDNDEwLjc0MiAzNzMuMzMzIDMzNy40NDYgNDQxLjY3NyAzMjkuNTg2IDUyOC44ODlIMzI4Ljg4OVY4NDQuNDQ0SDI1Ny43NzhWMTU1LjU1NloiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xMjguODg5IDI1My4zMzNMMTU3Ljc3OCAzNTEuMTExSDE4Mi4yMjJWNzQ2LjY2N0MxNjkuOTQ5IDc0Ni42NjcgMTYwIDc1Ni42MTYgMTYwIDc2OC44ODlWNzk1LjU1NkgxNTUuNTU2QzE0My4yODMgNzk1LjU1NiAxMzMuMzMzIDgwNS41MDUgMTMzLjMzMyA4MTcuNzc4Vjg0NC40NDRIMzgyLjIyMlY4MTcuNzc4QzM4Mi4yMjIgODA1LjUwNSAzNzIuMjczIDc5NS41NTYgMzYwIDc5NS41NTZIMzU1LjU1NlY3NjguODg5QzM1NS41NTYgNzU2LjYxNiAzNDUuNjA2IDc0Ni42NjcgMzMzLjMzMyA3NDYuNjY3SDMwNi42NjdWMjUzLjMzM0gxMjguODg5WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTY3NS41NTYgNzQ2LjY2N0M2NjMuMjgzIDc0Ni42NjcgNjUzLjMzMyA3NTYuNjE2IDY1My4zMzMgNzY4Ljg4OVY3OTUuNTU2SDY0OC44ODlDNjM2LjYxNiA3OTUuNTU2IDYyNi42NjcgODA1LjUwNSA2MjYuNjY3IDgxNy43NzhWODQ0LjQ0NEg4NzUuNTU2VjgxNy43NzhDODc1LjU1NiA4MDUuNTA1IDg2NS42MDYgNzk1LjU1NiA4NTMuMzMzIDc5NS41NTZIODQ4Ljg4OVY3NjguODg5Qzg0OC44ODkgNzU2LjYxNiA4MzguOTQgNzQ2LjY2NyA4MjYuNjY3IDc0Ni42NjdWMzUxLjExMUg4NTEuMTExTDg4MCAyNTMuMzMzSDcwMi4yMjJWNzQ2LjY2N0g2NzUuNTU2WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==";
24
26
  export const telegramIconUri =
@@ -46,6 +48,7 @@ export const socialIcons = {
46
48
  apple: appleIconUri,
47
49
  facebook: facebookIconUri,
48
50
  discord: discordIconUri,
51
+ line: lineIconUri,
49
52
  farcaster: farcasterIconUri,
50
53
  telegram: telegramIconUri,
51
54
  };
@@ -67,6 +70,8 @@ export function getWalletIcon(provider: string) {
67
70
  return passkeyIcon;
68
71
  case "discord":
69
72
  return discordIconUri;
73
+ case "line":
74
+ return lineIconUri;
70
75
  case "farcaster":
71
76
  return farcasterIconUri;
72
77
  case "telegram":
@@ -12,6 +12,7 @@ import {
12
12
  FACEBOOK_ICON,
13
13
  FARCASTER_ICON,
14
14
  GOOGLE_ICON,
15
+ LINE_ICON,
15
16
  PASSKEY_ICON,
16
17
  PHONE_ICON,
17
18
  TELEGRAM_ICON,
@@ -81,6 +82,8 @@ export function getAuthProviderImage(authProvider: string | null): string {
81
82
  return FACEBOOK_ICON;
82
83
  case "discord":
83
84
  return DISCORD_ICON;
85
+ case "line":
86
+ return LINE_ICON;
84
87
  case "farcaster":
85
88
  return FARCASTER_ICON;
86
89
  case "telegram":
@@ -34,6 +34,7 @@ import {
34
34
  FACEBOOK_ICON,
35
35
  FARCASTER_ICON,
36
36
  GOOGLE_ICON,
37
+ LINE_ICON,
37
38
  TELEGRAM_ICON,
38
39
  } from "../icons/svgs.js";
39
40
  import type { ModalState } from "./ConnectModal.js";
@@ -53,6 +54,7 @@ const socialIcons = {
53
54
  facebook: FACEBOOK_ICON,
54
55
  apple: APPLE_ICON,
55
56
  discord: DISCORD_ICON,
57
+ line: LINE_ICON,
56
58
  farcaster: FARCASTER_ICON,
57
59
  telegram: TELEGRAM_ICON,
58
60
  };
@@ -37,6 +37,8 @@ export const DISCORD_ICON = `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink
37
37
  </g>
38
38
  </svg>`;
39
39
 
40
+ export const LINE_ICON = `<svg xmlns="http://www.w3.org/2000/svg" width="320" height="320" viewBox="0 0 320 320"><defs><style>.cls-1{fill:#06c755;}.cls-2{fill:#fff;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="LINE_LOGO" data-name="LINE LOGO"><rect class="cls-1" width="320" height="320" rx="72.14"/><path class="cls-2" d="M266.66,144.92c0-47.74-47.86-86.58-106.69-86.58S53.28,97.18,53.28,144.92c0,42.8,38,78.65,89.22,85.42,3.48.75,8.21,2.29,9.4,5.26,1.08,2.7.71,6.93.35,9.65,0,0-1.25,7.53-1.52,9.13-.47,2.7-2.15,10.55,9.24,5.76s61.44-36.18,83.82-61.95h0C259.25,181.24,266.66,164,266.66,144.92Z"/><path class="cls-1" d="M231.16,172.49h-30a2,2,0,0,1-2-2v0h0V123.94h0v0a2,2,0,0,1,2-2h30a2,2,0,0,1,2,2v7.57a2,2,0,0,1-2,2H210.79v7.85h20.37a2,2,0,0,1,2,2V151a2,2,0,0,1-2,2H210.79v7.86h20.37a2,2,0,0,1,2,2v7.56A2,2,0,0,1,231.16,172.49Z"/><path class="cls-1" d="M120.29,172.49a2,2,0,0,0,2-2v-7.56a2,2,0,0,0-2-2H99.92v-37a2,2,0,0,0-2-2H90.32a2,2,0,0,0-2,2v46.53h0v0a2,2,0,0,0,2,2h30Z"/><rect class="cls-1" x="128.73" y="121.85" width="11.64" height="50.64" rx="2.04"/><path class="cls-1" d="M189.84,121.85h-7.56a2,2,0,0,0-2,2v27.66l-21.3-28.77a1.2,1.2,0,0,0-.17-.21v0l-.12-.12,0,0-.11-.09-.06,0-.11-.08-.06,0-.11-.06-.07,0-.11,0-.07,0-.12,0-.08,0-.12,0h-.08l-.11,0h-7.71a2,2,0,0,0-2,2v46.56a2,2,0,0,0,2,2h7.57a2,2,0,0,0,2-2V142.81l21.33,28.8a2,2,0,0,0,.52.52h0l.12.08.06,0,.1.05.1,0,.07,0,.14,0h0a2.42,2.42,0,0,0,.54.07h7.52a2,2,0,0,0,2-2V123.89A2,2,0,0,0,189.84,121.85Z"/></g></g></svg>`;
41
+
40
42
  export const FARCASTER_ICON = `<svg width={width} height={height} viewBox="0 0 1000 1000" fill="none" xmlns="http://www.w3.org/2000/svg">
41
43
  <rect width="1000" height="1000" rx="200" fill="#855DCD"/>
42
44
  <path d="M257.778 155.556H742.222V844.444H671.111V528.889H670.414C662.554 441.677 589.258 373.333 500 373.333C410.742 373.333 337.446 441.677 329.586 528.889H328.889V844.444H257.778V155.556Z" fill="white"/>
@@ -106,6 +106,7 @@ export const ConnectWalletSocialOptions = (
106
106
  facebook: locale.signInWithFacebook,
107
107
  apple: locale.signInWithApple,
108
108
  discord: locale.signInWithDiscord,
109
+ line: "LINE",
109
110
  farcaster: "Farcaster",
110
111
  telegram: "Telegram",
111
112
  };
@@ -35,6 +35,7 @@ function getOauthLoginPath(
35
35
  case "google":
36
36
  case "farcaster":
37
37
  case "telegram":
38
+ case "line":
38
39
  case "discord":
39
40
  return getLoginUrl({ authOption, client, ecosystem });
40
41
  default:
@@ -1,7 +1,7 @@
1
1
  import type { ThirdwebClient } from "../client/client.js";
2
2
  import { getThirdwebBaseUrl } from "../utils/domains.js";
3
3
  import { getClientFetch } from "../utils/fetch.js";
4
- import type { SocialProfiles } from "./types.js";
4
+ import type { SocialProfile } from "./types.js";
5
5
 
6
6
  /**
7
7
  * Fetches the wallet's available social profiles.
@@ -23,7 +23,7 @@ import type { SocialProfiles } from "./types.js";
23
23
  export async function getSocialProfiles(args: {
24
24
  address: string;
25
25
  client: ThirdwebClient;
26
- }): Promise<SocialProfiles> {
26
+ }): Promise<SocialProfile[]> {
27
27
  const { address, client } = args;
28
28
 
29
29
  const clientFetch = getClientFetch(client);
@@ -42,5 +42,5 @@ export async function getSocialProfiles(args: {
42
42
  }
43
43
  }
44
44
 
45
- return (await response.json()).data as SocialProfiles;
45
+ return (await response.json()).data as SocialProfile[];
46
46
  }
@@ -34,10 +34,10 @@ export type EnsProfile = {
34
34
  telegram?: string;
35
35
  };
36
36
 
37
- export type SocialProfiles = {
37
+ export type SocialProfile = {
38
38
  type: "farcaster" | "lens" | "ens";
39
39
  name?: string;
40
40
  avatar?: string;
41
41
  bio?: string;
42
42
  metadata?: FarcasterProfile | LensProfile | EnsProfile;
43
- }[];
43
+ };
@@ -20,10 +20,6 @@ import type { FetchDeployMetadataResult } from "./deploy-metadata.js";
20
20
  * ```ts
21
21
  * import { computePublishedContractAddress } from "thirdweb/deploys";
22
22
  *
23
- * const contractMetadata = await fetchPublishedContractMetadata({
24
- * client,
25
- * chain,
26
- * });
27
23
  * const address = await computePublishedContractAddress({
28
24
  * client,
29
25
  * chain,
@@ -46,14 +46,13 @@ export async function computeDeploymentInfoFromMetadata(args: {
46
46
  salt?: string;
47
47
  }) {
48
48
  const { client, chain, contractMetadata, constructorParams, salt } = args;
49
- const { compilerMetadata } = contractMetadata;
50
49
  const create2FactoryAddress = await computeCreate2FactoryAddress({
51
50
  client,
52
51
  chain,
53
52
  });
54
- const bytecode = compilerMetadata.bytecode;
53
+ const bytecode = contractMetadata.bytecode;
55
54
  const constructorAbi =
56
- (compilerMetadata.abi.find(
55
+ (contractMetadata.abi.find(
57
56
  (abi) => abi.type === "constructor",
58
57
  ) as AbiConstructor) || [];
59
58
  const encodedArgs = encodeAbiParameters(
@@ -10,10 +10,8 @@ export type FetchDeployMetadataOptions = {
10
10
  client: ThirdwebClient;
11
11
  };
12
12
 
13
- export type FetchDeployMetadataResult = {
14
- compilerMetadata: CompilerMetadata;
15
- extendedMetadata: ExtendedMetadata | undefined;
16
- };
13
+ export type FetchDeployMetadataResult = Partial<ExtendedMetadata> &
14
+ CompilerMetadata;
17
15
 
18
16
  /**
19
17
  * Fetches the deployment metadata.
@@ -24,31 +22,6 @@ export type FetchDeployMetadataResult = {
24
22
  export async function fetchDeployMetadata(
25
23
  options: FetchDeployMetadataOptions,
26
24
  ): Promise<FetchDeployMetadataResult> {
27
- const [compilerMetadata, extendedMetadata] = await Promise.all([
28
- fetchCompilerMetadata(options),
29
- fetchExtendedMetadata(options).catch(() => undefined),
30
- ]);
31
- return { compilerMetadata, extendedMetadata };
32
- }
33
-
34
- // helpers
35
- /**
36
- * Fetches the published metadata.
37
- * @param options - The options for fetching the published metadata.
38
- * @internal
39
- */
40
- async function fetchExtendedMetadata(
41
- options: FetchDeployMetadataOptions,
42
- ): Promise<ExtendedMetadata> {
43
- return download({
44
- uri: options.uri,
45
- client: options.client,
46
- }).then((r) => r.json());
47
- }
48
-
49
- async function fetchCompilerMetadata(
50
- options: FetchDeployMetadataOptions,
51
- ): Promise<CompilerMetadata> {
52
25
  const rawMeta: RawCompilerMetadata = await download({
53
26
  uri: options.uri,
54
27
  client: options.client,
@@ -144,11 +117,13 @@ export type ExtendedMetadata = {
144
117
  publisherAddress: string;
145
118
  }[]
146
119
  | undefined;
147
- defaultModules?: {
148
- moduleName: string;
149
- moduleVersion: string;
150
- publisherAddress: string;
151
- }[];
120
+ defaultModules?:
121
+ | Array<{
122
+ moduleName: string;
123
+ moduleVersion: string;
124
+ publisherAddress: string;
125
+ }>
126
+ | undefined;
152
127
  publisher?: string | undefined;
153
128
  audit?: string | undefined;
154
129
  logo?: string | undefined;
@@ -8,6 +8,8 @@ import {
8
8
  import { ANVIL_CHAIN } from "../../../test/src/chains.js";
9
9
  import { TEST_CLIENT } from "../../../test/src/test-clients.js";
10
10
  import {
11
+ BASE_USDC_IMPLEMENTATION,
12
+ BASE_USDC_PROXY_CONTRACT,
11
13
  NFT_DROP_CONTRACT,
12
14
  NFT_DROP_IMPLEMENTATION,
13
15
  POLYGON_USDT_IMPLEMENTATION,
@@ -31,6 +33,13 @@ describe("Resolve implementation", async () => {
31
33
  );
32
34
  });
33
35
 
36
+ it("should extract implementation address for base USDC proxy contract", async () => {
37
+ const resolved = resolveImplementation(BASE_USDC_PROXY_CONTRACT);
38
+ expect((await resolved).address).to.equal(
39
+ BASE_USDC_IMPLEMENTATION.toLowerCase(),
40
+ );
41
+ });
42
+
34
43
  it("should extract implementation address for ERC1967 proxy contract", async () => {
35
44
  const implementationAddress = await deployContract({
36
45
  client: TEST_CLIENT,
@@ -120,24 +120,32 @@ async function getImplementationFromStorageSlot(
120
120
  });
121
121
 
122
122
  try {
123
- let proxyStorage = "";
124
-
125
- proxyStorage = await eth_getStorageAt(rpcRequest, {
126
- address: contract.address,
127
- position:
128
- "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc",
129
- });
130
-
131
- if (proxyStorage === ZERO_BYTES32 && contract.chain.id === 137) {
132
- proxyStorage = await eth_getStorageAt(rpcRequest, {
123
+ const proxyStoragePromises = [
124
+ eth_getStorageAt(rpcRequest, {
125
+ address: contract.address,
126
+ position:
127
+ "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc",
128
+ }),
129
+ eth_getStorageAt(rpcRequest, {
133
130
  address: contract.address,
134
131
  position:
135
132
  // keccak256("matic.network.proxy.implementation") - used in polygon USDT proxy: https://polygonscan.com/address/0xc2132d05d31c914a87c6611c10748aeb04b58e8f#code
136
133
  "0xbaab7dbf64751104133af04abc7d9979f0fda3b059a322a8333f533d3f32bf7f",
137
- });
138
- }
134
+ }),
135
+ eth_getStorageAt(rpcRequest, {
136
+ address: contract.address,
137
+ position:
138
+ // keccak256("org.zeppelinos.proxy.implementation") - e.g. base USDC proxy: https://basescan.org/address/0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913#code
139
+ "0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3",
140
+ }),
141
+ ];
139
142
 
140
- return `0x${proxyStorage.slice(-40)}`;
143
+ const proxyStorages = await Promise.all(proxyStoragePromises);
144
+ const proxyStorage = proxyStorages.find(
145
+ (storage) => storage !== ZERO_BYTES32,
146
+ );
147
+
148
+ return proxyStorage ? `0x${proxyStorage.slice(-40)}` : AddressZero;
141
149
  } catch {
142
150
  return undefined;
143
151
  }
@@ -32,8 +32,8 @@ type DomainOverrides = {
32
32
  };
33
33
 
34
34
  export const DEFAULT_RPC_URL = "rpc.thirdweb.com";
35
- const DEFAULT_IN_APP_WALLET_URL = "embedded-wallet.thirdweb.com";
36
35
  const DEFAULT_SOCIAL_URL = "social.thirdweb.com";
36
+ const DEFAULT_IN_APP_WALLET_URL = "embedded-wallet.thirdweb.com";
37
37
  const DEFAULT_PAY_URL = "pay.thirdweb.com";
38
38
  const DEFAULT_STORAGE_URL = "storage.thirdweb.com";
39
39
  const DEFAULT_BUNDLER_URL = "bundler.thirdweb.com";
package/src/utils/ipfs.ts CHANGED
@@ -107,7 +107,9 @@ export async function uploadOrExtractURIs<
107
107
  * @throws If the batch contains URIs with different base URIs or if no base URI is found.
108
108
  * @internal
109
109
  */
110
- export function getBaseUriFromBatch(uris: string[]): string {
110
+ export function getBaseUriFromBatch(uris: string | string[]): string {
111
+ // biome-ignore lint/style/noParameterAssign: lemme do my stuff
112
+ uris = Array.isArray(uris) ? uris : [uris];
111
113
  const [base, ...rest] = uris.map((uri) => {
112
114
  // remove query parameters
113
115
  // biome-ignore lint/style/noParameterAssign: lemme do my stuff
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = "5.53.0-nightly-9d84aff26615b6a553ac002e7f51a0ed5172eb5d-20240909000344";
1
+ export const version = "5.53.1-nightly-865c5e3b16af70c3660f30ba8cffc5d6e360a389-20240911000352";
@@ -1,9 +1,5 @@
1
- import { configure, handleResponse } from "@coinbase/wallet-mobile-sdk";
2
1
  import type { ProviderInterface } from "@coinbase/wallet-sdk";
3
- import { Linking } from "react-native";
4
- import type { Chain } from "../../chains/types.js";
5
- import type { COINBASE } from "../constants.js";
6
- import type { CreateWalletArgs } from "../wallet-types.js";
2
+ import type { CoinbaseWalletCreationOptions } from "./coinbaseWebSDK.js";
7
3
 
8
4
  let _provider: ProviderInterface | undefined;
9
5
 
@@ -11,44 +7,78 @@ let _provider: ProviderInterface | undefined;
11
7
  * @internal
12
8
  */
13
9
  export async function getCoinbaseMobileProvider(
14
- options?: CreateWalletArgs<typeof COINBASE>[1],
10
+ options?: CoinbaseWalletCreationOptions,
15
11
  ): Promise<ProviderInterface> {
16
12
  if (!_provider) {
17
- const callbackURL = new URL(
18
- options?.mobileConfig?.callbackURL || "https://thirdweb.com/wsegue",
19
- );
20
- const mobileProvider: ProviderInterface = (await initMobileProvider({
21
- chain: options?.chains ? options.chains[0] : undefined,
22
- ...options?.mobileConfig,
23
- })) as unknown as ProviderInterface;
24
- _provider = mobileProvider;
25
- Linking.addEventListener("url", ({ url }) => {
26
- const incomingUrl = new URL(url);
27
- if (
28
- callbackURL &&
29
- incomingUrl.host === callbackURL.host &&
30
- incomingUrl.protocol === callbackURL.protocol &&
31
- incomingUrl.hostname === callbackURL.hostname
32
- ) {
13
+ // if explicitly set to smart wallet only, use the smart wallet provider
14
+ const useSmartWallet = options?.walletConfig?.options === "smartWalletOnly";
15
+ let mobileProvider: ProviderInterface;
16
+ if (useSmartWallet) {
17
+ mobileProvider = (await initSmartWalletProvider(
18
+ options,
19
+ )) as unknown as ProviderInterface;
20
+ const ExpoLinking = await import("expo-linking");
21
+ const { handleResponse } = await import("@mobile-wallet-protocol/client");
22
+ ExpoLinking.addEventListener("url", ({ url }) => {
23
+ handleResponse(url);
24
+ });
25
+ } else {
26
+ // otherwise, use the coinbase app provider
27
+ // TODO: remove this path once the new @mobile-wallet-protocol/client supports it
28
+ mobileProvider = (await initCoinbaseAppProvider(
29
+ options,
30
+ )) as unknown as ProviderInterface;
31
+ const ExpoLinking = await import("expo-linking");
32
+ const { handleResponse } = await import("@coinbase/wallet-mobile-sdk");
33
+ ExpoLinking.addEventListener("url", ({ url }) => {
33
34
  // @ts-expect-error - Passing a URL object to handleResponse crashes the function
34
35
  handleResponse(url);
35
- }
36
- });
36
+ });
37
+ }
38
+ _provider = mobileProvider;
37
39
  return mobileProvider;
38
40
  }
39
41
  return _provider;
40
42
  }
41
43
 
42
- async function initMobileProvider(args: {
43
- chain?: Chain;
44
- callbackURL?: string;
45
- hostURL?: string;
46
- hostPackageName?: string;
47
- }) {
44
+ async function initSmartWalletProvider(
45
+ options?: CoinbaseWalletCreationOptions,
46
+ ) {
47
+ const { EIP1193Provider, Wallets } = await import(
48
+ "@mobile-wallet-protocol/client"
49
+ );
50
+ const appDeeplinkUrl = options?.mobileConfig?.callbackURL;
51
+ if (!appDeeplinkUrl) {
52
+ throw new Error(
53
+ "callbackURL is required. Set it when creating the coinbase wallet. Ex: createWallet('com.coinbase.wallet', { mobileConfig: { callbackUrl: 'https://example.com' }}",
54
+ );
55
+ }
56
+ const sdk = new EIP1193Provider({
57
+ metadata: {
58
+ appName: options?.appMetadata?.name || "thirdweb powered app",
59
+ appChainIds: options?.chains?.map((c) => c.id),
60
+ appDeeplinkUrl,
61
+ appLogoUrl: options?.appMetadata?.logoUrl,
62
+ },
63
+ wallet: Wallets.CoinbaseSmartWallet, // TODO support both smart and EOA once the SDK supports it
64
+ });
65
+ return sdk;
66
+ }
67
+
68
+ async function initCoinbaseAppProvider(
69
+ options?: CoinbaseWalletCreationOptions,
70
+ ) {
71
+ const appDeeplinkUrl = options?.mobileConfig?.callbackURL;
72
+ if (!appDeeplinkUrl) {
73
+ throw new Error(
74
+ "callbackURL is required. Set it when creating the coinbase wallet. Ex: createWallet('com.coinbase.wallet', { mobileConfig: { callbackUrl: 'https://example.com' }}",
75
+ );
76
+ }
77
+ const { configure } = await import("@coinbase/wallet-mobile-sdk");
48
78
  configure({
49
- callbackURL: new URL(args.callbackURL || "https://thirdweb.com/wsegue"),
50
- hostURL: new URL(args.hostURL || "https://wallet.coinbase.com/wsegue"),
51
- hostPackageName: args.hostPackageName || "org.toshi",
79
+ callbackURL: new URL(appDeeplinkUrl),
80
+ hostURL: new URL("https://wallet.coinbase.com/wsegue"),
81
+ hostPackageName: "org.toshi",
52
82
  });
53
83
  let CoinbaseWalletMobileSDK = (
54
84
  await import(
@@ -67,8 +97,9 @@ async function initMobileProvider(args: {
67
97
  }
68
98
  ).default;
69
99
  }
100
+ const chain = options.chains?.[0];
70
101
  return new CoinbaseWalletMobileSDK({
71
- jsonRpcUrl: args.chain?.rpc,
72
- chainId: args.chain?.id,
102
+ jsonRpcUrl: chain?.rpc,
103
+ chainId: chain?.id,
73
104
  });
74
105
  }
@@ -295,7 +295,6 @@ function createAccount(provider: ProviderInterface, _address: string) {
295
295
  },
296
296
  ],
297
297
  })) as Hex;
298
-
299
298
  return {
300
299
  transactionHash,
301
300
  };