Compare commits
24
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4389083ca3 | ||
|
|
4961b597a0 | ||
|
|
7e044c664d | ||
|
|
498df5d69a | ||
|
|
b8d4930305 | ||
|
|
2c0bb07899 | ||
|
|
72ada47596 | ||
|
|
dc9eee735c | ||
|
|
b4aee9b591 | ||
|
|
b5c6eedb38 | ||
|
|
8672c8533c | ||
|
|
bb207473f8 | ||
|
|
10b3a717da | ||
|
|
aa81bedaf2 | ||
|
|
b4676e1b4e | ||
|
|
0135a7790c | ||
|
|
2d088d367c | ||
|
|
546353a479 | ||
|
|
9daf044926 | ||
|
|
7054f9f016 | ||
|
|
a3bb17cb33 | ||
|
|
d03645aefd | ||
|
|
53626f8100 | ||
|
|
8a389f1295 |
+7
-7
@@ -34,19 +34,19 @@
|
||||
"packageManager": "[email protected]",
|
||||
"dependencies": {
|
||||
"@changesets/changelog-github": "^0.4.8",
|
||||
"@changesets/cli": "^2.26.1",
|
||||
"@changesets/get-dependents-graph": "^1.3.5",
|
||||
"@changesets/get-release-plan": "^3.0.16",
|
||||
"@changesets/cli": "^2.26.2",
|
||||
"@changesets/get-dependents-graph": "^1.3.6",
|
||||
"@changesets/get-release-plan": "^3.0.17",
|
||||
"@changesets/parse": "^0.3.16",
|
||||
"@manypkg/cli": "^0.20.0",
|
||||
"@manypkg/get-packages": "^1.1.3",
|
||||
"@playwright/test": "1.31.2",
|
||||
"@trivago/prettier-plugin-sort-imports": "^4.1.1",
|
||||
"@types/node": "^18.15.11",
|
||||
"eslint": "^8.42.0",
|
||||
"@types/node": "^18.16.18",
|
||||
"eslint": "^8.43.0",
|
||||
"mocha": "^10.2.0",
|
||||
"prettier": "^2.8.7",
|
||||
"turbo": "^1.9.8",
|
||||
"prettier": "^2.8.8",
|
||||
"turbo": "^1.10.6",
|
||||
"yalc": "1.0.0-pre.53"
|
||||
},
|
||||
"manypkg": {
|
||||
|
||||
@@ -1,5 +1,21 @@
|
||||
# @thirdweb-dev/auth
|
||||
|
||||
## 3.2.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`10b3a717`](https://github.com/thirdweb-dev/js/commit/10b3a717da606632a05769ac821bdd21d6b63a03), [`b4aee9b5`](https://github.com/thirdweb-dev/js/commit/b4aee9b59121bab5f9b3d9b7ecdc4bcb4cd66f58)]:
|
||||
- @thirdweb-dev/wallets@1.0.5
|
||||
|
||||
## 3.2.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1278](https://github.com/thirdweb-dev/js/pull/1278) [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2) Thanks [@jnsdls](https://github.com/jnsdls)! - updated various dependencies
|
||||
|
||||
- Updated dependencies [[`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2)]:
|
||||
- @thirdweb-dev/wallets@1.0.4
|
||||
|
||||
## 3.2.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
+19
-19
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/auth",
|
||||
"version": "3.2.7",
|
||||
"version": "3.2.9",
|
||||
"main": "dist/thirdweb-dev-auth.cjs.js",
|
||||
"module": "dist/thirdweb-dev-auth.esm.js",
|
||||
"browser": {
|
||||
@@ -80,29 +80,29 @@
|
||||
}
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.19.3",
|
||||
"@babel/preset-env": "^7.18.10",
|
||||
"@babel/preset-typescript": "^7.18.6",
|
||||
"@microsoft/api-documenter": "^7.19.4",
|
||||
"@microsoft/api-extractor": "^7.29.2",
|
||||
"@babel/core": "^7.22.5",
|
||||
"@babel/preset-env": "^7.22.5",
|
||||
"@babel/preset-typescript": "^7.22.5",
|
||||
"@microsoft/api-documenter": "^7.22.21",
|
||||
"@microsoft/api-extractor": "^7.36.0",
|
||||
"@microsoft/tsdoc": "^0.14.1",
|
||||
"@preconstruct/cli": "^2.2.1",
|
||||
"@preconstruct/cli": "^2.7.0",
|
||||
"@solana/web3.js": "^1.62.0",
|
||||
"@swc-node/register": "^1.5.1",
|
||||
"@swc/core": "^1.3.23",
|
||||
"@swc-node/register": "^1.6.6",
|
||||
"@swc/core": "^1.3.67",
|
||||
"@thirdweb-dev/tsconfig": "workspace:*",
|
||||
"@types/chai": "^4.3.3",
|
||||
"@types/chai": "^4.3.5",
|
||||
"@types/cookie": "^0.5.1",
|
||||
"@types/cookie-parser": "^1.4.3",
|
||||
"@types/express": "^4.17.13",
|
||||
"@types/mocha": "^10.0.0",
|
||||
"@types/uuid": "^9.0.0",
|
||||
"@typescript-eslint/eslint-plugin": "^5.33.0",
|
||||
"@typescript-eslint/parser": "^5.33.0",
|
||||
"@types/uuid": "^9.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "^5.60.1",
|
||||
"@typescript-eslint/parser": "^5.60.1",
|
||||
"chai": "^4.3.6",
|
||||
"cookie-parser": "^1.4.6",
|
||||
"eslint": "^8.42.0",
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"eslint": "^8.43.0",
|
||||
"eslint-config-prettier": "^8.8.0",
|
||||
"eslint-config-thirdweb": "workspace:*",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"eslint-plugin-inclusive-language": "^2.2.0",
|
||||
@@ -111,10 +111,10 @@
|
||||
"ethers": "^5.7.2",
|
||||
"express": "^4.18.1",
|
||||
"mocha": "^10.2.0",
|
||||
"next": "^12.2.0",
|
||||
"next-auth": "^4.20.1",
|
||||
"prettier": "^2.7.1",
|
||||
"typescript": "^4.7.4"
|
||||
"next": "^12.3.4",
|
||||
"next-auth": "^4.22.1",
|
||||
"prettier": "^2.8.8",
|
||||
"typescript": "^5.1.6"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@solana/web3.js": "^1.73.0",
|
||||
|
||||
@@ -1,5 +1,23 @@
|
||||
# @thirdweb-dev/chains
|
||||
|
||||
## 0.1.28
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1299](https://github.com/thirdweb-dev/js/pull/1299) [`7e044c66`](https://github.com/thirdweb-dev/js/commit/7e044c664d8a034f5324b859ac3596860c86f9a5) Thanks [@nkrishang](https://github.com/nkrishang)! - Add ERC721LoyaltyCard and ERC721UpdatableMetadata
|
||||
|
||||
- [#1297](https://github.com/thirdweb-dev/js/pull/1297) [`b5c6eedb`](https://github.com/thirdweb-dev/js/commit/b5c6eedb38aa3c52eb97f3d25ad83e38c55afe61) Thanks [@0xFirekeeper](https://github.com/0xFirekeeper)! - add zksync as default chain
|
||||
|
||||
- [#1309](https://github.com/thirdweb-dev/js/pull/1309) [`4961b597`](https://github.com/thirdweb-dev/js/commit/4961b597a098dae0a4eff01a9ef268a65fe1a352) Thanks [@jnsdls](https://github.com/jnsdls)! - unblock storage domains
|
||||
|
||||
## 0.1.27
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1278](https://github.com/thirdweb-dev/js/pull/1278) [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2) Thanks [@jnsdls](https://github.com/jnsdls)! - updated various dependencies
|
||||
|
||||
- [#1281](https://github.com/thirdweb-dev/js/pull/1281) [`a3bb17cb`](https://github.com/thirdweb-dev/js/commit/a3bb17cb33f033846fb3b4c8a0a4809ba76cab96) Thanks [@nkrishang](https://github.com/nkrishang)! - Handle ERC4337Signer correctly for signTypedData
|
||||
|
||||
## 0.1.26
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"name": "Mintara Testnet",
|
||||
"title": "Mintara Testnet",
|
||||
"chain": "Mintara",
|
||||
"icon": {
|
||||
"url": "ipfs://bafybeie7jzlzlpz7c3a3oh4x5joej23dj2qf3cexmchjyc72hv3fblcaja",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "png"
|
||||
},
|
||||
"rpc": [
|
||||
"https://mintara-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/mintara/testnet/rpc"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "MINTARA",
|
||||
"symbol": "MNTR",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://playthink.co.jp",
|
||||
"shortName": "mintara-testnet",
|
||||
"chainId": 1079,
|
||||
"networkId": 1079,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "explorer",
|
||||
"url": "https://subnets-test.avax.network/mintara",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": true,
|
||||
"slug": "mintara-testnet"
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,41 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"name": "Metachain One Mainnet",
|
||||
"chain": "METAO",
|
||||
"icon": {
|
||||
"url": "ipfs://QmTmo2QAtX5PbhX96vewnvH4Vc5H83Ft2DJGi6tAqTcFij",
|
||||
"width": 1000,
|
||||
"height": 981,
|
||||
"format": "png"
|
||||
},
|
||||
"rpc": [
|
||||
"https://metachain-one.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.metachain.one",
|
||||
"https://rpc2.metachain.one"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Metao",
|
||||
"symbol": "METAO",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://metachain.one",
|
||||
"shortName": "metao",
|
||||
"chainId": 112358,
|
||||
"networkId": 112358,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://explorer.metachain.one",
|
||||
"icon": {
|
||||
"url": "ipfs://bafybeifu5tpui7dk5cjoo54kde7pmuthvnl7sdykobuarsxgu7t2izurnq",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
},
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "metachain-one"
|
||||
} as const satisfies Chain;
|
||||
@@ -1,8 +1,8 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"name": "Taro Testnet",
|
||||
"name": "Bubs Testnet",
|
||||
"chain": "gETH",
|
||||
"shortName": "Taro",
|
||||
"shortName": "Bubs",
|
||||
"chainId": 1582,
|
||||
"testnet": true,
|
||||
"icon": {
|
||||
@@ -12,8 +12,8 @@ export default {
|
||||
"height": 512
|
||||
},
|
||||
"rpc": [
|
||||
"https://taro-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://taro-testnet.calderachain.xyz/http"
|
||||
"https://bubs-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://bubs.calderachain.xyz/http"
|
||||
],
|
||||
"nativeCurrency": {
|
||||
"decimals": 18,
|
||||
@@ -22,15 +22,15 @@ export default {
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"url": "https://explorer.tarotestnet.com",
|
||||
"name": "Taro Testnet Explorer",
|
||||
"url": "https://explorer.bubstestnet.com",
|
||||
"name": "Bubs Testnet Explorer",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [
|
||||
"https://tarotestnet.com"
|
||||
"https://bubstestnet.com"
|
||||
],
|
||||
"infoURL": "https://tarotestnet.com",
|
||||
"infoURL": "https://bubstestnet.com",
|
||||
"networkId": 1582,
|
||||
"slug": "taro-testnet"
|
||||
"slug": "bubs-testnet"
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,44 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"name": "Moonsama Network",
|
||||
"chain": "MSN",
|
||||
"rpc": [
|
||||
"https://moonsama-network.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.moonsama.com",
|
||||
"wss://rpc.moonsama.com/ws"
|
||||
],
|
||||
"faucets": [
|
||||
"https://multiverse.moonsama.com/faucet"
|
||||
],
|
||||
"nativeCurrency": {
|
||||
"name": "Sama Token",
|
||||
"symbol": "SAMA",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://moonsama.com",
|
||||
"shortName": "msn",
|
||||
"chainId": 2199,
|
||||
"networkId": 2199,
|
||||
"slip44": 2199,
|
||||
"icon": {
|
||||
"url": "ipfs://QmaQxfwpXYTomUd24PMx5tKjosupXcm99z1jL1XLq9LWBS",
|
||||
"width": 468,
|
||||
"height": 468,
|
||||
"format": "png"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://explorer.moonsama.com",
|
||||
"icon": {
|
||||
"url": "ipfs://bafybeifu5tpui7dk5cjoo54kde7pmuthvnl7sdykobuarsxgu7t2izurnq",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
},
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "moonsama-network"
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,36 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"name": "Plinga Mainnet",
|
||||
"chain": "Plinga",
|
||||
"icon": {
|
||||
"url": "ipfs://bafybeibpvlod5nyev6wyuvp6pbestmgvru3ovbadsul32odpno26xwld6y",
|
||||
"width": 1039,
|
||||
"height": 1022,
|
||||
"format": "svg"
|
||||
},
|
||||
"rpc": [
|
||||
"https://plinga.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpcurl.mainnet.plgchain.com",
|
||||
"https://rpcurl.plgchain.blockchain.evmnode.online",
|
||||
"https://rpcurl.mainnet.plgchain.plinga.technology"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Plinga",
|
||||
"symbol": "PLINGA",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.plinga.technology/",
|
||||
"shortName": "plgchain",
|
||||
"chainId": 242,
|
||||
"networkId": 242,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "plgscan",
|
||||
"url": "https://www.plgscan.com",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "plinga"
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,36 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"name": "Botanix Testnet",
|
||||
"chain": "BTC",
|
||||
"icon": {
|
||||
"url": "ipfs://Qmf2iSjcrZwUDKhCVY9ZzfbSV2He2HSssbcG2yMz1mDerm",
|
||||
"width": 32,
|
||||
"height": 32,
|
||||
"format": "png"
|
||||
},
|
||||
"rpc": [
|
||||
"https://botanix-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://testnet-rpc.btxtestchain.com"
|
||||
],
|
||||
"faucets": [
|
||||
"https://faucet.btxtestchain.com"
|
||||
],
|
||||
"nativeCurrency": {
|
||||
"name": "Botanix",
|
||||
"symbol": "BTC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://btxtestchain.com",
|
||||
"shortName": "BTCt",
|
||||
"chainId": 3636,
|
||||
"networkId": 3636,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Botanix",
|
||||
"url": "https://testnet.btxtestchain.com",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": true,
|
||||
"slug": "botanix-testnet"
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,36 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"name": "Botanix Mainnet",
|
||||
"chain": "BTC",
|
||||
"icon": {
|
||||
"url": "ipfs://Qmf2iSjcrZwUDKhCVY9ZzfbSV2He2HSssbcG2yMz1mDerm",
|
||||
"width": 32,
|
||||
"height": 32,
|
||||
"format": "png"
|
||||
},
|
||||
"rpc": [
|
||||
"https://botanix.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.btxtestchain.com"
|
||||
],
|
||||
"faucets": [
|
||||
"https://faucet.btxtestchain.com"
|
||||
],
|
||||
"nativeCurrency": {
|
||||
"name": "Botanix",
|
||||
"symbol": "BTC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://btxtestchain.com",
|
||||
"shortName": "BTCm",
|
||||
"chainId": 3637,
|
||||
"networkId": 3637,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Botanix",
|
||||
"url": "https://btxtestchain.com",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": true,
|
||||
"slug": "botanix"
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,48 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"name": "AltLayer Zero Gas Network",
|
||||
"chain": "ETH",
|
||||
"rpc": [
|
||||
"https://altlayer-zero-gas-network.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://zero.alt.technology"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "ZERO",
|
||||
"symbol": "ZERO",
|
||||
"decimals": 18
|
||||
},
|
||||
"features": [
|
||||
{
|
||||
"name": "EIP155"
|
||||
},
|
||||
{
|
||||
"name": "EIP1559"
|
||||
}
|
||||
],
|
||||
"infoURL": "https://altlayer.io",
|
||||
"shortName": "alt-zerogas",
|
||||
"chainId": 4000003,
|
||||
"networkId": 4000003,
|
||||
"icon": {
|
||||
"url": "ipfs://QmcEfZJU7NMn9ycTAcEooQgGNfa2nYBToSUZHdFCFadcjb",
|
||||
"width": 1080,
|
||||
"height": 1025,
|
||||
"format": "png"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://zero-explorer.alt.technology",
|
||||
"icon": {
|
||||
"url": "ipfs://bafybeifu5tpui7dk5cjoo54kde7pmuthvnl7sdykobuarsxgu7t2izurnq",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
},
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "altlayer-zero-gas-network"
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,40 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"name": "MEVerse Chain Testnet",
|
||||
"chain": "MEVerse",
|
||||
"rpc": [
|
||||
"https://meverse-chain-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.meversetestnet.io"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "MEVerse",
|
||||
"symbol": "MEV",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.meverse.sg",
|
||||
"shortName": "TESTMEV",
|
||||
"chainId": 4759,
|
||||
"networkId": 4759,
|
||||
"icon": {
|
||||
"url": "ipfs://QmPuQ6gaCfUtNdRuaEDbdhot2m2KCy2ZHCJUvZXJAtdeyJ",
|
||||
"width": 800,
|
||||
"height": 800,
|
||||
"format": "png"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "MEVerse Chain Testnet Explorer",
|
||||
"url": "https://testnet.meversescan.io",
|
||||
"standard": "none",
|
||||
"icon": {
|
||||
"url": "ipfs://QmPuQ6gaCfUtNdRuaEDbdhot2m2KCy2ZHCJUvZXJAtdeyJ",
|
||||
"width": 800,
|
||||
"height": 800,
|
||||
"format": "png"
|
||||
}
|
||||
}
|
||||
],
|
||||
"testnet": true,
|
||||
"slug": "meverse-chain-testnet"
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"name": "Shinarium Beta",
|
||||
"chain": "Shinarium",
|
||||
"rpc": [
|
||||
"https://shinarium-beta.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.shinarium.org"
|
||||
],
|
||||
"faucets": [
|
||||
"https://faucet.shinarium.org"
|
||||
],
|
||||
"nativeCurrency": {
|
||||
"name": "Shina Inu",
|
||||
"symbol": "SHI",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://shinarium.org",
|
||||
"shortName": "shi",
|
||||
"chainId": 534849,
|
||||
"networkId": 534849,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "shinascan",
|
||||
"url": "https://shinascan.shinarium.org",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "shinarium-beta"
|
||||
} as const satisfies Chain;
|
||||
@@ -5,6 +5,7 @@ export default {
|
||||
"rpc": [
|
||||
"https://rollux.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.rollux.com",
|
||||
"https://rollux.public-rpc.com",
|
||||
"wss://rpc.rollux.com/wss",
|
||||
"https://rpc.ankr.com/rollux/${ANKR_API_KEY}"
|
||||
],
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"name": "Cascadia Testnet",
|
||||
"chain": "Cascadia",
|
||||
"rpc": [
|
||||
"https://cascadia-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://testnet.cascadia.foundation"
|
||||
],
|
||||
"faucets": [
|
||||
"https://www.cascadia.foundation/faucet"
|
||||
],
|
||||
"nativeCurrency": {
|
||||
"name": "CC",
|
||||
"symbol": "tCC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.cascadia.foundation",
|
||||
"shortName": "cascadia",
|
||||
"chainId": 6102,
|
||||
"networkId": 6102,
|
||||
"icon": {
|
||||
"url": "ipfs://QmQtcwxNiJ9D1QDz4k6jZ7qacLcqMk6CeW85TTBWBvNp3z",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "png"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Cascadia EVM Explorer",
|
||||
"url": "https://explorer.cascadia.foundation",
|
||||
"standard": "none",
|
||||
"icon": {
|
||||
"url": "ipfs://QmQtcwxNiJ9D1QDz4k6jZ7qacLcqMk6CeW85TTBWBvNp3z",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "png"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Cascadia Cosmos Explorer",
|
||||
"url": "https://validator.cascadia.foundation",
|
||||
"standard": "none",
|
||||
"icon": {
|
||||
"url": "ipfs://QmQtcwxNiJ9D1QDz4k6jZ7qacLcqMk6CeW85TTBWBvNp3z",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "png"
|
||||
}
|
||||
}
|
||||
],
|
||||
"testnet": true,
|
||||
"slug": "cascadia-testnet"
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,40 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"name": "Avocado",
|
||||
"chain": "Avocado",
|
||||
"rpc": [
|
||||
"https://avocado.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.avocado.instadapp.io"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "USDC",
|
||||
"symbol": "USDC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://avocado.instadapp.io",
|
||||
"shortName": "avocado",
|
||||
"chainId": 634,
|
||||
"networkId": 634,
|
||||
"icon": {
|
||||
"url": "ipfs://Qma9rJSgy32UL1iXtXKFZQJA6FjkcUcDU4HR6y13Wu1vjn",
|
||||
"width": 600,
|
||||
"height": 600,
|
||||
"format": "png"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "avoscan",
|
||||
"url": "https://avoscan.co",
|
||||
"icon": {
|
||||
"url": "ipfs://Qma9rJSgy32UL1iXtXKFZQJA6FjkcUcDU4HR6y13Wu1vjn",
|
||||
"width": 600,
|
||||
"height": 600,
|
||||
"format": "png"
|
||||
},
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "avocado"
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,34 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"name": "ALL Mainnet",
|
||||
"chain": "ALL",
|
||||
"icon": {
|
||||
"url": "ipfs://bafkreibqe2mgiqezi24sx272kunqt6pv7uzxhpkxuobvpbsptce3q6nn5i",
|
||||
"width": 1000,
|
||||
"height": 1000,
|
||||
"format": "png"
|
||||
},
|
||||
"rpc": [
|
||||
"https://all.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://mainnet-rpc.alltra.global"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "ALL",
|
||||
"symbol": "ALL",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://alltra.world",
|
||||
"shortName": "ALL",
|
||||
"chainId": 651940,
|
||||
"networkId": 651940,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Alltra SmartChain Explorer",
|
||||
"url": "https://alltra.global",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "all"
|
||||
} as const satisfies Chain;
|
||||
@@ -10,8 +10,7 @@ export default {
|
||||
},
|
||||
"rpc": [
|
||||
"https://zetachain-athens-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://zetachain-athens-evm.blockpi.network/v1/rpc/public",
|
||||
"wss://zetachain-athens.blockpi.network/rpc/v1/public/websocket"
|
||||
"https://api.athens2.zetachain.com/evm"
|
||||
],
|
||||
"faucets": [
|
||||
"https://labs.zetachain.com/get-zeta"
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"name": "MEVerse Chain Mainnet",
|
||||
"chain": "MEVerse",
|
||||
"rpc": [
|
||||
"https://meverse-chain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.meversemainnet.io"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "MEVerse",
|
||||
"symbol": "MEV",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.meverse.sg",
|
||||
"shortName": "MEV",
|
||||
"chainId": 7518,
|
||||
"networkId": 7518,
|
||||
"icon": {
|
||||
"url": "ipfs://QmPuQ6gaCfUtNdRuaEDbdhot2m2KCy2ZHCJUvZXJAtdeyJ",
|
||||
"width": 800,
|
||||
"height": 800,
|
||||
"format": "png"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "MEVerse Chain Explorer",
|
||||
"url": "https://www.meversescan.io",
|
||||
"standard": "none",
|
||||
"icon": {
|
||||
"url": "ipfs://QmPuQ6gaCfUtNdRuaEDbdhot2m2KCy2ZHCJUvZXJAtdeyJ",
|
||||
"width": 800,
|
||||
"height": 800,
|
||||
"format": "png"
|
||||
}
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "meverse-chain"
|
||||
} as const satisfies Chain;
|
||||
@@ -26,19 +26,8 @@ export default {
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Evmos EVM Explorer",
|
||||
"url": "https://evm.evmos.dev",
|
||||
"standard": "EIP3091",
|
||||
"icon": {
|
||||
"url": "ipfs://QmeZW6VKUFTbz7PPW8PmDR3ZHa6osYPLBFPnW8T5LSU49c",
|
||||
"width": 400,
|
||||
"height": 400,
|
||||
"format": "png"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Evmos Cosmos Explorer",
|
||||
"url": "https://explorer.evmos.dev",
|
||||
"name": "Evmos Explorer (Escan)",
|
||||
"url": "https://testnet.escan.live",
|
||||
"standard": "none",
|
||||
"icon": {
|
||||
"url": "ipfs://QmeZW6VKUFTbz7PPW8PmDR3ZHa6osYPLBFPnW8T5LSU49c",
|
||||
|
||||
@@ -4,7 +4,6 @@ export default {
|
||||
"chain": "Evmos",
|
||||
"rpc": [
|
||||
"https://evmos.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://eth.bd.evmos.org:8545",
|
||||
"https://evmos-evm.publicnode.com"
|
||||
],
|
||||
"faucets": [],
|
||||
@@ -25,7 +24,7 @@ export default {
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Evmos EVM Explorer (Escan)",
|
||||
"name": "Evmos Explorer (Escan)",
|
||||
"url": "https://escan.live",
|
||||
"standard": "none",
|
||||
"icon": {
|
||||
@@ -34,17 +33,6 @@ export default {
|
||||
"height": 400,
|
||||
"format": "png"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Evmos Cosmos Explorer (Mintscan)",
|
||||
"url": "https://www.mintscan.io/evmos",
|
||||
"standard": "none",
|
||||
"icon": {
|
||||
"url": "ipfs://QmeZW6VKUFTbz7PPW8PmDR3ZHa6osYPLBFPnW8T5LSU49c",
|
||||
"width": 400,
|
||||
"height": 400,
|
||||
"format": "png"
|
||||
}
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
|
||||
/** @type {Omit<Chain, "slug">} */
|
||||
export default {
|
||||
name: "Taro Testnet",
|
||||
name: "Bubs Testnet",
|
||||
chain: "gETH",
|
||||
shortName: "Taro",
|
||||
shortName: "Bubs",
|
||||
chainId: 1582,
|
||||
testnet: true,
|
||||
icon: {
|
||||
@@ -14,7 +14,7 @@ export default {
|
||||
width: 512,
|
||||
height: 512,
|
||||
},
|
||||
rpc: ["https://taro-testnet.calderachain.xyz/http"],
|
||||
rpc: ["https://bubs.calderachain.xyz/http"],
|
||||
nativeCurrency: {
|
||||
decimals: 18,
|
||||
name: "Ether",
|
||||
@@ -22,12 +22,12 @@ export default {
|
||||
},
|
||||
explorers: [
|
||||
{
|
||||
url: "https://explorer.tarotestnet.com",
|
||||
name: "Taro Testnet Explorer",
|
||||
url: "https://explorer.bubstestnet.com",
|
||||
name: "Bubs Testnet Explorer",
|
||||
standard: "EIP3091",
|
||||
},
|
||||
],
|
||||
faucets: ["https://tarotestnet.com"],
|
||||
infoURL: "https://tarotestnet.com",
|
||||
faucets: ["https://bubstestnet.com"],
|
||||
infoURL: "https://bubstestnet.com",
|
||||
networkId: 1582,
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/chains",
|
||||
"version": "0.1.26",
|
||||
"version": "0.1.28",
|
||||
"main": "dist/thirdweb-dev-chains.cjs.js",
|
||||
"module": "dist/thirdweb-dev-chains.esm.js",
|
||||
"browser": {
|
||||
@@ -23,18 +23,18 @@
|
||||
},
|
||||
"author": "thirdweb eng <[email protected]>",
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.19.3",
|
||||
"@babel/preset-env": "^7.18.10",
|
||||
"@babel/preset-typescript": "^7.18.6",
|
||||
"@babel/runtime": "^7.19.0",
|
||||
"@preconstruct/cli": "^2.2.1",
|
||||
"@babel/core": "^7.22.5",
|
||||
"@babel/preset-env": "^7.22.5",
|
||||
"@babel/preset-typescript": "^7.22.5",
|
||||
"@babel/runtime": "^7.22.5",
|
||||
"@preconstruct/cli": "^2.7.0",
|
||||
"@thirdweb-dev/tsconfig": "workspace:*",
|
||||
"axios": "^1.3.4",
|
||||
"deepmerge": "^4.3.0",
|
||||
"axios": "^1.4.0",
|
||||
"deepmerge": "^4.3.1",
|
||||
"eslint-config-thirdweb": "workspace:*",
|
||||
"jest": "^29.4.3",
|
||||
"plop": "^3.1.2",
|
||||
"typescript": "^4.7.4"
|
||||
"typescript": "^5.1.6"
|
||||
},
|
||||
"preconstruct": {
|
||||
"entrypoints": [
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,5 +1,27 @@
|
||||
# thirdweb
|
||||
|
||||
## 0.10.30
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`7e044c66`](https://github.com/thirdweb-dev/js/commit/7e044c664d8a034f5324b859ac3596860c86f9a5), [`72ada475`](https://github.com/thirdweb-dev/js/commit/72ada47596d5d5c08736c33215faeec636b7156a), [`2c0bb078`](https://github.com/thirdweb-dev/js/commit/2c0bb0789955f6cd397b6fdb8e990a505251c631), [`b5c6eedb`](https://github.com/thirdweb-dev/js/commit/b5c6eedb38aa3c52eb97f3d25ad83e38c55afe61), [`4961b597`](https://github.com/thirdweb-dev/js/commit/4961b597a098dae0a4eff01a9ef268a65fe1a352)]:
|
||||
- @thirdweb-dev/chains@0.1.28
|
||||
- @thirdweb-dev/sdk@3.10.29
|
||||
- @thirdweb-dev/storage@1.1.7
|
||||
|
||||
## 0.10.29
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1280](https://github.com/thirdweb-dev/js/pull/1280) [`53626f81`](https://github.com/thirdweb-dev/js/commit/53626f8100f400c46333617b14bd9fc144a7e801) Thanks [@Marfuen](https://github.com/Marfuen)! - Don't rely on package.json to export app
|
||||
|
||||
- [#1278](https://github.com/thirdweb-dev/js/pull/1278) [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2) Thanks [@jnsdls](https://github.com/jnsdls)! - updated various dependencies
|
||||
|
||||
- Updated dependencies [[`2d088d36`](https://github.com/thirdweb-dev/js/commit/2d088d367ca54233836dc69712fd411ab7924205), [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2), [`9daf0449`](https://github.com/thirdweb-dev/js/commit/9daf044926bf995ac8998929dbeca548c5eb8561), [`546353a4`](https://github.com/thirdweb-dev/js/commit/546353a479c11533818ef917c0f6b4d6f8f69872), [`a3bb17cb`](https://github.com/thirdweb-dev/js/commit/a3bb17cb33f033846fb3b4c8a0a4809ba76cab96), [`0135a779`](https://github.com/thirdweb-dev/js/commit/0135a7790cf2acde6b701cb41ea10dd311da5ec3)]:
|
||||
- @thirdweb-dev/storage@1.1.6
|
||||
- @thirdweb-dev/chains@0.1.27
|
||||
- @thirdweb-dev/sdk@3.10.28
|
||||
|
||||
## 0.10.28
|
||||
|
||||
### Patch Changes
|
||||
|
||||
+15
-15
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "thirdweb",
|
||||
"main": "dist/cli/index.js",
|
||||
"version": "0.10.28",
|
||||
"version": "0.10.30",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/cli",
|
||||
"author": "thirdweb eng <[email protected]>",
|
||||
"license": "Apache-2.0",
|
||||
@@ -14,25 +14,25 @@
|
||||
"@types/async-retry": "^1.3.0",
|
||||
"@types/cross-spawn": "^6.0.2",
|
||||
"@types/inquirer": "^8.2.1",
|
||||
"@types/jest": "^29.2.1",
|
||||
"@types/jest": "^29.5.2",
|
||||
"@types/js-yaml": "^4.0.5",
|
||||
"@types/node": "^18.0.0",
|
||||
"@types/prompts": "^2.0.14",
|
||||
"@types/node": "^18.16.18",
|
||||
"@types/prompts": "^2.4.4",
|
||||
"@types/rimraf": "^3.0.0",
|
||||
"@types/tar": "^6.1.2",
|
||||
"@types/update-notifier": "^6.0.1",
|
||||
"@types/tar": "^6.1.5",
|
||||
"@types/update-notifier": "^6.0.4",
|
||||
"@types/validate-npm-package-name": "^4.0.0",
|
||||
"chalk": "^5.2.0",
|
||||
"chalk": "^5.3.0",
|
||||
"cross-spawn": "^7.0.3",
|
||||
"eslint-config-thirdweb": "workspace:*",
|
||||
"hardhat": "^2.9.3",
|
||||
"hardhat": "^2.16.1",
|
||||
"jest": "^29.4.3",
|
||||
"ora": "^6.1.2",
|
||||
"prettier": "^2.7.1",
|
||||
"ts-jest": "^29.0.3",
|
||||
"ora": "^6.3.1",
|
||||
"prettier": "^2.8.8",
|
||||
"ts-jest": "^29.1.0",
|
||||
"ts-node": "^10.7.0",
|
||||
"tsup": "^6.2.3",
|
||||
"typescript": "^4.7.4"
|
||||
"tsup": "^6.7.0",
|
||||
"typescript": "^5.1.6"
|
||||
},
|
||||
"dependencies": {
|
||||
"@iarna/toml": "^2.2.5",
|
||||
@@ -53,10 +53,10 @@
|
||||
"rimraf": "^3.0.2",
|
||||
"solc": "0.8.17",
|
||||
"sync-disk-cache": "^2.1.0",
|
||||
"tar": "^6.1.11",
|
||||
"tar": "^6.1.15",
|
||||
"update-notifier": "^6.0.2",
|
||||
"validate-npm-package-name": "^4.0.0",
|
||||
"yaml": "^2.1.1"
|
||||
"yaml": "^2.3.1"
|
||||
},
|
||||
"bin": {
|
||||
"thirdweb": "./dist/cli/index.js"
|
||||
|
||||
@@ -35,19 +35,19 @@ export async function deployApp(distPath = "dist", projectPath = ".") {
|
||||
case "yarn":
|
||||
await runCommand("yarn", ["build"], true);
|
||||
if (detectedFramework === "next") {
|
||||
await runCommand("yarn", ["export"], true);
|
||||
await runCommand("yarn", ["next", "export"], true);
|
||||
}
|
||||
break;
|
||||
case "npm":
|
||||
await runCommand("npm", ["run", "build"], true);
|
||||
if (detectedFramework === "next") {
|
||||
await runCommand("npm", ["run", "export"], true);
|
||||
await runCommand("npx", ["next", "export"], true);
|
||||
}
|
||||
break;
|
||||
case "pnpm":
|
||||
await runCommand("pnpm", ["build"], true);
|
||||
if (detectedFramework === "next") {
|
||||
await runCommand("pnpm", ["export"], true);
|
||||
await runCommand("pnpm", ["next", "export"], true);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
# @thirdweb-dev/contracts-js
|
||||
|
||||
## 1.3.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1299](https://github.com/thirdweb-dev/js/pull/1299) [`7e044c66`](https://github.com/thirdweb-dev/js/commit/7e044c664d8a034f5324b859ac3596860c86f9a5) Thanks [@nkrishang](https://github.com/nkrishang)! - Add ERC721LoyaltyCard and ERC721UpdatableMetadata
|
||||
|
||||
## 1.3.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1278](https://github.com/thirdweb-dev/js/pull/1278) [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2) Thanks [@jnsdls](https://github.com/jnsdls)! - updated various dependencies
|
||||
|
||||
## 1.3.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/contracts-js",
|
||||
"version": "1.3.7",
|
||||
"version": "1.3.9",
|
||||
"main": "dist/thirdweb-dev-contracts-js.cjs.js",
|
||||
"module": "dist/thirdweb-dev-contracts-js.esm.js",
|
||||
"browser": {
|
||||
@@ -10,20 +10,20 @@
|
||||
"license": "Apache-2.0",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/contracts-js",
|
||||
"dependencies": {
|
||||
"@thirdweb-dev/contracts": "3.5.9"
|
||||
"@thirdweb-dev/contracts": "3.6.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/preset-env": "^7.18.10",
|
||||
"@babel/preset-typescript": "^7.18.6",
|
||||
"@babel/preset-env": "^7.22.5",
|
||||
"@babel/preset-typescript": "^7.22.5",
|
||||
"@ethersproject/abi": "^5.7.0",
|
||||
"@ethersproject/providers": "^5.7.2",
|
||||
"@preconstruct/cli": "^2.2.1",
|
||||
"@preconstruct/cli": "^2.7.0",
|
||||
"@thirdweb-dev/tsconfig": "workspace:*",
|
||||
"@typechain/ethers-v5": "10.0.0",
|
||||
"eslint-config-thirdweb": "workspace:*",
|
||||
"ethers": "^5.7.2",
|
||||
"typechain": "^8.1.0",
|
||||
"typescript": "^4.7.4"
|
||||
"typechain": "^8.2.0",
|
||||
"typescript": "^5.1.6"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"ethers": "^5"
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# eslint-config-thirdweb
|
||||
|
||||
## 0.1.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1278](https://github.com/thirdweb-dev/js/pull/1278) [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2) Thanks [@jnsdls](https://github.com/jnsdls)! - updated various dependencies
|
||||
|
||||
## 0.1.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"name": "eslint-config-thirdweb",
|
||||
"version": "0.1.4",
|
||||
"version": "0.1.5",
|
||||
"main": "index.js",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@typescript-eslint/eslint-plugin": "^5.33.0",
|
||||
"@typescript-eslint/parser": "^5.33.0",
|
||||
"@typescript-eslint/eslint-plugin": "^5.60.1",
|
||||
"@typescript-eslint/parser": "^5.60.1",
|
||||
"eslint-config-next": "13.2.4",
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"eslint-config-prettier": "^8.8.0",
|
||||
"eslint-config-turbo": "^0.0.8",
|
||||
"eslint-plugin-react": "^7.28.0"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# @thirdweb-dev/pay
|
||||
|
||||
## 0.1.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1278](https://github.com/thirdweb-dev/js/pull/1278) [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2) Thanks [@jnsdls](https://github.com/jnsdls)! - updated various dependencies
|
||||
|
||||
## 0.1.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/pay",
|
||||
"version": "0.1.1",
|
||||
"version": "0.1.2",
|
||||
"main": "dist/thirdweb-dev-pay.cjs.js",
|
||||
"module": "dist/thirdweb-dev-pay.esm.js",
|
||||
"exports": {
|
||||
@@ -33,13 +33,13 @@
|
||||
},
|
||||
"sideEffects": false,
|
||||
"dependencies": {
|
||||
"@coinbase/cbpay-js": "^1.6.0"
|
||||
"@coinbase/cbpay-js": "^1.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@preconstruct/cli": "^2.2.1",
|
||||
"typescript": "^4.7.4",
|
||||
"@preconstruct/cli": "^2.7.0",
|
||||
"@thirdweb-dev/tsconfig": "workspace:*",
|
||||
"eslint-config-thirdweb": "workspace:*",
|
||||
"@thirdweb-dev/tsconfig": "workspace:*"
|
||||
"typescript": "^5.1.6"
|
||||
},
|
||||
"scripts": {
|
||||
"format": "prettier --write 'src/**/*'",
|
||||
|
||||
@@ -1,5 +1,29 @@
|
||||
# @thirdweb-dev/react-core
|
||||
|
||||
## 3.14.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1309](https://github.com/thirdweb-dev/js/pull/1309) [`4961b597`](https://github.com/thirdweb-dev/js/commit/4961b597a098dae0a4eff01a9ef268a65fe1a352) Thanks [@jnsdls](https://github.com/jnsdls)! - unblock storage domains
|
||||
|
||||
- Updated dependencies [[`7e044c66`](https://github.com/thirdweb-dev/js/commit/7e044c664d8a034f5324b859ac3596860c86f9a5), [`72ada475`](https://github.com/thirdweb-dev/js/commit/72ada47596d5d5c08736c33215faeec636b7156a), [`2c0bb078`](https://github.com/thirdweb-dev/js/commit/2c0bb0789955f6cd397b6fdb8e990a505251c631), [`b5c6eedb`](https://github.com/thirdweb-dev/js/commit/b5c6eedb38aa3c52eb97f3d25ad83e38c55afe61), [`10b3a717`](https://github.com/thirdweb-dev/js/commit/10b3a717da606632a05769ac821bdd21d6b63a03), [`b4aee9b5`](https://github.com/thirdweb-dev/js/commit/b4aee9b59121bab5f9b3d9b7ecdc4bcb4cd66f58), [`4961b597`](https://github.com/thirdweb-dev/js/commit/4961b597a098dae0a4eff01a9ef268a65fe1a352)]:
|
||||
- @thirdweb-dev/chains@0.1.28
|
||||
- @thirdweb-dev/sdk@3.10.29
|
||||
- @thirdweb-dev/wallets@1.0.5
|
||||
- @thirdweb-dev/storage@1.1.7
|
||||
|
||||
## 3.14.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1278](https://github.com/thirdweb-dev/js/pull/1278) [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2) Thanks [@jnsdls](https://github.com/jnsdls)! - updated various dependencies
|
||||
|
||||
- Updated dependencies [[`2d088d36`](https://github.com/thirdweb-dev/js/commit/2d088d367ca54233836dc69712fd411ab7924205), [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2), [`9daf0449`](https://github.com/thirdweb-dev/js/commit/9daf044926bf995ac8998929dbeca548c5eb8561), [`546353a4`](https://github.com/thirdweb-dev/js/commit/546353a479c11533818ef917c0f6b4d6f8f69872), [`a3bb17cb`](https://github.com/thirdweb-dev/js/commit/a3bb17cb33f033846fb3b4c8a0a4809ba76cab96), [`0135a779`](https://github.com/thirdweb-dev/js/commit/0135a7790cf2acde6b701cb41ea10dd311da5ec3)]:
|
||||
- @thirdweb-dev/storage@1.1.6
|
||||
- @thirdweb-dev/wallets@1.0.4
|
||||
- @thirdweb-dev/chains@0.1.27
|
||||
- @thirdweb-dev/sdk@3.10.28
|
||||
|
||||
## 3.14.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/react-core",
|
||||
"version": "3.14.7",
|
||||
"version": "3.14.9",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/react-core",
|
||||
"author": "thirdweb eng <[email protected]>",
|
||||
"license": "Apache-2.0",
|
||||
@@ -66,26 +66,26 @@
|
||||
},
|
||||
"sideEffects:": false,
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.19.3",
|
||||
"@babel/preset-env": "^7.18.10",
|
||||
"@babel/preset-react": "^7.18.6",
|
||||
"@babel/preset-typescript": "^7.18.6",
|
||||
"@babel/runtime": "^7.19.0",
|
||||
"@microsoft/api-documenter": "^7.19.4",
|
||||
"@microsoft/api-extractor": "^7.29.2",
|
||||
"@babel/core": "^7.22.5",
|
||||
"@babel/preset-env": "^7.22.5",
|
||||
"@babel/preset-react": "^7.22.5",
|
||||
"@babel/preset-typescript": "^7.22.5",
|
||||
"@babel/runtime": "^7.22.5",
|
||||
"@microsoft/api-documenter": "^7.22.21",
|
||||
"@microsoft/api-extractor": "^7.36.0",
|
||||
"@microsoft/tsdoc": "^0.14.1",
|
||||
"@preconstruct/cli": "^2.2.1",
|
||||
"@preconstruct/cli": "^2.7.0",
|
||||
"@solana/wallet-adapter-react": "^0.15.19",
|
||||
"@solana/web3.js": "^1.62.0",
|
||||
"@thirdweb-dev/auth": "workspace:*",
|
||||
"@thirdweb-dev/tsconfig": "workspace:*",
|
||||
"@types/js-cookie": "^3.0.3",
|
||||
"@types/mime": "3.0.0",
|
||||
"@types/react": "^18.0.5",
|
||||
"@typescript-eslint/eslint-plugin": "^5.33.0",
|
||||
"@typescript-eslint/parser": "^5.33.0",
|
||||
"eslint": "^8.42.0",
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"@types/react": "^18.2.14",
|
||||
"@typescript-eslint/eslint-plugin": "^5.60.1",
|
||||
"@typescript-eslint/parser": "^5.60.1",
|
||||
"eslint": "^8.43.0",
|
||||
"eslint-config-prettier": "^8.8.0",
|
||||
"eslint-config-thirdweb": "workspace:*",
|
||||
"eslint-plugin-better-tree-shaking": "0.0.3",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
@@ -93,12 +93,12 @@
|
||||
"eslint-plugin-prettier": "^4.2.1",
|
||||
"eslint-plugin-tsdoc": "^0.2.16",
|
||||
"ethers": "^5.7.2",
|
||||
"prettier": "^2.7.1",
|
||||
"prettier": "^2.8.8",
|
||||
"react": "^18.2.0",
|
||||
"typescript": "^4.7.4"
|
||||
"typescript": "^5.1.6"
|
||||
},
|
||||
"dependencies": {
|
||||
"@tanstack/react-query": "^4.0.10",
|
||||
"@tanstack/react-query": "^4.29.19",
|
||||
"@thirdweb-dev/chains": "workspace:*",
|
||||
"@thirdweb-dev/generated-abis": "workspace:^",
|
||||
"@thirdweb-dev/sdk": "workspace:*",
|
||||
|
||||
@@ -1,25 +1,10 @@
|
||||
import mime from "mime/lite.js";
|
||||
import {
|
||||
parseGatewayUrls,
|
||||
prepareGatewayUrls,
|
||||
replaceSchemeWithGatewayUrl,
|
||||
} from "@thirdweb-dev/storage";
|
||||
|
||||
// TODO legacy remove this when possible
|
||||
export interface IPFSResolverOptions {
|
||||
gatewayUrl: string;
|
||||
}
|
||||
|
||||
export function resolveIpfsUri(uri?: string, options?: IPFSResolverOptions) {
|
||||
if (!uri) {
|
||||
return undefined;
|
||||
}
|
||||
const gatewayUrls = prepareGatewayUrls(
|
||||
parseGatewayUrls(options?.gatewayUrl ? [options?.gatewayUrl] : undefined),
|
||||
);
|
||||
return replaceSchemeWithGatewayUrl(uri, gatewayUrls);
|
||||
}
|
||||
|
||||
export async function resolveMimeType(url?: string) {
|
||||
if (!url) {
|
||||
return undefined;
|
||||
|
||||
@@ -328,7 +328,7 @@ export function useContractMetadata<TContract extends ValidContractInstance>(
|
||||
cacheKeys.contract.metadata(contract?.getAddress()),
|
||||
async () => {
|
||||
requiredParamInvariant(contract, "contract is required");
|
||||
return await contract.metadata.get();
|
||||
return (await contract.metadata.get()) as any; // FIXME types
|
||||
},
|
||||
{
|
||||
enabled: !!contract,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export { resolveIpfsUri, resolveMimeType } from "../core/utils/ipfs";
|
||||
export { resolveMimeType } from "../core/utils/ipfs";
|
||||
|
||||
export { ThirdwebThemeContext } from "../core/providers/theme-context";
|
||||
export { ThirdwebProviderCore } from "../core/providers/thirdweb-provider";
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# @thirdweb-dev/react-native-compat
|
||||
|
||||
## 0.2.28
|
||||
|
||||
## 0.2.27
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1278](https://github.com/thirdweb-dev/js/pull/1278) [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2) Thanks [@jnsdls](https://github.com/jnsdls)! - updated various dependencies
|
||||
|
||||
## 0.2.26
|
||||
|
||||
## 0.2.25
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/react-native-compat",
|
||||
"description": "Shims for Thirdweb in React Native Projects",
|
||||
"version": "0.2.26",
|
||||
"version": "0.2.28",
|
||||
"author": "thirdweb eng <[email protected]>",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/react-native-compat",
|
||||
"license": "Apache-2.0",
|
||||
@@ -22,10 +22,10 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@ethersproject/shims": "^5.7.0",
|
||||
"@walletconnect/react-native-compat": "^2.3.3",
|
||||
"@walletconnect/react-native-compat": "^2.8.6",
|
||||
"base-64": "^1.0.0",
|
||||
"big-integer": "^1.6.51",
|
||||
"react-native-get-random-values": "^1.8.0"
|
||||
"react-native-get-random-values": "^1.9.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"ethers": "^5.5.1",
|
||||
@@ -34,12 +34,12 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@thirdweb-dev/tsconfig": "workspace:*",
|
||||
"@types/node": "^18.0.0",
|
||||
"@types/node": "^18.16.18",
|
||||
"babel-plugin-module-resolver": "^5.0.0",
|
||||
"eslint-config-thirdweb": "workspace:*",
|
||||
"ethers": "^5.7.2",
|
||||
"react": "^18.2.0",
|
||||
"react-native": "^0.71.0",
|
||||
"typescript": "^4.7.4"
|
||||
"react-native": "^0.71.11",
|
||||
"typescript": "^5.1.6"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,60 @@
|
||||
# @thirdweb-dev/react-native
|
||||
|
||||
## 0.2.28
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1283](https://github.com/thirdweb-dev/js/pull/1283) [`8672c853`](https://github.com/thirdweb-dev/js/commit/8672c8533c694cad46242672ec23b883049bd526) Thanks [@iketw](https://github.com/iketw)! - SDK improvements:
|
||||
|
||||
1. You can now pass an `extraRows` prop to the ConnectWallet button. This will render the `extraRows` at the bottom of the connected wallet details modal.
|
||||
|
||||
```javascript
|
||||
import {
|
||||
BaseButton,
|
||||
Box,
|
||||
ConnectWallet,
|
||||
Text,
|
||||
} from "@thirdweb-dev/react-native";
|
||||
|
||||
const extraRows = () => {
|
||||
return (
|
||||
<Box>
|
||||
<Text variant="bodySmallSecondary" textAlign="center" mt="sm">
|
||||
Extra option
|
||||
</Text>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
<ConnectWallet theme={"dark"} extraRows={extraRows} />;
|
||||
```
|
||||
|
||||
2. You can now import a local wallet by a mnemoic as well.
|
||||
|
||||
When creating a Local/Guest Wallet the import wallet modal accepts both a privateKey or a mnemonic. This makes it easier for users to import their wallets into your app
|
||||
|
||||
- [#1309](https://github.com/thirdweb-dev/js/pull/1309) [`4961b597`](https://github.com/thirdweb-dev/js/commit/4961b597a098dae0a4eff01a9ef268a65fe1a352) Thanks [@jnsdls](https://github.com/jnsdls)! - unblock storage domains
|
||||
|
||||
- Updated dependencies [[`7e044c66`](https://github.com/thirdweb-dev/js/commit/7e044c664d8a034f5324b859ac3596860c86f9a5), [`72ada475`](https://github.com/thirdweb-dev/js/commit/72ada47596d5d5c08736c33215faeec636b7156a), [`2c0bb078`](https://github.com/thirdweb-dev/js/commit/2c0bb0789955f6cd397b6fdb8e990a505251c631), [`b5c6eedb`](https://github.com/thirdweb-dev/js/commit/b5c6eedb38aa3c52eb97f3d25ad83e38c55afe61), [`10b3a717`](https://github.com/thirdweb-dev/js/commit/10b3a717da606632a05769ac821bdd21d6b63a03), [`b4aee9b5`](https://github.com/thirdweb-dev/js/commit/b4aee9b59121bab5f9b3d9b7ecdc4bcb4cd66f58), [`4961b597`](https://github.com/thirdweb-dev/js/commit/4961b597a098dae0a4eff01a9ef268a65fe1a352)]:
|
||||
- @thirdweb-dev/[email protected]
|
||||
- @thirdweb-dev/[email protected]
|
||||
- @thirdweb-dev/[email protected]
|
||||
- @thirdweb-dev/[email protected]
|
||||
- @thirdweb-dev/[email protected]
|
||||
|
||||
## 0.2.27
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1278](https://github.com/thirdweb-dev/js/pull/1278) [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2) Thanks [@jnsdls](https://github.com/jnsdls)! - updated various dependencies
|
||||
|
||||
- Updated dependencies [[`2d088d36`](https://github.com/thirdweb-dev/js/commit/2d088d367ca54233836dc69712fd411ab7924205), [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2), [`9daf0449`](https://github.com/thirdweb-dev/js/commit/9daf044926bf995ac8998929dbeca548c5eb8561), [`546353a4`](https://github.com/thirdweb-dev/js/commit/546353a479c11533818ef917c0f6b4d6f8f69872), [`a3bb17cb`](https://github.com/thirdweb-dev/js/commit/a3bb17cb33f033846fb3b4c8a0a4809ba76cab96), [`0135a779`](https://github.com/thirdweb-dev/js/commit/0135a7790cf2acde6b701cb41ea10dd311da5ec3)]:
|
||||
- @thirdweb-dev/[email protected]
|
||||
- @thirdweb-dev/[email protected]
|
||||
- @thirdweb-dev/[email protected]
|
||||
- @thirdweb-dev/[email protected]
|
||||
- @thirdweb-dev/[email protected]
|
||||
|
||||
## 0.2.26
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/react-native",
|
||||
"version": "0.2.26",
|
||||
"version": "0.2.28",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/react-native",
|
||||
"author": "thirdweb eng <[email protected]>",
|
||||
"license": "Apache-2.0",
|
||||
@@ -26,9 +26,9 @@
|
||||
"dependencies": {
|
||||
"@coinbase/wallet-mobile-sdk": "1.0.6",
|
||||
"@magic-sdk/provider": "17.2.0",
|
||||
"@magic-sdk/react-native-bare": "^18.3.0",
|
||||
"@shopify/restyle": "^2.4.1",
|
||||
"@tanstack/react-query": "^4.0.10",
|
||||
"@magic-sdk/react-native-bare": "^18.5.0",
|
||||
"@shopify/restyle": "^2.4.2",
|
||||
"@tanstack/react-query": "^4.29.19",
|
||||
"@thirdweb-dev/chains": "workspace:*",
|
||||
"@thirdweb-dev/react-core": "workspace:*",
|
||||
"@thirdweb-dev/sdk": "workspace:*",
|
||||
@@ -41,38 +41,38 @@
|
||||
"expo-secure-store": "^12.1.1",
|
||||
"react-native-mmkv": "2.5.1",
|
||||
"react-native-modal": "^13.0.1",
|
||||
"react-native-svg": "^13.8.0",
|
||||
"react-native-svg": "^13.9.0",
|
||||
"tiny-invariant": "^1.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.19.3",
|
||||
"@babel/preset-env": "^7.1.6",
|
||||
"@react-native-async-storage/async-storage": "*",
|
||||
"@babel/core": "^7.22.5",
|
||||
"@babel/preset-env": "^7.22.5",
|
||||
"@react-native-async-storage/async-storage": "^1.18.2",
|
||||
"@react-native-community/eslint-config": "^3.0.2",
|
||||
"@thirdweb-dev/tsconfig": "workspace:*",
|
||||
"@types/jest": "^29.2.1",
|
||||
"@types/react": "^18.0.5",
|
||||
"@types/react-native": "^0.71.0",
|
||||
"@typescript-eslint/eslint-plugin": "^5.56.0",
|
||||
"@typescript-eslint/parser": "^5.56.0",
|
||||
"@types/jest": "^29.5.2",
|
||||
"@types/react": "^18.2.14",
|
||||
"@types/react-native": "^0.71.8",
|
||||
"@typescript-eslint/eslint-plugin": "^5.60.1",
|
||||
"@typescript-eslint/parser": "^5.60.1",
|
||||
"babel-jest": "^29.2.1",
|
||||
"eslint": "^8.42.0",
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"eslint": "^8.43.0",
|
||||
"eslint-config-prettier": "^8.8.0",
|
||||
"eslint-config-thirdweb": "workspace:*",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"eslint-plugin-inclusive-language": "^2.2.0",
|
||||
"eslint-plugin-prettier": "^4.2.1",
|
||||
"ethers": "^5.7.2",
|
||||
"expo": "^47.0.0",
|
||||
"expo": "^47.0.14",
|
||||
"jest": "^29.4.3",
|
||||
"prettier": "^2.7.1",
|
||||
"prettier": "^2.8.8",
|
||||
"react": "^18.2.0",
|
||||
"react-native": "^0.71.0",
|
||||
"react-native": "^0.71.11",
|
||||
"react-native-camera": "^4.2.1",
|
||||
"react-native-device-info": "10.6.0",
|
||||
"react-native-safe-area-context": "4.5.3",
|
||||
"react-native-webview": "12.1.0",
|
||||
"typescript": "^4.7.4"
|
||||
"typescript": "^5.1.6"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"react-native-camera": "^4.2.1",
|
||||
|
||||
@@ -14,6 +14,11 @@ export type ConnectWalletProps = {
|
||||
* render a custom button to display the connected wallet details instead of the default button
|
||||
*/
|
||||
detailsButton?: ConnectWalletDetailsProps["detailsButton"];
|
||||
|
||||
/**
|
||||
* render custom rows in the Connect Wallet Details modal
|
||||
*/
|
||||
extraRows?: ConnectWalletDetailsProps["extraRows"];
|
||||
} & ConnectWalletButtonProps;
|
||||
|
||||
export const ConnectWallet = ({
|
||||
@@ -21,6 +26,7 @@ export const ConnectWallet = ({
|
||||
theme,
|
||||
buttonTitle,
|
||||
modalTitle,
|
||||
extraRows,
|
||||
}: ConnectWalletProps) => {
|
||||
const fadeAnim = useRef(new Animated.Value(0)).current;
|
||||
const address = useAddress();
|
||||
@@ -40,6 +46,7 @@ export const ConnectWallet = ({
|
||||
<WalletDetailsButton
|
||||
address={address}
|
||||
detailsButton={detailsButton}
|
||||
extraRows={extraRows}
|
||||
/>
|
||||
) : (
|
||||
<ConnectWalletButton
|
||||
|
||||
+73
-43
@@ -1,11 +1,11 @@
|
||||
import { Linking, StyleSheet, View } from "react-native";
|
||||
import { Dimensions, Linking, StyleSheet, View } from "react-native";
|
||||
import Box from "../base/Box";
|
||||
import { Toast } from "../base/Toast";
|
||||
import { ExportLocalWalletModal } from "./ExportLocalWalletModal";
|
||||
import { NetworkButton } from "../base/NetworkButton";
|
||||
import { WalletDetailsModalHeader } from "./WalletDetailsModalHeader";
|
||||
import {
|
||||
useActiveChain,
|
||||
useChain,
|
||||
useDisconnect,
|
||||
useSetConnectedWallet,
|
||||
useWallet,
|
||||
@@ -18,24 +18,34 @@ import { useSmartWallet } from "../../providers/context-provider";
|
||||
import BaseButton from "../base/BaseButton";
|
||||
import { SmartWalletAdditionalActions } from "./SmartWalletAdditionalActions";
|
||||
import Text from "../base/Text";
|
||||
import { useModalState } from "../../providers/ui-context-provider";
|
||||
import { CLOSE_MODAL_STATE, WalletDetailsModal } from "../../utils/modalTypes";
|
||||
import { useAppTheme } from "../../styles/hooks";
|
||||
import { LocalWalletImportModal } from "../ConnectWalletFlow/LocalWalletImportModal";
|
||||
import { IconTextButton } from "../base/IconTextButton";
|
||||
import MoneyIcon from "../../assets/money";
|
||||
import { TWModal } from "../base/modal/TWModal";
|
||||
|
||||
export const ConnectWalletDetailsModal = () => {
|
||||
const MODAL_HEIGHT = Dimensions.get("window").height * 0.7;
|
||||
const DEVICE_WIDTH = Dimensions.get("window").width;
|
||||
|
||||
export const ConnectWalletDetailsModal = ({
|
||||
isVisible,
|
||||
onClosePress,
|
||||
extraRows,
|
||||
address,
|
||||
}: {
|
||||
isVisible: boolean;
|
||||
onClosePress: () => void;
|
||||
extraRows?: React.FC;
|
||||
address?: string;
|
||||
}) => {
|
||||
const theme = useAppTheme();
|
||||
const [isExportModalVisible, setIsExportModalVisible] = useState(false);
|
||||
const activeWallet = useWallet();
|
||||
const chain = useActiveChain();
|
||||
const chain = useChain();
|
||||
const disconnect = useDisconnect();
|
||||
const [smartWallet, setSmartWallet] = useSmartWallet();
|
||||
const [addressCopied, setAddressCopied] = useState(false);
|
||||
const [isImportModalVisible, setIsImportModalVisible] = useState(false);
|
||||
const { modalState, setModalState } = useModalState();
|
||||
const { address } = (modalState as WalletDetailsModal).data;
|
||||
const setConnectedWallet = useSetConnectedWallet();
|
||||
|
||||
useEffect(() => {
|
||||
@@ -50,8 +60,8 @@ export const ConnectWalletDetailsModal = () => {
|
||||
|
||||
const onDisconnectPress = () => {
|
||||
disconnect().finally(() => {
|
||||
setModalState(CLOSE_MODAL_STATE("ConnectWalletDetailsModal"));
|
||||
setSmartWallet?.(undefined);
|
||||
onClosePress();
|
||||
});
|
||||
};
|
||||
|
||||
@@ -176,45 +186,65 @@ export const ConnectWalletDetailsModal = () => {
|
||||
]);
|
||||
|
||||
return (
|
||||
<Box>
|
||||
<ExportLocalWalletModal
|
||||
isVisible={isExportModalVisible}
|
||||
onClose={onExportModalClose}
|
||||
/>
|
||||
<WalletDetailsModalHeader
|
||||
address={address}
|
||||
onDisconnectPress={onDisconnectPress}
|
||||
onAddressCopied={onAddressCopied}
|
||||
/>
|
||||
<View style={styles.currentNetwork}>
|
||||
<Text variant="bodySmallSecondary">Current Network</Text>
|
||||
<TWModal isVisible={isVisible} onBackdropPress={onClosePress}>
|
||||
<View
|
||||
style={[styles.modal, { backgroundColor: theme.colors.background }]}
|
||||
>
|
||||
<Box style={styles.contentContainer}>
|
||||
<ExportLocalWalletModal
|
||||
isVisible={isExportModalVisible}
|
||||
onClose={onExportModalClose}
|
||||
/>
|
||||
<WalletDetailsModalHeader
|
||||
address={address}
|
||||
onDisconnectPress={onDisconnectPress}
|
||||
onAddressCopied={onAddressCopied}
|
||||
/>
|
||||
<View style={styles.currentNetwork}>
|
||||
<Text variant="bodySmallSecondary">Current Network</Text>
|
||||
</View>
|
||||
<NetworkButton
|
||||
chainIconUrl={chain?.icon?.url || ""}
|
||||
chainName={chain?.name || "Unknown Network"}
|
||||
onPress={onChangeNetworkPress}
|
||||
/>
|
||||
{chain?.testnet && chain?.faucets?.length ? (
|
||||
<IconTextButton
|
||||
mt="xs"
|
||||
text="Request Testnet Funds"
|
||||
icon={<MoneyIcon height={10} width={10} />}
|
||||
onPress={() => {
|
||||
if (chain?.faucets?.[0]) {
|
||||
Linking.openURL(chain.faucets[0]);
|
||||
}
|
||||
}}
|
||||
/>
|
||||
) : null}
|
||||
{getAdditionalActions()}
|
||||
{extraRows ? extraRows({}) : null}
|
||||
{addressCopied === true ? (
|
||||
<Toast text={"Address copied to clipboard"} />
|
||||
) : null}
|
||||
</Box>
|
||||
</View>
|
||||
<NetworkButton
|
||||
chainIconUrl={chain?.icon?.url || ""}
|
||||
chainName={chain?.name || "Unknown Network"}
|
||||
onPress={onChangeNetworkPress}
|
||||
/>
|
||||
{chain?.testnet && chain?.faucets?.length ? (
|
||||
<IconTextButton
|
||||
mt="xs"
|
||||
text="Request Testnet Funds"
|
||||
icon={<MoneyIcon height={10} width={10} />}
|
||||
onPress={() => {
|
||||
if (chain?.faucets?.[0]) {
|
||||
Linking.openURL(chain.faucets[0]);
|
||||
}
|
||||
}}
|
||||
/>
|
||||
) : null}
|
||||
{getAdditionalActions()}
|
||||
{addressCopied === true ? (
|
||||
<Toast text={"Address copied to clipboard"} />
|
||||
) : null}
|
||||
</Box>
|
||||
</TWModal>
|
||||
);
|
||||
};
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
modal: {
|
||||
position: "absolute",
|
||||
bottom: -20,
|
||||
left: -20,
|
||||
width: DEVICE_WIDTH,
|
||||
borderTopLeftRadius: 24,
|
||||
borderTopRightRadius: 24,
|
||||
padding: 24,
|
||||
},
|
||||
contentContainer: {
|
||||
maxHeight: MODAL_HEIGHT,
|
||||
display: "flex",
|
||||
},
|
||||
exportWalletInfo: {
|
||||
flex: 1,
|
||||
justifyContent: "flex-start",
|
||||
|
||||
+22
-12
@@ -6,37 +6,47 @@ import { WalletIcon } from "../base/WalletIcon";
|
||||
import { useWallet, useBalance, useChain } from "@thirdweb-dev/react-core";
|
||||
import { StyleSheet } from "react-native";
|
||||
import { LocalWallet } from "@thirdweb-dev/wallets";
|
||||
import { useModalState } from "../../providers/ui-context-provider";
|
||||
import Box from "../base/Box";
|
||||
import { ConnectWalletDetailsModal } from "./ConnectWalletDetailsModal";
|
||||
import { useState } from "react";
|
||||
|
||||
export type ConnectWalletDetailsProps = {
|
||||
address: string;
|
||||
address?: string;
|
||||
detailsButton?: React.FC<{ onPress: () => void }>;
|
||||
extraRows?: React.FC;
|
||||
};
|
||||
|
||||
export const WalletDetailsButton = ({
|
||||
address,
|
||||
detailsButton,
|
||||
extraRows,
|
||||
}: ConnectWalletDetailsProps) => {
|
||||
const activeWallet = useWallet();
|
||||
const chain = useChain();
|
||||
const balanceQuery = useBalance();
|
||||
const { setModalState } = useModalState();
|
||||
const [isModalVisible, setIsModalVisible] = useState(false);
|
||||
|
||||
const onPress = () => {
|
||||
setModalState({
|
||||
view: "WalletDetails",
|
||||
data: {
|
||||
address: address,
|
||||
},
|
||||
isOpen: true,
|
||||
isSheet: true,
|
||||
caller: "ConnectWalletDetails",
|
||||
});
|
||||
// setModalState({
|
||||
// view: "WalletDetails",
|
||||
// data: {
|
||||
// address: address,
|
||||
// },
|
||||
// isOpen: true,
|
||||
// isSheet: true,
|
||||
// caller: "ConnectWalletDetails",
|
||||
// });
|
||||
setIsModalVisible(!isModalVisible);
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<ConnectWalletDetailsModal
|
||||
isVisible={isModalVisible}
|
||||
onClosePress={onPress}
|
||||
extraRows={extraRows}
|
||||
address={address}
|
||||
/>
|
||||
{detailsButton ? (
|
||||
detailsButton({ onPress })
|
||||
) : (
|
||||
|
||||
+4
-1
@@ -12,7 +12,7 @@ import CopyIcon from "../../assets/copy";
|
||||
import { useState } from "react";
|
||||
|
||||
interface WalletDetailsModalHeaderProps {
|
||||
address: string;
|
||||
address?: string;
|
||||
onDisconnectPress: () => void;
|
||||
onAddressCopied?: () => void;
|
||||
loading?: boolean;
|
||||
@@ -29,6 +29,9 @@ export const WalletDetailsModalHeader = ({
|
||||
const [showLoading, setShowLoading] = useState(false);
|
||||
|
||||
const onAddressPress = async () => {
|
||||
if (!address) {
|
||||
return;
|
||||
}
|
||||
await Clipboard.setStringAsync(address);
|
||||
onAddressCopied?.();
|
||||
};
|
||||
|
||||
+41
-27
@@ -16,6 +16,7 @@ import * as FileSystem from "expo-file-system";
|
||||
import { TWModal } from "../base/modal/TWModal";
|
||||
import { localWallet } from "../../wallets/wallets/local-wallet";
|
||||
import { TextInput } from "../base";
|
||||
import { useAppTheme } from "../../styles/hooks";
|
||||
|
||||
export type LocalWalletImportModalProps = {
|
||||
isVisible: boolean;
|
||||
@@ -29,11 +30,14 @@ export const LocalWalletImportModal = ({
|
||||
onWalletImported,
|
||||
}: LocalWalletImportModalProps) => {
|
||||
const [password, setPassword] = useState<string | undefined>();
|
||||
const [privateKey, setPrivateKey] = useState<string | undefined>(undefined);
|
||||
const [privateKeyOrMnemonic, setPrivateKeyOrMnemonic] = useState<
|
||||
string | undefined
|
||||
>(undefined);
|
||||
const [jsonFile, setJsonFile] = useState<string | undefined>();
|
||||
const [error, setError] = useState<string | undefined>();
|
||||
const [isImporting, setIsImporting] = useState<boolean>(false);
|
||||
const createWalletInstance = useCreateWalletInstance();
|
||||
const theme = useAppTheme();
|
||||
|
||||
const createLocalWalletFromJsonFile = async () => {
|
||||
if (!jsonFile || !password) {
|
||||
@@ -65,17 +69,24 @@ export const LocalWalletImportModal = ({
|
||||
};
|
||||
|
||||
const createLocalWalletPK = async () => {
|
||||
if (!privateKey) {
|
||||
if (!privateKeyOrMnemonic) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const localWalletInstance = createWalletInstance(localWallet());
|
||||
|
||||
try {
|
||||
await localWalletInstance.import({
|
||||
privateKey: privateKey,
|
||||
encryption: false,
|
||||
});
|
||||
if (privateKeyOrMnemonic.indexOf(" ") === -1) {
|
||||
await localWalletInstance.import({
|
||||
privateKey: privateKeyOrMnemonic,
|
||||
encryption: false,
|
||||
});
|
||||
} else {
|
||||
await localWalletInstance.import({
|
||||
mnemonic: privateKeyOrMnemonic,
|
||||
encryption: false,
|
||||
});
|
||||
}
|
||||
} catch (err) {
|
||||
console.error("Error importing the wallet", err);
|
||||
return null;
|
||||
@@ -88,27 +99,29 @@ export const LocalWalletImportModal = ({
|
||||
setError(undefined);
|
||||
setIsImporting(true);
|
||||
|
||||
let localWalletInstance = await createLocalWalletFromJsonFile();
|
||||
setTimeout(async () => {
|
||||
let localWalletInstance = await createLocalWalletFromJsonFile();
|
||||
|
||||
if (!localWalletInstance) {
|
||||
localWalletInstance = await createLocalWalletPK();
|
||||
}
|
||||
if (!localWalletInstance) {
|
||||
localWalletInstance = await createLocalWalletPK();
|
||||
}
|
||||
|
||||
if (!localWalletInstance) {
|
||||
setError("Please, double check your password or private key.");
|
||||
setIsImporting(false);
|
||||
return;
|
||||
}
|
||||
|
||||
localWalletInstance.save({
|
||||
strategy: "privateKey",
|
||||
encryption: false,
|
||||
});
|
||||
|
||||
onWalletImported(localWalletInstance);
|
||||
|
||||
if (!localWalletInstance) {
|
||||
setError("Please, double check your password or private key.");
|
||||
setIsImporting(false);
|
||||
return;
|
||||
}
|
||||
|
||||
localWalletInstance.save({
|
||||
strategy: "privateKey",
|
||||
encryption: false,
|
||||
});
|
||||
|
||||
onWalletImported(localWalletInstance);
|
||||
|
||||
setIsImporting(false);
|
||||
onCloseInternal();
|
||||
onCloseInternal();
|
||||
}, 0);
|
||||
};
|
||||
|
||||
const onCloseInternal = () => {
|
||||
@@ -139,7 +152,7 @@ export const LocalWalletImportModal = ({
|
||||
};
|
||||
|
||||
const onPrivateKeyEntered = (text: string) => {
|
||||
setPrivateKey(text);
|
||||
setPrivateKeyOrMnemonic(text);
|
||||
};
|
||||
|
||||
return (
|
||||
@@ -180,11 +193,12 @@ export const LocalWalletImportModal = ({
|
||||
{error}
|
||||
</Text>
|
||||
<Text variant="bodySmall" m="xs" textAlign="center">
|
||||
---- Or enter a private key ----
|
||||
---- Or Private key or Mnemonic ----
|
||||
</Text>
|
||||
<TextInput
|
||||
secureTextEntry={true}
|
||||
placeholder={"Private key"}
|
||||
placeholder={"Private key / Mnemonic"}
|
||||
placeholderTextColor={theme.colors.textSecondary}
|
||||
onChangeText={onPrivateKeyEntered}
|
||||
/>
|
||||
<Box
|
||||
|
||||
@@ -2,7 +2,6 @@ import { useModalState } from "../providers/ui-context-provider";
|
||||
import { ConnectWalletFlow } from "./ConnectWalletFlow/ConnectWalletFlow";
|
||||
import { Dimensions, StyleSheet, View } from "react-native";
|
||||
import { useMemo } from "react";
|
||||
import { ConnectWalletDetailsModal } from "./ConnectWalletDetails/ConnectWalletDetailsModal";
|
||||
import { CLOSE_MODAL_STATE } from "../utils/modalTypes";
|
||||
import { ThemeProvider } from "../styles/ThemeProvider";
|
||||
import { useAppTheme } from "../styles/hooks";
|
||||
@@ -24,8 +23,8 @@ export const MainModal = () => {
|
||||
switch (modalState?.view) {
|
||||
case "ConnectWalletFlow":
|
||||
return <ConnectWalletFlow />;
|
||||
case "WalletDetails":
|
||||
return <ConnectWalletDetailsModal />;
|
||||
// case "WalletDetails":
|
||||
// return <ConnectWalletDetailsModal />;
|
||||
case "WalletConnectSessionRequestModal":
|
||||
return <SessionRequestModal />;
|
||||
case "WalletConnectSessionProposalModal":
|
||||
|
||||
@@ -23,7 +23,7 @@ export const IconTextButton = ({
|
||||
}: IconTextProps) => {
|
||||
return (
|
||||
<BaseButton
|
||||
p={p || "md"}
|
||||
p={p || "sm"}
|
||||
backgroundColor="background"
|
||||
style={styles.networkContainer}
|
||||
onPress={onPress}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { resolveIpfsUri } from "@thirdweb-dev/react-core";
|
||||
import { useStorage } from "@thirdweb-dev/react-core";
|
||||
import { useState } from "react";
|
||||
import { Image } from "react-native";
|
||||
import { SvgUri } from "react-native-svg";
|
||||
|
||||
@@ -13,21 +14,35 @@ const ImageSvgUri = ({
|
||||
height: number;
|
||||
imageAlt?: string;
|
||||
}) => {
|
||||
const isSvg = imageUrl.toLowerCase().endsWith(".svg");
|
||||
const resolvedImageUrl = resolveIpfsUri(imageUrl) || "";
|
||||
const storage = useStorage();
|
||||
const resolvedImageUrl = storage
|
||||
? storage.resolveScheme(imageUrl)
|
||||
: imageUrl.replace("ipfs://", "https://ipfs.io/ipfs/");
|
||||
|
||||
const [error, setError] = useState(false);
|
||||
|
||||
if (!resolvedImageUrl || resolvedImageUrl === "") {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (isSvg) {
|
||||
return <SvgUri width={width} height={height} uri={resolvedImageUrl} />;
|
||||
if (error) {
|
||||
return (
|
||||
<SvgUri
|
||||
width={width}
|
||||
height={height}
|
||||
uri={resolvedImageUrl}
|
||||
onError={() => setError(true)}
|
||||
/>
|
||||
);
|
||||
} else {
|
||||
// always try to render Image first, if error then try to render svg
|
||||
// Image from RN handles onError better than SvgUri
|
||||
return (
|
||||
<Image
|
||||
alt={imageAlt}
|
||||
source={{ uri: resolvedImageUrl }}
|
||||
style={[{ width: width, height: height }]}
|
||||
onError={() => setError(true)}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,21 +1,37 @@
|
||||
import Box from "./Box";
|
||||
import Text from "./Text";
|
||||
import { StyleSheet } from "react-native";
|
||||
|
||||
type LabelProps = {
|
||||
text: string;
|
||||
};
|
||||
export const Label = ({ text }: LabelProps) => {
|
||||
} & (typeof Text)["arguments"];
|
||||
|
||||
export const Label = ({ text, ...props }: LabelProps) => {
|
||||
return (
|
||||
<Box
|
||||
justifyContent="center"
|
||||
flexDirection="row"
|
||||
alignItems="center"
|
||||
paddingVertical="xxs"
|
||||
paddingHorizontal="xs"
|
||||
borderRadius="lg"
|
||||
borderRadius="md"
|
||||
backgroundColor="labelBackground"
|
||||
>
|
||||
<Text variant="bodyLarge">{text}</Text>
|
||||
<Text
|
||||
variant="bodySmall"
|
||||
style={{
|
||||
...style.text,
|
||||
...props,
|
||||
}}
|
||||
>
|
||||
{text}
|
||||
</Text>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
const style = StyleSheet.create({
|
||||
text: {
|
||||
textAlign: "center",
|
||||
paddingVertical: 3,
|
||||
paddingHorizontal: 8,
|
||||
},
|
||||
});
|
||||
|
||||
@@ -4,6 +4,7 @@ import { ThemeProviderProps } from "../styles/ThemeProvider";
|
||||
import { Theme, darkTheme, lightTheme } from "../styles/theme";
|
||||
import { useAppTheme } from "../styles/hooks";
|
||||
import { useTheme } from "@shopify/restyle";
|
||||
import { PropsWithChildren } from "react";
|
||||
|
||||
type UIContextType = {
|
||||
modalState: ModalState;
|
||||
@@ -25,7 +26,7 @@ const UIContext = createContext<UIContextType>({
|
||||
setTheme: () => {},
|
||||
});
|
||||
|
||||
export const UIContextProvider = (props: React.PropsWithChildren<{}>) => {
|
||||
export const UIContextProvider = (props: PropsWithChildren<{}>) => {
|
||||
const [modalState, setModalState] = useState<ModalState>({
|
||||
view: "Closed",
|
||||
data: {},
|
||||
|
||||
@@ -9,7 +9,7 @@ export class RainbowWallet extends WalletConnectV2 {
|
||||
static meta = {
|
||||
name: "Rainbow",
|
||||
iconURL:
|
||||
"https://registry.walletconnect.org/v2/logo/md/7a33d7f1-3d12-4b5c-f3ee-5cd83cb1b500",
|
||||
"ipfs://QmSZn47p4DVVBfzvg9BAX2EqwnPxkT1YAE7rUnrtd9CybQ/rainbow-logo.png",
|
||||
links: {
|
||||
native: "rainbow:",
|
||||
universal: "https://rnbwapp.com",
|
||||
|
||||
@@ -7,7 +7,7 @@ export class TrustWallet extends WalletConnectV2 {
|
||||
static meta = {
|
||||
name: "Trust Wallet",
|
||||
iconURL:
|
||||
"https://registry.walletconnect.org/v2/logo/md/0528ee7e-16d1-4089-21e3-bbfb41933100",
|
||||
"ipfs://QmNigQbXk7wKZwDcgN38Znj1ZZQ3JEG3DD6fUKLBU8SUTP/trust%20wallet.svg",
|
||||
links: {
|
||||
native: "trust:",
|
||||
universal: "https://link.trustwallet.com",
|
||||
|
||||
@@ -1,5 +1,31 @@
|
||||
# @thirdweb-dev/react
|
||||
|
||||
## 3.14.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1309](https://github.com/thirdweb-dev/js/pull/1309) [`4961b597`](https://github.com/thirdweb-dev/js/commit/4961b597a098dae0a4eff01a9ef268a65fe1a352) Thanks [@jnsdls](https://github.com/jnsdls)! - unblock storage domains
|
||||
|
||||
- Updated dependencies [[`7e044c66`](https://github.com/thirdweb-dev/js/commit/7e044c664d8a034f5324b859ac3596860c86f9a5), [`72ada475`](https://github.com/thirdweb-dev/js/commit/72ada47596d5d5c08736c33215faeec636b7156a), [`2c0bb078`](https://github.com/thirdweb-dev/js/commit/2c0bb0789955f6cd397b6fdb8e990a505251c631), [`b5c6eedb`](https://github.com/thirdweb-dev/js/commit/b5c6eedb38aa3c52eb97f3d25ad83e38c55afe61), [`10b3a717`](https://github.com/thirdweb-dev/js/commit/10b3a717da606632a05769ac821bdd21d6b63a03), [`b4aee9b5`](https://github.com/thirdweb-dev/js/commit/b4aee9b59121bab5f9b3d9b7ecdc4bcb4cd66f58), [`4961b597`](https://github.com/thirdweb-dev/js/commit/4961b597a098dae0a4eff01a9ef268a65fe1a352)]:
|
||||
- @thirdweb-dev/chains@0.1.28
|
||||
- @thirdweb-dev/sdk@3.10.29
|
||||
- @thirdweb-dev/wallets@1.0.5
|
||||
- @thirdweb-dev/react-core@3.14.9
|
||||
|
||||
## 3.14.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1282](https://github.com/thirdweb-dev/js/pull/1282) [`7054f9f0`](https://github.com/thirdweb-dev/js/commit/7054f9f01691e1c942ffbec3ee8042218aadd126) Thanks [@kien-ngo](https://github.com/kien-ngo)! - Fix issue #1201 - MediaRenderer HTML MimeType
|
||||
|
||||
- [#1278](https://github.com/thirdweb-dev/js/pull/1278) [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2) Thanks [@jnsdls](https://github.com/jnsdls)! - updated various dependencies
|
||||
|
||||
- Updated dependencies [[`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2), [`a3bb17cb`](https://github.com/thirdweb-dev/js/commit/a3bb17cb33f033846fb3b4c8a0a4809ba76cab96)]:
|
||||
- @thirdweb-dev/react-core@3.14.8
|
||||
- @thirdweb-dev/wallets@1.0.4
|
||||
- @thirdweb-dev/chains@0.1.27
|
||||
- @thirdweb-dev/sdk@3.10.28
|
||||
|
||||
## 3.14.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
+28
-28
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/react",
|
||||
"version": "3.14.7",
|
||||
"version": "3.14.9",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/react",
|
||||
"author": "thirdweb eng <[email protected]>",
|
||||
"license": "Apache-2.0",
|
||||
@@ -81,15 +81,15 @@
|
||||
},
|
||||
"sideEffects:": false,
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.19.3",
|
||||
"@babel/preset-env": "^7.18.10",
|
||||
"@babel/preset-react": "^7.18.6",
|
||||
"@babel/preset-typescript": "^7.18.6",
|
||||
"@babel/runtime": "^7.19.0",
|
||||
"@microsoft/api-documenter": "^7.19.4",
|
||||
"@microsoft/api-extractor": "^7.29.2",
|
||||
"@babel/core": "^7.22.5",
|
||||
"@babel/preset-env": "^7.22.5",
|
||||
"@babel/preset-react": "^7.22.5",
|
||||
"@babel/preset-typescript": "^7.22.5",
|
||||
"@babel/runtime": "^7.22.5",
|
||||
"@microsoft/api-documenter": "^7.22.21",
|
||||
"@microsoft/api-extractor": "^7.36.0",
|
||||
"@microsoft/tsdoc": "^0.14.1",
|
||||
"@preconstruct/cli": "^2.2.1",
|
||||
"@preconstruct/cli": "^2.7.0",
|
||||
"@solana/wallet-adapter-base": "^0.9.17",
|
||||
"@solana/wallet-adapter-phantom": "^0.9.17",
|
||||
"@solana/wallet-adapter-react": "^0.15.19",
|
||||
@@ -99,13 +99,13 @@
|
||||
"@thirdweb-dev/sdk": "workspace:*",
|
||||
"@thirdweb-dev/tsconfig": "workspace:*",
|
||||
"@types/color": "^3.0.3",
|
||||
"@types/react": "^18.0.5",
|
||||
"@types/react-dom": "^18.0.6",
|
||||
"@types/uuid": "^9.0.0",
|
||||
"@typescript-eslint/eslint-plugin": "^5.33.0",
|
||||
"@typescript-eslint/parser": "^5.33.0",
|
||||
"eslint": "^8.42.0",
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"@types/react": "^18.2.14",
|
||||
"@types/react-dom": "^18.2.6",
|
||||
"@types/uuid": "^9.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "^5.60.1",
|
||||
"@typescript-eslint/parser": "^5.60.1",
|
||||
"eslint": "^8.43.0",
|
||||
"eslint-config-prettier": "^8.8.0",
|
||||
"eslint-config-thirdweb": "workspace:*",
|
||||
"eslint-plugin-better-tree-shaking": "0.0.3",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
@@ -113,25 +113,25 @@
|
||||
"eslint-plugin-prettier": "^4.2.1",
|
||||
"eslint-plugin-tsdoc": "^0.2.16",
|
||||
"ethers": "^5.7.2",
|
||||
"prettier": "^2.7.1",
|
||||
"prettier": "^2.8.8",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"stream": "npm:stream-browserify@^3.0.0",
|
||||
"typescript": "^4.7.4"
|
||||
"typescript": "^5.1.6"
|
||||
},
|
||||
"dependencies": {
|
||||
"@emotion/react": "^11.10.0",
|
||||
"@emotion/styled": "^11.10.0",
|
||||
"@emotion/react": "^11.11.1",
|
||||
"@emotion/styled": "^11.11.0",
|
||||
"@google/model-viewer": "^2.1.1",
|
||||
"@radix-ui/colors": "^0.1.8",
|
||||
"@radix-ui/react-dialog": "^1.0.2",
|
||||
"@radix-ui/react-dropdown-menu": "^2.0.2",
|
||||
"@radix-ui/react-icons": "^1.1.1",
|
||||
"@radix-ui/react-popover": "^1.0.5",
|
||||
"@radix-ui/react-tabs": "^1.0.2",
|
||||
"@radix-ui/react-tooltip": "^1.0.4",
|
||||
"@radix-ui/colors": "^0.1.9",
|
||||
"@radix-ui/react-dialog": "^1.0.4",
|
||||
"@radix-ui/react-dropdown-menu": "^2.0.5",
|
||||
"@radix-ui/react-icons": "^1.3.0",
|
||||
"@radix-ui/react-popover": "^1.0.6",
|
||||
"@radix-ui/react-tabs": "^1.0.4",
|
||||
"@radix-ui/react-tooltip": "^1.0.6",
|
||||
"@react-icons/all-files": "^4.1.0",
|
||||
"@tanstack/react-query": "^4.0.10",
|
||||
"@tanstack/react-query": "^4.29.19",
|
||||
"@thirdweb-dev/chains": "workspace:*",
|
||||
"@thirdweb-dev/react-core": "workspace:*",
|
||||
"@thirdweb-dev/wallets": "workspace:*",
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
import type { Theme } from "../design-system";
|
||||
import styled from "@emotion/styled";
|
||||
import { Chain } from "@thirdweb-dev/chains";
|
||||
import { resolveIpfsUri } from "@thirdweb-dev/react-core";
|
||||
import { useStorage } from "@thirdweb-dev/react-core";
|
||||
|
||||
const defaultChainIcon = /* @__PURE__ */ resolveIpfsUri(
|
||||
"ipfs://QmcxZHpyJa8T4i63xqjPYrZ6tKrt55tZJpbXcjSDKuKaf9/ethereum/512.png",
|
||||
);
|
||||
const defaultChainIcon =
|
||||
"ipfs://QmcxZHpyJa8T4i63xqjPYrZ6tKrt55tZJpbXcjSDKuKaf9/ethereum/512.png";
|
||||
|
||||
export const ChainIcon: React.FC<{
|
||||
chain?: Chain;
|
||||
@@ -14,8 +13,12 @@ export const ChainIcon: React.FC<{
|
||||
className?: string;
|
||||
loading?: "lazy" | "eager";
|
||||
}> = (props) => {
|
||||
const url = props.chain?.icon?.url;
|
||||
const src = url ? resolveIpfsUri(url) : defaultChainIcon;
|
||||
const url = props.chain?.icon?.url || defaultChainIcon;
|
||||
const storage = useStorage();
|
||||
|
||||
const src = storage
|
||||
? storage.resolveScheme(url)
|
||||
: url.replace("ipfs://", "https://ipfs.io/ipfs/");
|
||||
|
||||
return (
|
||||
<div
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { resolveIpfsUri } from "@thirdweb-dev/react-core";
|
||||
import { useStorage } from "@thirdweb-dev/react-core";
|
||||
|
||||
export const Img: React.FC<{
|
||||
width: string;
|
||||
@@ -8,11 +8,16 @@ export const Img: React.FC<{
|
||||
loading?: "eager" | "lazy";
|
||||
className?: string;
|
||||
}> = (props) => {
|
||||
const storage = useStorage();
|
||||
return (
|
||||
<img
|
||||
width={props.width}
|
||||
height={props.height}
|
||||
src={resolveIpfsUri(props.src)}
|
||||
src={
|
||||
storage
|
||||
? storage.resolveScheme(props.src)
|
||||
: props.src.replace("ipfs://", "https://ipfs.io/ipfs/")
|
||||
}
|
||||
alt={props.alt || ""}
|
||||
loading={props.loading}
|
||||
decoding="async"
|
||||
|
||||
@@ -7,11 +7,7 @@ import {
|
||||
CarbonPlayFilledAlt,
|
||||
} from "./Icons";
|
||||
import { useQuery } from "@tanstack/react-query";
|
||||
import {
|
||||
resolveIpfsUri,
|
||||
resolveMimeType,
|
||||
useStorage,
|
||||
} from "@thirdweb-dev/react-core";
|
||||
import { resolveMimeType, useStorage } from "@thirdweb-dev/react-core";
|
||||
import React, {
|
||||
useEffect,
|
||||
useMemo,
|
||||
@@ -431,7 +427,7 @@ export const MediaRenderer = /* @__PURE__ */ React.forwardRef<
|
||||
alt={alt}
|
||||
/>
|
||||
);
|
||||
} else if (videoOrImageSrc.mimeType === "text/html") {
|
||||
} else if (videoOrImageSrc.mimeType.startsWith("text/html")) {
|
||||
return (
|
||||
<IframePlayer
|
||||
style={mergedStyle}
|
||||
@@ -547,18 +543,19 @@ export function useResolvedMediaType(
|
||||
) {
|
||||
const storage = useStorage();
|
||||
|
||||
const resolvedUrl = useMemo(
|
||||
() =>
|
||||
resolveIpfsUri(
|
||||
uri,
|
||||
gatewayUrl
|
||||
? { gatewayUrl }
|
||||
: storage
|
||||
? { gatewayUrl: storage.gatewayUrls["ipfs://"][0] }
|
||||
: undefined,
|
||||
),
|
||||
[uri, storage, gatewayUrl],
|
||||
);
|
||||
const resolvedUrl = useMemo(() => {
|
||||
if (!uri) {
|
||||
return "";
|
||||
}
|
||||
if (gatewayUrl) {
|
||||
return uri.replace("ipfs://", gatewayUrl);
|
||||
}
|
||||
if (storage) {
|
||||
return storage.resolveScheme(uri);
|
||||
}
|
||||
return uri.replace("ipfs://", "https://ipfs.io/ipfs/");
|
||||
}, [uri, storage, gatewayUrl]);
|
||||
|
||||
const resolvedMimType = useQuery(
|
||||
["mime-type", resolvedUrl],
|
||||
() => resolveMimeType(resolvedUrl),
|
||||
|
||||
@@ -6,13 +6,14 @@ export function useInstalledWallets() {
|
||||
let isZerionWalletInstalled = false;
|
||||
let isTrustWalletInstalled = false;
|
||||
|
||||
if (assertWindowEthereum(globalThis.window)) {
|
||||
isMetamaskInstalled = !!globalThis.window.ethereum?.isMetaMask;
|
||||
const window_: Window | undefined = globalThis?.window;
|
||||
if (assertWindowEthereum(window_)) {
|
||||
isMetamaskInstalled = !!window_.ethereum?.isMetaMask;
|
||||
isCoinbaseWalletInstalled =
|
||||
!!globalThis.window.ethereum?.isCoinbaseWallet ||
|
||||
!!globalThis.window.ethereum?.providers?.some((p) => p.isCoinbaseWallet);
|
||||
isZerionWalletInstalled = !!globalThis.window.ethereum?.isZerion;
|
||||
isTrustWalletInstalled = !!globalThis.window.ethereum?.isTrust;
|
||||
!!window_.ethereum?.isCoinbaseWallet ||
|
||||
!!window_.ethereum?.providers?.some((p) => p.isCoinbaseWallet);
|
||||
isZerionWalletInstalled = !!window_.ethereum?.isZerion;
|
||||
isTrustWalletInstalled = !!window_.ethereum?.isTrust;
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
@@ -21,12 +21,11 @@ export const coinbaseWallet = (): WalletConfig<CoinbaseWallet> => {
|
||||
},
|
||||
connectUI: CoinbaseConnectUI,
|
||||
isInstalled() {
|
||||
if (assertWindowEthereum(globalThis.window)) {
|
||||
const window_: Window | undefined = globalThis?.window;
|
||||
if (assertWindowEthereum(window_)) {
|
||||
return (
|
||||
globalThis.window.ethereum?.isCoinbaseWallet ||
|
||||
globalThis.window.ethereum?.providers?.some(
|
||||
(p) => p.isCoinbaseWallet,
|
||||
) ||
|
||||
window_.ethereum?.isCoinbaseWallet ||
|
||||
window_.ethereum?.providers?.some((p) => p.isCoinbaseWallet) ||
|
||||
false
|
||||
);
|
||||
}
|
||||
|
||||
@@ -19,10 +19,11 @@ export const frameWallet = (): WalletConfig<FrameWallet> => ({
|
||||
},
|
||||
connectUI: FrameConnectUI,
|
||||
isInstalled() {
|
||||
if (assertWindowEthereum(globalThis.window)) {
|
||||
const window_: Window | undefined = globalThis?.window;
|
||||
if (assertWindowEthereum(window_)) {
|
||||
return (
|
||||
globalThis.window.ethereum?.isFrame ||
|
||||
globalThis.window.ethereum?.providers?.some((p) => p.isFrame) ||
|
||||
window_.ethereum?.isFrame ||
|
||||
window_.ethereum?.providers?.some((p) => p.isFrame) ||
|
||||
false
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,33 @@
|
||||
# @thirdweb-dev/sdk
|
||||
|
||||
## 3.10.29
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1299](https://github.com/thirdweb-dev/js/pull/1299) [`7e044c66`](https://github.com/thirdweb-dev/js/commit/7e044c664d8a034f5324b859ac3596860c86f9a5) Thanks [@nkrishang](https://github.com/nkrishang)! - Add ERC721LoyaltyCard and ERC721UpdatableMetadata
|
||||
|
||||
- [#1298](https://github.com/thirdweb-dev/js/pull/1298) [`72ada475`](https://github.com/thirdweb-dev/js/commit/72ada47596d5d5c08736c33215faeec636b7156a) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Proper types for contract.metadata.get() for custom contracts
|
||||
|
||||
- [#1304](https://github.com/thirdweb-dev/js/pull/1304) [`2c0bb078`](https://github.com/thirdweb-dev/js/commit/2c0bb0789955f6cd397b6fdb8e990a505251c631) Thanks [@nachoiacovino](https://github.com/nachoiacovino)! - Fix pack code snippets
|
||||
|
||||
- Updated dependencies [[`7e044c66`](https://github.com/thirdweb-dev/js/commit/7e044c664d8a034f5324b859ac3596860c86f9a5), [`b5c6eedb`](https://github.com/thirdweb-dev/js/commit/b5c6eedb38aa3c52eb97f3d25ad83e38c55afe61), [`4961b597`](https://github.com/thirdweb-dev/js/commit/4961b597a098dae0a4eff01a9ef268a65fe1a352)]:
|
||||
- @thirdweb-dev/contracts-js@1.3.9
|
||||
- @thirdweb-dev/chains@0.1.28
|
||||
- @thirdweb-dev/storage@1.1.7
|
||||
|
||||
## 3.10.28
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1278](https://github.com/thirdweb-dev/js/pull/1278) [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2) Thanks [@jnsdls](https://github.com/jnsdls)! - updated various dependencies
|
||||
|
||||
- [#1281](https://github.com/thirdweb-dev/js/pull/1281) [`a3bb17cb`](https://github.com/thirdweb-dev/js/commit/a3bb17cb33f033846fb3b4c8a0a4809ba76cab96) Thanks [@nkrishang](https://github.com/nkrishang)! - Handle ERC4337Signer correctly for signTypedData
|
||||
|
||||
- Updated dependencies [[`2d088d36`](https://github.com/thirdweb-dev/js/commit/2d088d367ca54233836dc69712fd411ab7924205), [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2), [`9daf0449`](https://github.com/thirdweb-dev/js/commit/9daf044926bf995ac8998929dbeca548c5eb8561), [`546353a4`](https://github.com/thirdweb-dev/js/commit/546353a479c11533818ef917c0f6b4d6f8f69872), [`a3bb17cb`](https://github.com/thirdweb-dev/js/commit/a3bb17cb33f033846fb3b4c8a0a4809ba76cab96), [`0135a779`](https://github.com/thirdweb-dev/js/commit/0135a7790cf2acde6b701cb41ea10dd311da5ec3)]:
|
||||
- @thirdweb-dev/storage@1.1.6
|
||||
- @thirdweb-dev/contracts-js@1.3.8
|
||||
- @thirdweb-dev/chains@0.1.27
|
||||
|
||||
## 3.10.27
|
||||
|
||||
### Patch Changes
|
||||
|
||||
+22
-22
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/sdk",
|
||||
"version": "3.10.27",
|
||||
"version": "3.10.29",
|
||||
"description": "The main thirdweb SDK.",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/sdk",
|
||||
"license": "Apache-2.0",
|
||||
@@ -97,35 +97,35 @@
|
||||
"push": "yalc push"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@aws-sdk/client-secrets-manager": "^3.256.0",
|
||||
"@aws-sdk/client-secrets-manager": "^3.363.0",
|
||||
"@ethersproject/abstract-provider": "^5.7.0",
|
||||
"@metaplex-foundation/amman": "^0.12.1",
|
||||
"@metaplex-foundation/amman-client": "^0.2.4",
|
||||
"@metaplex-foundation/js": "^0.19.2",
|
||||
"@metaplex-foundation/mpl-token-metadata": "^2.11",
|
||||
"@microsoft/api-documenter": "^7.19.4",
|
||||
"@microsoft/api-extractor": "^7.29.2",
|
||||
"@metaplex-foundation/mpl-token-metadata": "^2.12.0",
|
||||
"@microsoft/api-documenter": "^7.22.21",
|
||||
"@microsoft/api-extractor": "^7.36.0",
|
||||
"@microsoft/tsdoc": "^0.14.1",
|
||||
"@nomiclabs/hardhat-ethers": "^2.0.5",
|
||||
"@preconstruct/cli": "^2.2.1",
|
||||
"@nomiclabs/hardhat-ethers": "^2.2.3",
|
||||
"@preconstruct/cli": "^2.7.0",
|
||||
"@project-serum/anchor": "^0.25.0",
|
||||
"@solana/spl-token": "^0.3.5",
|
||||
"@solana/web3.js": "^1.62.0",
|
||||
"@swc-node/register": "^1.5.1",
|
||||
"@swc/core": "^1.3.23",
|
||||
"@swc-node/register": "^1.6.6",
|
||||
"@swc/core": "^1.3.67",
|
||||
"@thirdweb-dev/tsconfig": "workspace:*",
|
||||
"@types/bn.js": "^5.1.1",
|
||||
"@types/chai": "^4.3.3",
|
||||
"@types/chai": "^4.3.5",
|
||||
"@types/deep-equal-in-any-order": "^1.0.1",
|
||||
"@types/mocha": "^10.0.0",
|
||||
"@types/node": "^18.0.0",
|
||||
"@types/uuid": "^9.0.0",
|
||||
"@typescript-eslint/eslint-plugin": "^5.33.0",
|
||||
"@typescript-eslint/parser": "^5.33.0",
|
||||
"@types/node": "^18.16.18",
|
||||
"@types/uuid": "^9.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "^5.60.1",
|
||||
"@typescript-eslint/parser": "^5.60.1",
|
||||
"chai": "^4.3.6",
|
||||
"deep-equal-in-any-order": "^1.1.18",
|
||||
"eslint": "^8.42.0",
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"eslint": "^8.43.0",
|
||||
"eslint-config-prettier": "^8.8.0",
|
||||
"eslint-config-thirdweb": "workspace:*",
|
||||
"eslint-plugin-better-tree-shaking": "0.0.3",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
@@ -134,11 +134,11 @@
|
||||
"eslint-plugin-tsdoc": "^0.2.16",
|
||||
"ethers": "^5.7.2",
|
||||
"ethers-aws-kms-signer": "^1.3.2",
|
||||
"hardhat": "^2.9.3",
|
||||
"hardhat": "^2.16.1",
|
||||
"mocha": "^10.2.0",
|
||||
"nyc": "^15.1.0",
|
||||
"prettier": "^2.7.1",
|
||||
"typescript": "^4.7.4",
|
||||
"prettier": "^2.8.8",
|
||||
"typescript": "^5.1.6",
|
||||
"zksync-web3": "^0.14.3"
|
||||
},
|
||||
"peerDependencies": {
|
||||
@@ -187,14 +187,14 @@
|
||||
"bn.js": "^5.2.1",
|
||||
"bs58": "^5.0.0",
|
||||
"buffer": "^6.0.3",
|
||||
"cross-fetch": "^3.1.5",
|
||||
"eventemitter3": "^5.0.0",
|
||||
"cross-fetch": "^3.1.6",
|
||||
"eventemitter3": "^5.0.1",
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
"merkletreejs": "^0.2.24",
|
||||
"tiny-invariant": "^1.2.0",
|
||||
"tweetnacl": "^1.0.3",
|
||||
"uuid": "^9.0.0",
|
||||
"yaml": "^2.1.1",
|
||||
"yaml": "^2.3.1",
|
||||
"zod": "^3.20.2"
|
||||
},
|
||||
"bugs": {
|
||||
|
||||
@@ -31,11 +31,17 @@ export type EIP712Domain = EIP712StandardDomain | EIP712PolygonDomain;
|
||||
* @internal
|
||||
*/
|
||||
export async function signTypedDataInternal(
|
||||
signer: Signer,
|
||||
signerInput: Signer,
|
||||
domain: EIP712Domain,
|
||||
types: Record<string, Array<TypedDataField>>,
|
||||
message: Record<string, any>,
|
||||
) {
|
||||
// Handle ERC4337Signer
|
||||
let signer = signerInput;
|
||||
if ((signerInput as any).originalSigner) {
|
||||
signer = (signerInput as any).originalSigner;
|
||||
}
|
||||
|
||||
const provider = signer?.provider as providers.JsonRpcProvider;
|
||||
if (!provider) {
|
||||
throw new Error("missing provider");
|
||||
@@ -60,7 +66,7 @@ export async function signTypedDataInternal(
|
||||
message,
|
||||
);
|
||||
} catch (err: any) {
|
||||
if (err?.message?.includes("Method eth_signTypedData_v4 not supported")) {
|
||||
if (err?.message?.includes("eth_signTypedData_v4")) {
|
||||
signature = await provider.send("eth_signTypedData", [
|
||||
signerAddress,
|
||||
JSON.stringify(payload),
|
||||
|
||||
@@ -29,6 +29,8 @@ import {
|
||||
FEATURE_NFT_SIGNATURE_MINTABLE_V2,
|
||||
FEATURE_NFT_SHARED_METADATA,
|
||||
FEATURE_NFT_CLAIM_ZORA,
|
||||
FEATURE_NFT_LOYALTY_CARD,
|
||||
FEATURE_NFT_UPDATABLE_METADATA,
|
||||
} from "./erc721-features";
|
||||
import {
|
||||
FEATURE_EDITION,
|
||||
@@ -98,6 +100,8 @@ export type Feature =
|
||||
| typeof FEATURE_NFT_BURNABLE
|
||||
| typeof FEATURE_NFT_TIERED_DROP
|
||||
| typeof FEATURE_NFT_SHARED_METADATA
|
||||
| typeof FEATURE_NFT_LOYALTY_CARD
|
||||
| typeof FEATURE_NFT_UPDATABLE_METADATA
|
||||
| typeof FEATURE_EDITION
|
||||
| typeof FEATURE_EDITION_ENUMERABLE
|
||||
| typeof FEATURE_EDITION_MINTABLE
|
||||
@@ -172,4 +176,6 @@ export const SUPPORTED_FEATURES: Record<string, Feature> = /* @__PURE__ */ {
|
||||
[FEATURE_OFFERS.name]: FEATURE_OFFERS,
|
||||
[FEATURE_ACCOUNT_FACTORY.name]: FEATURE_ACCOUNT_FACTORY,
|
||||
[FEATURE_ACCOUNT.name]: FEATURE_ACCOUNT,
|
||||
[FEATURE_NFT_LOYALTY_CARD.name]: FEATURE_NFT_LOYALTY_CARD,
|
||||
[FEATURE_NFT_UPDATABLE_METADATA.name]: FEATURE_NFT_UPDATABLE_METADATA,
|
||||
};
|
||||
|
||||
@@ -16,6 +16,8 @@ import SignatureMintERC721_V1Abi from "@thirdweb-dev/contracts-js/dist/abis/ISig
|
||||
import TieredDropAbi from "@thirdweb-dev/contracts-js/dist/abis/LazyMintWithTier.json";
|
||||
import SharedMetadataAbi from "@thirdweb-dev/contracts-js/dist/abis/SharedMetadata.json";
|
||||
import zora_IDropERC721 from "@thirdweb-dev/contracts-js/dist/abis/zora_IERC721Drop.json";
|
||||
import ILoyaltyCardAbi from "@thirdweb-dev/contracts-js/dist/abis/ILoyaltyCard.json";
|
||||
import INFTMetadataAbi from "@thirdweb-dev/contracts-js/dist/abis/INFTMetadata.json";
|
||||
|
||||
export const FEATURE_NFT_BURNABLE = {
|
||||
name: "ERC721Burnable",
|
||||
@@ -211,6 +213,30 @@ export const FEATURE_NFT_SHARED_METADATA = /* @__PURE__ */ {
|
||||
features: {},
|
||||
} as const;
|
||||
|
||||
export const FEATURE_NFT_LOYALTY_CARD = {
|
||||
name: "ERC721LoyaltyCard",
|
||||
namespace: "nft.loyaltyCard",
|
||||
docLinks: {
|
||||
// TODO
|
||||
sdk: "",
|
||||
contracts: "",
|
||||
},
|
||||
abis: [ILoyaltyCardAbi],
|
||||
features: {},
|
||||
} as const;
|
||||
|
||||
export const FEATURE_NFT_UPDATABLE_METADATA = {
|
||||
name: "ERC721UpdatableMetadata",
|
||||
namespace: "nft.metadata",
|
||||
docLinks: {
|
||||
// TODO
|
||||
sdk: "",
|
||||
contracts: "",
|
||||
},
|
||||
abis: [INFTMetadataAbi],
|
||||
features: {},
|
||||
} as const;
|
||||
|
||||
export const FEATURE_NFT = /* @__PURE__ */ {
|
||||
name: "ERC721",
|
||||
namespace: "nft",
|
||||
@@ -234,5 +260,7 @@ export const FEATURE_NFT = /* @__PURE__ */ {
|
||||
[FEATURE_NFT_CLAIM_PHASES_V1.name]: FEATURE_NFT_CLAIM_PHASES_V1,
|
||||
[FEATURE_NFT_CLAIM_PHASES_V2.name]: FEATURE_NFT_CLAIM_PHASES_V2,
|
||||
[FEATURE_NFT_SHARED_METADATA.name]: FEATURE_NFT_SHARED_METADATA,
|
||||
[FEATURE_NFT_LOYALTY_CARD.name]: FEATURE_NFT_LOYALTY_CARD,
|
||||
[FEATURE_NFT_UPDATABLE_METADATA.name]: FEATURE_NFT_UPDATABLE_METADATA,
|
||||
},
|
||||
} as const;
|
||||
|
||||
@@ -259,7 +259,7 @@ export class Marketplace implements UpdateableNetwork {
|
||||
(l.type === ListingType.Auction &&
|
||||
BigNumber.from(l.endTimeInEpochSeconds).gt(now) &&
|
||||
BigNumber.from(l.startTimeInEpochSeconds).lte(now)) ||
|
||||
(l.type === ListingType.Direct && l.quantity > 0)
|
||||
(l.type === ListingType.Direct && BigNumber.from(l.quantity).gt(0))
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -355,7 +355,7 @@ export class Pack extends StandardErc1155<PackContract> {
|
||||
* // ERC20 rewards to be included in the pack
|
||||
* erc20Rewards: [
|
||||
* {
|
||||
* assetContract: "0x...",
|
||||
* contractAddress: "0x...",
|
||||
* quantityPerReward: 5,
|
||||
* quantity: 100,
|
||||
* totalRewards: 20,
|
||||
@@ -364,14 +364,14 @@ export class Pack extends StandardErc1155<PackContract> {
|
||||
* // ERC721 rewards to be included in the pack
|
||||
* erc721Rewards: [
|
||||
* {
|
||||
* assetContract: "0x...",
|
||||
* contractAddress: "0x...",
|
||||
* tokenId: 0,
|
||||
* }
|
||||
* ],
|
||||
* // ERC1155 rewards to be included in the pack
|
||||
* erc1155Rewards: [
|
||||
* {
|
||||
* assetContract: "0x...",
|
||||
* contractAddress: "0x...",
|
||||
* tokenId: 0,
|
||||
* quantityPerReward: 1,
|
||||
* totalRewards: 100,
|
||||
@@ -404,7 +404,7 @@ export class Pack extends StandardErc1155<PackContract> {
|
||||
* // ERC20 rewards to be included in the pack
|
||||
* erc20Rewards: [
|
||||
* {
|
||||
* assetContract: "0x...",
|
||||
* contractAddress: "0x...",
|
||||
* quantityPerReward: 5,
|
||||
* quantity: 100,
|
||||
* totalRewards: 20,
|
||||
@@ -413,14 +413,14 @@ export class Pack extends StandardErc1155<PackContract> {
|
||||
* // ERC721 rewards to be included in the pack
|
||||
* erc721Rewards: [
|
||||
* {
|
||||
* assetContract: "0x...",
|
||||
* contractAddress: "0x...",
|
||||
* tokenId: 0,
|
||||
* }
|
||||
* ],
|
||||
* // ERC1155 rewards to be included in the pack
|
||||
* erc1155Rewards: [
|
||||
* {
|
||||
* assetContract: "0x...",
|
||||
* contractAddress: "0x...",
|
||||
* tokenId: 0,
|
||||
* quantityPerReward: 1,
|
||||
* totalRewards: 100,
|
||||
@@ -484,7 +484,7 @@ export class Pack extends StandardErc1155<PackContract> {
|
||||
* // ERC20 rewards to be included in the pack
|
||||
* erc20Rewards: [
|
||||
* {
|
||||
* assetContract: "0x...",
|
||||
* contractAddress: "0x...",
|
||||
* quantityPerReward: 5,
|
||||
* quantity: 100,
|
||||
* totalRewards: 20,
|
||||
@@ -493,14 +493,14 @@ export class Pack extends StandardErc1155<PackContract> {
|
||||
* // ERC721 rewards to be included in the pack
|
||||
* erc721Rewards: [
|
||||
* {
|
||||
* assetContract: "0x...",
|
||||
* contractAddress: "0x...",
|
||||
* tokenId: 0,
|
||||
* }
|
||||
* ],
|
||||
* // ERC1155 rewards to be included in the pack
|
||||
* erc1155Rewards: [
|
||||
* {
|
||||
* assetContract: "0x...",
|
||||
* contractAddress: "0x...",
|
||||
* tokenId: 0,
|
||||
* quantityPerReward: 1,
|
||||
* totalRewards: 100,
|
||||
|
||||
@@ -109,7 +109,7 @@ export class SmartContract<
|
||||
public estimator: GasCostEstimator<TContract>;
|
||||
public publishedMetadata: ContractPublishedMetadata<TContract>;
|
||||
public abi: Abi;
|
||||
public metadata: ContractMetadata<BaseContract, any>;
|
||||
public metadata: ContractMetadata<BaseContract, typeof CustomContractSchema>;
|
||||
|
||||
/**
|
||||
* Handle royalties
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
import { buildTransactionFunction } from "../../common/transactions";
|
||||
import { FEATURE_NFT_LOYALTY_CARD } from "../../constants/erc721-features";
|
||||
import { DetectableFeature } from "../interfaces/DetectableFeature";
|
||||
import { ContractWrapper } from "./contract-wrapper";
|
||||
import { Transaction } from "./transactions";
|
||||
import type { ILoyaltyCard } from "@thirdweb-dev/contracts-js";
|
||||
import { BigNumberish } from "ethers";
|
||||
|
||||
export class Erc721LoyaltyCard implements DetectableFeature {
|
||||
featureName = FEATURE_NFT_LOYALTY_CARD.name;
|
||||
|
||||
private contractWrapper: ContractWrapper<ILoyaltyCard>;
|
||||
|
||||
constructor(contractWrapper: ContractWrapper<ILoyaltyCard>) {
|
||||
this.contractWrapper = contractWrapper;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cancel loyalty card NFTs
|
||||
*
|
||||
* @remarks Cancel loyalty card NFTs held by the connected wallet
|
||||
*
|
||||
* @example
|
||||
* ```javascript
|
||||
* // The token ID of the loyalty card you want to cancel
|
||||
* const tokenId = 0;
|
||||
*
|
||||
* await contract.nft.loyaltyCard.cancel(tokenId);
|
||||
* ```
|
||||
*/
|
||||
cancel = /* @__PURE__ */ buildTransactionFunction(
|
||||
async (tokenId: BigNumberish) => {
|
||||
return Transaction.fromContractWrapper({
|
||||
contractWrapper: this.contractWrapper,
|
||||
method: "cancel",
|
||||
args: [tokenId],
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
/**
|
||||
* Revoke loyalty card NFTs
|
||||
*
|
||||
* @remarks Revoke loyalty card NFTs held by some owner.
|
||||
*
|
||||
* @example
|
||||
* ```javascript
|
||||
* // The token ID of the loyalty card you want to revoke
|
||||
* const tokenId = 0;
|
||||
*
|
||||
* await contract.nft.loyaltyCard.revoke(tokenId);
|
||||
* ```
|
||||
*/
|
||||
revoke = /* @__PURE__ */ buildTransactionFunction(
|
||||
async (tokenId: BigNumberish) => {
|
||||
return Transaction.fromContractWrapper({
|
||||
contractWrapper: this.contractWrapper,
|
||||
method: "revoke",
|
||||
args: [tokenId],
|
||||
});
|
||||
},
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
import { NFTMetadataOrUri } from "../../../core/schema/nft";
|
||||
import { uploadOrExtractURI } from "../../common/nft";
|
||||
import { buildTransactionFunction } from "../../common/transactions";
|
||||
import { FEATURE_NFT_UPDATABLE_METADATA } from "../../constants/erc721-features";
|
||||
import { DetectableFeature } from "../interfaces/DetectableFeature";
|
||||
import { ContractWrapper } from "./contract-wrapper";
|
||||
import { Transaction } from "./transactions";
|
||||
import type { INFTMetadata } from "@thirdweb-dev/contracts-js";
|
||||
import type { ThirdwebStorage } from "@thirdweb-dev/storage";
|
||||
import { BigNumberish } from "ethers";
|
||||
|
||||
export class Erc721UpdatableMetadata implements DetectableFeature {
|
||||
featureName = FEATURE_NFT_UPDATABLE_METADATA.name;
|
||||
|
||||
private contractWrapper: ContractWrapper<INFTMetadata>;
|
||||
private storage: ThirdwebStorage;
|
||||
|
||||
constructor(
|
||||
contractWrapper: ContractWrapper<INFTMetadata>,
|
||||
storage: ThirdwebStorage,
|
||||
) {
|
||||
this.contractWrapper = contractWrapper;
|
||||
this.storage = storage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the metadata of an NFT
|
||||
*
|
||||
* @remarks Update the metadata of an NFT
|
||||
*
|
||||
* @example
|
||||
* ```javascript
|
||||
* // The token ID of the NFT whose metadata you want to update
|
||||
* const tokenId = 0;
|
||||
* // The new metadata
|
||||
* const metadata = { name: "My NFT", description: "My NFT description""}
|
||||
*
|
||||
* await contract.nft.metadata.update(tokenId, metadata);
|
||||
* ```
|
||||
*/
|
||||
update = /* @__PURE__ */ buildTransactionFunction(
|
||||
async (tokenId: BigNumberish, metadata: NFTMetadataOrUri) => {
|
||||
const uri = await uploadOrExtractURI(metadata, this.storage);
|
||||
return Transaction.fromContractWrapper({
|
||||
contractWrapper: this.contractWrapper,
|
||||
method: "setTokenURI",
|
||||
args: [tokenId, uri],
|
||||
});
|
||||
},
|
||||
);
|
||||
}
|
||||
@@ -27,6 +27,8 @@ import {
|
||||
FEATURE_NFT_TIERED_DROP,
|
||||
FEATURE_NFT_SIGNATURE_MINTABLE_V2,
|
||||
FEATURE_NFT_SHARED_METADATA,
|
||||
FEATURE_NFT_LOYALTY_CARD,
|
||||
FEATURE_NFT_UPDATABLE_METADATA,
|
||||
} from "../../constants/erc721-features";
|
||||
import type { Address } from "../../schema/shared/Address";
|
||||
import type { AddressOrEns } from "../../schema/shared/AddressOrEnsSchema";
|
||||
@@ -58,6 +60,8 @@ import type {
|
||||
Zora_IERC721Drop,
|
||||
SharedMetadata,
|
||||
OpenEditionERC721,
|
||||
ILoyaltyCard,
|
||||
INFTMetadata,
|
||||
} from "@thirdweb-dev/contracts-js";
|
||||
import type { ThirdwebStorage } from "@thirdweb-dev/storage";
|
||||
import { BigNumber, BigNumberish, constants } from "ethers";
|
||||
@@ -69,6 +73,8 @@ import { Erc721ClaimableWithConditions } from "./erc-721-claim-conditions";
|
||||
import { Erc721Claimable } from "./erc-721-claimable";
|
||||
import { Erc721SharedMetadata } from "./erc-721-shared-metadata";
|
||||
import { Erc721ClaimableZora } from "./erc-721-claim-zora";
|
||||
import { Erc721LoyaltyCard } from "./erc-721-loyalty-card";
|
||||
import { Erc721UpdatableMetadata } from "./erc-721-metadata";
|
||||
|
||||
/**
|
||||
* Standard ERC721 NFT functions
|
||||
@@ -100,6 +106,8 @@ export class Erc721<
|
||||
private claimCustom: Erc721Claimable | undefined;
|
||||
private erc721SharedMetadata: Erc721SharedMetadata | undefined;
|
||||
private claimZora: Erc721ClaimableZora | undefined;
|
||||
private loyaltyCard: Erc721LoyaltyCard | undefined;
|
||||
private updatableMetadata: Erc721UpdatableMetadata | undefined;
|
||||
protected contractWrapper: ContractWrapper<T>;
|
||||
protected storage: ThirdwebStorage;
|
||||
|
||||
@@ -125,6 +133,8 @@ export class Erc721<
|
||||
this.claimCustom = this.detectErc721Claimable();
|
||||
this.claimZora = this.detectErc721ClaimableZora();
|
||||
this.erc721SharedMetadata = this.detectErc721SharedMetadata();
|
||||
this.loyaltyCard = this.detectErc721LoyaltyCard();
|
||||
this.updatableMetadata = this.detectErc721UpdatableMetadata();
|
||||
this._chainId = chainId;
|
||||
}
|
||||
|
||||
@@ -606,6 +616,54 @@ export class Erc721<
|
||||
},
|
||||
);
|
||||
|
||||
////// ERC721 Loyalty Card Extension //////
|
||||
|
||||
/**
|
||||
* Cancel loyalty card NFTs
|
||||
*
|
||||
* @remarks Cancel loyalty card NFTs held by the connected wallet
|
||||
*
|
||||
* @example
|
||||
* ```javascript
|
||||
* // The token ID of the loyalty card you want to cancel
|
||||
* const tokenId = 0;
|
||||
*
|
||||
* const result = await contract.erc721.cancel(tokenId);
|
||||
* ```
|
||||
* @twfeature ERC721LoyaltyCard
|
||||
*/
|
||||
cancel = /* @__PURE__ */ buildTransactionFunction(
|
||||
async (tokenId: BigNumberish) => {
|
||||
return assertEnabled(
|
||||
this.loyaltyCard,
|
||||
FEATURE_NFT_LOYALTY_CARD,
|
||||
).cancel.prepare(tokenId);
|
||||
},
|
||||
);
|
||||
|
||||
/**
|
||||
* Revoke loyalty card NFTs
|
||||
*
|
||||
* @remarks Revoke loyalty card NFTs held by some owner.
|
||||
*
|
||||
* @example
|
||||
* ```javascript
|
||||
* // The token ID of the loyalty card you want to revoke
|
||||
* const tokenId = 0;
|
||||
*
|
||||
* const result = await contract.erc721.revoke(tokenId);
|
||||
* ```
|
||||
* @twfeature ERC721LoyaltyCard
|
||||
*/
|
||||
revoke = /* @__PURE__ */ buildTransactionFunction(
|
||||
async (tokenId: BigNumberish) => {
|
||||
return assertEnabled(
|
||||
this.loyaltyCard,
|
||||
FEATURE_NFT_LOYALTY_CARD,
|
||||
).revoke.prepare(tokenId);
|
||||
},
|
||||
);
|
||||
|
||||
////// ERC721 LazyMint Extension //////
|
||||
|
||||
/**
|
||||
@@ -649,6 +707,33 @@ export class Erc721<
|
||||
},
|
||||
);
|
||||
|
||||
////// ERC721 Metadata Extension //////
|
||||
|
||||
/**
|
||||
* Update the metadata of an NFT
|
||||
*
|
||||
* @remarks Update the metadata of an NFT
|
||||
*
|
||||
* @example
|
||||
* ```javascript
|
||||
* // The token ID of the NFT whose metadata you want to update
|
||||
* const tokenId = 0;
|
||||
* // The new metadata
|
||||
* const metadata = { name: "My NFT", description: "My NFT description""}
|
||||
*
|
||||
* await contract.erc721.update(tokenId, metadata);
|
||||
* ```
|
||||
* @twfeature ERC721UpdatableMetadata
|
||||
*/
|
||||
update = /* @__PURE__ */ buildTransactionFunction(
|
||||
async (tokenId: BigNumberish, metadata: NFTMetadataOrUri) => {
|
||||
return assertEnabled(
|
||||
this.updatableMetadata,
|
||||
FEATURE_NFT_UPDATABLE_METADATA,
|
||||
).update.prepare(tokenId, metadata);
|
||||
},
|
||||
);
|
||||
|
||||
////// ERC721 Claimable Extension //////
|
||||
|
||||
/**
|
||||
@@ -1120,4 +1205,28 @@ export class Erc721<
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
private detectErc721LoyaltyCard(): Erc721LoyaltyCard | undefined {
|
||||
if (
|
||||
detectContractFeature<ILoyaltyCard>(
|
||||
this.contractWrapper,
|
||||
"ERC721LoyaltyCard",
|
||||
)
|
||||
) {
|
||||
return new Erc721LoyaltyCard(this.contractWrapper);
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
private detectErc721UpdatableMetadata(): Erc721UpdatableMetadata | undefined {
|
||||
if (
|
||||
detectContractFeature<INFTMetadata>(
|
||||
this.contractWrapper,
|
||||
"ERC721UpdatableMetadata",
|
||||
)
|
||||
) {
|
||||
return new Erc721UpdatableMetadata(this.contractWrapper, this.storage);
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ import {
|
||||
DirectListingInputParams,
|
||||
DirectListingInputParamsSchema,
|
||||
} from "../../schema/marketplacev3/direct-listings";
|
||||
import type { MarketplaceFilter } from "../../types/marketplace";
|
||||
import type { MarketplaceFilterWithoutOfferor } from "../../types/marketplace";
|
||||
import type { DirectListingV3 } from "../../types/marketplacev3";
|
||||
import { DetectableFeature } from "../interfaces/DetectableFeature";
|
||||
import { TransactionResultWithId } from "../types";
|
||||
@@ -116,7 +116,7 @@ export class MarketplaceV3DirectListings<TContract extends DirectListingsLogic>
|
||||
* @returns the Direct listing object array
|
||||
* @twfeature DirectListings
|
||||
*/
|
||||
public async getAll(filter?: MarketplaceFilter): Promise<DirectListingV3[]> {
|
||||
public async getAll(filter?: MarketplaceFilterWithoutOfferor): Promise<DirectListingV3[]> {
|
||||
const totalListings = await this.getTotalCount();
|
||||
|
||||
let start = BigNumber.from(filter?.start || 0).toNumber();
|
||||
@@ -156,7 +156,7 @@ export class MarketplaceV3DirectListings<TContract extends DirectListingsLogic>
|
||||
* @twfeature DirectListings
|
||||
*/
|
||||
public async getAllValid(
|
||||
filter?: MarketplaceFilter,
|
||||
filter?: MarketplaceFilterWithoutOfferor,
|
||||
): Promise<DirectListingV3[]> {
|
||||
const totalListings = await this.getTotalCount();
|
||||
|
||||
@@ -955,7 +955,7 @@ export class MarketplaceV3DirectListings<TContract extends DirectListingsLogic>
|
||||
|
||||
private async applyFilter(
|
||||
listings: IDirectListings.ListingStructOutput[],
|
||||
filter?: MarketplaceFilter,
|
||||
filter?: MarketplaceFilterWithoutOfferor,
|
||||
) {
|
||||
let rawListings = [...listings];
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ import {
|
||||
EnglishAuctionInputParams,
|
||||
EnglishAuctionInputParamsSchema,
|
||||
} from "../../schema/marketplacev3/english-auctions";
|
||||
import type { MarketplaceFilter } from "../../types/marketplace";
|
||||
import type { MarketplaceFilterWithoutOfferor } from "../../types/marketplace";
|
||||
import { CurrencyValue, Price } from "../../types/currency";
|
||||
import { EnglishAuction, Bid } from "../../types/marketplacev3";
|
||||
import { DetectableFeature } from "../interfaces/DetectableFeature";
|
||||
@@ -104,7 +104,7 @@ export class MarketplaceV3EnglishAuctions<
|
||||
* @returns the Auction object array
|
||||
* @twfeature EnglishAuctions
|
||||
*/
|
||||
public async getAll(filter?: MarketplaceFilter): Promise<EnglishAuction[]> {
|
||||
public async getAll(filter?: MarketplaceFilterWithoutOfferor): Promise<EnglishAuction[]> {
|
||||
const totalAuctions = await this.getTotalCount();
|
||||
|
||||
let start = BigNumber.from(filter?.start || 0).toNumber();
|
||||
@@ -142,7 +142,7 @@ export class MarketplaceV3EnglishAuctions<
|
||||
* @twfeature EnglishAuctions
|
||||
*/
|
||||
public async getAllValid(
|
||||
filter?: MarketplaceFilter,
|
||||
filter?: MarketplaceFilterWithoutOfferor,
|
||||
): Promise<EnglishAuction[]> {
|
||||
const totalAuctions = await this.getTotalCount();
|
||||
|
||||
@@ -885,7 +885,7 @@ export class MarketplaceV3EnglishAuctions<
|
||||
|
||||
private async applyFilter(
|
||||
auctions: IEnglishAuctions.AuctionStructOutput[],
|
||||
filter?: MarketplaceFilter,
|
||||
filter?: MarketplaceFilterWithoutOfferor,
|
||||
) {
|
||||
let rawAuctions = [...auctions];
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ import {
|
||||
OfferInputParams,
|
||||
OfferInputParamsSchema,
|
||||
} from "../../schema/marketplacev3/offer";
|
||||
import type { MarketplaceFilter } from "../../types/marketplace";
|
||||
import type { MarketplaceFilterWithoutSeller } from "../../types/marketplace";
|
||||
import { OfferV3 } from "../../types/marketplacev3";
|
||||
import { DetectableFeature } from "../interfaces/DetectableFeature";
|
||||
import { TransactionResultWithId } from "../types";
|
||||
@@ -96,7 +96,7 @@ export class MarketplaceV3Offers<TContract extends OffersLogic>
|
||||
* @returns the Offer object array
|
||||
* @twfeature Offers
|
||||
*/
|
||||
public async getAll(filter?: MarketplaceFilter): Promise<OfferV3[]> {
|
||||
public async getAll(filter?: MarketplaceFilterWithoutSeller): Promise<OfferV3[]> {
|
||||
const totalOffers = await this.getTotalCount();
|
||||
|
||||
let start = BigNumber.from(filter?.start || 0).toNumber();
|
||||
@@ -133,7 +133,7 @@ export class MarketplaceV3Offers<TContract extends OffersLogic>
|
||||
* @returns the Offer object array
|
||||
* @twfeature Offers
|
||||
*/
|
||||
public async getAllValid(filter?: MarketplaceFilter): Promise<OfferV3[]> {
|
||||
public async getAllValid(filter?: MarketplaceFilterWithoutSeller): Promise<OfferV3[]> {
|
||||
const totalOffers = await this.getTotalCount();
|
||||
|
||||
let start = BigNumber.from(filter?.start || 0).toNumber();
|
||||
@@ -457,7 +457,7 @@ export class MarketplaceV3Offers<TContract extends OffersLogic>
|
||||
|
||||
private async applyFilter(
|
||||
offers: IOffers.OfferStructOutput[],
|
||||
filter?: MarketplaceFilter,
|
||||
filter?: MarketplaceFilterWithoutSeller,
|
||||
) {
|
||||
let rawOffers = [...offers];
|
||||
|
||||
|
||||
@@ -109,6 +109,8 @@ import {
|
||||
PrecomputedDeploymentTransaction,
|
||||
} from "../types/any-evm/deploy-data";
|
||||
import { fetchContractMetadataFromAddress } from "../common/metadata-resolver";
|
||||
import { LoyaltyCardContractDeploy } from "../schema/contracts/loyalty-card";
|
||||
import { getDefaultTrustedForwarders } from "../constants";
|
||||
|
||||
/**
|
||||
* The main entry point for the thirdweb SDK
|
||||
@@ -708,7 +710,7 @@ export class ThirdwebSDK extends RPCConnectionHandler {
|
||||
address,
|
||||
chainId,
|
||||
contractType: async () => "custom" as const,
|
||||
metadata: async () => ({}),
|
||||
metadata: async () => ({ name: "" }),
|
||||
extensions: async () => [],
|
||||
};
|
||||
}
|
||||
@@ -741,7 +743,7 @@ export class ThirdwebSDK extends RPCConnectionHandler {
|
||||
address,
|
||||
chainId,
|
||||
contractType: async () => "custom" as const,
|
||||
metadata: async () => ({}),
|
||||
metadata: async () => ({ name: "" }),
|
||||
extensions: async () => [],
|
||||
};
|
||||
}
|
||||
@@ -945,6 +947,65 @@ export class ContractDeployer extends RPCConnectionHandler {
|
||||
},
|
||||
);
|
||||
|
||||
/**
|
||||
* Deploys a new LoyaltyCard contract
|
||||
*
|
||||
* @remarks Deploys a LoyaltyCard contract and returns the address of the deployed contract
|
||||
*
|
||||
* @example
|
||||
* ```javascript
|
||||
* const contractAddress = await sdk.deployer.deployLoyaltyCard({
|
||||
* name: "My Loyalty Program",
|
||||
* primary_sale_recipient: "your-address",
|
||||
* });
|
||||
* ```
|
||||
* @param metadata - the contract metadata
|
||||
* @returns the address of the deployed contract
|
||||
*/
|
||||
deployLoyaltyCard = /* @__PURE__ */ buildDeployTransactionFunction(
|
||||
async (
|
||||
metadata: NFTContractDeployMetadata,
|
||||
options?: DeployOptions,
|
||||
): Promise<DeployTransaction> => {
|
||||
const parsedMetadata = await LoyaltyCardContractDeploy.parseAsync(
|
||||
metadata,
|
||||
);
|
||||
const contractURI = await this.storage.upload(parsedMetadata);
|
||||
|
||||
const chainId = (await this.getProvider().getNetwork()).chainId;
|
||||
const trustedForwarders = getDefaultTrustedForwarders(chainId);
|
||||
// add default forwarders to any custom forwarders passed in
|
||||
if (
|
||||
metadata.trusted_forwarders &&
|
||||
metadata.trusted_forwarders.length > 0
|
||||
) {
|
||||
trustedForwarders.push(...metadata.trusted_forwarders);
|
||||
}
|
||||
|
||||
const signerAddress = await this.getSigner()?.getAddress();
|
||||
|
||||
const deployArgs = [
|
||||
signerAddress,
|
||||
parsedMetadata.name,
|
||||
parsedMetadata.symbol,
|
||||
contractURI,
|
||||
trustedForwarders,
|
||||
parsedMetadata.primary_sale_recipient,
|
||||
parsedMetadata.fee_recipient,
|
||||
parsedMetadata.seller_fee_basis_points,
|
||||
parsedMetadata.platform_fee_basis_points,
|
||||
parsedMetadata.platform_fee_recipient,
|
||||
];
|
||||
|
||||
return await this.deployReleasedContract.prepare(
|
||||
THIRDWEB_DEPLOYER,
|
||||
"LoyaltyCard",
|
||||
deployArgs,
|
||||
options,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
/**
|
||||
* Deploys a new SignatureDrop contract
|
||||
*
|
||||
|
||||
@@ -16,6 +16,7 @@ export const CommonContractSchema = /* @__PURE__ */ (() =>
|
||||
image: FileOrBufferOrStringSchema.optional(),
|
||||
external_link: z.string().optional(),
|
||||
app_uri: z.string().optional(),
|
||||
social_urls: z.record(z.string()).optional(),
|
||||
}))();
|
||||
|
||||
export type CommonContractSchemaInput = z.input<typeof CommonContractSchema>;
|
||||
|
||||
@@ -37,7 +37,7 @@ export type CustomContractMetadata = z.input<typeof BYOCContractMetadataSchema>;
|
||||
export const CustomContractInput = /* @__PURE__ */ (() =>
|
||||
BYOCContractMetadataSchema.merge(
|
||||
CommonRoyaltySchema.merge(MerkleSchema).merge(CommonSymbolSchema).partial(),
|
||||
))();
|
||||
).catchall(z.any()))();
|
||||
|
||||
/**
|
||||
* @internal
|
||||
@@ -45,7 +45,7 @@ export const CustomContractInput = /* @__PURE__ */ (() =>
|
||||
export const CustomContractOutput = /* @__PURE__ */ (() =>
|
||||
CommonContractOutputSchema.merge(
|
||||
CommonRoyaltySchema.merge(MerkleSchema).merge(CommonSymbolSchema).partial(),
|
||||
))();
|
||||
).catchall(z.any()))();
|
||||
|
||||
/**
|
||||
* @internal
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
import {
|
||||
CommonContractOutputSchema,
|
||||
CommonContractSchema,
|
||||
CommonPlatformFeeSchema,
|
||||
CommonPrimarySaleSchema,
|
||||
CommonRoyaltySchema,
|
||||
CommonSymbolSchema,
|
||||
CommonTrustedForwarderSchema,
|
||||
} from "./common";
|
||||
|
||||
export const LoyaltyCardContractInput =
|
||||
/* @__PURE__ */ CommonContractSchema.merge(CommonRoyaltySchema).merge(
|
||||
CommonSymbolSchema,
|
||||
);
|
||||
|
||||
export const LoyaltyCardContractOutput =
|
||||
/* @__PURE__ */ CommonContractOutputSchema.merge(CommonRoyaltySchema).merge(
|
||||
CommonSymbolSchema,
|
||||
);
|
||||
|
||||
export const LoyaltyCardContractDeploy =
|
||||
/* @__PURE__ */ LoyaltyCardContractInput.merge(CommonPlatformFeeSchema)
|
||||
.merge(CommonPrimarySaleSchema)
|
||||
.merge(CommonTrustedForwarderSchema);
|
||||
@@ -11,3 +11,13 @@ export interface MarketplaceFilter extends QueryAllParams {
|
||||
tokenId?: BigNumberish;
|
||||
offeror?: AddressOrEns;
|
||||
}
|
||||
|
||||
/**
|
||||
* English auctions and Direct Listings V3 cannot be retrieved by offeror.
|
||||
*/
|
||||
export interface MarketplaceFilterWithoutOfferor extends Omit<MarketplaceFilter, 'offeror'> {}
|
||||
|
||||
/**
|
||||
* Offers V3 cannot be retrieved by seller.
|
||||
*/
|
||||
export interface MarketplaceFilterWithoutSeller extends Omit<MarketplaceFilter, 'seller'> {}
|
||||
@@ -1,7 +1,4 @@
|
||||
import { Keypair } from "@solana/web3.js";
|
||||
import fs from "fs";
|
||||
import os from "os";
|
||||
import path from "path";
|
||||
import yaml from "yaml";
|
||||
|
||||
/**
|
||||
@@ -9,14 +6,14 @@ import yaml from "yaml";
|
||||
*/
|
||||
function getConfig(): any {
|
||||
// Path to Solana CLI config file
|
||||
const CONFIG_FILE_PATH = path.resolve(
|
||||
os.homedir(),
|
||||
const CONFIG_FILE_PATH = require("path").resolve(
|
||||
require("os").homedir(),
|
||||
".config",
|
||||
"solana",
|
||||
"cli",
|
||||
"config.yml",
|
||||
);
|
||||
const configYml = fs.readFileSync(CONFIG_FILE_PATH, {
|
||||
const configYml = require("fs").readFileSync(CONFIG_FILE_PATH, {
|
||||
encoding: "utf8",
|
||||
});
|
||||
return yaml.parse(configYml);
|
||||
@@ -62,7 +59,9 @@ export function getPayer(): Keypair {
|
||||
* Create a Keypair from a secret key stored in file as bytes' array
|
||||
*/
|
||||
export function createKeypairFromFile(filePath: string): Keypair {
|
||||
const secretKeyString = fs.readFileSync(filePath, { encoding: "utf8" });
|
||||
const secretKeyString = require("fs").readFileSync(filePath, {
|
||||
encoding: "utf8",
|
||||
});
|
||||
const secretKey = Uint8Array.from(JSON.parse(secretKeyString));
|
||||
return Keypair.fromSecretKey(secretKey);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,27 @@
|
||||
# @thirdweb-dev/storage
|
||||
|
||||
## 1.1.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1309](https://github.com/thirdweb-dev/js/pull/1309) [`4961b597`](https://github.com/thirdweb-dev/js/commit/4961b597a098dae0a4eff01a9ef268a65fe1a352) Thanks [@jnsdls](https://github.com/jnsdls)! - unblock storage domains
|
||||
|
||||
## 1.1.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1286](https://github.com/thirdweb-dev/js/pull/1286) [`2d088d36`](https://github.com/thirdweb-dev/js/commit/2d088d367ca54233836dc69712fd411ab7924205) Thanks [@jnsdls](https://github.com/jnsdls)! - fix double `//` case
|
||||
|
||||
- [#1278](https://github.com/thirdweb-dev/js/pull/1278) [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2) Thanks [@jnsdls](https://github.com/jnsdls)! - updated various dependencies
|
||||
|
||||
- [#1232](https://github.com/thirdweb-dev/js/pull/1232) [`9daf0449`](https://github.com/thirdweb-dev/js/commit/9daf044926bf995ac8998929dbeca548c5eb8561) Thanks [@nessup](https://github.com/nessup)! - Switch over to the new `ipfs.thirdweb-storage.com` public gateway.
|
||||
Better fallback logic for if a gateway is down.
|
||||
Faster loading of files from the default gateway by skipping a roundtrip to redirect.
|
||||
|
||||
- [#1285](https://github.com/thirdweb-dev/js/pull/1285) [`546353a4`](https://github.com/thirdweb-dev/js/commit/546353a479c11533818ef917c0f6b4d6f8f69872) Thanks [@jnsdls](https://github.com/jnsdls)! - add additional fallback gateways
|
||||
|
||||
- [#1287](https://github.com/thirdweb-dev/js/pull/1287) [`0135a779`](https://github.com/thirdweb-dev/js/commit/0135a7790cf2acde6b701cb41ea10dd311da5ec3) Thanks [@jnsdls](https://github.com/jnsdls)! - fix uploaded-check
|
||||
|
||||
## 1.1.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/storage",
|
||||
"version": "1.1.5",
|
||||
"version": "1.1.7",
|
||||
"main": "dist/thirdweb-dev-storage.cjs.js",
|
||||
"module": "dist/thirdweb-dev-storage.esm.js",
|
||||
"browser": {
|
||||
@@ -43,28 +43,29 @@
|
||||
}
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/preset-env": "^7.18.10",
|
||||
"@babel/preset-typescript": "^7.18.6",
|
||||
"@microsoft/api-documenter": "^7.19.4",
|
||||
"@microsoft/api-extractor": "^7.29.2",
|
||||
"@babel/preset-env": "^7.22.5",
|
||||
"@babel/preset-typescript": "^7.22.5",
|
||||
"@microsoft/api-documenter": "^7.22.21",
|
||||
"@microsoft/api-extractor": "^7.36.0",
|
||||
"@microsoft/tsdoc": "^0.14.1",
|
||||
"@preconstruct/cli": "^2.2.1",
|
||||
"@swc-node/register": "^1.5.1",
|
||||
"@preconstruct/cli": "^2.7.0",
|
||||
"@swc-node/register": "^1.6.6",
|
||||
"@thirdweb-dev/tsconfig": "workspace:*",
|
||||
"@types/chai": "^4.3.3",
|
||||
"@types/chai": "^4.3.5",
|
||||
"@types/mocha": "^10.0.0",
|
||||
"@types/uuid": "^9.0.0",
|
||||
"@typescript-eslint/eslint-plugin": "^5.33.0",
|
||||
"@typescript-eslint/parser": "^5.33.0",
|
||||
"@types/uuid": "^9.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "^5.60.1",
|
||||
"@typescript-eslint/parser": "^5.60.1",
|
||||
"chai": "^4.3.6",
|
||||
"eslint": "^8.42.0",
|
||||
"eslint": "^8.43.0",
|
||||
"eslint-config-thirdweb": "workspace:*",
|
||||
"esm": "^3.2.25",
|
||||
"mocha": "^10.2.0",
|
||||
"typescript": "^4.7.4"
|
||||
"typescript": "^5.1.6"
|
||||
},
|
||||
"dependencies": {
|
||||
"cross-fetch": "^3.1.5",
|
||||
"cid-tool": "^3.0.0",
|
||||
"cross-fetch": "^3.1.6",
|
||||
"form-data": "^4.0.0",
|
||||
"ipfs-unixfs-importer": "^7.0.1",
|
||||
"uuid": "^9.0.0"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { FileOrBufferOrString } from "../types";
|
||||
import { DEFAULT_GATEWAY_URLS } from "./urls";
|
||||
import { DEFAULT_GATEWAY_URLS, getGatewayUrlForCid } from "./urls";
|
||||
import { isBufferOrStringWithName } from "./utils";
|
||||
import fetch from "cross-fetch";
|
||||
import { importer } from "ipfs-unixfs-importer";
|
||||
@@ -67,7 +67,8 @@ export async function getCID(
|
||||
}
|
||||
|
||||
export async function isUploaded(cid: string) {
|
||||
const res = await fetch(`${DEFAULT_GATEWAY_URLS["ipfs://"][0]}${cid}`, {
|
||||
const url = getGatewayUrlForCid(DEFAULT_GATEWAY_URLS["ipfs://"][0], cid);
|
||||
const res = await fetch(url, {
|
||||
method: "HEAD",
|
||||
headers: {
|
||||
// tell the gateway to skip fetching from origin in order to fail fast on 404s and just re-upload in those cases
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { GatewayUrls } from "../types";
|
||||
import CIDTool from "cid-tool";
|
||||
|
||||
/**
|
||||
* @internal
|
||||
@@ -6,13 +7,16 @@ import { GatewayUrls } from "../types";
|
||||
export const DEFAULT_GATEWAY_URLS: GatewayUrls = {
|
||||
// Note: Gateway URLs should have trailing slashes (we clean this on user input)
|
||||
"ipfs://": [
|
||||
"https://ipfs-3.thirdwebcdn.com/ipfs/",
|
||||
"https://ipfs-4.thirdwebcdn.com/ipfs/",
|
||||
"https://ipfs-5.thirdwebcdn.com/ipfs/",
|
||||
"https://cloudflare-ipfs.com/ipfs/",
|
||||
"https://ipfs.io/ipfs/",
|
||||
// TODO this one can become the default again once it's stable (no more VT issues)
|
||||
"https://ipfs.thirdwebcdn.com/ipfs/",
|
||||
"https://{cid}.gateway.ipfscdn.io/{path}",
|
||||
"https://{cid}.ipfs.twipfs.com/{path}",
|
||||
"https://{cid}.ipfs.twgateway.com/{path}",
|
||||
|
||||
"https://{cid}.ipfs.thirdwebstorage.com/{path}",
|
||||
"https://{cid}.ipfs.thirdwebipfs.com/{path}",
|
||||
"https://{cid}.ipfs.thirdwebgateway.com/{path}",
|
||||
"https://{cid}.ipfs-public.thirdwebcdn.com/{path}",
|
||||
"https://cloudflare-ipfs.com/ipfs/{cid}/{path}",
|
||||
"https://ipfs.io/ipfs/{cid}/{path}",
|
||||
],
|
||||
};
|
||||
|
||||
@@ -41,6 +45,33 @@ export function parseGatewayUrls(
|
||||
return gatewayUrls || {};
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
export function getGatewayUrlForCid(gatewayUrl: string, cid: string): string {
|
||||
const parts = cid.split("/");
|
||||
const hash = convertCidToV1(parts[0]);
|
||||
const filePath = parts.slice(1).join("/");
|
||||
|
||||
let url = gatewayUrl;
|
||||
|
||||
// If the URL contains {cid} or {path} tokens, replace them with the CID and path
|
||||
// Both tokens must be present for the URL to be valid
|
||||
if (gatewayUrl.includes("{cid}") && gatewayUrl.includes("{path}")) {
|
||||
url = url.replace("{cid}", hash).replace("{path}", filePath);
|
||||
}
|
||||
// If the URL contains only the {cid} token, replace it with the CID
|
||||
else if (gatewayUrl.includes("{cid}")) {
|
||||
url = url.replace("{cid}", hash);
|
||||
}
|
||||
// If those tokens don't exist, use the canonical gateway URL format
|
||||
else {
|
||||
url += `${hash}/${filePath}`;
|
||||
}
|
||||
|
||||
return url;
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
@@ -53,9 +84,11 @@ export function prepareGatewayUrls(gatewayUrls?: GatewayUrls): GatewayUrls {
|
||||
for (const key of Object.keys(DEFAULT_GATEWAY_URLS)) {
|
||||
if (gatewayUrls && gatewayUrls[key]) {
|
||||
// Make sure that all user gateway URLs have trailing slashes
|
||||
const cleanedGatewayUrls = gatewayUrls[key].map(
|
||||
(url) => url.replace(/\/$/, "") + "/",
|
||||
const cleanedGatewayUrls = gatewayUrls[key].map((url) =>
|
||||
// don't add trailing slash if the URL contains {path} token
|
||||
url.includes("{path}") ? url : url.replace(/\/$/, "") + "/",
|
||||
);
|
||||
|
||||
allGatewayUrls[key] = [
|
||||
...cleanedGatewayUrls,
|
||||
...DEFAULT_GATEWAY_URLS[key],
|
||||
@@ -65,3 +98,17 @@ export function prepareGatewayUrls(gatewayUrls?: GatewayUrls): GatewayUrls {
|
||||
|
||||
return allGatewayUrls;
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
export function convertCidToV1(cid: string) {
|
||||
let normalized: string;
|
||||
try {
|
||||
const hash = cid.split("/")[0];
|
||||
normalized = CIDTool.base32(hash);
|
||||
} catch (e) {
|
||||
throw new Error(`The CID ${cid} is not valid.`);
|
||||
}
|
||||
return normalized;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { BufferOrStringWithName, FileOrBuffer, GatewayUrls } from "../types";
|
||||
import { getGatewayUrlForCid } from "./urls";
|
||||
|
||||
/**
|
||||
* @internal
|
||||
@@ -85,6 +86,29 @@ export function isFileBufferOrStringEqual(input1: any, input2: any): boolean {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
function parseCidAndPath(
|
||||
gatewayUrl: string,
|
||||
uri: string,
|
||||
): { hash?: string; path?: string; query?: string } | undefined {
|
||||
const regexString = gatewayUrl
|
||||
.replace("{cid}", "(?<hash>[^/]+)")
|
||||
.replace("{path}", "(?<path>[^?#]+)");
|
||||
|
||||
const regex = new RegExp(regexString);
|
||||
const match = uri.match(regex);
|
||||
|
||||
if (match) {
|
||||
const hash = match.groups?.hash;
|
||||
const path = match.groups?.path;
|
||||
const queryString = uri.includes("?") ? uri.substring(uri.indexOf("?") + 1) : "";
|
||||
|
||||
return { hash, path, query: queryString };
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
@@ -93,9 +117,21 @@ export function replaceGatewayUrlWithScheme(
|
||||
gatewayUrls: GatewayUrls,
|
||||
): string {
|
||||
for (const scheme of Object.keys(gatewayUrls)) {
|
||||
for (const url of gatewayUrls[scheme]) {
|
||||
if (uri.startsWith(url)) {
|
||||
return uri.replace(url, scheme);
|
||||
for (const gatewayUrl of gatewayUrls[scheme]) {
|
||||
// If the url is a tokenized url, we need to convert it to a canonical url
|
||||
// Otherwise, we just need to check if the url is a prefix of the uri
|
||||
if (gatewayUrl.includes("{cid}")) {
|
||||
// Given the url is a tokenized url, we need to lift the cid and the path from the uri
|
||||
const parsed = parseCidAndPath(gatewayUrl, uri);
|
||||
if (parsed?.hash && parsed?.path) {
|
||||
const queryString = parsed?.query ? `?${parsed?.query}` : "";
|
||||
return `${scheme}${parsed?.hash}/${parsed?.path}${queryString}`;
|
||||
} else {
|
||||
// If we can't lift the cid and path from the uri, we can't replace the gateway url, return the orig string
|
||||
return uri;
|
||||
}
|
||||
} else if (uri.startsWith(gatewayUrl)) {
|
||||
return uri.replace(gatewayUrl, scheme);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -122,7 +158,8 @@ export function replaceSchemeWithGatewayUrl(
|
||||
return uri;
|
||||
}
|
||||
|
||||
return uri.replace(scheme, schemeGatewayUrls[index]);
|
||||
const path = uri.replace(scheme, "");
|
||||
return getGatewayUrlForCid(schemeGatewayUrls[index], path);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -33,18 +33,39 @@ export class StorageDownloader implements IStorageDownloader {
|
||||
throw new Error(
|
||||
"[FAILED_TO_DOWNLOAD_ERROR] Unable to download from URI - all gateway URLs failed to respond.",
|
||||
);
|
||||
} else if (attempts > 0) {
|
||||
console.warn(`Retrying download with backup gateway URL: ${resolvedUri}`);
|
||||
}
|
||||
|
||||
const res = await fetch(resolvedUri);
|
||||
const resOrErr = await fetch(resolvedUri).catch((err) => err);
|
||||
|
||||
if (resOrErr.ok) {
|
||||
return resOrErr;
|
||||
}
|
||||
|
||||
// can't use instanceof "Response" in node...
|
||||
if ("status" in resOrErr) {
|
||||
if (resOrErr.status === 410 || resOrErr.status === 403) {
|
||||
// Don't retry if the content is blocklisted
|
||||
console.error(
|
||||
`Request to ${resolvedUri} failed because this content seems to be blocklisted. Search VirusTotal for this URL to confirm: ${resolvedUri} `,
|
||||
);
|
||||
return resOrErr;
|
||||
}
|
||||
|
||||
// If request to the current gateway fails, recursively try the next one we know about
|
||||
if (res.status >= 500 || res.status === 403 || res.status === 408) {
|
||||
console.warn(
|
||||
`Request to ${resolvedUri} failed with status ${res.status} - ${res.statusText}`,
|
||||
`Request to ${resolvedUri} failed with status ${resOrErr.status} - ${resOrErr.statusText}`,
|
||||
);
|
||||
return this.download(uri, gatewayUrls, attempts + 1);
|
||||
|
||||
// Don't retry if we see 408 or < 500 status codes that are likely to be resolved by trying another gateway
|
||||
if (resOrErr.status !== 408 && resOrErr.status < 500) {
|
||||
return resOrErr;
|
||||
}
|
||||
} else {
|
||||
console.warn(`Request to ${resolvedUri} failed with error`, resOrErr);
|
||||
}
|
||||
|
||||
return res;
|
||||
// Since the current gateway failed, recursively try the next one we know about
|
||||
return this.download(uri, gatewayUrls, attempts + 1);
|
||||
}
|
||||
}
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
declare module "cid-tool";
|
||||
@@ -1,5 +1,5 @@
|
||||
/* eslint-disable no-unused-expressions */
|
||||
import { IpfsUploader, ThirdwebStorage } from "../src";
|
||||
import { getGatewayUrlForCid, IpfsUploader, ThirdwebStorage } from "../src";
|
||||
import { DEFAULT_GATEWAY_URLS } from "../src/common/urls";
|
||||
import { expect } from "chai";
|
||||
import { readFileSync } from "fs";
|
||||
@@ -7,10 +7,35 @@ import { readFileSync } from "fs";
|
||||
describe("IPFS", async () => {
|
||||
const storage = new ThirdwebStorage();
|
||||
|
||||
it("Should replace tokens in tokenized gateway URL", async () => {
|
||||
const url = getGatewayUrlForCid(
|
||||
"https://{cid}.example.com/{path}",
|
||||
"QmYtBTkEnTGrzkns2L8R4rL3keowVg3nGcBhPbwrbAWTRP/1.jpg",
|
||||
);
|
||||
expect(url).to.equal(
|
||||
"https://bafybeie4vcsw3ew6io6paaltdvwkpcoeyn6uoewvu7op7fhhztpnivqnyy.example.com/1.jpg",
|
||||
);
|
||||
});
|
||||
|
||||
it("Should append path to canonical gateway URL", async () => {
|
||||
const url = getGatewayUrlForCid(
|
||||
"https://example.com/ipfs/",
|
||||
"QmYtBTkEnTGrzkns2L8R4rL3keowVg3nGcBhPbwrbAWTRP/1.jpg",
|
||||
);
|
||||
expect(url).to.equal(
|
||||
"https://example.com/ipfs/bafybeie4vcsw3ew6io6paaltdvwkpcoeyn6uoewvu7op7fhhztpnivqnyy/1.jpg",
|
||||
);
|
||||
});
|
||||
|
||||
it("Should resolve scheme with gateway URL", async () => {
|
||||
const uri = `ipfs://example`;
|
||||
const uri = `ipfs://QmYtBTkEnTGrzkns2L8R4rL3keowVg3nGcBhPbwrbAWTRP`;
|
||||
const url = storage.resolveScheme(uri);
|
||||
expect(url).to.equal(`${DEFAULT_GATEWAY_URLS["ipfs://"][0]}example`);
|
||||
expect(url).to.equal(
|
||||
getGatewayUrlForCid(
|
||||
DEFAULT_GATEWAY_URLS["ipfs://"][0],
|
||||
"bafybeie4vcsw3ew6io6paaltdvwkpcoeyn6uoewvu7op7fhhztpnivqnyy",
|
||||
),
|
||||
);
|
||||
});
|
||||
|
||||
it("Should upload buffer with file number", async () => {
|
||||
@@ -57,6 +82,37 @@ describe("IPFS", async () => {
|
||||
expect(data.properties.length).to.equal(1);
|
||||
});
|
||||
|
||||
it("Should retry download if gateways fail", async () => {
|
||||
const storageWithBadGateways = new ThirdwebStorage({
|
||||
gatewayUrls: {
|
||||
"ipfs://": [
|
||||
"http://thisshouldneverwork/",
|
||||
"http://thisshouldalsoneverwork/",
|
||||
...DEFAULT_GATEWAY_URLS["ipfs://"],
|
||||
],
|
||||
},
|
||||
});
|
||||
|
||||
const uri = await storageWithBadGateways.upload(
|
||||
{
|
||||
name: "Goku",
|
||||
description: "The strongest human in the world",
|
||||
properties: [
|
||||
{
|
||||
name: "Strength",
|
||||
value: "100",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
alwaysUpload: true,
|
||||
},
|
||||
);
|
||||
|
||||
const data = await storageWithBadGateways.download(uri);
|
||||
expect(data.status).to.equal(200);
|
||||
});
|
||||
|
||||
it("Should batch upload strings with names", async () => {
|
||||
const uris = await storage.uploadBatch(
|
||||
[
|
||||
@@ -254,7 +310,10 @@ describe("IPFS", async () => {
|
||||
it("Should replace gateway URLs with schemes on upload", async () => {
|
||||
const uri = await storage.upload(
|
||||
{
|
||||
image: `${DEFAULT_GATEWAY_URLS["ipfs://"][0]}QmbaNzUcv7KPgdwq9u2qegcptktpUK6CdRZF72eSjSa6iJ/0`,
|
||||
image: getGatewayUrlForCid(
|
||||
DEFAULT_GATEWAY_URLS["ipfs://"][0],
|
||||
`QmbaNzUcv7KPgdwq9u2qegcptktpUK6CdRZF72eSjSa6iJ/0`,
|
||||
),
|
||||
},
|
||||
{
|
||||
alwaysUpload: true,
|
||||
@@ -265,7 +324,7 @@ describe("IPFS", async () => {
|
||||
const json = await res.json();
|
||||
|
||||
expect(json.image).to.equal(
|
||||
"ipfs://QmbaNzUcv7KPgdwq9u2qegcptktpUK6CdRZF72eSjSa6iJ/0",
|
||||
"ipfs://bafybeigevrfayusjh2nvk7fqlydj6m3wcagluen5mizxewr6zfx2qk2sy4/0",
|
||||
);
|
||||
});
|
||||
|
||||
@@ -282,7 +341,10 @@ describe("IPFS", async () => {
|
||||
const json = await storage.downloadJSON(uri);
|
||||
|
||||
expect(json.image).to.equal(
|
||||
`${DEFAULT_GATEWAY_URLS["ipfs://"][0]}QmbaNzUcv7KPgdwq9u2qegcptktpUK6CdRZF72eSjSa6iJ/0`,
|
||||
getGatewayUrlForCid(
|
||||
DEFAULT_GATEWAY_URLS["ipfs://"][0],
|
||||
`QmbaNzUcv7KPgdwq9u2qegcptktpUK6CdRZF72eSjSa6iJ/0`,
|
||||
),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -306,10 +368,16 @@ describe("IPFS", async () => {
|
||||
const json = await res.json();
|
||||
|
||||
expect(json.image).to.equal(
|
||||
`${DEFAULT_GATEWAY_URLS["ipfs://"][0]}QmcCJC4T37rykDjR6oorM8hpB9GQWHKWbAi2YR1uTabUZu/0`,
|
||||
getGatewayUrlForCid(
|
||||
DEFAULT_GATEWAY_URLS["ipfs://"][0],
|
||||
`QmcCJC4T37rykDjR6oorM8hpB9GQWHKWbAi2YR1uTabUZu/0`,
|
||||
),
|
||||
);
|
||||
expect(json.animation_url).to.equal(
|
||||
`${DEFAULT_GATEWAY_URLS["ipfs://"][0]}QmbaNzUcv7KPgdwq9u2qegcptktpUK6CdRZF72eSjSa6iJ/0`,
|
||||
getGatewayUrlForCid(
|
||||
DEFAULT_GATEWAY_URLS["ipfs://"][0],
|
||||
`QmbaNzUcv7KPgdwq9u2qegcptktpUK6CdRZF72eSjSa6iJ/0`,
|
||||
),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -317,7 +385,10 @@ describe("IPFS", async () => {
|
||||
const uri = await storage.upload(
|
||||
{
|
||||
// Gateway URLs should first be converted back to ipfs:// and then all ipfs:// should convert to first gateway URL
|
||||
image: `${DEFAULT_GATEWAY_URLS["ipfs://"][1]}QmbaNzUcv7KPgdwq9u2qegcptktpUK6CdRZF72eSjSa6iJ/0`,
|
||||
image: getGatewayUrlForCid(
|
||||
DEFAULT_GATEWAY_URLS["ipfs://"][0],
|
||||
`QmbaNzUcv7KPgdwq9u2qegcptktpUK6CdRZF72eSjSa6iJ/0`,
|
||||
),
|
||||
animation_url:
|
||||
"ipfs://QmbaNzUcv7KPgdwq9u2qegcptktpUK6CdRZF72eSjSa6iJ/0",
|
||||
},
|
||||
@@ -331,10 +402,16 @@ describe("IPFS", async () => {
|
||||
const json = await res.json();
|
||||
|
||||
expect(json.image).to.equal(
|
||||
`${DEFAULT_GATEWAY_URLS["ipfs://"][0]}QmbaNzUcv7KPgdwq9u2qegcptktpUK6CdRZF72eSjSa6iJ/0`,
|
||||
getGatewayUrlForCid(
|
||||
DEFAULT_GATEWAY_URLS["ipfs://"][0],
|
||||
`QmbaNzUcv7KPgdwq9u2qegcptktpUK6CdRZF72eSjSa6iJ/0`,
|
||||
),
|
||||
);
|
||||
expect(json.animation_url).to.equal(
|
||||
`${DEFAULT_GATEWAY_URLS["ipfs://"][0]}QmbaNzUcv7KPgdwq9u2qegcptktpUK6CdRZF72eSjSa6iJ/0`,
|
||||
getGatewayUrlForCid(
|
||||
DEFAULT_GATEWAY_URLS["ipfs://"][0],
|
||||
`QmbaNzUcv7KPgdwq9u2qegcptktpUK6CdRZF72eSjSa6iJ/0`,
|
||||
),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -350,8 +427,12 @@ describe("IPFS", async () => {
|
||||
},
|
||||
);
|
||||
|
||||
expect(uri.startsWith(`${DEFAULT_GATEWAY_URLS["ipfs://"][0]}`)).to.equal(
|
||||
true,
|
||||
expect(uri).to.equal(
|
||||
getGatewayUrlForCid(
|
||||
DEFAULT_GATEWAY_URLS["ipfs://"][0],
|
||||
// CID changes based on file contents (prod gateway vs staging gateway since they get written)
|
||||
`bafybeibexk3gfppyxtrnyy5sqjkgvsjdqzzvwqjndna374y2od4qemseua/0`,
|
||||
),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -365,7 +446,10 @@ describe("IPFS", async () => {
|
||||
);
|
||||
|
||||
expect(uri).to.equal(
|
||||
`${DEFAULT_GATEWAY_URLS["ipfs://"][0]}QmcCJC4T37rykDjR6oorM8hpB9GQWHKWbAi2YR1uTabUZu/0`,
|
||||
getGatewayUrlForCid(
|
||||
DEFAULT_GATEWAY_URLS["ipfs://"][0],
|
||||
`QmcCJC4T37rykDjR6oorM8hpB9GQWHKWbAi2YR1uTabUZu/0`,
|
||||
),
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"extends": "@thirdweb-dev/tsconfig/base.json",
|
||||
"include": ["."],
|
||||
"exclude": ["dist", "build", "node_modules"]
|
||||
"exclude": ["dist", "build", "node_modules"],
|
||||
}
|
||||
|
||||
@@ -1,5 +1,32 @@
|
||||
# @thirdweb-dev/unity-js-bridge
|
||||
|
||||
## 0.2.46
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1293](https://github.com/thirdweb-dev/js/pull/1293) [`bb207473`](https://github.com/thirdweb-dev/js/commit/bb207473f886d9a4470bcef1880a3a65882b6851) Thanks [@0xFirekeeper](https://github.com/0xFirekeeper)! - add more default wallets to wcv2 default modal
|
||||
|
||||
- Updated dependencies [[`7e044c66`](https://github.com/thirdweb-dev/js/commit/7e044c664d8a034f5324b859ac3596860c86f9a5), [`72ada475`](https://github.com/thirdweb-dev/js/commit/72ada47596d5d5c08736c33215faeec636b7156a), [`2c0bb078`](https://github.com/thirdweb-dev/js/commit/2c0bb0789955f6cd397b6fdb8e990a505251c631), [`b5c6eedb`](https://github.com/thirdweb-dev/js/commit/b5c6eedb38aa3c52eb97f3d25ad83e38c55afe61), [`10b3a717`](https://github.com/thirdweb-dev/js/commit/10b3a717da606632a05769ac821bdd21d6b63a03), [`b4aee9b5`](https://github.com/thirdweb-dev/js/commit/b4aee9b59121bab5f9b3d9b7ecdc4bcb4cd66f58), [`4961b597`](https://github.com/thirdweb-dev/js/commit/4961b597a098dae0a4eff01a9ef268a65fe1a352)]:
|
||||
- @thirdweb-dev/chains@0.1.28
|
||||
- @thirdweb-dev/sdk@3.10.29
|
||||
- @thirdweb-dev/wallets@1.0.5
|
||||
- @thirdweb-dev/storage@1.1.7
|
||||
- @thirdweb-dev/auth@3.2.9
|
||||
|
||||
## 0.2.45
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1278](https://github.com/thirdweb-dev/js/pull/1278) [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2) Thanks [@jnsdls](https://github.com/jnsdls)! - updated various dependencies
|
||||
|
||||
- Updated dependencies [[`2d088d36`](https://github.com/thirdweb-dev/js/commit/2d088d367ca54233836dc69712fd411ab7924205), [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2), [`9daf0449`](https://github.com/thirdweb-dev/js/commit/9daf044926bf995ac8998929dbeca548c5eb8561), [`546353a4`](https://github.com/thirdweb-dev/js/commit/546353a479c11533818ef917c0f6b4d6f8f69872), [`a3bb17cb`](https://github.com/thirdweb-dev/js/commit/a3bb17cb33f033846fb3b4c8a0a4809ba76cab96), [`0135a779`](https://github.com/thirdweb-dev/js/commit/0135a7790cf2acde6b701cb41ea10dd311da5ec3)]:
|
||||
- @thirdweb-dev/storage@1.1.6
|
||||
- @thirdweb-dev/wallets@1.0.4
|
||||
- @thirdweb-dev/chains@0.1.27
|
||||
- @thirdweb-dev/auth@3.2.8
|
||||
- @thirdweb-dev/pay@0.1.2
|
||||
- @thirdweb-dev/sdk@3.10.28
|
||||
|
||||
## 0.2.44
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/unity-js-bridge",
|
||||
"version": "0.2.44",
|
||||
"version": "0.2.46",
|
||||
"main": "dist/thirdweb-unity-bridge.js",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/unity-js-bridge",
|
||||
"license": "Apache-2.0",
|
||||
@@ -13,19 +13,19 @@
|
||||
],
|
||||
"dependencies": {
|
||||
"@thirdweb-dev/auth": "workspace:*",
|
||||
"@thirdweb-dev/chains": "workspace:*",
|
||||
"@thirdweb-dev/pay": "workspace:*",
|
||||
"@thirdweb-dev/sdk": "workspace:*",
|
||||
"@thirdweb-dev/storage": "workspace:*",
|
||||
"@thirdweb-dev/wallets": "workspace:*",
|
||||
"@thirdweb-dev/chains": "workspace:*",
|
||||
"ethers": "^5.7.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@thirdweb-dev/tsconfig": "workspace:*",
|
||||
"esbuild": "0.15.17",
|
||||
"node-stdlib-browser": "^1.2.0",
|
||||
"typescript": "^4.7.4",
|
||||
"eslint-config-thirdweb": "workspace:*",
|
||||
"@thirdweb-dev/tsconfig": "workspace:*"
|
||||
"node-stdlib-browser": "^1.2.0",
|
||||
"typescript": "^5.1.6"
|
||||
},
|
||||
"sideEffects": false,
|
||||
"scripts": {
|
||||
|
||||
@@ -159,6 +159,50 @@ class ThirdwebBridge implements TWBridge {
|
||||
projectId: sdkOptions.wallet?.walletConnectProjectId,
|
||||
dappMetadata,
|
||||
chains: defaultChains,
|
||||
qrModalOptions: {
|
||||
explorerRecommendedWalletIds: [
|
||||
'c57ca95b47569778a828d19178114f4db188b89b763c899ba0be274e97267d96', // metamask
|
||||
'4622a2b2d6af1c9844944291e5e7351a6aa24cd7b23099efac1b2fd875da31a0', // trustwallet
|
||||
'225affb176778569276e484e1b92637ad061b01e13a048b35a9d280c3b58970f', // safe
|
||||
'1ae92b26df02f0abca6304df07debccd18262fdf5fe82daa81593582dac9a369', // rainbow
|
||||
'c03dfee351b6fcc421b4494ea33b9d4b92a984f87aa76d1663bb28705e95034a', // uniswap
|
||||
'ecc4036f814562b41a5268adc86270fba1365471402006302e70169465b7ac18', // zerion
|
||||
'ef333840daf915aafdc4a004525502d6d49d77bd9c65e0642dbaefb3c2893bef', // imtoken
|
||||
'bc949c5d968ae81310268bf9193f9c9fb7bb4e1283e1284af8f2bd4992535fd6', // argent
|
||||
'74f8092562bd79675e276d8b2062a83601a4106d30202f2d509195e30e19673d', // spot
|
||||
'afbd95522f4041c71dd4f1a065f971fd32372865b416f95a0b1db759ae33f2a7', // omni
|
||||
'f2436c67184f158d1beda5df53298ee84abfc367581e4505134b5bcf5f46697d', // crypto.com
|
||||
'20459438007b75f4f4acb98bf29aa3b800550309646d375da5fd4aac6c2a2c66', // tokenpocket
|
||||
'8837dd9413b1d9b585ee937d27a816590248386d9dbf59f5cd3422dbbb65683e', // robinhood wallet
|
||||
'85db431492aa2e8672e93f4ea7acf10c88b97b867b0d373107af63dc4880f041', // frontier
|
||||
'84b43e8ddfcd18e5fcb5d21e7277733f9cccef76f7d92c836d0e481db0c70c04', // blockchain.com
|
||||
'0b415a746fb9ee99cce155c2ceca0c6f6061b1dbca2d722b3ba16381d0562150', // safepal
|
||||
'38f5d18bd8522c244bdd70cb4a68e0e718865155811c043f052fb9f1c51de662', // bitkeep
|
||||
'9414d5a85c8f4eabc1b5b15ebe0cd399e1a2a9d35643ab0ad22a6e4a32f596f0', // zengo
|
||||
'c286eebc742a537cd1d6818363e9dc53b21759a1e8e5d9b263d0c03ec7703576', // 1inch
|
||||
'8a0ee50d1f22f6651afcae7eb4253e52a3310b90af5daef78a8c4929a9bb99d4', // binance defi wallet
|
||||
'e9ff15be73584489ca4a66f64d32c4537711797e30b6660dbcb71ea72a42b1f4', // exodus
|
||||
'19177a98252e07ddfc9af2083ba8e07ef627cb6103467ffebb3f8f4205fd7927', // ledger live
|
||||
'f5b4eeb6015d66be3f5940a895cbaa49ef3439e518cd771270e6b553b48f31d2', // mew wallet
|
||||
'138f51c8d00ac7b9ac9d8dc75344d096a7dfe370a568aa167eabc0a21830ed98', // alpha wallet
|
||||
'47bb07617af518642f3413a201ec5859faa63acb1dd175ca95085d35d38afb83', // keyring pro
|
||||
'76a3d548a08cf402f5c7d021f24fd2881d767084b387a5325df88bc3d4b6f21b', // lobstr wallet
|
||||
'dceb063851b1833cbb209e3717a0a0b06bf3fb500fe9db8cd3a553e4b1d02137', // onto
|
||||
'7674bb4e353bf52886768a3ddc2a4562ce2f4191c80831291218ebd90f5f5e26', // math wallet
|
||||
'8308656f4548bb81b3508afe355cfbb7f0cb6253d1cc7f998080601f838ecee3', // unstoppable domains
|
||||
'031f0187049b7f96c6f039d1c9c8138ff7a17fd75d38b34350c7182232cc29aa', // obvious
|
||||
'5864e2ced7c293ed18ac35e0db085c09ed567d67346ccb6f58a0327a75137489', // fireblocks
|
||||
'2c81da3add65899baeac53758a07e652eea46dbb5195b8074772c62a77bbf568', // ambire wallet
|
||||
'802a2041afdaf4c7e41a2903e98df333c8835897532699ad370f829390c6900f', // infinity wallet
|
||||
'7424d97904535b14fe34f09f63d8ca66935546f798758dabd5b26c2309f2b1f9', // bridge wallet
|
||||
'dd43441a6368ec9046540c46c5fdc58f79926d17ce61a176444568ca7c970dcd', // internet money wallet
|
||||
'c482dfe368d4f004479977fd88e80dc9e81107f3245d706811581a6dfe69c534', // now wallet
|
||||
'107bb20463699c4e614d3a2fb7b961e66f48774cb8f6d6c1aee789853280972c', // bitcoin.com wallet
|
||||
'053ac0ac602e0969736941cf5aa07a3af57396d4601cb521a173a626e1015fb1', // au wallet
|
||||
'2a3c89040ac3b723a1972a33a125b1db11e258a6975d3a61252cd64e6ea5ea01', // coin98 super app
|
||||
'b956da9052132e3dabdcd78feb596d5194c99b7345d8c4bd7a47cabdcb69a25f', // abc wallet
|
||||
]
|
||||
},
|
||||
});
|
||||
break;
|
||||
case walletIds.coinbase:
|
||||
|
||||
@@ -1,5 +1,27 @@
|
||||
# @thirdweb-dev/wallets
|
||||
|
||||
## 1.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1292](https://github.com/thirdweb-dev/js/pull/1292) [`10b3a717`](https://github.com/thirdweb-dev/js/commit/10b3a717da606632a05769ac821bdd21d6b63a03) Thanks [@assimovt](https://github.com/assimovt)! - Handle authz errors from thirdweb Bundler in smart wallet paymaster and rpc
|
||||
|
||||
- [#1301](https://github.com/thirdweb-dev/js/pull/1301) [`b4aee9b5`](https://github.com/thirdweb-dev/js/commit/b4aee9b59121bab5f9b3d9b7ecdc4bcb4cd66f58) Thanks [@adam-maj](https://github.com/adam-maj)! - Add all supported chains to safe server urls
|
||||
|
||||
- Updated dependencies [[`7e044c66`](https://github.com/thirdweb-dev/js/commit/7e044c664d8a034f5324b859ac3596860c86f9a5), [`72ada475`](https://github.com/thirdweb-dev/js/commit/72ada47596d5d5c08736c33215faeec636b7156a), [`2c0bb078`](https://github.com/thirdweb-dev/js/commit/2c0bb0789955f6cd397b6fdb8e990a505251c631), [`b5c6eedb`](https://github.com/thirdweb-dev/js/commit/b5c6eedb38aa3c52eb97f3d25ad83e38c55afe61), [`4961b597`](https://github.com/thirdweb-dev/js/commit/4961b597a098dae0a4eff01a9ef268a65fe1a352)]:
|
||||
- @thirdweb-dev/chains@0.1.28
|
||||
- @thirdweb-dev/sdk@3.10.29
|
||||
|
||||
## 1.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1278](https://github.com/thirdweb-dev/js/pull/1278) [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2) Thanks [@jnsdls](https://github.com/jnsdls)! - updated various dependencies
|
||||
|
||||
- Updated dependencies [[`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2), [`a3bb17cb`](https://github.com/thirdweb-dev/js/commit/a3bb17cb33f033846fb3b4c8a0a4809ba76cab96)]:
|
||||
- @thirdweb-dev/chains@0.1.27
|
||||
- @thirdweb-dev/sdk@3.10.28
|
||||
|
||||
## 1.0.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/wallets",
|
||||
"version": "1.0.3",
|
||||
"version": "1.0.5",
|
||||
"main": "dist/thirdweb-dev-wallets.cjs.js",
|
||||
"module": "dist/thirdweb-dev-wallets.esm.js",
|
||||
"types": "dist/thirdweb-dev-wallets.cjs.d.ts",
|
||||
@@ -321,28 +321,28 @@
|
||||
"@account-abstraction/contracts": "^0.5.0",
|
||||
"@account-abstraction/sdk": "^0.5.0",
|
||||
"@account-abstraction/utils": "^0.5.0",
|
||||
"@coinbase/wallet-sdk": "^3.6.3",
|
||||
"@magic-ext/connect": "^6.7.0",
|
||||
"@coinbase/wallet-sdk": "^3.7.1",
|
||||
"@magic-ext/connect": "^6.7.2",
|
||||
"@magic-ext/oauth": "^7.6.2",
|
||||
"@magic-sdk/provider": "^13.6.2",
|
||||
"@paperxyz/embedded-wallet-service-sdk": "^1.1.0",
|
||||
"@safe-global/safe-core-sdk": "^3.3.2",
|
||||
"@safe-global/safe-ethers-adapters": "^0.1.0-alpha.16",
|
||||
"@safe-global/safe-ethers-lib": "^1.9.2",
|
||||
"@safe-global/safe-core-sdk": "^3.3.3",
|
||||
"@safe-global/safe-ethers-adapters": "0.1.0-alpha.17",
|
||||
"@safe-global/safe-ethers-lib": "^1.9.3",
|
||||
"@thirdweb-dev/chains": "workspace:*",
|
||||
"@thirdweb-dev/sdk": "workspace:*",
|
||||
"@walletconnect/core": "^2.8.4",
|
||||
"@walletconnect/ethereum-provider": "^2.8.4",
|
||||
"@walletconnect/jsonrpc-utils": "^1.0.3",
|
||||
"@walletconnect/modal": "^2.5.4",
|
||||
"@walletconnect/types": "^2.8.4",
|
||||
"@walletconnect/utils": "^2.8.4",
|
||||
"@walletconnect/web3wallet": "^1.8.1",
|
||||
"@walletconnect/core": "^2.8.6",
|
||||
"@walletconnect/ethereum-provider": "^2.8.6",
|
||||
"@walletconnect/jsonrpc-utils": "^1.0.8",
|
||||
"@walletconnect/modal": "^2.5.9",
|
||||
"@walletconnect/types": "^2.8.6",
|
||||
"@walletconnect/utils": "^2.8.6",
|
||||
"@walletconnect/web3wallet": "^1.8.5",
|
||||
"buffer": "^6.0.3",
|
||||
"cross-fetch": "^3.1.5",
|
||||
"cross-fetch": "^3.1.6",
|
||||
"crypto-js": "^4.1.1",
|
||||
"eth-provider": "^0.13.6",
|
||||
"eventemitter3": "^5.0.0",
|
||||
"eventemitter3": "^5.0.1",
|
||||
"magic-sdk": "^13.6.2",
|
||||
"web3-core": "1.5.2"
|
||||
},
|
||||
@@ -379,9 +379,9 @@
|
||||
}
|
||||
},
|
||||
"devDependencies": {
|
||||
"@aws-sdk/client-secrets-manager": "^3.256.0",
|
||||
"@aws-sdk/client-secrets-manager": "^3.363.0",
|
||||
"@noble/ed25519": "^1.7.1",
|
||||
"@preconstruct/cli": "^2.2.1",
|
||||
"@preconstruct/cli": "^2.7.0",
|
||||
"@solana/web3.js": "^1.62.0",
|
||||
"@thirdweb-dev/tsconfig": "workspace:*",
|
||||
"@types/crypto-js": "^4.1.1",
|
||||
@@ -393,7 +393,7 @@
|
||||
"ethers": "^5.7.2",
|
||||
"ethers-aws-kms-signer": "^1.3.2",
|
||||
"tweetnacl": "^1.0.3",
|
||||
"typescript": "^4.7.4"
|
||||
"typescript": "^5.1.6"
|
||||
},
|
||||
"scripts": {
|
||||
"format": "prettier --write 'src/**/*'",
|
||||
|
||||
@@ -1,18 +1,14 @@
|
||||
import { AsyncStorage } from "./AsyncStorage";
|
||||
import fsModule from "fs";
|
||||
import path from "path";
|
||||
|
||||
const fs = fsModule.promises;
|
||||
|
||||
export class AsyncJsonFileStorage implements AsyncStorage {
|
||||
filePath: string;
|
||||
|
||||
constructor(filePath: string) {
|
||||
this.filePath = path.resolve(filePath);
|
||||
this.filePath = require("node:path").resolve(filePath);
|
||||
}
|
||||
|
||||
async getItem(key: string): Promise<string | null> {
|
||||
const content = await fs.readFile(this.filePath, {
|
||||
const content = await require("node:fs/promises").readFile(this.filePath, {
|
||||
encoding: "utf-8",
|
||||
});
|
||||
|
||||
@@ -28,27 +24,39 @@ export class AsyncJsonFileStorage implements AsyncStorage {
|
||||
// if the file doesn't exist, create it
|
||||
|
||||
try {
|
||||
const content = await fs.readFile(this.filePath, {
|
||||
encoding: "utf-8",
|
||||
});
|
||||
const content = await require("node:fs/promises").readFile(
|
||||
this.filePath,
|
||||
{
|
||||
encoding: "utf-8",
|
||||
},
|
||||
);
|
||||
|
||||
const data = content ? JSON.parse(content) : {};
|
||||
data[key] = value;
|
||||
|
||||
await fs.writeFile(this.filePath, JSON.stringify(data));
|
||||
await require("node:fs/promises").writeFile(
|
||||
this.filePath,
|
||||
JSON.stringify(data),
|
||||
);
|
||||
} catch {
|
||||
await fs.writeFile(this.filePath, JSON.stringify({ [key]: value }));
|
||||
await require("node:fs/promises").writeFile(
|
||||
this.filePath,
|
||||
JSON.stringify({ [key]: value }),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async removeItem(key: string): Promise<void> {
|
||||
const content = await fs.readFile(this.filePath, {
|
||||
const content = await require("node:fs/promises").readFile(this.filePath, {
|
||||
encoding: "utf-8",
|
||||
});
|
||||
|
||||
const data = JSON.parse(content);
|
||||
delete data[key];
|
||||
|
||||
await fs.writeFile(this.filePath, JSON.stringify(data));
|
||||
await require("node:fs/promises").writeFile(
|
||||
this.filePath,
|
||||
JSON.stringify(data),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,16 +2,26 @@
|
||||
export const CHAIN_ID_TO_GNOSIS_SERVER_URL = {
|
||||
// mainnet
|
||||
1: "https://safe-transaction-mainnet.safe.global",
|
||||
// avalanche
|
||||
43114: "https://safe-transaction-avalanche.safe.global",
|
||||
// polygon
|
||||
137: "https://safe-transaction-polygon.safe.global",
|
||||
// goerli
|
||||
5: "https://safe-transaction-goerli.safe.global",
|
||||
// bsc
|
||||
56: "https://safe-transaction-bsc.safe.global",
|
||||
// optimism
|
||||
10: "https://safe-transaction-optimism.safe.global",
|
||||
// bsc
|
||||
56: "https://safe-transaction-bsc.safe.global",
|
||||
// gnosis
|
||||
100: "https://safe-transaction-gnosis-chain.safe.global",
|
||||
// polygon
|
||||
137: "https://safe-transaction-polygon.safe.global",
|
||||
// avalanche
|
||||
43114: "https://safe-transaction-avalanche.safe.global",
|
||||
// arbitrum
|
||||
42161: "https://safe-transaction-arbitrum.safe.global",
|
||||
// celo
|
||||
42220: "https://safe-transaction-celo.safe.global",
|
||||
// base goerli
|
||||
84531: "https://safe-transaction-base-testnet.safe.global",
|
||||
// aurora
|
||||
1313161554: "https://safe-transaction-aurora.safe.global",
|
||||
} as const;
|
||||
|
||||
export const SafeSupportedChainsSet = /* @__PURE__ */ (() =>
|
||||
|
||||
@@ -65,34 +65,45 @@ export class ERC4337EthersSigner extends Signer {
|
||||
|
||||
unwrapError(errorIn: any): Error {
|
||||
try {
|
||||
let errorMsg = "Unknown Error";
|
||||
|
||||
if (errorIn.error) {
|
||||
const error = new Error(
|
||||
`The bundler has failed to include UserOperation in a batch: ${errorIn.error}`,
|
||||
);
|
||||
error.stack = errorIn.stack;
|
||||
return error;
|
||||
}
|
||||
if (errorIn.body && typeof errorIn.body === "object") {
|
||||
errorMsg = `The bundler has failed to include UserOperation in a batch: ${errorIn.error}`;
|
||||
} else if (errorIn.body && typeof errorIn.body === "string") {
|
||||
const errorBody = JSON.parse(errorIn.body);
|
||||
let paymasterInfo: string = "";
|
||||
let failedOpMessage: string | undefined =
|
||||
errorBody?.error?.message || errorBody?.error?.data;
|
||||
if (failedOpMessage?.includes("FailedOp") === true) {
|
||||
const errorStatus = errorIn.status || "UNKNOWN";
|
||||
const errorCode = errorBody?.code || "UNKNOWN";
|
||||
|
||||
let failedOpMessage =
|
||||
errorBody?.error?.message ||
|
||||
errorBody?.error?.data ||
|
||||
errorBody?.error ||
|
||||
errorIn.reason;
|
||||
|
||||
if (failedOpMessage?.includes("FailedOp")) {
|
||||
let paymasterInfo: string = "";
|
||||
// TODO: better error extraction methods will be needed
|
||||
const matched = failedOpMessage.match(/FailedOp\((.*)\)/);
|
||||
|
||||
if (matched) {
|
||||
const split = matched[1].split(",");
|
||||
paymasterInfo = `(paymaster address: ${split[1]})`;
|
||||
failedOpMessage = split[2];
|
||||
}
|
||||
|
||||
errorMsg = `The bundler has failed to include UserOperation in a batch: ${failedOpMessage} ${paymasterInfo}`;
|
||||
} else {
|
||||
errorMsg = `RPC error: ${failedOpMessage}
|
||||
Status: ${errorStatus}
|
||||
Code: ${errorCode}`;
|
||||
}
|
||||
const error = new Error(
|
||||
`The bundler has failed to include UserOperation in a batch: ${failedOpMessage} ${paymasterInfo}`,
|
||||
);
|
||||
error.stack = errorIn.stack;
|
||||
return error;
|
||||
}
|
||||
|
||||
const error = new Error(errorMsg);
|
||||
error.stack = errorIn.stack;
|
||||
return error;
|
||||
} catch (error: any) {}
|
||||
|
||||
return errorIn;
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user