knip it in the... (#4751)

1. make `knip` a part of `packages/thirdweb`
2. clean up all the things
3. ???
4. profit

<!-- start pr-codex -->

---

## PR-Codex overview
This PR focuses on removing unused files, updating types, and deprecating constants.

### Detailed summary
- Removed unused files related to benchmarks, wallets, and UI components
- Updated type definitions in various files
- Deprecated and replaced constant `ADDRESS_ZERO` with `ZERO_ADDRESS`

> The following files were skipped due to too many changes: `packages/thirdweb/src/react/web/ui/ConnectWallet/Details.tsx`, `packages/thirdweb/src/pay/utils/definitions.ts`, `packages/thirdweb/src/utils/hashing/sha256.ts`, `packages/thirdweb/src/wallets/eip5792/show-calls-status.ts`, `packages/thirdweb/src/extensions/modules/ClaimableERC20/mint.ts`, `packages/thirdweb/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx`, `apps/portal/package.json`, `packages/thirdweb/src/extensions/modules/ClaimableERC721/mint.ts`, `packages/thirdweb/src/utils/hashing/hashMessage.ts`, `packages/thirdweb/src/react/native/ui/components/text.tsx`, `packages/thirdweb/src/utils/promise/resolve-promised-value.ts`, `packages/thirdweb/src/auth/core/verify-jwt.ts`, `packages/thirdweb/src/utils/hashing/keccak256.ts`, `packages/thirdweb/src/utils/uint8-array.ts`, `packages/thirdweb/src/react/core/design-system/CustomThemeProvider.tsx`, `packages/thirdweb/src/react/native/ui/connect/SendScreen.tsx`, `packages/thirdweb/src/react/web/ui/MediaRenderer/MediaRenderer.tsx`, `packages/thirdweb/src/gas/estimate-l1-fee.ts`, `packages/thirdweb/src/react/web/ui/ConnectWallet/WalletSelector.tsx`, `packages/thirdweb/src/extensions/modules/MintableERC721/mintWithSignature.ts`, `packages/thirdweb/src/react/native/ui/connect/ExternalWalletsList.tsx`, `packages/thirdweb/src/exports/extensions/erc1155.ts`, `packages/thirdweb/src/extensions/modules/ClaimableERC1155/mint.ts`, `packages/thirdweb/src/extensions/modules/MintableERC1155/mintWithSignature.ts`, `packages/thirdweb/src/utils/encoding/helpers/trim.ts`, `packages/thirdweb/src/wallets/utils/getTokenBalance.ts`, `apps/dashboard/knip.json`, `packages/thirdweb/src/react/native/ui/connect/TokenListScreen.tsx`, `packages/thirdweb/src/extensions/vote/write/executeProposal.ts`, `packages/thirdweb/src/react/native/ui/components/spinner.tsx`, `packages/thirdweb/src/react/web/ui/MediaRenderer/ModelViewer.tsx`, `packages/thirdweb/src/transaction/extract-error.ts`, `packages/thirdweb/src/react/native/ui/components/button.tsx`, `packages/thirdweb/src/extensions/erc1155/write/updateTokenURI.ts`, `packages/thirdweb/src/wallets/interfaces/wallet.ts`, `packages/thirdweb/src/react/web/ui/ConnectWallet/screens/Buy/swap/useSwapSupportedChains.ts`, `packages/thirdweb/src/utils/storage/walletStorage.ts`, `packages/thirdweb/src/wallets/in-app/native/native-connector.ts`, `packages/thirdweb/src/extensions/erc20/write/sigMint.ts`, `packages/thirdweb/src/extensions/erc721/write/updateTokenURI.ts`, `packages/thirdweb/src/react/web/wallets/ecosystem/EcosystemWalletFormUI.tsx`, `packages/thirdweb/src/wallets/eip5792/wait-for-bundle.ts`, `packages/thirdweb/src/utils/jwt/jwt-header.ts`, `packages/thirdweb/src/extensions/modules/MintableERC20/mintWithSignature.ts`, `packages/thirdweb/src/exports/modules.ts`, `packages/thirdweb/src/react/web/wallets/in-app/InAppWalletFormUI.tsx`, `packages/thirdweb/src/transaction/actions/wait-for-tx-receipt.ts`, `packages/thirdweb/src/auth/core/generate-jwt.ts`, `packages/thirdweb/src/react/core/hooks/transaction/useSendTransaction.ts`, `packages/thirdweb/src/exports/extensions/erc1271.ts`, `packages/thirdweb/src/react/web/ui/ConnectWallet/screens/Buy/main/useBuyTxStates.ts`, `packages/thirdweb/src/contract/deployment/publisher.ts`, `packages/thirdweb/src/extensions/erc721/drops/write/updateMetadata.ts`, `packages/thirdweb/src/extensions/erc1155/drops/write/updateMetadata.ts`, `packages/thirdweb/src/extensions/prebuilts/deploy-marketplace.ts`, `packages/thirdweb/src/wallets/in-app/native/auth/index.ts`, `packages/thirdweb/src/wallets/in-app/native/helpers/auth/middleware.ts`, `packages/thirdweb/src/utils/platform.ts`, `.github/CODEOWNERS`, `packages/thirdweb/src/wallets/in-app/web/lib/auth/index.ts`, `packages/thirdweb/src/react/core/utils/structuralSharing.ts`, `packages/thirdweb/src/react/core/hooks/transaction/useSendAndConfirmTransaction.ts`, `packages/thirdweb/src/extensions/prebuilts/get-required-transactions.ts`, `packages/thirdweb/src/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/FiatDetailsScreen.tsx`, `packages/thirdweb/src/extensions/ens/resolve-l2-name.ts`, `packages/thirdweb/src/utils/any-evm/deploy-metadata.ts`, `packages/thirdweb/src/cli/commands/generate/utils.ts`, `packages/thirdweb/src/extensions/farcaster/eip712Signatures/keyRequestSignature.ts`, `packages/thirdweb/src/extensions/airdrop/write/airdropERC20WithSignature.ts`, `packages/thirdweb/src/extensions/airdrop/write/airdropERC721WithSignature.ts`, `packages/thirdweb/src/transaction/actions/zksync/send-eip712-transaction.ts`, `packages/thirdweb/src/wallets/in-app/web/utils/iFrameCommunication/InAppWalletIframeCommunicator.ts`, `packages/thirdweb/src/utils/any-evm/zksync/constants.ts`, `packages/thirdweb/src/extensions/marketplace/direct-listings/utils.ts`, `packages/thirdweb/src/transaction/actions/gasless/send-gasless-transaction.ts`, `packages/thirdweb/src/extensions/prebuilts/deploy-vote.ts`, `packages/thirdweb/src/react/web/ui/components/Drawer.tsx`, `packages/thirdweb/src/extensions/airdrop/write/airdropERC1155WithSignature.ts`, `packages/thirdweb/src/react/core/hooks/others/useWalletBalance.ts`, `packages/thirdweb/src/extensions/permissions/utils.ts`, `packages/thirdweb/src/wallets/in-app/native/helpers/auth/logout.ts`, `packages/thirdweb/src/wallets/smart/lib/utils.ts`, `packages/thirdweb/src/react/web/ui/components/buttons.tsx`, `packages/thirdweb/src/react/web/ui/prebuilt/thirdweb/ClaimButton/index.tsx`, `packages/thirdweb/src/wallets/wallet-connect/receiver/index.ts`, `packages/thirdweb/src/transaction/actions/gasless/providers/engine.ts`, `packages/thirdweb/src/transaction/actions/gasless/providers/openzeppelin.ts`, `packages/thirdweb/src/wallets/in-app/web/types.ts`, `packages/thirdweb/src/extensions/airdrop/write/claimERC20.ts`, `packages/thirdweb/test/globalSetup.ts`, `packages/thirdweb/src/extensions/erc721/read/getAllOwners.ts`, `packages/thirdweb/src/wallets/smart/lib/userop.ts`, `packages/thirdweb/src/wallets/in-app/native/helpers/wallet/retrieval.ts`, `packages/thirdweb/src/wallets/in-app/web/lib/iframe-wallet.ts`, `packages/thirdweb/src/react/web/ui/TransactionButton/TransactionModal.tsx`, `packages/thirdweb/src/react/native/ui/connect/ConnectedModal.tsx`, `packages/thirdweb/src/extensions/erc4337/account/common.ts`, `packages/thirdweb/test/vitest.config.ts`, `packages/thirdweb/src/exports/extensions/farcaster.ts`, `packages/thirdweb/src/exports/chains.ts`, `packages/thirdweb/src/extensions/erc4337/account/permissions.test.ts`, `packages/thirdweb/src/wallets/in-app/core/constants/settings.ts`, `packages/thirdweb/scripts/typedoc.mjs`, `packages/thirdweb/src/extensions/airdrop/write/merkleInfoERC20.ts`, `packages/thirdweb/src/utils/extensions/drops/hash-entry.ts`, `packages/thirdweb/src/extensions/farcaster/eip712Signatures/registerSignature.ts`, `packages/thirdweb/src/react/native/ui/icons/svgs.ts`, `packages/thirdweb/src/transaction/actions/gasless/providers/biconomy.ts`, `packages/thirdweb/src/extensions/farcaster/eip712Signatures/addSignature.ts`, `packages/thirdweb/src/react/web/ui/AutoConnect/AutoConnect.tsx`, `packages/thirdweb/src/react/native/ui/AutoConnect/AutoConnect.tsx`, `packages/service-utils/package.json`, `packages/thirdweb/src/stories/utils.tsx`, `packages/thirdweb/src/react/core/utils/defaultTokens.ts`, `package.json`, `packages/thirdweb/knip.json`, `packages/thirdweb/src/pay/buyWithCrypto/getStatus.ts`, `packages/thirdweb/src/exports/extensions/marketplace.ts`, `packages/thirdweb/src/utils/semver.ts`, `packages/thirdweb/src/extensions/uniswap/read/getUniswapV3Pools.ts`, `apps/dashboard/package.json`, `packages/thirdweb/src/utils/royalty-engine.ts`, `packages/react-native-adapter/package.json`, `packages/thirdweb/src/wallets/in-app/core/authentication/types.ts`, `packages/thirdweb/src/contract/deployment/deploy-deterministic.ts`, `packages/thirdweb/src/contract/deployment/utils/infra.ts`, `packages/thirdweb/src/wallets/injected/index.ts`, `packages/thirdweb/src/wallets/smart/lib/packUserOp.ts`, `packages/thirdweb/src/wallets/in-app/native/helpers/storage/local.ts`, `packages/thirdweb/src/react/web/ui/components/ChainIcon.tsx`, `packages/thirdweb/src/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/BuyTxHistory.tsx`, `packages/thirdweb/src/wallets/in-app/native/helpers/constants.ts`, `packages/thirdweb/src/wallets/in-app/native/helpers/api/fetchers.ts`, `packages/thirdweb/package.json`, `packages/thirdweb/src/react/core/utils/walletIcon.ts`, `pnpm-lock.yaml`

> ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}`

<!-- end pr-codex -->
This commit is contained in:
jnsdls
2024-09-23 00:00:12 +00:00
parent e9ae98084a
commit 24ff6f2ab6
234 changed files with 2394 additions and 9562 deletions
-1
View File
@@ -11,7 +11,6 @@ packages/thirdweb/src/react/ @joaquim-verges @gregfromstl @MananTank @jnsdls @ed
packages/thirdweb/src/reactive/ @joaquim-verges @gregfromstl @MananTank @jnsdls packages/thirdweb/src/reactive/ @joaquim-verges @gregfromstl @MananTank @jnsdls
packages/thirdweb/src/gas/ @joaquim-verges @jnsdls packages/thirdweb/src/gas/ @joaquim-verges @jnsdls
packages/thirdweb/src/pay/ @joaquim-verges @gregfromstl @MananTank @jnsdls @edwardysun packages/thirdweb/src/pay/ @joaquim-verges @gregfromstl @MananTank @jnsdls @edwardysun
packages/typedoc-gen/ @MananTank @jnsdls @joaquim-verges
packages/service-utils/ @arcoraven @jnsdls @joaquim-verges packages/service-utils/ @arcoraven @jnsdls @joaquim-verges
packages/eslint-config-thirdweb/ @jnsdls @joaquim-verges packages/eslint-config-thirdweb/ @jnsdls @joaquim-verges
packages/tw-tsconfig/ @jnsdls @joaquim-verges packages/tw-tsconfig/ @jnsdls @joaquim-verges
+1 -1
View File
@@ -3,6 +3,6 @@
"next": true, "next": true,
"ignore": ["src/@/components/ui/**"], "ignore": ["src/@/components/ui/**"],
"project": ["src/**"], "project": ["src/**"],
"ignoreBinaries": ["only-allow", "knip", "biome"], "ignoreBinaries": ["only-allow", "biome"],
"ignoreDependencies": ["@storybook/blocks", "@thirdweb-dev/service-utils"] "ignoreDependencies": ["@storybook/blocks", "@thirdweb-dev/service-utils"]
} }
+9 -8
View File
@@ -111,21 +111,21 @@
"@next/bundle-analyzer": "14.2.12", "@next/bundle-analyzer": "14.2.12",
"@next/eslint-plugin-next": "14.2.12", "@next/eslint-plugin-next": "14.2.12",
"@playwright/test": "1.47.1", "@playwright/test": "1.47.1",
"@storybook/addon-essentials": "8.3.1", "@storybook/addon-essentials": "8.3.2",
"@storybook/addon-interactions": "8.3.1", "@storybook/addon-interactions": "8.3.2",
"@storybook/addon-links": "8.3.1", "@storybook/addon-links": "8.3.2",
"@storybook/addon-onboarding": "8.3.1", "@storybook/addon-onboarding": "8.3.2",
"@storybook/addon-viewport": "8.3.1", "@storybook/addon-viewport": "8.3.1",
"@storybook/blocks": "8.3.1", "@storybook/blocks": "8.3.1",
"@storybook/nextjs": "8.3.1", "@storybook/nextjs": "8.3.1",
"@storybook/react": "8.3.1", "@storybook/react": "8.3.2",
"@storybook/test": "8.3.1", "@storybook/test": "8.3.2",
"@types/color": "^3.0.6", "@types/color": "^3.0.6",
"@types/node": "20.14.9", "@types/node": "20.14.9",
"@types/papaparse": "^5.3.14", "@types/papaparse": "^5.3.14",
"@types/pluralize": "^0.0.33", "@types/pluralize": "^0.0.33",
"@types/qrcode": "^1.5.5", "@types/qrcode": "^1.5.5",
"@types/react": "^18.3.7", "@types/react": "^18.3.8",
"@types/react-dom": "^18", "@types/react-dom": "^18",
"@types/react-table": "^7.7.20", "@types/react-table": "^7.7.20",
"@types/spdx-correct": "^3.1.3", "@types/spdx-correct": "^3.1.3",
@@ -138,9 +138,10 @@
"eslint-config-biome": "1.8.3", "eslint-config-biome": "1.8.3",
"eslint-plugin-react-compiler": "0.0.0-experimental-ca16900-20240916", "eslint-plugin-react-compiler": "0.0.0-experimental-ca16900-20240916",
"eslint-plugin-storybook": "^0.8.0", "eslint-plugin-storybook": "^0.8.0",
"knip": "^5.30.4",
"next-sitemap": "^4.2.3", "next-sitemap": "^4.2.3",
"postcss": "8.4.47", "postcss": "8.4.47",
"storybook": "8.3.1", "storybook": "8.3.2",
"tailwindcss": "3.4.12", "tailwindcss": "3.4.12",
"typescript": "5.6.2" "typescript": "5.6.2"
} }
+1 -1
View File
@@ -43,7 +43,7 @@
}, },
"devDependencies": { "devDependencies": {
"@types/node": "20.14.9", "@types/node": "20.14.9",
"@types/react": "^18.3.7", "@types/react": "^18.3.8",
"@types/react-dom": "^18", "@types/react-dom": "^18",
"eslint": "8.57.0", "eslint": "8.57.0",
"eslint-config-next": "14.2.12", "eslint-config-next": "14.2.12",
+1 -1
View File
@@ -56,7 +56,7 @@
"@types/flexsearch": "^0.7.6", "@types/flexsearch": "^0.7.6",
"@types/mdx": "^2.0.13", "@types/mdx": "^2.0.13",
"@types/node": "20.14.9", "@types/node": "20.14.9",
"@types/react": "^18.3.7", "@types/react": "^18.3.8",
"@types/react-dom": "^18", "@types/react-dom": "^18",
"@types/react-html-parser": "^2.0.6", "@types/react-html-parser": "^2.0.6",
"@types/tryghost__content-api": "^1.3.16", "@types/tryghost__content-api": "^1.3.16",
+1 -1
View File
@@ -36,7 +36,7 @@
}, },
"devDependencies": { "devDependencies": {
"@types/node": "20.14.9", "@types/node": "20.14.9",
"@types/react": "^18.3.7", "@types/react": "^18.3.8",
"@types/react-dom": "^18", "@types/react-dom": "^18",
"eslint": "8.57.0", "eslint": "8.57.0",
"eslint-config-next": "14.2.12", "eslint-config-next": "14.2.12",
+3 -19
View File
@@ -41,30 +41,14 @@
"hotlink-revert": "node ./scripts/hotlink/hotlink-revert.mjs" "hotlink-revert": "node ./scripts/hotlink/hotlink-revert.mjs"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "1.9.1", "@biomejs/biome": "1.9.2",
"@changesets/changelog-github": "0.5.0", "@changesets/changelog-github": "0.5.0",
"@changesets/cli": "2.27.8", "@changesets/cli": "2.27.8",
"@manypkg/cli": "0.21.4", "@manypkg/cli": "0.21.4",
"@manypkg/get-packages": "2.2.2", "@manypkg/get-packages": "2.2.2",
"@playwright/test": "1.47.1",
"@size-limit/preset-big-lib": "11.1.5",
"@types/bun": "1.1.9",
"@types/node": "20.14.9", "@types/node": "20.14.9",
"@types/react": "^18.3.7",
"@viem/anvil": "0.0.10",
"@vitest/coverage-v8": "2.1.1",
"dotenv-mono": "^1.3.14",
"knip": "^5.30.2",
"mitata": "0.1.14",
"react": "18.3.1",
"rimraf": "6.0.1",
"sharp": "^0.33.5",
"size-limit": "11.1.5",
"turbo": "2.1.2", "turbo": "2.1.2",
"typedoc-gen": "workspace:*", "typescript": "5.6.2"
"typescript": "5.6.2",
"vitest": "2.1.1",
"yalc": "1.0.0-pre.53"
}, },
"manypkg": { "manypkg": {
"defaultBranch": "main" "defaultBranch": "main"
@@ -95,5 +79,5 @@
"@typescript-eslint/typescript-estree": "^7.14.1" "@typescript-eslint/typescript-estree": "^7.14.1"
} }
}, },
"packageManager": "[email protected]0.0" "packageManager": "[email protected]1.0"
} }
+8 -11
View File
@@ -23,22 +23,20 @@
}, },
"./package.json": "./package.json" "./package.json": "./package.json"
}, },
"files": [ "files": ["dist/*", "src/*"],
"dist/*",
"src/*"
],
"dependencies": { "dependencies": {
"@aws-sdk/client-lambda": "3.651.1", "@aws-sdk/client-lambda": "3.656.0",
"@aws-sdk/credential-providers": "3.651.1", "@aws-sdk/credential-providers": "3.654.0",
"@mobile-wallet-protocol/client": "0.0.3", "@mobile-wallet-protocol/client": "0.0.3",
"@walletconnect/react-native-compat": "2.13.2", "@walletconnect/react-native-compat": "2.13.2"
"aws-amplify": "5.3.19" },
"devDependencies": {
"rimraf": "6.0.1"
}, },
"peerDependencies": { "peerDependencies": {
"@coinbase/wallet-mobile-sdk": "^1", "@coinbase/wallet-mobile-sdk": "^1",
"@react-native-async-storage/async-storage": "^1 || ^2", "@react-native-async-storage/async-storage": "^1 || ^2",
"@react-native-community/netinfo": "^11", "@react-native-community/netinfo": "^11",
"amazon-cognito-identity-js": "^6",
"expo-application": "^5", "expo-application": "^5",
"expo-linking": "^6", "expo-linking": "^6",
"expo-web-browser": "^13", "expo-web-browser": "^13",
@@ -62,8 +60,7 @@
"build:cjs": "tsc --project ./tsconfig.build.json --module commonjs --outDir ./dist/cjs --verbatimModuleSyntax false && printf '{\"type\":\"commonjs\"}' > ./dist/cjs/package.json", "build:cjs": "tsc --project ./tsconfig.build.json --module commonjs --outDir ./dist/cjs --verbatimModuleSyntax false && printf '{\"type\":\"commonjs\"}' > ./dist/cjs/package.json",
"build:esm": "tsc --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm && printf '{\"type\": \"module\",\"sideEffects\":false}' > ./dist/esm/package.json", "build:esm": "tsc --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm && printf '{\"type\": \"module\",\"sideEffects\":false}' > ./dist/esm/package.json",
"build:types": "tsc --project ./tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", "build:types": "tsc --project ./tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap",
"clean": "rimraf dist", "clean": "rimraf dist"
"push": "yalc push"
}, },
"engines": { "engines": {
"node": ">=18" "node": ">=18"
+2 -2
View File
@@ -44,7 +44,8 @@
"devDependencies": { "devDependencies": {
"@cloudflare/workers-types": "4.20240909.0", "@cloudflare/workers-types": "4.20240909.0",
"@types/node": "20.14.9", "@types/node": "20.14.9",
"typescript": "5.6.2" "typescript": "5.6.2",
"vitest": "2.1.1"
}, },
"scripts": { "scripts": {
"format": "biome format ./src --write", "format": "biome format ./src --write",
@@ -55,7 +56,6 @@
"build:cjs": "tsc --noCheck --project ./tsconfig.build.json --module commonjs --outDir ./dist/cjs --verbatimModuleSyntax false && printf '{\"type\":\"commonjs\"}' > ./dist/cjs/package.json", "build:cjs": "tsc --noCheck --project ./tsconfig.build.json --module commonjs --outDir ./dist/cjs --verbatimModuleSyntax false && printf '{\"type\":\"commonjs\"}' > ./dist/cjs/package.json",
"build:esm": "tsc --noCheck --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm && printf '{\"type\": \"module\",\"sideEffects\":false}' > ./dist/esm/package.json", "build:esm": "tsc --noCheck --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm && printf '{\"type\": \"module\",\"sideEffects\":false}' > ./dist/esm/package.json",
"build:types": "tsc --project ./tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", "build:types": "tsc --project ./tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap",
"push": "yalc push",
"test": "vitest run" "test": "vitest run"
} }
} }
-45
View File
@@ -1,45 +0,0 @@
# Comparitive Benchmarks
We aim to compare real-world use-cases of the thirdweb library with other popular libraries in the Ethereum ecosystem.
## Bundle size
Imported bundle size to make a basic RPC call:
- thirdweb: 4.63 KB gzipped
- `import { createThirdwebClient, getRpcClient, defineChain }`
- viem: 3.78 KB gzipped
- `import { createClient, http }`
- ethers: 88 KB gzipped
- `import { getJsonRPCProvider }`
## Benchmarks
_Latest results are from the `beta` branch on March 20th, 2024._
- [Encode TX Benchmark Results](./encode-tx.md)
- [RPC Benchmark Results](./rpc.md)
- [Read Contract Benchmark Results](./read-contract.md)
- [Send Transaction Benchmark Results](./send-transaction.md)
## Running benchmarks
You can run these benchmarks yourself by cloning the repository and running the following commands:
```bash
# install dependencies
pnpm i
# cd into the thirdweb package
cd packages/thirdweb
# run the benchmark
pnpm run bench:compare
```
Please note that you need to have the following prerequisites installed in order to run the benchmarks:
- `bun` (https://bun.sh)
- `anvil` (https://book.getfoundry.sh/getting-started/installation)
## Reporting issues / inconsistencies
Please report any issues or inconsistencies you encounter while running the benchmarks in the [issues](https://github.com/thirdweb-dev/js/issues/new).
-50
View File
@@ -1,50 +0,0 @@
## Encode TX Benchmark Results ([benchmark code](./encode-tx.ts))
The RPC benchmark measures encoding an ERC20 `transfer` call.
**CPU:** Apple M1 Pro
**Runtime:** bun 1.0.30 (arm64-darwin)
### encode transfer (warm cache)
| Library | Time (avg) | Min … Max | P75 | P99 | P999 |
| -------- | -------------- | -------------------- | --------- | --------- | -------- |
| thirdweb | 1'494 ns/iter | 1'337 ns … 2'585 ns | 1'526 ns | 2'065 ns | 2'585 ns |
| ethers | 32'450 ns/iter | 27'083 ns … 1'102 µs | 32'125 ns | 53'709 ns | 542 µs |
| viem | 1'170 ns/iter | 1'057 ns … 1'731 ns | 1'162 ns | 1'559 ns | 1'731 ns |
**Summary for encode transfer (warm cache):**
- **thirdweb** is 21.72x faster than ethers.
- **viem** is 1.28x faster than thirdweb and 27.75x faster than ethers.
### encode transfer (cold cache)
| Library | Time (avg) | Min … Max | P75 | P99 | P999 |
| -------- | -------------- | -------------------- | --------- | --------- | -------- |
| thirdweb | 1'691 ns/iter | 1'532 ns … 2'226 ns | 1'709 ns | 2'131 ns | 2'226 ns |
| ethers | 41'674 ns/iter | 34'833 ns … 1'267 µs | 41'416 ns | 63'500 ns | 882 µs |
| viem | 1'205 ns/iter | 1'073 ns … 1'803 ns | 1'214 ns | 1'661 ns | 1'803 ns |
**Summary for encode transfer (cold cache):**
- **thirdweb** is 24.64x faster than ethers.
- **viem** is 1.4x faster than thirdweb and 34.58x faster than ethers.
### Running benchmarks
To run the benchmarks, clone the repository and run the following commands:
```bash
# install dependencies
pnpm i
# cd into the thirdweb package
cd packages/thirdweb
# run the benchmark
pnpm run bench:compare
```
**Prerequisites:**
- `bun` installed (https://bun.sh)
- `anvil` installed (https://book.getfoundry.sh/getting-started/installation)
-137
View File
@@ -1,137 +0,0 @@
import { run, bench, group } from "mitata";
import { createThirdwebClient } from "../src/client/client";
import { defineChain } from "../src/chains/utils";
import { getContract } from "../src/contract/contract";
import { encode } from "../src/transaction/actions/encode";
import { transfer } from "../src/extensions/erc20/__generated__/IERC20/write/transfer";
// ethers
import { ethers } from "ethers6";
import * as viem from "viem";
const LOCAL_RPC = "http://localhost:8545";
const USDC_CONTRACT_ADDRESS = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48";
const VITALIK_WALLET = "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B";
const client = createThirdwebClient({
clientId: "BENCH",
});
const USDC_CONTRACT = getContract({
chain: defineChain({
id: 1,
rpc: LOCAL_RPC,
}),
client,
address: USDC_CONTRACT_ADDRESS,
});
const ABI = [
{
inputs: [
{
internalType: "address",
name: "to",
type: "address",
},
{
internalType: "uint256",
name: "value",
type: "uint256",
},
],
name: "transfer",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
] as const;
const ethers6Contract = new ethers.Contract(
USDC_CONTRACT_ADDRESS,
ABI,
ethers.getDefaultProvider(LOCAL_RPC),
);
const transfer_viem = viem.prepareEncodeFunctionData({
abi: ABI,
functionName: "transfer",
});
function randomBigint() {
return BigInt(Math.floor(Math.random() * 1000));
}
group("encode transfer (warm cache)", () => {
bench("thirdweb", async () => {
const tx = transfer({
contract: USDC_CONTRACT,
to: VITALIK_WALLET,
value: randomBigint(),
});
await encode(tx);
});
bench("ethers", async () => {
ethers6Contract.interface.encodeFunctionData("transfer", [
VITALIK_WALLET,
randomBigint(),
]);
});
bench("viem", async () => {
viem.encodeFunctionData({
...transfer_viem,
args: [VITALIK_WALLET, randomBigint()],
});
});
});
group("encode transfer (cold cache)", () => {
bench("thirdweb", async () => {
// define chain
const chain = defineChain({
id: 1,
rpc: LOCAL_RPC,
});
// get contract
const contract = getContract({
chain,
client,
address: USDC_CONTRACT_ADDRESS,
});
const tx = transfer({
contract: contract,
to: VITALIK_WALLET,
value: randomBigint(),
});
await encode(tx);
});
bench("ethers", async () => {
new ethers.Contract(
USDC_CONTRACT_ADDRESS,
ABI,
ethers.getDefaultProvider(LOCAL_RPC),
).interface.encodeFunctionData("transfer", [
VITALIK_WALLET,
randomBigint(),
]);
});
bench("viem", async () => {
viem.encodeFunctionData({
...transfer_viem,
args: [VITALIK_WALLET, randomBigint()],
});
});
});
await run();
@@ -1,48 +0,0 @@
## Read Contract Benchmark Results ([benchmark code](./read-contract.ts))
The read contract benchmark measures reading the `balanceOf` method of an ERC20 contract (USDC).
**CPU:** Apple M1 Pro
**Runtime:** bun 1.0.30 (arm64-darwin)
### read contract (warm cache)
| Library | Time (avg) | Min … Max | P75 | P99 | P999 |
| -------- | ------------- | ------------------- | -------- | -------- | -------- |
| thirdweb | 203 µs/iter | 149 µs … 1'436 µs | 199 µs | 711 µs | 1'370 µs |
| viem | 208 µs/iter | 163 µs … 1'341 µs | 206 µs | 742 µs | 1'283 µs |
| ethers | 2'118 µs/iter | 1'577 µs … 4'454 µs | 2'058 µs | 4'338 µs | 4'454 µs |
**Summary for read contract (warm cache):**
- **thirdweb** is 1.02x faster than viem and 10.43x faster than ethers.
### read contract (cold cache)
| Library | Time (avg) | Min … Max | P75 | P99 | P999 |
| -------- | ------------- | ------------------- | -------- | -------- | -------- |
| thirdweb | 191 µs/iter | 149 µs … 1'195 µs | 189 µs | 747 µs | 1'130 µs |
| viem | 211 µs/iter | 162 µs … 1'290 µs | 209 µs | 825 µs | 1'038 µs |
| ethers | 1'764 µs/iter | 1'441 µs … 3'829 µs | 1'731 µs | 3'420 µs | 3'829 µs |
**Summary for read contract (cold cache):**
- **thirdweb** is 1.1x faster than viem and 9.22x faster than ethers.
### Running benchmarks
To run the benchmarks, clone the repository and run the following commands:
```bash
# install dependencies
pnpm i
# cd into the thirdweb package
cd packages/thirdweb
# run the benchmark
pnpm run bench:compare
```
**Prerequisites:**
- `bun` installed (https://bun.sh)
- `anvil` installed (https://book.getfoundry.sh/getting-started/installation)
@@ -1,138 +0,0 @@
import { run, bench, group } from "mitata";
import { createThirdwebClient } from "../src/client/client";
import { getContract } from "../src/contract/contract";
import { defineChain } from "../src/chains/utils";
import { balanceOf } from "../src/extensions/erc20/__generated__/IERC20/read/balanceOf";
import { ethers } from "ethers6";
import * as viem from "viem";
import assert from "node:assert";
const LOCAL_RPC = "http://127.0.0.1:8545";
const USDC_CONTRACT_ADDRESS = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48";
const VITALIK_WALLET = "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B";
const client = createThirdwebClient({
clientId: "BENCH",
config: { rpc: { maxBatchSize: 1 } },
});
const USDC_CONTRACT = getContract({
chain: defineChain({
id: 1,
rpc: LOCAL_RPC,
}),
client,
address: USDC_CONTRACT_ADDRESS,
});
const ABI = [
{
inputs: [
{
internalType: "address",
name: "account",
type: "address",
},
],
name: "balanceOf",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
] as const;
const staticEthersProvider = new ethers.JsonRpcProvider(LOCAL_RPC, 1, {
staticNetwork: true,
batchMaxCount: 1,
cacheTimeout: 0,
});
const ethersContract = new ethers.Contract(
USDC_CONTRACT_ADDRESS,
ABI,
staticEthersProvider,
);
const viemClient = viem.createPublicClient({ transport: viem.http(LOCAL_RPC) });
const viemContract = viem.getContract({
abi: ABI,
address: USDC_CONTRACT_ADDRESS,
client: viemClient,
});
group("read contract (warm cache)", () => {
bench("thirdweb", async () => {
const bOf = await balanceOf({
contract: USDC_CONTRACT,
address: VITALIK_WALLET,
});
assert(bOf === 81831338n, "balanceOf should be 81831338");
});
bench("viem", async () => {
const bOf = await viemContract.read.balanceOf([VITALIK_WALLET]);
assert(bOf === 81831338n, "balanceOf should be 81831338");
});
bench("ethers", async () => {
const bOf = await ethersContract.balanceOf(VITALIK_WALLET);
assert(bOf === 81831338n, "balanceOf should be 81831338");
});
});
group("read contract (cold cache)", () => {
bench("thirdweb", async () => {
// define chain
const chain = defineChain({
id: 1,
rpc: LOCAL_RPC,
});
// get contract
const contract = getContract({
chain,
client,
address: USDC_CONTRACT_ADDRESS,
});
// actually read from the contract
const bOf = await balanceOf({
contract: contract,
address: VITALIK_WALLET,
});
assert(bOf === 81831338n, "balanceOf should be 81831338");
});
bench("viem", async () => {
const bOf = await viem
.getContract({
abi: ABI,
address: USDC_CONTRACT_ADDRESS,
client: viem.createPublicClient({ transport: viem.http(LOCAL_RPC) }),
})
.read.balanceOf([VITALIK_WALLET]);
assert(bOf === 81831338n, "balanceOf should be 81831338");
});
bench("ethers", async () => {
const bOf = await new ethers.Contract(
USDC_CONTRACT_ADDRESS,
ABI,
new ethers.JsonRpcProvider(LOCAL_RPC, 1, {
staticNetwork: true,
batchMaxCount: 1,
cacheTimeout: 0,
}),
).balanceOf(VITALIK_WALLET);
assert(bOf === 81831338n, "balanceOf should be 81831338");
});
});
await run();
-48
View File
@@ -1,48 +0,0 @@
## RPC Benchmark Results ([benchmark code](./rpc.ts))
The RPC benchmark measures un-cached calls to a local anvil node using the `eth_getBlockNumber` method.
**CPU:** Apple M1 Pro
**Runtime:** bun 1.0.30 (arm64-darwin)
### rpc (batching disabled)
| Library | Time (avg) | Min … Max | P75 | P99 | P999 |
| -------- | -------------- | -------------------- | --------- | -------- | -------- |
| thirdweb | 72'167 ns/iter | 47'625 ns … 1'197 µs | 76'292 ns | 146 µs | 850 µs |
| viem | 80'414 ns/iter | 52'541 ns … 937 µs | 85'333 ns | 169 µs | 705 µs |
| ethers | 1'655 µs/iter | 1'254 µs … 6'840 µs | 1'616 µs | 4'851 µs | 6'840 µs |
**Summary for rpc (batching disabled):**
- **thirdweb** is 1.11x faster than viem and 22.93x faster than ethers.
### rpc (batching enabled)
| Library | Time (avg) | Min … Max | P75 | P99 | P999 |
| -------- | ------------- | ------------------- | -------- | -------- | -------- |
| thirdweb | 1'579 µs/iter | 1'214 µs … 5'993 µs | 1'471 µs | 5'058 µs | 5'993 µs |
| viem | 1'641 µs/iter | 1'259 µs … 6'309 µs | 1'503 µs | 5'852 µs | 6'309 µs |
| ethers | 1'864 µs/iter | 1'255 µs … 6'225 µs | 1'746 µs | 5'923 µs | 6'225 µs |
**Summary for rpc (batching enabled):**
- **thirdweb** is 1.04x faster than viem and 1.18x faster than ethers.
### Running benchmarks
To run the benchmarks, clone the repository and run the following commands:
```bash
# install dependencies
pnpm i
# cd into the thirdweb package
cd packages/thirdweb
# run the benchmark
pnpm run bench:compare
```
**Prerequisites:**
- `bun` installed (https://bun.sh)
- `anvil` installed (https://book.getfoundry.sh/getting-started/installation)
-99
View File
@@ -1,99 +0,0 @@
import { run, bench, group } from "mitata";
import { getRpcClient } from "../src/rpc/rpc.js";
import { createThirdwebClient } from "../src/client/client.js";
import { eth_blockNumber } from "../src/rpc/actions/eth_blockNumber.js";
import { defineChain } from "../src/chains/utils.js";
import * as viem from "viem";
import * as ethers from "ethers6";
import assert from "node:assert";
const LOCAL_RPC = "http://127.0.0.1:8545";
const clientNoBatching = createThirdwebClient({
clientId: "BENCH",
config: { rpc: { maxBatchSize: 1 } },
});
const clientWithBatching = createThirdwebClient({ clientId: "BENCH" });
const rpcRequestNoBatching = getRpcClient({
client: clientNoBatching,
chain: defineChain({
id: 1,
rpc: LOCAL_RPC,
}),
});
const rpcRequestBatching = getRpcClient({
client: clientWithBatching,
chain: defineChain({
id: 1,
rpc: LOCAL_RPC,
}),
});
// // viem setup
const publicClientNoBatching = viem.createPublicClient({
transport: viem.http(LOCAL_RPC),
});
const publicClientBatching = viem.createPublicClient({
transport: viem.http(LOCAL_RPC, {
batch: { batchSize: 100, wait: 0 },
}),
});
// ethers setup
const ethersProviderNoBatching = new ethers.JsonRpcProvider(LOCAL_RPC, 1, {
staticNetwork: true,
batchMaxCount: 1,
cacheTimeout: 0,
});
const ethersProviderBatching = new ethers.JsonRpcProvider(LOCAL_RPC, 1, {
staticNetwork: true,
batchMaxCount: 100,
batchStallTime: 0,
cacheTimeout: 0,
});
group("rpc (batching disabled)", () => {
bench("thirdweb", async () => {
const bn = await eth_blockNumber(rpcRequestNoBatching);
assert(bn === 19139495n, "unexpected block number");
});
bench("viem", async () => {
// disabling the cache to be more representative
const bn = await publicClientNoBatching.getBlockNumber({ cacheTime: 0 });
assert(bn === 19139495n, "unexpected block number");
});
bench("ethers", async () => {
const bn = await ethersProviderNoBatching.getBlockNumber();
assert(bn === 19139495, "unexpected block number");
});
});
group("rpc (batching enabled)", () => {
bench("thirdweb", async () => {
const bn = await eth_blockNumber(rpcRequestBatching);
assert(bn === 19139495n, "unexpected block number");
});
bench("viem", async () => {
// disabling the cache to be more representative
const bn = await publicClientBatching.getBlockNumber({ cacheTime: 0 });
assert(bn === 19139495n, "unexpected block number");
});
bench("ethers", async () => {
const bn = await ethersProviderBatching.getBlockNumber();
assert(bn === 19139495, "unexpected block number");
});
});
await run();
-42
View File
@@ -1,42 +0,0 @@
import { createAnvil } from "@viem/anvil";
import { $ } from "bun";
import { readdir } from "node:fs/promises";
import { join } from "node:path";
const forkHeader = {};
if (process.env.TW_SECRET_KEY) {
forkHeader["x-secret-key"] = process.env.TW_SECRET_KEY;
}
const anvil = createAnvil({
port: 8545,
chainId: 1,
forkUrl: "https://1.rpc.thirdweb.com",
forkHeader,
forkChainId: 1,
forkBlockNumber: 19139495n,
noMining: true,
startTimeout: 20000,
});
console.log("Starting Anvil...");
await anvil.start();
// find all the benchmark files in this directory
const files = await readdir(__dirname);
const benchmarks = files.filter(
(file) => file.endsWith(".ts") && file !== "run.ts",
);
// run each benchmark
for (const benchmark of benchmarks) {
console.log(`\n-------------------${"-".repeat(benchmark.length)}
Running benchmark: ${benchmark}
-------------------${"-".repeat(benchmark.length)}\n`);
await $`bun run ${join(__dirname, benchmark)}`;
console.log("\n");
}
console.log("Stopping Anvil...");
await anvil.stop();
@@ -1,36 +0,0 @@
## Send Transaction Benchmark Results ([benchmark code](./send-transaction.ts))
The send transaction benchmark measures sending native tokens (ETH) to another address.
**CPU:** Apple M1 Pro
**Runtime:** bun 1.0.30 (arm64-darwin)
### transfer native tokens
| Library | Time (avg) | Min … Max | P75 | P99 | P999 |
| -------- | -------------- | --------------------- | --------- | --------- | --------- |
| thirdweb | 3'244 µs/iter | 1'879 µs … 5'580 µs | 3'958 µs | 5'543 µs | 5'580 µs |
| viem | 7'468 µs/iter | 6'224 µs … 10'241 µs | 8'077 µs | 10'241 µs | 10'241 µs |
| ethers | 18'376 µs/iter | 17'534 µs … 20'136 µs | 19'084 µs | 20'136 µs | 20'136 µs |
**Summary for Transfer Native Tokens:**
- **thirdweb** is 2.3x faster than viem and 5.67x faster than ethers.
### Running benchmarks
To run the benchmarks, clone the repository and run the following commands:
```bash
# install dependencies
pnpm i
# cd into the thirdweb package
cd packages/thirdweb
# run the benchmark
pnpm run bench:compare
```
**Prerequisites:**
- `bun` installed (https://bun.sh)
- `anvil` installed (https://book.getfoundry.sh/getting-started/installation)
@@ -1,82 +0,0 @@
import { bench, group, run } from "mitata";
import { defineChain } from "../src/chains/utils";
import { createThirdwebClient } from "../src/client/client";
import { sendTransaction } from "../src/transaction/actions/send-transaction";
import { prepareTransaction } from "../src/transaction/prepare-transaction";
import { privateKeyToAccount } from "../src/wallets/private-key";
import * as ethers from "ethers6";
import * as viem from "viem";
import { privateKeyToAccount as viemPrivateKeyToAccount } from "viem/accounts";
import { mainnet } from "viem/chains";
const LOCAL_RPC = "http://127.0.0.1:8545";
const VITALIK_WALLET = "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B";
const client = createThirdwebClient({
clientId: "BENCH",
config: { rpc: { maxBatchSize: 1 } },
});
const TEST_CHAIN = defineChain({
id: 1,
rpc: LOCAL_RPC,
});
const PKEY =
"0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80";
const account = privateKeyToAccount({
privateKey: PKEY,
client,
});
// viem setup
const privateKeyAccountViem = viemPrivateKeyToAccount(PKEY);
const walletClient = viem.createWalletClient({
account: privateKeyAccountViem,
transport: viem.http(LOCAL_RPC),
});
// ethers setup
const provider = new ethers.JsonRpcProvider(LOCAL_RPC, 1, {
staticNetwork: true,
batchMaxCount: 1,
cacheTimeout: 0,
});
const wallet = new ethers.Wallet(PKEY, provider);
function randomBigint() {
return BigInt(Math.floor(Math.random() * 1000));
}
group("transfer native tokens", () => {
bench("thirdweb", async () => {
const transaction = prepareTransaction({
client,
chain: TEST_CHAIN,
value: randomBigint(),
to: VITALIK_WALLET,
});
await sendTransaction({ transaction, account });
});
bench("viem", async () => {
await walletClient.sendTransaction({
chain: mainnet,
value: randomBigint(),
to: VITALIK_WALLET,
});
});
bench("ethers", async () => {
await wallet.sendTransaction({
to: VITALIK_WALLET,
value: randomBigint(),
});
});
});
await run();
+18 -10
View File
@@ -1,12 +1,20 @@
{ {
"$schema": "https://unpkg.com/knip@5/schema.json", "$schema": "https://unpkg.com/knip@5/schema.json",
"entry": ["src/exports/**/*.ts", "package.json"], "entry": ["src/exports/**", "scripts/**/*.{ts,mjs}", "src/cli/bin.ts", ""],
"project": ["src/**/*.{ts,tsx}", "scripts/**/*.mjs"], "project": ["src/**/*.{ts,tsx}", "scripts/**/*.mjs"],
"ignoreBinaries": ["printf", "yalc"], "ignore": ["src/**/__generated__/**"],
"ignoreDependencies": ["ethers", "react", "tslib"], "ignoreBinaries": ["printf"],
"vitest": { "ignoreDependencies": [
"config": "test/vitest.config.ts", "@codspeed/vitest-plugin",
"entry": ["src/**/*.{test,bench}.ts", "test/globalSetup.ts"], "@testing-library/jest-dom",
"project": ["src/**/*.{ts,tsx}", "test/**/*.ts"] "tslib",
} "dotenv-mono",
"@size-limit/preset-big-lib",
"@viem/anvil",
"@vitest/coverage-v8"
],
"rules": {
"optionalPeerDependencies": "off",
"enumMembers": "off"
}
} }
+47 -85
View File
@@ -127,60 +127,24 @@
}, },
"typesVersions": { "typesVersions": {
"*": { "*": {
"adapters/*": [ "adapters/*": ["./dist/types/exports/adapters/*.d.ts"],
"./dist/types/exports/adapters/*.d.ts" "auth": ["./dist/types/exports/auth.d.ts"],
], "chains": ["./dist/types/exports/chains.d.ts"],
"auth": [ "contract": ["./dist/types/exports/contract.d.ts"],
"./dist/types/exports/auth.d.ts" "deploys": ["./dist/types/exports/deploys.d.ts"],
], "event": ["./dist/types/exports/event.d.ts"],
"chains": [ "extensions/*": ["./dist/types/exports/extensions/*.d.ts"],
"./dist/types/exports/chains.d.ts" "pay": ["./dist/types/exports/pay.d.ts"],
], "react": ["./dist/types/exports/react.d.ts"],
"contract": [ "react-native": ["./dist/types/exports/react-native.d.ts"],
"./dist/types/exports/contract.d.ts" "rpc": ["./dist/types/exports/rpc.d.ts"],
], "storage": ["./dist/types/exports/storage.d.ts"],
"deploys": [ "transaction": ["./dist/types/exports/transaction.d.ts"],
"./dist/types/exports/deploys.d.ts" "utils": ["./dist/types/exports/utils.d.ts"],
], "wallets": ["./dist/types/exports/wallets.d.ts"],
"event": [ "wallets/*": ["./dist/types/exports/wallets/*.d.ts"],
"./dist/types/exports/event.d.ts" "modules": ["./dist/types/exports/modules.d.ts"],
], "social": ["./dist/types/exports/social.d.ts"]
"extensions/*": [
"./dist/types/exports/extensions/*.d.ts"
],
"pay": [
"./dist/types/exports/pay.d.ts"
],
"react": [
"./dist/types/exports/react.d.ts"
],
"react-native": [
"./dist/types/exports/react-native.d.ts"
],
"rpc": [
"./dist/types/exports/rpc.d.ts"
],
"storage": [
"./dist/types/exports/storage.d.ts"
],
"transaction": [
"./dist/types/exports/transaction.d.ts"
],
"utils": [
"./dist/types/exports/utils.d.ts"
],
"wallets": [
"./dist/types/exports/wallets.d.ts"
],
"wallets/*": [
"./dist/types/exports/wallets/*.d.ts"
],
"modules": [
"./dist/types/exports/modules.d.ts"
],
"social": [
"./dist/types/exports/social.d.ts"
]
} }
}, },
"browser": { "browser": {
@@ -214,13 +178,11 @@
"@walletconnect/ethereum-provider": "2.16.2", "@walletconnect/ethereum-provider": "2.16.2",
"@walletconnect/sign-client": "2.16.2", "@walletconnect/sign-client": "2.16.2",
"abitype": "1.0.5", "abitype": "1.0.5",
"fast-text-encoding": "^1.0.6",
"fuse.js": "7.0.0", "fuse.js": "7.0.0",
"input-otp": "^1.2.4", "input-otp": "^1.2.4",
"mipd": "0.0.7", "mipd": "0.0.7",
"node-libs-browser": "2.2.1",
"uqr": "0.1.2", "uqr": "0.1.2",
"viem": "2.21.9" "viem": "2.21.11"
}, },
"peerDependencies": { "peerDependencies": {
"@aws-sdk/client-lambda": "^3", "@aws-sdk/client-lambda": "^3",
@@ -228,8 +190,6 @@
"@coinbase/wallet-mobile-sdk": "^1", "@coinbase/wallet-mobile-sdk": "^1",
"@mobile-wallet-protocol/client": "0.0.3", "@mobile-wallet-protocol/client": "0.0.3",
"@react-native-async-storage/async-storage": "^1 || ^2", "@react-native-async-storage/async-storage": "^1 || ^2",
"amazon-cognito-identity-js": "^6",
"aws-amplify": "^5",
"ethers": "^5 || ^6", "ethers": "^5 || ^6",
"expo-linking": "^6", "expo-linking": "^6",
"expo-web-browser": "^13", "expo-web-browser": "^13",
@@ -271,18 +231,12 @@
"react-native-svg": { "react-native-svg": {
"optional": true "optional": true
}, },
"aws-amplify": {
"optional": true
},
"@aws-sdk/client-lambda": { "@aws-sdk/client-lambda": {
"optional": true "optional": true
}, },
"@aws-sdk/credential-providers": { "@aws-sdk/credential-providers": {
"optional": true "optional": true
}, },
"amazon-cognito-identity-js": {
"optional": true
},
"@react-native-async-storage/async-storage": { "@react-native-async-storage/async-storage": {
"optional": true "optional": true
}, },
@@ -297,7 +251,7 @@
"bench:compare": "bun run ./benchmarks/run.ts", "bench:compare": "bun run ./benchmarks/run.ts",
"bench": "vitest -c ./test/vitest.config.ts bench", "bench": "vitest -c ./test/vitest.config.ts bench",
"format": "biome format ./src --write", "format": "biome format ./src --write",
"lint": "biome check ./src", "lint": "knip && biome check ./src && tsc --project ./tsconfig.build.json --module esnext --noEmit",
"fix": "biome check ./src --fix", "fix": "biome check ./src --fix",
"knip": "knip", "knip": "knip",
"build:generate": "bun scripts/generate/generate.ts", "build:generate": "bun scripts/generate/generate.ts",
@@ -310,7 +264,6 @@
"build:esm": "tsc --noCheck --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm && printf '{\"type\": \"module\",\"sideEffects\":false}' > ./dist/esm/package.json", "build:esm": "tsc --noCheck --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm && printf '{\"type\": \"module\",\"sideEffects\":false}' > ./dist/esm/package.json",
"build:types": "tsc --project ./tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", "build:types": "tsc --project ./tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap",
"clean": "rimraf dist", "clean": "rimraf dist",
"push": "yalc push",
"size": "size-limit", "size": "size-limit",
"test:watch": "vitest -c ./test/vitest.config.ts dev", "test:watch": "vitest -c ./test/vitest.config.ts dev",
"test": "vitest run -c ./test/vitest.config.ts --coverage", "test": "vitest run -c ./test/vitest.config.ts --coverage",
@@ -326,44 +279,53 @@
"node": ">=18" "node": ">=18"
}, },
"devDependencies": { "devDependencies": {
"@aws-sdk/client-lambda": "3.651.1", "@aws-sdk/client-lambda": "3.656.0",
"@aws-sdk/credential-providers": "3.651.1", "@aws-sdk/credential-providers": "3.654.0",
"@biomejs/biome": "1.9.2",
"@chromatic-com/storybook": "2.0.2", "@chromatic-com/storybook": "2.0.2",
"@codspeed/vitest-plugin": "3.1.1", "@codspeed/vitest-plugin": "3.1.1",
"@coinbase/wallet-mobile-sdk": "1.1.2", "@coinbase/wallet-mobile-sdk": "1.1.2",
"@mobile-wallet-protocol/client": "0.0.3", "@mobile-wallet-protocol/client": "0.0.3",
"@react-native-async-storage/async-storage": "1.24.0", "@react-native-async-storage/async-storage": "1.24.0",
"@storybook/addon-essentials": "8.3.1", "@size-limit/preset-big-lib": "11.1.5",
"@storybook/addon-interactions": "8.3.1", "@storybook/addon-essentials": "8.3.2",
"@storybook/addon-links": "8.3.1", "@storybook/addon-interactions": "8.3.2",
"@storybook/addon-onboarding": "8.3.1", "@storybook/addon-links": "8.3.2",
"@storybook/blocks": "8.3.1", "@storybook/addon-onboarding": "8.3.2",
"@storybook/react": "8.3.1", "@storybook/react": "8.3.2",
"@storybook/react-vite": "8.3.1", "@storybook/react-vite": "8.3.2",
"@storybook/test": "8.3.1", "@storybook/test": "8.3.2",
"@testing-library/jest-dom": "^6.4.7", "@testing-library/jest-dom": "^6.4.7",
"@testing-library/react": "^16.0.0", "@testing-library/react": "^16.0.0",
"@testing-library/user-event": "^14.5.2", "@testing-library/user-event": "^14.5.2",
"@types/cross-spawn": "^6.0.6", "@types/cross-spawn": "^6.0.6",
"@types/react": "^18.3.7", "@types/react": "^18.3.8",
"@viem/anvil": "0.0.10",
"@vitejs/plugin-react": "^4.3.1", "@vitejs/plugin-react": "^4.3.1",
"@vitest/coverage-v8": "2.1.1",
"@vitest/ui": "2.1.1", "@vitest/ui": "2.1.1",
"amazon-cognito-identity-js": "6.3.12",
"aws-amplify": "5.3.19",
"cross-spawn": "7.0.3", "cross-spawn": "7.0.3",
"ethers5": "npm:[email protected]", "dotenv-mono": "^1.3.14",
"ethers6": "npm:ethers@6.13.2", "ethers5": "npm:ethers@5",
"ethers6": "npm:ethers@6",
"expo-linking": "6.3.1", "expo-linking": "6.3.1",
"expo-web-browser": "13.0.3", "expo-web-browser": "13.0.3",
"happy-dom": "^15.7.4", "happy-dom": "^15.7.4",
"msw": "2.4.8", "knip": "^5.30.4",
"prettier": "^3.3.2",
"react": "18.3.1",
"react-native": "0.75.3", "react-native": "0.75.3",
"react-native-aes-gcm-crypto": "0.2.2", "react-native-aes-gcm-crypto": "0.2.2",
"react-native-passkey": "3.0.0-beta2", "react-native-passkey": "3.0.0-beta2",
"react-native-quick-crypto": "0.7.4", "react-native-quick-crypto": "0.7.4",
"react-native-svg": "15.7.1", "react-native-svg": "15.7.1",
"storybook": "8.3.1", "rimraf": "6.0.1",
"sharp": "^0.33.5",
"size-limit": "11.1.5",
"storybook": "8.3.2",
"typedoc": "0.26.7",
"typescript": "5.6.2", "typescript": "5.6.2",
"vite": "5.4.6" "vite": "5.4.7",
"vitest": "2.1.1"
} }
} }
+23 -1
View File
@@ -1,5 +1,27 @@
// @ts-check // @ts-check
import { typedoc } from "typedoc-gen"; import TypeDoc from "typedoc";
/**
*
* Generate a documentation JSON file for a project
* @param {{ entryPoints: string[]; exclude: string[]; }} options
*/
async function typedoc(options) {
const jsonOut = "typedoc/documentation.json";
const app = await TypeDoc.Application.bootstrapWithPlugins({
entryPoints: options.entryPoints,
excludeInternal: true,
exclude: options.exclude,
});
const project = await app.convert();
if (!project) {
throw new Error("Failed to create project");
}
await app.generateJson(project, jsonOut);
}
typedoc({ typedoc({
entryPoints: ["src/exports/**/*.ts", "src/extensions/modules/**/index.ts"], entryPoints: ["src/exports/**/*.ts", "src/extensions/modules/**/index.ts"],
-16
View File
@@ -1,16 +0,0 @@
import type { AbiFunction } from "abitype";
import { type Hex, decodeAbiParameters } from "viem";
/**
* Decodes the result of a function call based on the provided ABI function definition.
* @param abiFn - The ABI function definition.
* @param data - The encoded data to be decoded.
* @returns The decoded result.
* @internal
*/
export function decodeFunctionResult<const abiFn extends AbiFunction>(
abiFn: abiFn,
data: Hex,
) {
return decodeAbiParameters<abiFn["outputs"]>(abiFn.outputs, data);
}
-32
View File
@@ -1,32 +0,0 @@
import type {
AbiFunction,
AbiParameter,
AbiParametersToPrimitiveTypes,
} from "abitype";
import { toFunctionSelector } from "viem";
import { encodeAbiParameters } from "../utils/abi/encodeAbiParameters.js";
import { concatHex } from "../utils/encoding/helpers/concat-hex.js";
/**
* Encodes an ABI function with its arguments into a hexadecimal string.
*
* @param abiFn - The ABI function object.
* @param args - The arguments to be encoded.
* @returns The encoded ABI function as a hexadecimal string.
* @internal
*/
export function encodeAbiFunction<
const TAbiFunction extends AbiFunction,
const TParams = AbiParametersToPrimitiveTypes<TAbiFunction["inputs"]>,
>(
abiFn: TAbiFunction,
args: TParams extends readonly AbiParameter[] ? TParams : never,
) {
const signature = toFunctionSelector(abiFn);
// if there are no inputs, we can return the signature as is
if (abiFn.inputs.length === 0) {
return signature;
}
const data = encodeAbiParameters(abiFn.inputs, args ?? []);
return concatHex([signature, data ?? "0x"]);
}
@@ -2,7 +2,7 @@ import { encodeJWT } from "../../utils/jwt/encode-jwt.js";
import type { AuthOptions } from "./types.js"; import type { AuthOptions } from "./types.js";
import type { VerifiedLoginPayload } from "./verify-login-payload.js"; import type { VerifiedLoginPayload } from "./verify-login-payload.js";
export const DEFAULT_TOKEN_DURATION_SECONDS = 60 * 60 * 24; const DEFAULT_TOKEN_DURATION_SECONDS = 60 * 60 * 24;
type GenerateJWTParams<Tctx = unknown> = { type GenerateJWTParams<Tctx = unknown> = {
payload: VerifiedLoginPayload; payload: VerifiedLoginPayload;
@@ -6,14 +6,14 @@ import type { AuthOptions } from "./types.js";
/** /**
* @auth * @auth
*/ */
export type VerifyJWTParams = { type VerifyJWTParams = {
jwt: string; jwt: string;
}; };
/** /**
* @auth * @auth
*/ */
export type VerifyJWTResult = type VerifyJWTResult =
| { | {
valid: true; valid: true;
parsedJWT: JWTPayload; parsedJWT: JWTPayload;
@@ -8,7 +8,7 @@ import { URL } from "node:url";
const toPath = (urlOrPath: string | URL) => const toPath = (urlOrPath: string | URL) =>
urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath; urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;
export type Options = { type Options = {
/** /**
* The directory to start from. * The directory to start from.
* @default process.cwd() * @default process.cwd()
@@ -55,7 +55,7 @@ async function findUp(
return undefined; return undefined;
} }
export type PackageDirectoryOptions = { type PackageDirectoryOptions = {
/** /**
* The directory to start searching from. * The directory to start searching from.
* @default process.cwd() * @default process.cwd()
@@ -15,8 +15,3 @@ export function isNativeTokenAddress(address: string) {
* The zero address in Ethereum, represented as a hexadecimal string. * The zero address in Ethereum, represented as a hexadecimal string.
*/ */
export const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"; export const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
/**
* @deprecated Use {@link ZERO_ADDRESS}.
*/
export const ADDRESS_ZERO = ZERO_ADDRESS;
@@ -1,10 +1,5 @@
import type { Abi } from "abitype";
import { prepareTransaction } from "../../transaction/prepare-transaction.js"; import { prepareTransaction } from "../../transaction/prepare-transaction.js";
import { import { computeDeploymentInfoFromContractId } from "../../utils/any-evm/compute-published-contract-deploy-info.js";
computeDeploymentInfoFromBytecode,
computeDeploymentInfoFromContractId,
} from "../../utils/any-evm/compute-published-contract-deploy-info.js";
import type { Hex } from "../../utils/encoding/hex.js";
import type { Prettify } from "../../utils/type-utils.js"; import type { Prettify } from "../../utils/type-utils.js";
import type { ClientAndChain } from "../../utils/types.js"; import type { ClientAndChain } from "../../utils/types.js";
import { computeCreate2FactoryAddress } from "./utils/create-2-factory.js"; import { computeCreate2FactoryAddress } from "./utils/create-2-factory.js";
@@ -12,7 +7,7 @@ import { computeCreate2FactoryAddress } from "./utils/create-2-factory.js";
/** /**
* @extension DEPLOY * @extension DEPLOY
*/ */
export type DeployDetemisiticParams = Prettify< type DeployDetemisiticParams = Prettify<
ClientAndChain & { ClientAndChain & {
contractId: string; contractId: string;
constructorParams?: Record<string, unknown>; constructorParams?: Record<string, unknown>;
@@ -61,31 +56,3 @@ export function prepareDeterministicDeployTransaction(
}, },
}); });
} }
/**
* @internal
*/
export function prepareDeterministicDeployTransactionFromBytecode(
options: ClientAndChain & {
abi: Abi;
bytecode: Hex;
constructorParams?: Record<string, unknown>;
salt?: string;
},
) {
const { client, chain } = options;
return prepareTransaction({
client,
chain,
to: () =>
computeCreate2FactoryAddress({
client,
chain,
}),
data: async () => {
const infraContractInfo =
await computeDeploymentInfoFromBytecode(options);
return infraContractInfo.initBytecodeWithsalt;
},
});
}
@@ -14,7 +14,7 @@ import { type ThirdwebContract, getContract } from "../contract.js";
export const CONTRACT_PUBLISHER_ADDRESS = export const CONTRACT_PUBLISHER_ADDRESS =
"0xf5b896Ddb5146D5dA77efF4efBb3Eae36E300808"; // Polygon only "0xf5b896Ddb5146D5dA77efF4efBb3Eae36E300808"; // Polygon only
export const THIRDWEB_DEPLOYER = "0xdd99b75f095d0c4d5112aCe938e4e6ed962fb024"; const THIRDWEB_DEPLOYER = "0xdd99b75f095d0c4d5112aCe938e4e6ed962fb024";
/** /**
* @internal * @internal
@@ -2,10 +2,7 @@ import type { Chain } from "../../../chains/types.js";
import type { ThirdwebClient } from "../../../client/client.js"; import type { ThirdwebClient } from "../../../client/client.js";
import { prepareTransaction } from "../../../transaction/prepare-transaction.js"; import { prepareTransaction } from "../../../transaction/prepare-transaction.js";
import { computeContractAddress } from "../../../utils/any-evm/compute-published-contract-address.js"; import { computeContractAddress } from "../../../utils/any-evm/compute-published-contract-address.js";
import { import { computeDeploymentInfoFromMetadata } from "../../../utils/any-evm/compute-published-contract-deploy-info.js";
computeDeploymentInfoFromContractId,
computeDeploymentInfoFromMetadata,
} from "../../../utils/any-evm/compute-published-contract-deploy-info.js";
import type { FetchDeployMetadataResult } from "../../../utils/any-evm/deploy-metadata.js"; import type { FetchDeployMetadataResult } from "../../../utils/any-evm/deploy-metadata.js";
import { isContractDeployed } from "../../../utils/bytecode/is-contract-deployed.js"; import { isContractDeployed } from "../../../utils/bytecode/is-contract-deployed.js";
import type { Prettify } from "../../../utils/type-utils.js"; import type { Prettify } from "../../../utils/type-utils.js";
@@ -21,7 +18,7 @@ export type InfraContractId =
| "TWCloneFactory" | "TWCloneFactory"
| (string & {}); | (string & {});
export type GetDeployedInfraParams = Prettify< type GetDeployedInfraParams = Prettify<
ClientAndChain & { ClientAndChain & {
contractId: InfraContractId; contractId: InfraContractId;
constructorParams?: Record<string, unknown>; constructorParams?: Record<string, unknown>;
@@ -71,29 +68,6 @@ export async function getDeployedInfraContractFromMetadata(options: {
return null; return null;
} }
/**
* @internal
*/
export function prepareInfraContractDeployTransaction(
options: GetDeployedInfraParams,
) {
const { client, chain } = options;
return prepareTransaction({
client,
chain,
to: () =>
computeCreate2FactoryAddress({
client,
chain,
}),
data: async () => {
const infraContractInfo =
await computeDeploymentInfoFromContractId(options);
return infraContractInfo.initBytecodeWithsalt;
},
});
}
/** /**
* @internal * @internal
*/ */
+5
View File
@@ -72,3 +72,8 @@ export { frameTestnet } from "../chains/chain-definitions/frame-testnet.js";
export { hokumTestnet } from "../chains/chain-definitions/hokum-testnet.js"; export { hokumTestnet } from "../chains/chain-definitions/hokum-testnet.js";
export { godWokenTestnetV1 } from "../chains/chain-definitions/god-woken-testnet-v1.js"; export { godWokenTestnetV1 } from "../chains/chain-definitions/god-woken-testnet-v1.js";
export { abstractTestnet } from "../chains/chain-definitions/abstract-testnet.js"; export { abstractTestnet } from "../chains/chain-definitions/abstract-testnet.js";
export { assetChainTestnet } from "../chains/chain-definitions/assetchain-testnet.js";
export { celoAlfajoresTestnet } from "../chains/chain-definitions/celo-alfajores-testnet.js";
export { fraxtalTestnet } from "../chains/chain-definitions/fraxtal-testnet.js";
export { metalL2Testnet } from "../chains/chain-definitions/metal-l2-testnet.js";
export { modeTestnet } from "../chains/chain-definitions/mode-testnet.js";
+1
View File
@@ -28,6 +28,7 @@ export {
export { export {
deployMarketplaceContract, deployMarketplaceContract,
type MarketplaceContractParams, type MarketplaceContractParams,
type DeployMarketplaceContractOptions,
} from "../extensions/prebuilts/deploy-marketplace.js"; } from "../extensions/prebuilts/deploy-marketplace.js";
export { export {
@@ -95,6 +95,7 @@ export { freezeMetadata } from "../../extensions/erc1155/__generated__/INFTMetad
export { export {
getActiveClaimCondition, getActiveClaimCondition,
isGetActiveClaimConditionSupported, isGetActiveClaimConditionSupported,
type GetActiveClaimConditionParams,
} from "../../extensions/erc1155/drops/read/getActiveClaimCondition.js"; } from "../../extensions/erc1155/drops/read/getActiveClaimCondition.js";
export { export {
getClaimConditionById, getClaimConditionById,
@@ -2,3 +2,8 @@ export {
type CheckContractWalletSignatureOptions, type CheckContractWalletSignatureOptions,
checkContractWalletSignature, checkContractWalletSignature,
} from "../../extensions/erc1271/checkContractWalletSignature.js"; } from "../../extensions/erc1271/checkContractWalletSignature.js";
export {
type CheckContractWalletSignTypedDataOptions,
checkContractWalletSignedTypedData,
} from "../../extensions/erc1271/checkContractWalletSignedTypedData.js";
@@ -9,6 +9,7 @@ export {
export { export {
type RemoveAdminOptions, type RemoveAdminOptions,
removeAdmin, removeAdmin,
isRemoveAdminSupported,
} from "../../extensions/erc4337/account/removeAdmin.js"; } from "../../extensions/erc4337/account/removeAdmin.js";
export { export {
@@ -18,11 +18,14 @@ export { getStorageRegistry } from "../../extensions/farcaster/contracts/getStor
// EIP712 Signatures // EIP712 Signatures
export { export {
type RegisterMessage, type RegisterMessage,
type SignRegisterOptions,
signRegister, signRegister,
getRegisterData, getRegisterData,
} from "../../extensions/farcaster/eip712Signatures/registerSignature.js"; } from "../../extensions/farcaster/eip712Signatures/registerSignature.js";
export { export {
type SignedKeyRequestMessage, type SignedKeyRequestMessage,
type SignedKeyRequestMetadataOptions,
type SignKeyRequestOptions,
signKeyRequest, signKeyRequest,
getKeyRequestData, getKeyRequestData,
encodeSignedKeyRequestMetadata, encodeSignedKeyRequestMetadata,
@@ -30,6 +33,7 @@ export {
} from "../../extensions/farcaster/eip712Signatures/keyRequestSignature.js"; } from "../../extensions/farcaster/eip712Signatures/keyRequestSignature.js";
export { export {
type AddMessage, type AddMessage,
type SignAddOptions,
signAdd, signAdd,
getAddData, getAddData,
} from "../../extensions/farcaster/eip712Signatures/addSignature.js"; } from "../../extensions/farcaster/eip712Signatures/addSignature.js";
@@ -32,8 +32,6 @@ export {
type CurrencyPriceForListingParams, type CurrencyPriceForListingParams,
} from "../../extensions/marketplace/direct-listings/read/currencyPriceForListing.js"; } from "../../extensions/marketplace/direct-listings/read/currencyPriceForListing.js";
export { isCancelListingSupported } from "../../extensions/marketplace/__generated__/IDirectListings/write/cancelListing.js";
// WRITE // WRITE
export { export {
createListing, createListing,
@@ -46,6 +44,7 @@ export {
} from "../../extensions/marketplace/direct-listings/write/updateListing.js"; } from "../../extensions/marketplace/direct-listings/write/updateListing.js";
export { export {
cancelListing, cancelListing,
isCancelListingSupported,
type CancelListingParams, type CancelListingParams,
} from "../../extensions/marketplace/__generated__/IDirectListings/write/cancelListing.js"; } from "../../extensions/marketplace/__generated__/IDirectListings/write/cancelListing.js";
export { export {
@@ -131,10 +130,10 @@ export {
isBidInAuctionSupported, isBidInAuctionSupported,
} from "../../extensions/marketplace/english-auctions/write/bidInAuction.js"; } from "../../extensions/marketplace/english-auctions/write/bidInAuction.js";
export { export {
cancelAuction,
type CancelAuctionParams, type CancelAuctionParams,
cancelAuction,
isCancelAuctionSupported, isCancelAuctionSupported,
} from "../../extensions/marketplace/__generated__/IEnglishAuctions/write/cancelAuction.js"; } from "../../extensions/marketplace/english-auctions/write/cancelAuction.js";
export { export {
buyoutAuction, buyoutAuction,
type BuyoutAuctionParams, type BuyoutAuctionParams,
+4 -1
View File
@@ -86,7 +86,10 @@ export {
} from "../extensions/prebuilts/deploy-modular.js"; } from "../extensions/prebuilts/deploy-modular.js";
// Common // Common
export { grantMinterRole } from "../extensions/modules/common/grantMinterRole.js"; export {
grantMinterRole,
type GrantMinterRoleParams,
} from "../extensions/modules/common/grantMinterRole.js";
export { export {
getDeployedModule, getDeployedModule,
getOrDeployModule, getOrDeployModule,
+4 -1
View File
@@ -9,7 +9,10 @@ declare module "abitype" {
* CONSTANTS * CONSTANTS
*/ */
export { export {
ADDRESS_ZERO, /**
* @deprecated Use {@link ZERO_ADDRESS}.
*/
ZERO_ADDRESS as ADDRESS_ZERO,
ZERO_ADDRESS, ZERO_ADDRESS,
NATIVE_TOKEN_ADDRESS, NATIVE_TOKEN_ADDRESS,
} from "../constants/addresses.js"; } from "../constants/addresses.js";
@@ -133,13 +133,13 @@ type GenerateReqInput = {
contents: ContentType; contents: ContentType;
}; };
export const AirdropContentERC1155 = [ const AirdropContentERC1155 = [
{ name: "recipient", type: "address" }, { name: "recipient", type: "address" },
{ name: "tokenId", type: "uint256" }, { name: "tokenId", type: "uint256" },
{ name: "amount", type: "uint256" }, { name: "amount", type: "uint256" },
] as const; ] as const;
export const AirdropRequestERC1155 = [ const AirdropRequestERC1155 = [
{ name: "uid", type: "bytes32" }, { name: "uid", type: "bytes32" },
{ name: "tokenAddress", type: "address" }, { name: "tokenAddress", type: "address" },
{ name: "expirationTimestamp", type: "uint256" }, { name: "expirationTimestamp", type: "uint256" },
@@ -132,12 +132,12 @@ type GenerateReqInput = {
contents: ContentType; contents: ContentType;
}; };
export const AirdropContentERC20 = [ const AirdropContentERC20 = [
{ name: "recipient", type: "address" }, { name: "recipient", type: "address" },
{ name: "amount", type: "uint256" }, { name: "amount", type: "uint256" },
] as const; ] as const;
export const AirdropRequestERC20 = [ const AirdropRequestERC20 = [
{ name: "uid", type: "bytes32" }, { name: "uid", type: "bytes32" },
{ name: "tokenAddress", type: "address" }, { name: "tokenAddress", type: "address" },
{ name: "expirationTimestamp", type: "uint256" }, { name: "expirationTimestamp", type: "uint256" },
@@ -131,12 +131,12 @@ type GenerateReqInput = {
contents: ContentType; contents: ContentType;
}; };
export const AirdropContentERC721 = [ const AirdropContentERC721 = [
{ name: "recipient", type: "address" }, { name: "recipient", type: "address" },
{ name: "tokenId", type: "uint256" }, { name: "tokenId", type: "uint256" },
] as const; ] as const;
export const AirdropRequestERC721 = [ const AirdropRequestERC721 = [
{ name: "uid", type: "bytes32" }, { name: "uid", type: "bytes32" },
{ name: "tokenAddress", type: "address" }, { name: "tokenAddress", type: "address" },
{ name: "expirationTimestamp", type: "uint256" }, { name: "expirationTimestamp", type: "uint256" },
@@ -1,5 +1,5 @@
import { import {
ADDRESS_ZERO, ZERO_ADDRESS,
isNativeTokenAddress, isNativeTokenAddress,
} from "../../../constants/addresses.js"; } from "../../../constants/addresses.js";
import type { BaseTransactionOptions } from "../../../transaction/types.js"; import type { BaseTransactionOptions } from "../../../transaction/types.js";
@@ -52,7 +52,7 @@ export function claimERC20(options: BaseTransactionOptions<ClaimERC20Params>) {
const tokenDecimals = await (async () => { const tokenDecimals = await (async () => {
if ( if (
isNativeTokenAddress(tokenAddress) || isNativeTokenAddress(tokenAddress) ||
tokenAddress === ADDRESS_ZERO tokenAddress === ZERO_ADDRESS
) { ) {
throw new Error( throw new Error(
"Token address can't be zero address or native token", "Token address can't be zero address or native token",
@@ -1,5 +1,5 @@
import { import {
ADDRESS_ZERO, ZERO_ADDRESS,
isNativeTokenAddress, isNativeTokenAddress,
} from "../../../constants/addresses.js"; } from "../../../constants/addresses.js";
import type { BaseTransactionOptions } from "../../../transaction/types.js"; import type { BaseTransactionOptions } from "../../../transaction/types.js";
@@ -52,7 +52,7 @@ export async function generateMerkleTreeInfoERC20(
// get token decimals // get token decimals
const tokenAddress = options.tokenAddress; const tokenAddress = options.tokenAddress;
const tokenDecimals = await (async () => { const tokenDecimals = await (async () => {
if (isNativeTokenAddress(tokenAddress) || tokenAddress === ADDRESS_ZERO) { if (isNativeTokenAddress(tokenAddress) || tokenAddress === ZERO_ADDRESS) {
throw new Error("Token address can't be zero address or native token"); throw new Error("Token address can't be zero address or native token");
} }
const [{ getContract }, { decimals: getDecimals }] = await Promise.all([ const [{ getContract }, { decimals: getDecimals }] = await Promise.all([
@@ -21,10 +21,7 @@ export type ResolveL2NameOptions = {
* *
* @internal * @internal
*/ */
export const convertReverseNodeToBytes = ( const convertReverseNodeToBytes = (address: Address, chainId: number) => {
address: Address,
chainId: number,
) => {
const addressFormatted = address.toLocaleLowerCase() as Address; const addressFormatted = address.toLocaleLowerCase() as Address;
const addressNode = keccak256(addressFormatted.substring(2) as Hex); const addressNode = keccak256(addressFormatted.substring(2) as Hex);
const cointype = (0x80000000 | chainId) >>> 0; const cointype = (0x80000000 | chainId) >>> 0;
@@ -16,7 +16,7 @@ export type UpdateMetadataParams = {
/** /**
* @internal * @internal
*/ */
export async function getUpdateMetadataParams( async function getUpdateMetadataParams(
options: BaseTransactionOptions<UpdateMetadataParams>, options: BaseTransactionOptions<UpdateMetadataParams>,
): Promise<BatchBaseURI.UpdateBatchBaseURIParams> { ): Promise<BatchBaseURI.UpdateBatchBaseURIParams> {
const { contract, targetTokenId, newMetadata } = options; const { contract, targetTokenId, newMetadata } = options;
@@ -49,7 +49,7 @@ export function updateTokenURI(
}); });
} }
export async function getUpdateTokenParams( async function getUpdateTokenParams(
options: BaseTransactionOptions<UpdateTokenURIParams>, options: BaseTransactionOptions<UpdateTokenURIParams>,
): Promise<SetTokenURIParams> { ): Promise<SetTokenURIParams> {
const { tokenId, newMetadata } = options; const { tokenId, newMetadata } = options;
@@ -199,7 +199,7 @@ type GeneratePayloadInput = {
uid?: string; uid?: string;
} & ({ quantity: string } | { quantityWei: bigint }); } & ({ quantity: string } | { quantityWei: bigint });
export const MintRequest20 = [ const MintRequest20 = [
{ name: "to", type: "address" }, { name: "to", type: "address" },
{ name: "primarySaleRecipient", type: "address" }, { name: "primarySaleRecipient", type: "address" },
{ name: "quantity", type: "uint256" }, { name: "quantity", type: "uint256" },
@@ -1,4 +1,4 @@
import { ADDRESS_ZERO } from "../../../constants/addresses.js"; import { ZERO_ADDRESS } from "../../../constants/addresses.js";
import type { ThirdwebContract } from "../../../contract/contract.js"; import type { ThirdwebContract } from "../../../contract/contract.js";
import { dateToSeconds, tenYearsFromNow } from "../../../utils/date.js"; import { dateToSeconds, tenYearsFromNow } from "../../../utils/date.js";
import { randomBytesHex } from "../../../utils/random.js"; import { randomBytesHex } from "../../../utils/random.js";
@@ -41,7 +41,7 @@ export async function toContractPermissions(options: {
return { return {
approvedTargets: approvedTargets:
permissions.approvedTargets === "*" permissions.approvedTargets === "*"
? [ADDRESS_ZERO] ? [ZERO_ADDRESS]
: permissions.approvedTargets, : permissions.approvedTargets,
nativeTokenLimitPerTransaction: toWei( nativeTokenLimitPerTransaction: toWei(
permissions.nativeTokenLimitPerTransaction?.toString() || "0", permissions.nativeTokenLimitPerTransaction?.toString() || "0",
@@ -5,7 +5,7 @@ import {
TEST_ACCOUNT_A, TEST_ACCOUNT_A,
TEST_ACCOUNT_B, TEST_ACCOUNT_B,
} from "../../../../test/src/test-wallets.js"; } from "../../../../test/src/test-wallets.js";
import { ADDRESS_ZERO } from "../../../constants/addresses.js"; import { ZERO_ADDRESS } from "../../../constants/addresses.js";
import { import {
type ThirdwebContract, type ThirdwebContract,
getContract, getContract,
@@ -127,7 +127,7 @@ describe.runIf(process.env.TW_SECRET_KEY)("Account Permissions", () => {
expect(logs[0]?.args.authorizingSigner).toBe(TEST_ACCOUNT_B.address); expect(logs[0]?.args.authorizingSigner).toBe(TEST_ACCOUNT_B.address);
expect(logs[0]?.args.targetSigner).toBe(TEST_ACCOUNT_A.address); expect(logs[0]?.args.targetSigner).toBe(TEST_ACCOUNT_A.address);
expect(logs[0]?.args.permissions.approvedTargets).toStrictEqual([ expect(logs[0]?.args.permissions.approvedTargets).toStrictEqual([
ADDRESS_ZERO, ZERO_ADDRESS,
]); ]);
}); });
}); });
@@ -16,7 +16,7 @@ export type UpdateMetadataParams = {
/** /**
* @internal * @internal
*/ */
export async function getUpdateMetadataParams( async function getUpdateMetadataParams(
options: BaseTransactionOptions<UpdateMetadataParams>, options: BaseTransactionOptions<UpdateMetadataParams>,
): Promise<BatchBaseURI.UpdateBatchBaseURIParams> { ): Promise<BatchBaseURI.UpdateBatchBaseURIParams> {
const { contract, targetTokenId, newMetadata } = options; const { contract, targetTokenId, newMetadata } = options;
@@ -1,4 +1,4 @@
import { ADDRESS_ZERO } from "../../../constants/addresses.js"; import { ZERO_ADDRESS } from "../../../constants/addresses.js";
import type { BaseTransactionOptions } from "../../../transaction/types.js"; import type { BaseTransactionOptions } from "../../../transaction/types.js";
import { min } from "../../../utils/bigint.js"; import { min } from "../../../utils/bigint.js";
import { ownerOf } from "../__generated__/IERC721A/read/ownerOf.js"; import { ownerOf } from "../__generated__/IERC721A/read/ownerOf.js";
@@ -78,7 +78,7 @@ export async function getAllOwners(
for (let i = start; i < maxId; i++) { for (let i = start; i < maxId; i++) {
promises.push( promises.push(
ownerOf({ contract: options.contract, tokenId: i }) ownerOf({ contract: options.contract, tokenId: i })
.catch(() => ADDRESS_ZERO) .catch(() => ZERO_ADDRESS)
.then((owner) => ({ .then((owner) => ({
tokenId: i, tokenId: i,
owner, owner,
@@ -53,7 +53,7 @@ export function updateTokenURI(
/** /**
* @internal * @internal
*/ */
export async function getUpdateTokenParams( async function getUpdateTokenParams(
options: BaseTransactionOptions<UpdateTokenURIParams>, options: BaseTransactionOptions<UpdateTokenURIParams>,
): Promise<SetTokenURIParams> { ): Promise<SetTokenURIParams> {
const { tokenId, newMetadata } = options; const { tokenId, newMetadata } = options;
@@ -3,14 +3,14 @@ import type { Hex } from "../../../utils/encoding/hex.js";
import type { Account } from "../../../wallets/interfaces/wallet.js"; import type { Account } from "../../../wallets/interfaces/wallet.js";
import { KEY_GATEWAY_ADDRESS } from "../constants.js"; import { KEY_GATEWAY_ADDRESS } from "../constants.js";
export const KEY_GATEWAY_EIP_712_DOMAIN = { const KEY_GATEWAY_EIP_712_DOMAIN = {
name: "Farcaster KeyGateway", name: "Farcaster KeyGateway",
version: "1", version: "1",
chainId: 10, chainId: 10,
verifyingContract: KEY_GATEWAY_ADDRESS, verifyingContract: KEY_GATEWAY_ADDRESS,
} as const; } as const;
export const KEY_GATEWAY_ADD_TYPE = [ const KEY_GATEWAY_ADD_TYPE = [
{ name: "owner", type: "address" }, { name: "owner", type: "address" },
{ name: "keyType", type: "uint32" }, { name: "keyType", type: "uint32" },
{ name: "key", type: "bytes" }, { name: "key", type: "bytes" },
@@ -20,7 +20,7 @@ export const KEY_GATEWAY_ADD_TYPE = [
{ name: "deadline", type: "uint256" }, { name: "deadline", type: "uint256" },
] as const; ] as const;
export const KEY_GATEWAY_EIP_712_TYPES = { const KEY_GATEWAY_EIP_712_TYPES = {
domain: KEY_GATEWAY_EIP_712_DOMAIN, domain: KEY_GATEWAY_EIP_712_DOMAIN,
types: { Add: KEY_GATEWAY_ADD_TYPE }, types: { Add: KEY_GATEWAY_ADD_TYPE },
} as const; } as const;
@@ -18,12 +18,12 @@ const SIGNED_KEY_REQUEST_TYPE = [
{ name: "deadline", type: "uint256" }, { name: "deadline", type: "uint256" },
]; ];
export const SIGNED_KEY_REQUEST_VALIDATOR_EIP_712_TYPES = { const SIGNED_KEY_REQUEST_VALIDATOR_EIP_712_TYPES = {
domain: SIGNED_KEY_REQUEST_VALIDATOR_EIP_712_DOMAIN, domain: SIGNED_KEY_REQUEST_VALIDATOR_EIP_712_DOMAIN,
types: { SignedKeyRequest: SIGNED_KEY_REQUEST_TYPE }, types: { SignedKeyRequest: SIGNED_KEY_REQUEST_TYPE },
} as const; } as const;
export const SIGNED_KEY_REQUEST_METADATA_ABI = [ const SIGNED_KEY_REQUEST_METADATA_ABI = [
{ {
components: [ components: [
{ {
@@ -3,21 +3,21 @@ import type { Hex } from "../../../utils/encoding/hex.js";
import type { Account } from "../../../wallets/interfaces/wallet.js"; import type { Account } from "../../../wallets/interfaces/wallet.js";
import { ID_GATEWAY_ADDRESS } from "../constants.js"; import { ID_GATEWAY_ADDRESS } from "../constants.js";
export const ID_GATEWAY_EIP_712_DOMAIN = { const ID_GATEWAY_EIP_712_DOMAIN = {
name: "Farcaster IdGateway", name: "Farcaster IdGateway",
version: "1", version: "1",
chainId: 10, chainId: 10,
verifyingContract: ID_GATEWAY_ADDRESS, verifyingContract: ID_GATEWAY_ADDRESS,
} as const; } as const;
export const ID_GATEWAY_REGISTER_TYPE = [ const ID_GATEWAY_REGISTER_TYPE = [
{ name: "to", type: "address" }, { name: "to", type: "address" },
{ name: "recovery", type: "address" }, { name: "recovery", type: "address" },
{ name: "nonce", type: "uint256" }, { name: "nonce", type: "uint256" },
{ name: "deadline", type: "uint256" }, { name: "deadline", type: "uint256" },
] as const; ] as const;
export const ID_GATEWAY_EIP_712_TYPES = { const ID_GATEWAY_EIP_712_TYPES = {
domain: ID_GATEWAY_EIP_712_DOMAIN, domain: ID_GATEWAY_EIP_712_DOMAIN,
types: { Register: ID_GATEWAY_REGISTER_TYPE }, types: { Register: ID_GATEWAY_REGISTER_TYPE },
} as const; } as const;
@@ -25,7 +25,7 @@ export type LensProfileSchema = {
/** /**
* @internal * @internal
*/ */
export type MetadataAttribute = type MetadataAttribute =
| { | {
type: "Boolean"; type: "Boolean";
key: string; key: string;
@@ -68,14 +68,11 @@ export async function mapDirectListing(
}; };
} }
/** type IsListingValidParams = {
* @extension MARKETPLACE
*/
export type IsListingValidParams = {
listing: DirectListing; listing: DirectListing;
quantity?: bigint; quantity?: bigint;
}; };
export type ValidReturn = { valid: true } | { valid: false; reason: string }; type ValidReturn = { valid: true } | { valid: false; reason: string };
export async function isListingValid( export async function isListingValid(
options: BaseTransactionOptions<IsListingValidParams>, options: BaseTransactionOptions<IsListingValidParams>,
@@ -7,7 +7,7 @@ import { encodeBytesBeforeMintERC1155Params } from "../__generated__/ClaimableER
import { getClaimConditionByTokenId } from "../__generated__/ClaimableERC1155/read/getClaimConditionByTokenId.js"; import { getClaimConditionByTokenId } from "../__generated__/ClaimableERC1155/read/getClaimConditionByTokenId.js";
import { mint as generatedMint } from "../__generated__/ERC1155Core/write/mint.js"; import { mint as generatedMint } from "../__generated__/ERC1155Core/write/mint.js";
export type MintParams = { type MintParams = {
to: string; to: string;
tokenId: bigint; tokenId: bigint;
quantity: string | number; quantity: string | number;
@@ -6,7 +6,7 @@ import { type Hex, padHex } from "../../../utils/encoding/hex.js";
import { encodeBytesBeforeMintERC20Params } from "../__generated__/ClaimableERC20/encode/encodeBytesBeforeMintERC20.js"; import { encodeBytesBeforeMintERC20Params } from "../__generated__/ClaimableERC20/encode/encodeBytesBeforeMintERC20.js";
import { mint as generatedMint } from "../__generated__/ERC20Core/write/mint.js"; import { mint as generatedMint } from "../__generated__/ERC20Core/write/mint.js";
export type MintParams = { type MintParams = {
to: string; to: string;
quantity: string | number; quantity: string | number;
}; };
@@ -7,7 +7,7 @@ import { encodeBytesBeforeMintERC721Params } from "../__generated__/ClaimableERC
import { getClaimCondition } from "../__generated__/ClaimableERC721/read/getClaimCondition.js"; import { getClaimCondition } from "../__generated__/ClaimableERC721/read/getClaimCondition.js";
import { mint as generatedMint } from "../__generated__/ERC721Core/write/mint.js"; import { mint as generatedMint } from "../__generated__/ERC721Core/write/mint.js";
export type MintParams = { type MintParams = {
to: string; to: string;
quantity: string | number; quantity: string | number;
}; };
@@ -184,7 +184,7 @@ type GeneratePayloadInput = {
validityEndTimestamp?: Date; validityEndTimestamp?: Date;
}; };
export const MintRequestERC1155 = [ const MintRequestERC1155 = [
{ type: "address", name: "to" }, { type: "address", name: "to" },
{ type: "uint256", name: "tokenId" }, { type: "uint256", name: "tokenId" },
{ type: "uint256", name: "amount" }, { type: "uint256", name: "amount" },
@@ -179,7 +179,7 @@ type GeneratePayloadInput = {
uid?: Hex; uid?: Hex;
} & ({ quantity: string } | { quantityWei: bigint }); } & ({ quantity: string } | { quantityWei: bigint });
export const MintRequestERC20 = [ const MintRequestERC20 = [
{ type: "address", name: "to" }, { type: "address", name: "to" },
{ type: "uint256", name: "amount" }, { type: "uint256", name: "amount" },
{ type: "bytes", name: "data" }, { type: "bytes", name: "data" },
@@ -181,7 +181,7 @@ type GeneratePayloadInput = {
validityEndTimestamp?: Date; validityEndTimestamp?: Date;
}; };
export const MintRequestERC721 = [ const MintRequestERC721 = [
{ type: "address", name: "to" }, { type: "address", name: "to" },
{ type: "uint256", name: "amount" }, { type: "uint256", name: "amount" },
{ type: "string", name: "baseURI" }, { type: "string", name: "baseURI" },
@@ -23,14 +23,9 @@ export const roleMap = {
/** /**
* @extension PERMISSIONS * @extension PERMISSIONS
*/ */
export type ThirdwebContractRole = keyof typeof roleMap; type ThirdwebContractRole = keyof typeof roleMap;
export const ALL_ROLES = /* @__PURE__ */ (() => function isThirdwebContractRole(role: string): role is ThirdwebContractRole {
Object.keys(roleMap))() as ThirdwebContractRole[];
export function isThirdwebContractRole(
role: string,
): role is ThirdwebContractRole {
return role in roleMap; return role in roleMap;
} }
@@ -33,10 +33,11 @@ export type MarketplaceContractParams = {
trustedForwarders?: string[]; trustedForwarders?: string[];
}; };
export type DeployMarketplaceContractOptions = export type DeployMarketplaceContractOptions = Prettify<
Prettify<ClientAndChainAndAccount> & { ClientAndChainAndAccount & {
params: MarketplaceContractParams; params: MarketplaceContractParams;
}; }
>;
/** /**
* TODO not quite ready for public consumption yet * TODO not quite ready for public consumption yet
@@ -11,7 +11,7 @@ import { decimals } from "../erc20/read/decimals.js";
/** /**
* @extension DEPLOY * @extension DEPLOY
*/ */
export type VoteContractParams = { type VoteContractParams = {
name: string; name: string;
/** /**
* The contract address for the ERC20 that will be used as voting power * The contract address for the ERC20 that will be used as voting power
@@ -57,7 +57,7 @@ export type VoteContractParams = {
/** /**
* @extension DEPLOY * @extension DEPLOY
*/ */
export type DeployVoteContractOptions = Prettify< type DeployVoteContractOptions = Prettify<
ClientAndChainAndAccount & { ClientAndChainAndAccount & {
params: VoteContractParams; params: VoteContractParams;
} }
@@ -11,7 +11,7 @@ import type { DeployContractfromDeployMetadataOptions } from "./deploy-published
/** /**
* @internal * @internal
*/ */
export type DeployTransactionType = type DeployTransactionType =
| "infra" | "infra"
| "implementation" | "implementation"
| "module" | "module"
@@ -21,7 +21,7 @@ export type DeployTransactionType =
/** /**
* @internal * @internal
*/ */
export type DeployTransactionResult = { type DeployTransactionResult = {
type: DeployTransactionType; type: DeployTransactionType;
contractId: string; contractId: string;
}; };
@@ -1,7 +1,13 @@
import type { Address } from "abitype"; import type { Address } from "abitype";
import { ADDRESS_ZERO } from "../../../constants/addresses.js"; import { ZERO_ADDRESS } from "../../../constants/addresses.js";
import type { BaseTransactionOptions } from "../../../transaction/types.js"; import type { BaseTransactionOptions } from "../../../transaction/types.js";
import { UniswapFee } from "../types.js";
const UniswapFee = {
LOWEST: 100,
LOW: 500,
MEDIUM: 3000,
HIGH: 10000,
} as const;
/** /**
* Represents the parameters for the `findUniswapV3Pool` function. * Represents the parameters for the `findUniswapV3Pool` function.
@@ -16,7 +22,7 @@ export type GetUniswapV3PoolParams = {
* @extension UNISWAP * @extension UNISWAP
*/ */
export type GetUniswapV3PoolResult = { export type GetUniswapV3PoolResult = {
poolFee: UniswapFee; poolFee: (typeof UniswapFee)[keyof typeof UniswapFee];
poolAddress: Address; poolAddress: Address;
}; };
@@ -49,18 +55,18 @@ export async function getUniswapV3Pool(
contract: options.contract, contract: options.contract,
tokenA: options.tokenA, tokenA: options.tokenA,
tokenB: options.tokenB, tokenB: options.tokenB,
fee: Number(fee), fee,
}); });
return { return {
poolFee: Number(fee), poolFee: fee,
poolAddress, poolAddress,
}; };
}); });
const results = await Promise.all(promises); const results = await Promise.all(promises);
const validPools = results.filter( const validPools = results.filter(
(result) => result.poolAddress && result.poolAddress !== ADDRESS_ZERO, (result) => result.poolAddress && result.poolAddress !== ZERO_ADDRESS,
); );
return validPools; return validPools;
@@ -1,6 +0,0 @@
export enum UniswapFee {
LOWEST = 100,
LOW = 500,
MEDIUM = 3000,
HIGH = 10000,
}
@@ -30,7 +30,7 @@ export function executeProposal(
/** /**
* @internal * @internal
*/ */
export async function getExecuteParams( async function getExecuteParams(
options: BaseTransactionOptions<{ proposalId: bigint }>, options: BaseTransactionOptions<{ proposalId: bigint }>,
): Promise<ExecuteParams> { ): Promise<ExecuteParams> {
const { proposalId } = options; const { proposalId } = options;
+1 -1
View File
@@ -4,7 +4,7 @@ import { toSerializableTransaction } from "../transaction/actions/to-serializabl
import type { PreparedTransaction } from "../transaction/prepare-transaction.js"; import type { PreparedTransaction } from "../transaction/prepare-transaction.js";
import { readContract } from "../transaction/read-contract.js"; import { readContract } from "../transaction/read-contract.js";
export type EstimateL1FeeOptions = { type EstimateL1FeeOptions = {
transaction: PreparedTransaction; transaction: PreparedTransaction;
gasPriceOracleAddress?: string; gasPriceOracleAddress?: string;
}; };
@@ -11,7 +11,7 @@ import { getPayBuyWithCryptoStatusUrl } from "../utils/definitions.js";
/** /**
* @buyCrypto * @buyCrypto
*/ */
export type BuyWithCryptoQuoteSummary = { type BuyWithCryptoQuoteSummary = {
fromToken: PayTokenInfo; fromToken: PayTokenInfo;
toToken: PayTokenInfo; toToken: PayTokenInfo;
@@ -45,9 +45,9 @@ export type BuyWithCryptoTransaction = {
transactionHash: string; transactionHash: string;
}; };
export type BuyWithCryptoStatuses = "NONE" | "PENDING" | "FAILED" | "COMPLETED"; type BuyWithCryptoStatuses = "NONE" | "PENDING" | "FAILED" | "COMPLETED";
export type BuyWithCryptoSubStatuses = type BuyWithCryptoSubStatuses =
| "NONE" | "NONE"
| "WAITING_BRIDGE" | "WAITING_BRIDGE"
| "REVERTED_ON_CHAIN" | "REVERTED_ON_CHAIN"
@@ -56,7 +56,7 @@ export type BuyWithCryptoSubStatuses =
| "UNKNOWN_ERROR" | "UNKNOWN_ERROR"
| "REFUNDED"; | "REFUNDED";
export type SwapType = "SAME_CHAIN" | "CROSS_CHAIN" | "TRANSFER"; type SwapType = "SAME_CHAIN" | "CROSS_CHAIN" | "TRANSFER";
/** /**
* The object returned by the [`getBuyWithCryptoStatus`](https://portal.thirdweb.com/references/typescript/v5/getBuyWithCryptoStatus) function to represent the status of a quoted transaction * The object returned by the [`getBuyWithCryptoStatus`](https://portal.thirdweb.com/references/typescript/v5/getBuyWithCryptoStatus) function to represent the status of a quoted transaction
@@ -1,6 +1,6 @@
import { getThirdwebDomains } from "../../utils/domains.js"; import { getThirdwebDomains } from "../../utils/domains.js";
export const getPayBaseUrl = () => { const getPayBaseUrl = () => {
const payDomain: string = getThirdwebDomains().pay; const payDomain: string = getThirdwebDomains().pay;
return payDomain.startsWith("localhost") return payDomain.startsWith("localhost")
? `http://${payDomain}` ? `http://${payDomain}`
@@ -37,7 +37,7 @@ export function parseTheme(theme: "light" | "dark" | Theme | undefined): Theme {
return themeObj; return themeObj;
} }
export function isValidTheme(theme: unknown): theme is Theme { function isValidTheme(theme: unknown): theme is Theme {
return ( return (
theme === "dark" || theme === "dark" ||
theme === "light" || theme === "light" ||
@@ -11,13 +11,13 @@ import {
getWalletBalance, getWalletBalance,
} from "../../../../wallets/utils/getWalletBalance.js"; } from "../../../../wallets/utils/getWalletBalance.js";
export type UseWalletBalanceOptions = Prettify< type UseWalletBalanceOptions = Prettify<
Omit<GetWalletBalanceOptions, "address" | "chain"> & { Omit<GetWalletBalanceOptions, "address" | "chain"> & {
address: string | undefined; address: string | undefined;
chain: Chain | undefined; chain: Chain | undefined;
} }
>; >;
export type UseWalletBalanceQueryOptions = Omit< type UseWalletBalanceQueryOptions = Omit<
UseQueryOptions<GetWalletBalanceResult>, UseQueryOptions<GetWalletBalanceResult>,
"queryFn" | "queryKey" "queryFn" | "queryKey"
>; >;
@@ -8,7 +8,7 @@ import { useActiveAccount } from "../wallets/useActiveAccount.js";
/** /**
* Configuration for the `useSendTransaction` hook. * Configuration for the `useSendTransaction` hook.
*/ */
export type SendAndConfirmTransactionConfig = { type SendAndConfirmTransactionConfig = {
/** /**
* Configuration for gasless transactions. * Configuration for gasless transactions.
* Refer to [`GaslessOptions`](https://portal.thirdweb.com/references/typescript/v5/GaslessOptions) for more details. * Refer to [`GaslessOptions`](https://portal.thirdweb.com/references/typescript/v5/GaslessOptions) for more details.
@@ -219,10 +219,7 @@ export function useSendTransactionCore(args: {
}); });
} }
export async function getTotalTxCostForBuy( async function getTotalTxCostForBuy(tx: PreparedTransaction, from?: string) {
tx: PreparedTransaction,
from?: string,
) {
try { try {
const gasCost = await estimateGasCost({ const gasCost = await estimateGasCost({
transaction: tx, transaction: tx,
@@ -1,37 +0,0 @@
// biome-ignore lint/suspicious/noExplicitAny: TODO: fix any
export type DeepPartial<T extends Record<string, any>> = {
[P in keyof T]?: DeepPartial<T[P]>;
};
/**
* Create a new object with given overrides object applied on top of given base object without mutating the base and overrides object
*
* @param defaultObj - The object to use as the base object
* @param overrides - The object to use as the overrides
*
* @internal
*/
// biome-ignore lint/suspicious/noExplicitAny: TODO: fix any
export function immutableOverride<T extends Record<string, any>>(
defaultObj: T,
overrides: DeepPartial<T>,
): T {
const output = { ...defaultObj };
for (const key in overrides) {
const value = overrides[key];
// only apply overrides if it is not undefined
if (value !== undefined) {
// partially apply overrides object
if (typeof value === "object" && value !== null) {
output[key] = immutableOverride(defaultObj[key], value);
}
// completely override non-object values
else {
output[key] = value;
}
}
}
return output;
}
@@ -8,7 +8,7 @@ export type TokenInfo = {
icon?: string; icon?: string;
}; };
export const wrappedEthIcon = const wrappedEthIcon =
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTAwIiBoZWlnaHQ9IjI1MDAiIHZpZXdCb3g9IjAgMCAzMiAzMiI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48Y2lyY2xlIGN4PSIxNiIgY3k9IjE2IiByPSIxNiIgZmlsbD0iIzYyN0VFQSIvPjxnIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyI+PHBhdGggZmlsbC1vcGFjaXR5PSIuNjAyIiBkPSJNMTYuNDk4IDR2OC44N2w3LjQ5NyAzLjM1eiIvPjxwYXRoIGQ9Ik0xNi40OTggNEw5IDE2LjIybDcuNDk4LTMuMzV6Ii8+PHBhdGggZmlsbC1vcGFjaXR5PSIuNjAyIiBkPSJNMTYuNDk4IDIxLjk2OHY2LjAyN0wyNCAxNy42MTZ6Ii8+PHBhdGggZD0iTTE2LjQ5OCAyNy45OTV2LTYuMDI4TDkgMTcuNjE2eiIvPjxwYXRoIGZpbGwtb3BhY2l0eT0iLjIiIGQ9Ik0xNi40OTggMjAuNTczbDcuNDk3LTQuMzUzLTcuNDk3LTMuMzQ4eiIvPjxwYXRoIGZpbGwtb3BhY2l0eT0iLjYwMiIgZD0iTTkgMTYuMjJsNy40OTggNC4zNTN2LTcuNzAxeiIvPjwvZz48L2c+PC9zdmc+"; "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTAwIiBoZWlnaHQ9IjI1MDAiIHZpZXdCb3g9IjAgMCAzMiAzMiI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48Y2lyY2xlIGN4PSIxNiIgY3k9IjE2IiByPSIxNiIgZmlsbD0iIzYyN0VFQSIvPjxnIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyI+PHBhdGggZmlsbC1vcGFjaXR5PSIuNjAyIiBkPSJNMTYuNDk4IDR2OC44N2w3LjQ5NyAzLjM1eiIvPjxwYXRoIGQ9Ik0xNi40OTggNEw5IDE2LjIybDcuNDk4LTMuMzV6Ii8+PHBhdGggZmlsbC1vcGFjaXR5PSIuNjAyIiBkPSJNMTYuNDk4IDIxLjk2OHY2LjAyN0wyNCAxNy42MTZ6Ii8+PHBhdGggZD0iTTE2LjQ5OCAyNy45OTV2LTYuMDI4TDkgMTcuNjE2eiIvPjxwYXRoIGZpbGwtb3BhY2l0eT0iLjIiIGQ9Ik0xNi40OTggMjAuNTczbDcuNDk3LTQuMzUzLTcuNDk3LTMuMzQ4eiIvPjxwYXRoIGZpbGwtb3BhY2l0eT0iLjYwMiIgZD0iTTkgMTYuMjJsNy40OTggNC4zNTN2LTcuNzAxeiIvPjwvZz48L2c+PC9zdmc+";
const tetherUsdIcon = const tetherUsdIcon =
@@ -2,7 +2,7 @@ import { replaceEqualDeep } from "@tanstack/react-query";
/** Forked from https://github.com/epoberezkin/fast-deep-equal */ /** Forked from https://github.com/epoberezkin/fast-deep-equal */
// biome-ignore lint/suspicious/noExplicitAny: This function by nature takes any object // biome-ignore lint/suspicious/noExplicitAny: This function by nature takes any object
export function deepEqual(a: any, b: any) { function deepEqual(a: any, b: any) {
if (a === b) return true; if (a === b) return true;
if (a && b && typeof a === "object" && typeof b === "object") { if (a && b && typeof a === "object" && typeof b === "object") {
@@ -1,53 +1,32 @@
// TODO make the social icons usable in RN too // TODO make the social icons usable in RN too
export const googleIconUri = const googleIconUri =
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3MDUuNiIgaGVpZ2h0PSI3MjAiIHZpZXdCb3g9IjAgMCAxODYuNjkgMTkwLjUiIHhtbG5zOnY9Imh0dHBzOi8vdmVjdGEuaW8vbmFubyI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTE4NC41ODMgNzY1LjE3MSkiPjxwYXRoIGNsaXAtcGF0aD0ibm9uZSIgbWFzaz0ibm9uZSIgZD0iTS0xMDg5LjMzMy02ODcuMjM5djM2Ljg4OGg1MS4yNjJjLTIuMjUxIDExLjg2My05LjAwNiAyMS45MDgtMTkuMTM3IDI4LjY2MmwzMC45MTMgMjMuOTg2YzE4LjAxMS0xNi42MjUgMjguNDAyLTQxLjA0NCAyOC40MDItNzAuMDUyIDAtNi43NTQtLjYwNi0xMy4yNDktMS43MzItMTkuNDgzeiIgZmlsbD0iIzQyODVmNCIvPjxwYXRoIGNsaXAtcGF0aD0ibm9uZSIgbWFzaz0ibm9uZSIgZD0iTS0xMTQyLjcxNC02NTEuNzkxbC02Ljk3MiA1LjMzNy0yNC42NzkgMTkuMjIzaDBjMTUuNjczIDMxLjA4NiA0Ny43OTYgNTIuNTYxIDg1LjAzIDUyLjU2MSAyNS43MTcgMCA0Ny4yNzgtOC40ODYgNjMuMDM4LTIzLjAzM2wtMzAuOTEzLTIzLjk4NmMtOC40ODYgNS43MTUtMTkuMzEgOS4xNzktMzIuMTI1IDkuMTc5LTI0Ljc2NSAwLTQ1LjgwNi0xNi43MTItNTMuMzQtMzkuMjI2eiIgZmlsbD0iIzM0YTg1MyIvPjxwYXRoIGNsaXAtcGF0aD0ibm9uZSIgbWFzaz0ibm9uZSIgZD0iTS0xMTc0LjM2NS03MTIuNjFjLTYuNDk0IDEyLjgxNS0xMC4yMTcgMjcuMjc2LTEwLjIxNyA0Mi42ODlzMy43MjMgMjkuODc0IDEwLjIxNyA0Mi42ODljMCAuMDg2IDMxLjY5My0yNC41OTIgMzEuNjkzLTI0LjU5Mi0xLjkwNS01LjcxNS0zLjAzMS0xMS43NzYtMy4wMzEtMTguMDk4czEuMTI2LTEyLjM4MyAzLjAzMS0xOC4wOTh6IiBmaWxsPSIjZmJiYzA1Ii8+PHBhdGggZD0iTS0xMDg5LjMzMy03MjcuMjQ0YzE0LjAyOCAwIDI2LjQ5NyA0Ljg0OSAzNi40NTUgMTQuMjAxbDI3LjI3Ni0yNy4yNzZjLTE2LjUzOS0xNS40MTMtMzguMDEzLTI0Ljg1Mi02My43MzEtMjQuODUyLTM3LjIzNCAwLTY5LjM1OSAyMS4zODgtODUuMDMyIDUyLjU2MWwzMS42OTIgMjQuNTkyYzcuNTMzLTIyLjUxNCAyOC41NzUtMzkuMjI2IDUzLjM0LTM5LjIyNnoiIGZpbGw9IiNlYTQzMzUiIGNsaXAtcGF0aD0ibm9uZSIgbWFzaz0ibm9uZSIvPjwvZz48L3N2Zz4="; "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3MDUuNiIgaGVpZ2h0PSI3MjAiIHZpZXdCb3g9IjAgMCAxODYuNjkgMTkwLjUiIHhtbG5zOnY9Imh0dHBzOi8vdmVjdGEuaW8vbmFubyI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTE4NC41ODMgNzY1LjE3MSkiPjxwYXRoIGNsaXAtcGF0aD0ibm9uZSIgbWFzaz0ibm9uZSIgZD0iTS0xMDg5LjMzMy02ODcuMjM5djM2Ljg4OGg1MS4yNjJjLTIuMjUxIDExLjg2My05LjAwNiAyMS45MDgtMTkuMTM3IDI4LjY2MmwzMC45MTMgMjMuOTg2YzE4LjAxMS0xNi42MjUgMjguNDAyLTQxLjA0NCAyOC40MDItNzAuMDUyIDAtNi43NTQtLjYwNi0xMy4yNDktMS43MzItMTkuNDgzeiIgZmlsbD0iIzQyODVmNCIvPjxwYXRoIGNsaXAtcGF0aD0ibm9uZSIgbWFzaz0ibm9uZSIgZD0iTS0xMTQyLjcxNC02NTEuNzkxbC02Ljk3MiA1LjMzNy0yNC42NzkgMTkuMjIzaDBjMTUuNjczIDMxLjA4NiA0Ny43OTYgNTIuNTYxIDg1LjAzIDUyLjU2MSAyNS43MTcgMCA0Ny4yNzgtOC40ODYgNjMuMDM4LTIzLjAzM2wtMzAuOTEzLTIzLjk4NmMtOC40ODYgNS43MTUtMTkuMzEgOS4xNzktMzIuMTI1IDkuMTc5LTI0Ljc2NSAwLTQ1LjgwNi0xNi43MTItNTMuMzQtMzkuMjI2eiIgZmlsbD0iIzM0YTg1MyIvPjxwYXRoIGNsaXAtcGF0aD0ibm9uZSIgbWFzaz0ibm9uZSIgZD0iTS0xMTc0LjM2NS03MTIuNjFjLTYuNDk0IDEyLjgxNS0xMC4yMTcgMjcuMjc2LTEwLjIxNyA0Mi42ODlzMy43MjMgMjkuODc0IDEwLjIxNyA0Mi42ODljMCAuMDg2IDMxLjY5My0yNC41OTIgMzEuNjkzLTI0LjU5Mi0xLjkwNS01LjcxNS0zLjAzMS0xMS43NzYtMy4wMzEtMTguMDk4czEuMTI2LTEyLjM4MyAzLjAzMS0xOC4wOTh6IiBmaWxsPSIjZmJiYzA1Ii8+PHBhdGggZD0iTS0xMDg5LjMzMy03MjcuMjQ0YzE0LjAyOCAwIDI2LjQ5NyA0Ljg0OSAzNi40NTUgMTQuMjAxbDI3LjI3Ni0yNy4yNzZjLTE2LjUzOS0xNS40MTMtMzguMDEzLTI0Ljg1Mi02My43MzEtMjQuODUyLTM3LjIzNCAwLTY5LjM1OSAyMS4zODgtODUuMDMyIDUyLjU2MWwzMS42OTIgMjQuNTkyYzcuNTMzLTIyLjUxNCAyOC41NzUtMzkuMjI2IDUzLjM0LTM5LjIyNnoiIGZpbGw9IiNlYTQzMzUiIGNsaXAtcGF0aD0ibm9uZSIgbWFzaz0ibm9uZSIvPjwvZz48L3N2Zz4=";
export const facebookIconUri = const facebookIconUri =
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGRhdGEtbmFtZT0iRWJlbmUgMSIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgaWQ9ImZhY2Vib29rLWxvZ28tMjAxOSI+PHBhdGggZmlsbD0iIzE4NzdmMiIgZD0iTTEwMjQsNTEyQzEwMjQsMjI5LjIzMDE2LDc5NC43Njk3OCwwLDUxMiwwUzAsMjI5LjIzMDE2LDAsNTEyYzAsMjU1LjU1NCwxODcuMjMxLDQ2Ny4zNzAxMiw0MzIsNTA1Ljc3Nzc3VjY2MEgzMDJWNTEySDQzMlYzOTkuMkM0MzIsMjcwLjg3OTgyLDUwOC40Mzg1NCwyMDAsNjI1LjM4OTIyLDIwMCw2ODEuNDA3NjUsMjAwLDc0MCwyMTAsNzQwLDIxMFYzMzZINjc1LjQzNzEzQzYxMS44MzUwOCwzMzYsNTkyLDM3NS40NjY2Nyw1OTIsNDE1Ljk1NzI4VjUxMkg3MzRMNzExLjMsNjYwSDU5MnYzNTcuNzc3NzdDODM2Ljc2OSw5NzkuMzcwMTIsMTAyNCw3NjcuNTU0LDEwMjQsNTEyWiI+PC9wYXRoPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik03MTEuMyw2NjAsNzM0LDUxMkg1OTJWNDE1Ljk1NzI4QzU5MiwzNzUuNDY2NjcsNjExLjgzNTA4LDMzNiw2NzUuNDM3MTMsMzM2SDc0MFYyMTBzLTU4LjU5MjM1LTEwLTExNC42MTA3OC0xMEM1MDguNDM4NTQsMjAwLDQzMiwyNzAuODc5ODIsNDMyLDM5OS4yVjUxMkgzMDJWNjYwSDQzMnYzNTcuNzc3NzdhNTE3LjM5NjE5LDUxNy4zOTYxOSwwLDAsMCwxNjAsMFY2NjBaIj48L3BhdGg+PC9zdmc+"; "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGRhdGEtbmFtZT0iRWJlbmUgMSIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgaWQ9ImZhY2Vib29rLWxvZ28tMjAxOSI+PHBhdGggZmlsbD0iIzE4NzdmMiIgZD0iTTEwMjQsNTEyQzEwMjQsMjI5LjIzMDE2LDc5NC43Njk3OCwwLDUxMiwwUzAsMjI5LjIzMDE2LDAsNTEyYzAsMjU1LjU1NCwxODcuMjMxLDQ2Ny4zNzAxMiw0MzIsNTA1Ljc3Nzc3VjY2MEgzMDJWNTEySDQzMlYzOTkuMkM0MzIsMjcwLjg3OTgyLDUwOC40Mzg1NCwyMDAsNjI1LjM4OTIyLDIwMCw2ODEuNDA3NjUsMjAwLDc0MCwyMTAsNzQwLDIxMFYzMzZINjc1LjQzNzEzQzYxMS44MzUwOCwzMzYsNTkyLDM3NS40NjY2Nyw1OTIsNDE1Ljk1NzI4VjUxMkg3MzRMNzExLjMsNjYwSDU5MnYzNTcuNzc3NzdDODM2Ljc2OSw5NzkuMzcwMTIsMTAyNCw3NjcuNTU0LDEwMjQsNTEyWiI+PC9wYXRoPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik03MTEuMyw2NjAsNzM0LDUxMkg1OTJWNDE1Ljk1NzI4QzU5MiwzNzUuNDY2NjcsNjExLjgzNTA4LDMzNiw2NzUuNDM3MTMsMzM2SDc0MFYyMTBzLTU4LjU5MjM1LTEwLTExNC42MTA3OC0xMEM1MDguNDM4NTQsMjAwLDQzMiwyNzAuODc5ODIsNDMyLDM5OS4yVjUxMkgzMDJWNjYwSDQzMnYzNTcuNzc3NzdhNTE3LjM5NjE5LDUxNy4zOTYxOSwwLDAsMCwxNjAsMFY2NjBaIj48L3BhdGg+PC9zdmc+";
export const twitterIconUri = const appleIconUri =
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiIgaWQ9InR3aXR0ZXIiPjxwYXRoIGZpbGw9IiMwM0E5RjQiIGQ9Ik0xNiAzLjUzOWE2LjgzOSA2LjgzOSAwIDAgMS0xLjg5LjUxOCAzLjI2MiAzLjI2MiAwIDAgMCAxLjQ0My0xLjgxMyA2LjU1NSA2LjU1NSAwIDAgMS0yLjA4Ljc5NCAzLjI4IDMuMjggMCAwIDAtNS42NzQgMi4yNDNjMCAuMjYuMDIyLjUxLjA3Ni43NDhhOS4yODQgOS4yODQgMCAwIDEtNi43NjEtMy40MzEgMy4yODUgMy4yODUgMCAwIDAgMS4wMDggNC4zODRBMy4yNCAzLjI0IDAgMCAxIC42NCA2LjU3OHYuMDM2YTMuMjk1IDMuMjk1IDAgMCAwIDIuNjI4IDMuMjIzIDMuMjc0IDMuMjc0IDAgMCAxLS44Ni4xMDggMi45IDIuOSAwIDAgMS0uNjIxLS4wNTYgMy4zMTEgMy4zMTEgMCAwIDAgMy4wNjUgMi4yODUgNi41OSA2LjU5IDAgMCAxLTQuMDY3IDEuMzk5Yy0uMjY5IDAtLjUyNy0uMDEyLS43ODUtLjA0NUE5LjIzNCA5LjIzNCAwIDAgMCA1LjAzMiAxNWM2LjAzNiAwIDkuMzM2LTUgOS4zMzYtOS4zMzQgMC0uMTQ1LS4wMDUtLjI4NS0uMDEyLS40MjRBNi41NDQgNi41NDQgMCAwIDAgMTYgMy41Mzl6Ij48L3BhdGg+PC9zdmc+";
export const githubIconUri =
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEwXzIpIj4KPHBhdGggZD0iTTcuOTk5IDBDMy41ODIwMSAwIDQuNjE2NDhlLTA2IDMuNTk2IDQuNjE2NDhlLTA2IDguMDMyQy0wLjAwMTggOS43MTU1NSAwLjUyNTUxOSAxMS4zNTcxIDEuNTA3NDQgMTIuNzI0NkMyLjQ4OTM1IDE0LjA5MjIgMy44NzYyMSAxNS4xMTY2IDUuNDcyIDE1LjY1M0M1Ljg3MiAxNS43MjcgNi4wMTggMTUuNDc5IDYuMDE4IDE1LjI2NkM2LjAxOCAxNS4wNzUgNi4wMTEgMTQuNTcgNi4wMDcgMTMuOUMzLjc4MiAxNC4zODUgMy4zMTIgMTIuODIzIDMuMzEyIDEyLjgyM0MyLjk0OSAxMS44OTUgMi40MjQgMTEuNjQ4IDIuNDI0IDExLjY0OEMxLjY5NyAxMS4xNSAyLjQ3OCAxMS4xNiAyLjQ3OCAxMS4xNkMzLjI4MSAxMS4yMTcgMy43MDMgMTEuOTg4IDMuNzAzIDExLjk4OEM0LjQxNyAxMy4yMTUgNS41NzYgMTIuODYxIDYuMDMyIDEyLjY1NUM2LjEwNCAxMi4xMzYgNi4zMTEgMTEuNzgyIDYuNTQgMTEuNTgxQzQuNzY0IDExLjM3OCAyLjg5NiAxMC42ODkgMi44OTYgNy42MTJDMi44OTYgNi43MzUgMy4yMDggNi4wMTggMy43MiA1LjQ1NkMzLjYzNyA1LjI1MyAzLjM2MyA0LjQzNiAzLjc5OCAzLjMzMUMzLjc5OCAzLjMzMSA0LjQ3IDMuMTE1IDUuOTk4IDQuMTU0QzYuNjUwNzUgMy45NzU2MSA3LjMyNDMyIDMuODg0ODIgOC4wMDEwMSAzLjg4NEM4LjY3NzcyIDMuODg1MzQgOS4zNTEyNiAzLjk3NjQ3IDEwLjAwNCA0LjE1NUMxMS41MzEgMy4xMTYgMTIuMjAyIDMuMzMyIDEyLjIwMiAzLjMzMkMxMi42MzggNC40MzggMTIuMzY0IDUuMjU0IDEyLjI4MiA1LjQ1N0MxMi43OTUgNi4wMTkgMTMuMTA0IDYuNzM2IDEzLjEwNCA3LjYxM0MxMy4xMDQgMTAuNjk4IDExLjIzNCAxMS4zNzcgOS40NTIgMTEuNTc2QzkuNzM5IDExLjgyNCA5Ljk5NSAxMi4zMTQgOS45OTUgMTMuMDYzQzkuOTk1IDE0LjEzNyA5Ljk4NSAxNS4wMDMgOS45ODUgMTUuMjY2QzkuOTg1IDE1LjQ4MSAxMC4xMjkgMTUuNzMxIDEwLjUzNSAxNS42NTJDMTIuMTI5MiAxNS4xMTQzIDEzLjUxNDQgMTQuMDg5NSAxNC40OTQ5IDEyLjcyMjNDMTUuNDc1NSAxMS4zNTUxIDE2LjAwMTkgOS43MTQ0OCAxNiA4LjAzMkMxNiAzLjU5NiAxMi40MTggMCA3Ljk5OSAwWiIgZmlsbD0iIzhCOEI4QiIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzEwXzIiPgo8cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==";
export const appleIconUri =
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDM4IiBoZWlnaHQ9IjI1MDAiIHZpZXdCb3g9IjAgMCA0OTYuMjU1IDYwOC43MjgiIGlkPSJhcHBsZSI+PHBhdGggZmlsbD0iIzk5OSIgZD0iTTI3My44MSA1Mi45NzNDMzEzLjgwNi4yNTcgMzY5LjQxIDAgMzY5LjQxIDBzOC4yNzEgNDkuNTYyLTMxLjQ2MyA5Ny4zMDZjLTQyLjQyNiA1MC45OC05MC42NDkgNDIuNjM4LTkwLjY0OSA0Mi42MzhzLTkuMDU1LTQwLjA5NCAyNi41MTItODYuOTcxek0yNTIuMzg1IDE3NC42NjJjMjAuNTc2IDAgNTguNzY0LTI4LjI4NCAxMDguNDcxLTI4LjI4NCA4NS41NjIgMCAxMTkuMjIyIDYwLjg4MyAxMTkuMjIyIDYwLjg4M3MtNjUuODMzIDMzLjY1OS02NS44MzMgMTE1LjMzMWMwIDkyLjEzMyA4Mi4wMSAxMjMuODg1IDgyLjAxIDEyMy44ODVzLTU3LjMyOCAxNjEuMzU3LTEzNC43NjIgMTYxLjM1N2MtMzUuNTY1IDAtNjMuMjE1LTIzLjk2Ny0xMDAuNjg4LTIzLjk2Ny0zOC4xODggMC03Ni4wODQgMjQuODYxLTEwMC43NjYgMjQuODYxQzg5LjMzIDYwOC43MyAwIDQ1NS42NjYgMCAzMzIuNjI4YzAtMTIxLjA1MiA3NS42MTItMTg0LjU1NCAxNDYuNTMzLTE4NC41NTQgNDYuMTA1IDAgODEuODgzIDI2LjU4OCAxMDUuODUyIDI2LjU4OHoiPjwvcGF0aD48L3N2Zz4="; "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDM4IiBoZWlnaHQ9IjI1MDAiIHZpZXdCb3g9IjAgMCA0OTYuMjU1IDYwOC43MjgiIGlkPSJhcHBsZSI+PHBhdGggZmlsbD0iIzk5OSIgZD0iTTI3My44MSA1Mi45NzNDMzEzLjgwNi4yNTcgMzY5LjQxIDAgMzY5LjQxIDBzOC4yNzEgNDkuNTYyLTMxLjQ2MyA5Ny4zMDZjLTQyLjQyNiA1MC45OC05MC42NDkgNDIuNjM4LTkwLjY0OSA0Mi42MzhzLTkuMDU1LTQwLjA5NCAyNi41MTItODYuOTcxek0yNTIuMzg1IDE3NC42NjJjMjAuNTc2IDAgNTguNzY0LTI4LjI4NCAxMDguNDcxLTI4LjI4NCA4NS41NjIgMCAxMTkuMjIyIDYwLjg4MyAxMTkuMjIyIDYwLjg4M3MtNjUuODMzIDMzLjY1OS02NS44MzMgMTE1LjMzMWMwIDkyLjEzMyA4Mi4wMSAxMjMuODg1IDgyLjAxIDEyMy44ODVzLTU3LjMyOCAxNjEuMzU3LTEzNC43NjIgMTYxLjM1N2MtMzUuNTY1IDAtNjMuMjE1LTIzLjk2Ny0xMDAuNjg4LTIzLjk2Ny0zOC4xODggMC03Ni4wODQgMjQuODYxLTEwMC43NjYgMjQuODYxQzg5LjMzIDYwOC43MyAwIDQ1NS42NjYgMCAzMzIuNjI4YzAtMTIxLjA1MiA3NS42MTItMTg0LjU1NCAxNDYuNTMzLTE4NC41NTQgNDYuMTA1IDAgODEuODgzIDI2LjU4OCAxMDUuODUyIDI2LjU4OHoiPjwvcGF0aD48L3N2Zz4=";
export const linkedinIconUri = const discordIconUri =
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NCIgaGVpZ2h0PSI0MCIgaWQ9ImxpbmtlZGluIj48cGF0aCBmaWxsPSIjMDA3RUJCIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00NCA0MGgtOS43MjVWMjUuOTM4YzAtMy42OC0xLjUyLTYuMTkzLTQuODY2LTYuMTkzLTIuNTU4IDAtMy45ODEgMS42OTYtNC42NDMgMy4zMy0uMjQ5LjU4Ni0uMjEgMS40MDMtLjIxIDIuMjJWNDBoLTkuNjM0cy4xMjQtMjQuOTA5IDAtMjcuMTczaDkuNjM0djQuMjY1Yy41Ny0xLjg2NSAzLjY0OC00LjUyNiA4LjU2LTQuNTI2QzM5LjIxMSAxMi41NjYgNDQgMTYuNDc0IDQ0IDI0Ljg5MVY0MHpNNS4xOCA5LjQyOGgtLjA2M0MyLjAxMyA5LjQyOCAwIDcuMzUxIDAgNC43MTggMCAyLjAzNCAyLjA3MiAwIDUuMjM5IDBjMy4xNjQgMCA1LjExIDIuMDI5IDUuMTcxIDQuNzEgMCAyLjYzMy0yLjAwNyA0LjcxOC01LjIzIDQuNzE4em0tNC4wNyAzLjM5OWg4LjU3NlY0MEgxLjExVjEyLjgyN3oiPjwvcGF0aD48L3N2Zz4=";
export const bitbucketIconUri =
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImJpdGJ1Y2tldCI+PHBhdGggZmlsbD0iIzI2ODBGOCIgZD0iTTQuMjk3IDIzaDE1LjY1OWEuNzc2Ljc3NiAwIDAgMCAuNzY5LS42NTdMMjMuOTkgMS45MTZhLjc4Ljc4IDAgMCAwLS42MzUtLjg5NyAxLjEzIDEuMTMgMCAwIDAtLjEzNC0uMDA5TC43NzkgMUEuNzc1Ljc3NSAwIDAgMCAwIDEuNzc1YzAgLjA0NC4wMDUuMDkzLjAwOS4xMzdsMy4yNjUgMjAuMTk2Yy4wODIuNTA5LjUxNS44ODcgMS4wMjMuODkyek0xNS43MzYgOC4zOTFsLTEuMjExIDcuMjA1aC01TDguMTczIDguMzkxaDcuNTYzeiI+PC9wYXRoPjwvc3ZnPg==";
export const gitlabIconUri =
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTAwIiBoZWlnaHQ9IjIzMDUiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWluIG1lZXQiIHZpZXdCb3g9IjAgMCAyNTYgMjM2IiBpZD0iZ2l0bGFiIj48cGF0aCBmaWxsPSIjRTI0MzI5IiBkPSJNMTI4LjA3NSAyMzYuMDc1bDQ3LjEwNC0xNDQuOTdIODAuOTdsNDcuMTA0IDE0NC45N3oiPjwvcGF0aD48cGF0aCBmaWxsPSIjRkM2RDI2IiBkPSJNMTI4LjA3NSAyMzYuMDc0TDgwLjk3IDkxLjEwNEgxNC45NTZsMTEzLjExOSAxNDQuOTd6Ij48L3BhdGg+PHBhdGggZmlsbD0iI0ZDQTMyNiIgZD0iTTE0Ljk1NiA5MS4xMDRMLjY0MiAxMzUuMTZhOS43NTIgOS43NTIgMCAwIDAgMy41NDIgMTAuOTAzbDEyMy44OTEgOTAuMDEyLTExMy4xMi0xNDQuOTd6Ij48L3BhdGg+PHBhdGggZmlsbD0iI0UyNDMyOSIgZD0iTTE0Ljk1NiA5MS4xMDVIODAuOTdMNTIuNjAxIDMuNzljLTEuNDYtNC40OTMtNy44MTYtNC40OTItOS4yNzUgMGwtMjguMzcgODcuMzE1eiI+PC9wYXRoPjxwYXRoIGZpbGw9IiNGQzZEMjYiIGQ9Ik0xMjguMDc1IDIzNi4wNzRsNDcuMTA0LTE0NC45N2g2Ni4wMTVsLTExMy4xMiAxNDQuOTd6Ij48L3BhdGg+PHBhdGggZmlsbD0iI0ZDQTMyNiIgZD0iTTI0MS4xOTQgOTEuMTA0bDE0LjMxNCA0NC4wNTZhOS43NTIgOS43NTIgMCAwIDEtMy41NDMgMTAuOTAzbC0xMjMuODkgOTAuMDEyIDExMy4xMTktMTQ0Ljk3eiI+PC9wYXRoPjxwYXRoIGZpbGw9IiNFMjQzMjkiIGQ9Ik0yNDEuMTk0IDkxLjEwNWgtNjYuMDE1bDI4LjM3LTg3LjMxNWMxLjQ2LTQuNDkzIDcuODE2LTQuNDkyIDkuMjc1IDBsMjguMzcgODcuMzE1eiI+PC9wYXRoPjwvc3ZnPg==";
export const twitchIconUri =
"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgdmlld0JveD0iMCAwIDExMS43ODY2NyAxMjcuMzg2NjciCiAgIGhlaWdodD0iMTI3LjM4NjY3IgogICB3aWR0aD0iMTExLjc4NjY3IgogICB4bWw6c3BhY2U9InByZXNlcnZlIgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmczMzU1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJUd2l0Y2hfbG9nby5zdmciCiAgIGlua3NjYXBlOnZlcnNpb249IjEuMS4xICgzYmY1YWUwZDI1LCAyMDIxLTA5LTIwKSIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcwogICBpZD0iZGVmczI5Ij4KICAgIAogICAgCiAgPC9kZWZzPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgaWQ9Im5hbWVkdmlldzI3IgogICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiCiAgIHNob3dncmlkPSJmYWxzZSIKICAgaW5rc2NhcGU6em9vbT0iNC4xOTkyMjg0IgogICBpbmtzY2FwZTpjeD0iLTUwLjYwNDUzNSIKICAgaW5rc2NhcGU6Y3k9IjE0MC4zODI5MyIKICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIyNTYwIgogICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMzg3IgogICBpbmtzY2FwZTp3aW5kb3cteD0iMTkxMiIKICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmczMzU1IiAvPgogIDxnCiAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMzMzMzMzMywwLDAsLTEuMzMzMzMzMywxMDEuMzkzMzMsNjcuNTg5MzMyKSIKICAgaWQ9ImczMzY1Ij4KICAgICAgPHBhdGgKICAgaWQ9InBhdGgzMzY3IgogICBzdHlsZT0iZmlsbDojNjQ0MWE1O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIgogICBkPSJtIDAsMCAtMTMuNjUyLC0xMy42NTEgaCAtMjEuNDQ1IGwgLTExLjY5OSwtMTEuNjk3IHYgMTEuNjk3IEggLTY0LjM0NCBWIDQyLjg5MyBIIDAgWiBtIC03Mi4xNDYsNTAuNjkyIC0zLjg5OSwtMTUuNTk5IHYgLTcwLjE5IGggMTcuNTUgdiAtOS43NTEgaCA5Ljc0NiBsIDkuNzUyLDkuNzUxIGggMTUuNTk2IEwgNy43OTUsLTMuOTA1IHYgNTQuNTk3IHoiIC8+CiAgICA8L2c+PHBhdGgKICAgaWQ9InBhdGgzMzY5IgogICBzdHlsZT0iZmlsbDojNjQ0MWE1O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjMzMzMzIgogICBkPSJtIDQ0LjE5NzMzMSw2Mi4zOTQyNjYgaCAxMC4zOTg2NyBWIDMxLjE5MjkzMyBoIC0xMC4zOTg2NyB6IG0gMjguNTk0NjcsMCBoIDEwLjM5ODY2IFYgMzEuMTkyOTMzIGggLTEwLjM5ODY2IHoiIC8+Cjwvc3ZnPgo=";
export const discordIconUri =
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEwMCAxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBpZD0iZGlzY29yZCI+PHBhdGggZmlsbD0iIzY2NjVkMiIgZD0iTTg1LjIyLDI0Ljk1OGMtMTEuNDU5LTguNTc1LTIyLjQzOC04LjMzNC0yMi40MzgtOC4zMzRsLTEuMTIyLDEuMjgyCgkJCQljMTMuNjIzLDQuMDg3LDE5Ljk1NCwxMC4wOTcsMTkuOTU0LDEwLjA5N2MtMTkuNDkxLTEwLjczMS00NC4zMTctMTAuNjU0LTY0LjU5LDBjMCwwLDYuNTcxLTYuMzMxLDIwLjk5Ni0xMC40MThsLTAuODAxLTAuOTYyCgkJCQljMCwwLTEwLjg5OS0wLjI0LTIyLjQzOCw4LjMzNGMwLDAtMTEuNTQsMjAuNzU1LTExLjU0LDQ2LjMxOWMwLDAsNi43MzIsMTEuNTQsMjQuNDQyLDEyLjEwMWMwLDAsMi45NjUtMy41MjYsNS4zNjktNi41NzEKCQkJCWMtMTAuMTc3LTMuMDQ1LTE0LjAyNC05LjM3Ni0xNC4wMjQtOS4zNzZjNi4zOTQsNC4wMDEsMTIuODU5LDYuNTA1LDIwLjkxNiw4LjA5NGMxMy4xMDgsMi42OTgsMjkuNDEzLTAuMDc2LDQxLjU5MS04LjA5NAoJCQkJYzAsMC00LjAwNyw2LjQ5MS0xNC41MDUsOS40NTZjMi40MDQsMi45NjUsNS4yODksNi40MTEsNS4yODksNi40MTFjMTcuNzEtMC41NjEsMjQuNDQxLTEyLjEwMSwyNC40NDEtMTIuMDIKCQkJCUM5Ni43NTksNDUuNzEzLDg1LjIyLDI0Ljk1OCw4NS4yMiwyNC45NTh6IE0zNS4wNTUsNjMuODI0Yy00LjQ4OCwwLTguMTc0LTMuOTI3LTguMTc0LTguODE1CgkJCQljMC4zMjgtMTEuNzA3LDE2LjEwMi0xMS42NzEsMTYuMzQ4LDBDNDMuMjI5LDU5Ljg5NywzOS42MjIsNjMuODI0LDM1LjA1NSw2My44MjR6IE02NC4zMDQsNjMuODI0CgkJCQljLTQuNDg4LDAtOC4xNzQtMy45MjctOC4xNzQtOC44MTVjMC4zNi0xMS42ODQsMTUuOTM3LTExLjY4OSwxNi4zNDgsMEM3Mi40NzgsNTkuODk3LDY4Ljg3Miw2My44MjQsNjQuMzA0LDYzLjgyNHoiPjwvcGF0aD48L3N2Zz4="; "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEwMCAxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBpZD0iZGlzY29yZCI+PHBhdGggZmlsbD0iIzY2NjVkMiIgZD0iTTg1LjIyLDI0Ljk1OGMtMTEuNDU5LTguNTc1LTIyLjQzOC04LjMzNC0yMi40MzgtOC4zMzRsLTEuMTIyLDEuMjgyCgkJCQljMTMuNjIzLDQuMDg3LDE5Ljk1NCwxMC4wOTcsMTkuOTU0LDEwLjA5N2MtMTkuNDkxLTEwLjczMS00NC4zMTctMTAuNjU0LTY0LjU5LDBjMCwwLDYuNTcxLTYuMzMxLDIwLjk5Ni0xMC40MThsLTAuODAxLTAuOTYyCgkJCQljMCwwLTEwLjg5OS0wLjI0LTIyLjQzOCw4LjMzNGMwLDAtMTEuNTQsMjAuNzU1LTExLjU0LDQ2LjMxOWMwLDAsNi43MzIsMTEuNTQsMjQuNDQyLDEyLjEwMWMwLDAsMi45NjUtMy41MjYsNS4zNjktNi41NzEKCQkJCWMtMTAuMTc3LTMuMDQ1LTE0LjAyNC05LjM3Ni0xNC4wMjQtOS4zNzZjNi4zOTQsNC4wMDEsMTIuODU5LDYuNTA1LDIwLjkxNiw4LjA5NGMxMy4xMDgsMi42OTgsMjkuNDEzLTAuMDc2LDQxLjU5MS04LjA5NAoJCQkJYzAsMC00LjAwNyw2LjQ5MS0xNC41MDUsOS40NTZjMi40MDQsMi45NjUsNS4yODksNi40MTEsNS4yODksNi40MTFjMTcuNzEtMC41NjEsMjQuNDQxLTEyLjEwMSwyNC40NDEtMTIuMDIKCQkJCUM5Ni43NTksNDUuNzEzLDg1LjIyLDI0Ljk1OCw4NS4yMiwyNC45NTh6IE0zNS4wNTUsNjMuODI0Yy00LjQ4OCwwLTguMTc0LTMuOTI3LTguMTc0LTguODE1CgkJCQljMC4zMjgtMTEuNzA3LDE2LjEwMi0xMS42NzEsMTYuMzQ4LDBDNDMuMjI5LDU5Ljg5NywzOS42MjIsNjMuODI0LDM1LjA1NSw2My44MjR6IE02NC4zMDQsNjMuODI0CgkJCQljLTQuNDg4LDAtOC4xNzQtMy45MjctOC4xNzQtOC44MTVjMC4zNi0xMS42ODQsMTUuOTM3LTExLjY4OSwxNi4zNDgsMEM3Mi40NzgsNTkuODk3LDY4Ljg3Miw2My44MjQsNjQuMzA0LDYzLjgyNHoiPjwvcGF0aD48L3N2Zz4=";
export const coinbaseIconUri = const coinbaseIconUri =
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTU2IiBoZWlnaHQ9IjU1NiIgdmlld0JveD0iMCAwIDU1NiA1NTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xNDhfNSkiPgo8cGF0aCBkPSJNMjc4IDBDNDMxLjUzMyAwIDU1NiAxMjQuNDY3IDU1NiAyNzhDNTU2IDQzMS41MzMgNDMxLjUzMyA1NTYgMjc4IDU1NkMxMjQuNDY3IDU1NiAwIDQzMS41MzMgMCAyNzhDMCAxMjQuNDY3IDEyNC40NjcgMCAyNzggMFoiIGZpbGw9IiMwMDUyRkYiLz4KPHBhdGggZD0iTTI3OC40ODIgMzc1LjE5QzIyNC40OSAzNzUuMTkgMTgwLjg2MiAzMzEuNDEgMTgwLjg2MiAyNzcuNUMxODAuODYyIDIyMy41OSAyMjQuNjEgMTc5LjgxIDI3OC40ODIgMTc5LjgxQzMyNi44MSAxNzkuODEgMzY2Ljk0MyAyMTUuMDI3IDM3NC42NTYgMjYxLjIxOEg0NzNDNDY0LjY4NCAxNjAuODc1IDM4MC44MDMgODIgMjc4LjM2MiA4MkMxNzAuNDk3IDgyIDgzIDE2OS41NTkgODMgMjc3LjVDODMgMzg1LjQ0MSAxNzAuNDk3IDQ3MyAyNzguMzYyIDQ3M0MzODAuODAzIDQ3MyA0NjQuNjg0IDM5NC4xMjUgNDczIDI5My43ODJIMzc0LjUzNkMzNjYuODIzIDMzOS45NzMgMzI2LjgxIDM3NS4xOSAyNzguNDgyIDM3NS4xOVoiIGZpbGw9IndoaXRlIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMTQ4XzUiPgo8cmVjdCB3aWR0aD0iNTU2IiBoZWlnaHQ9IjU1NiIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K"; "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTU2IiBoZWlnaHQ9IjU1NiIgdmlld0JveD0iMCAwIDU1NiA1NTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xNDhfNSkiPgo8cGF0aCBkPSJNMjc4IDBDNDMxLjUzMyAwIDU1NiAxMjQuNDY3IDU1NiAyNzhDNTU2IDQzMS41MzMgNDMxLjUzMyA1NTYgMjc4IDU1NkMxMjQuNDY3IDU1NiAwIDQzMS41MzMgMCAyNzhDMCAxMjQuNDY3IDEyNC40NjcgMCAyNzggMFoiIGZpbGw9IiMwMDUyRkYiLz4KPHBhdGggZD0iTTI3OC40ODIgMzc1LjE5QzIyNC40OSAzNzUuMTkgMTgwLjg2MiAzMzEuNDEgMTgwLjg2MiAyNzcuNUMxODAuODYyIDIyMy41OSAyMjQuNjEgMTc5LjgxIDI3OC40ODIgMTc5LjgxQzMyNi44MSAxNzkuODEgMzY2Ljk0MyAyMTUuMDI3IDM3NC42NTYgMjYxLjIxOEg0NzNDNDY0LjY4NCAxNjAuODc1IDM4MC44MDMgODIgMjc4LjM2MiA4MkMxNzAuNDk3IDgyIDgzIDE2OS41NTkgODMgMjc3LjVDODMgMzg1LjQ0MSAxNzAuNDk3IDQ3MyAyNzguMzYyIDQ3M0MzODAuODAzIDQ3MyA0NjQuNjg0IDM5NC4xMjUgNDczIDI5My43ODJIMzc0LjUzNkMzNjYuODIzIDMzOS45NzMgMzI2LjgxIDM3NS4xOSAyNzguNDgyIDM3NS4xOVoiIGZpbGw9IndoaXRlIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMTQ4XzUiPgo8cmVjdCB3aWR0aD0iNTU2IiBoZWlnaHQ9IjU1NiIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K";
export const lineIconUri = const lineIconUri =
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMjAiIGhlaWdodD0iMzIwIiB2aWV3Qm94PSIwIDAgMzIwIDMyMCI+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOiMwNmM3NTU7fS5jbHMtMntmaWxsOiNmZmY7fTwvc3R5bGU+PC9kZWZzPjxnIGlkPSJMYXllcl8yIiBkYXRhLW5hbWU9IkxheWVyIDIiPjxnIGlkPSJMSU5FX0xPR08iIGRhdGEtbmFtZT0iTElORSBMT0dPIj48cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIzMjAiIGhlaWdodD0iMzIwIiByeD0iNzIuMTQiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0yNjYuNjYsMTQ0LjkyYzAtNDcuNzQtNDcuODYtODYuNTgtMTA2LjY5LTg2LjU4UzUzLjI4LDk3LjE4LDUzLjI4LDE0NC45MmMwLDQyLjgsMzgsNzguNjUsODkuMjIsODUuNDIsMy40OC43NSw4LjIxLDIuMjksOS40LDUuMjYsMS4wOCwyLjcuNzEsNi45My4zNSw5LjY1LDAsMC0xLjI1LDcuNTMtMS41Miw5LjEzLS40NywyLjctMi4xNSwxMC41NSw5LjI0LDUuNzZzNjEuNDQtMzYuMTgsODMuODItNjEuOTVoMEMyNTkuMjUsMTgxLjI0LDI2Ni42NiwxNjQsMjY2LjY2LDE0NC45MloiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0yMzEuMTYsMTcyLjQ5aC0zMGEyLDIsMCwwLDEtMi0ydjBoMFYxMjMuOTRoMHYwYTIsMiwwLDAsMSwyLTJoMzBhMiwyLDAsMCwxLDIsMnY3LjU3YTIsMiwwLDAsMS0yLDJIMjEwLjc5djcuODVoMjAuMzdhMiwyLDAsMCwxLDIsMlYxNTFhMiwyLDAsMCwxLTIsMkgyMTAuNzl2Ny44NmgyMC4zN2EyLDIsMCwwLDEsMiwydjcuNTZBMiwyLDAsMCwxLDIzMS4xNiwxNzIuNDlaIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMTIwLjI5LDE3Mi40OWEyLDIsMCwwLDAsMi0ydi03LjU2YTIsMiwwLDAsMC0yLTJIOTkuOTJ2LTM3YTIsMiwwLDAsMC0yLTJIOTAuMzJhMiwyLDAsMCwwLTIsMnY0Ni41M2gwdjBhMiwyLDAsMCwwLDIsMmgzMFoiLz48cmVjdCBjbGFzcz0iY2xzLTEiIHg9IjEyOC43MyIgeT0iMTIxLjg1IiB3aWR0aD0iMTEuNjQiIGhlaWdodD0iNTAuNjQiIHJ4PSIyLjA0Ii8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMTg5Ljg0LDEyMS44NWgtNy41NmEyLDIsMCwwLDAtMiwydjI3LjY2bC0yMS4zLTI4Ljc3YTEuMiwxLjIsMCwwLDAtLjE3LS4yMXYwbC0uMTItLjEyLDAsMC0uMTEtLjA5LS4wNiwwLS4xMS0uMDgtLjA2LDAtLjExLS4wNi0uMDcsMC0uMTEsMC0uMDcsMC0uMTIsMC0uMDgsMC0uMTIsMGgtLjA4bC0uMTEsMGgtNy43MWEyLDIsMCwwLDAtMiwydjQ2LjU2YTIsMiwwLDAsMCwyLDJoNy41N2EyLDIsMCwwLDAsMi0yVjE0Mi44MWwyMS4zMywyOC44YTIsMiwwLDAsMCwuNTIuNTJoMGwuMTIuMDguMDYsMCwuMS4wNS4xLDAsLjA3LDAsLjE0LDBoMGEyLjQyLDIuNDIsMCwwLDAsLjU0LjA3aDcuNTJhMiwyLDAsMCwwLDItMlYxMjMuODlBMiwyLDAsMCwwLDE4OS44NCwxMjEuODVaIi8+PC9nPjwvZz48L3N2Zz4="; "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMjAiIGhlaWdodD0iMzIwIiB2aWV3Qm94PSIwIDAgMzIwIDMyMCI+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOiMwNmM3NTU7fS5jbHMtMntmaWxsOiNmZmY7fTwvc3R5bGU+PC9kZWZzPjxnIGlkPSJMYXllcl8yIiBkYXRhLW5hbWU9IkxheWVyIDIiPjxnIGlkPSJMSU5FX0xPR08iIGRhdGEtbmFtZT0iTElORSBMT0dPIj48cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIzMjAiIGhlaWdodD0iMzIwIiByeD0iNzIuMTQiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0yNjYuNjYsMTQ0LjkyYzAtNDcuNzQtNDcuODYtODYuNTgtMTA2LjY5LTg2LjU4UzUzLjI4LDk3LjE4LDUzLjI4LDE0NC45MmMwLDQyLjgsMzgsNzguNjUsODkuMjIsODUuNDIsMy40OC43NSw4LjIxLDIuMjksOS40LDUuMjYsMS4wOCwyLjcuNzEsNi45My4zNSw5LjY1LDAsMC0xLjI1LDcuNTMtMS41Miw5LjEzLS40NywyLjctMi4xNSwxMC41NSw5LjI0LDUuNzZzNjEuNDQtMzYuMTgsODMuODItNjEuOTVoMEMyNTkuMjUsMTgxLjI0LDI2Ni42NiwxNjQsMjY2LjY2LDE0NC45MloiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0yMzEuMTYsMTcyLjQ5aC0zMGEyLDIsMCwwLDEtMi0ydjBoMFYxMjMuOTRoMHYwYTIsMiwwLDAsMSwyLTJoMzBhMiwyLDAsMCwxLDIsMnY3LjU3YTIsMiwwLDAsMS0yLDJIMjEwLjc5djcuODVoMjAuMzdhMiwyLDAsMCwxLDIsMlYxNTFhMiwyLDAsMCwxLTIsMkgyMTAuNzl2Ny44NmgyMC4zN2EyLDIsMCwwLDEsMiwydjcuNTZBMiwyLDAsMCwxLDIzMS4xNiwxNzIuNDlaIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMTIwLjI5LDE3Mi40OWEyLDIsMCwwLDAsMi0ydi03LjU2YTIsMiwwLDAsMC0yLTJIOTkuOTJ2LTM3YTIsMiwwLDAsMC0yLTJIOTAuMzJhMiwyLDAsMCwwLTIsMnY0Ni41M2gwdjBhMiwyLDAsMCwwLDIsMmgzMFoiLz48cmVjdCBjbGFzcz0iY2xzLTEiIHg9IjEyOC43MyIgeT0iMTIxLjg1IiB3aWR0aD0iMTEuNjQiIGhlaWdodD0iNTAuNjQiIHJ4PSIyLjA0Ii8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMTg5Ljg0LDEyMS44NWgtNy41NmEyLDIsMCwwLDAtMiwydjI3LjY2bC0yMS4zLTI4Ljc3YTEuMiwxLjIsMCwwLDAtLjE3LS4yMXYwbC0uMTItLjEyLDAsMC0uMTEtLjA5LS4wNiwwLS4xMS0uMDgtLjA2LDAtLjExLS4wNi0uMDcsMC0uMTEsMC0uMDcsMC0uMTIsMC0uMDgsMC0uMTIsMGgtLjA4bC0uMTEsMGgtNy43MWEyLDIsMCwwLDAtMiwydjQ2LjU2YTIsMiwwLDAsMCwyLDJoNy41N2EyLDIsMCwwLDAsMi0yVjE0Mi44MWwyMS4zMywyOC44YTIsMiwwLDAsMCwuNTIuNTJoMGwuMTIuMDguMDYsMCwuMS4wNS4xLDAsLjA3LDAsLjE0LDBoMGEyLjQyLDIuNDIsMCwwLDAsLjU0LjA3aDcuNTJhMiwyLDAsMCwwLDItMlYxMjMuODlBMiwyLDAsMCwwLDE4OS44NCwxMjEuODVaIi8+PC9nPjwvZz48L3N2Zz4=";
export const farcasterIconUri = const farcasterIconUri =
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwMCIgaGVpZ2h0PSIxMDAwIiB2aWV3Qm94PSIwIDAgMTAwMCAxMDAwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cmVjdCB3aWR0aD0iMTAwMCIgaGVpZ2h0PSIxMDAwIiByeD0iMjAwIiBmaWxsPSIjODU1RENEIi8+CjxwYXRoIGQ9Ik0yNTcuNzc4IDE1NS41NTZINzQyLjIyMlY4NDQuNDQ0SDY3MS4xMTFWNTI4Ljg4OUg2NzAuNDE0QzY2Mi41NTQgNDQxLjY3NyA1ODkuMjU4IDM3My4zMzMgNTAwIDM3My4zMzNDNDEwLjc0MiAzNzMuMzMzIDMzNy40NDYgNDQxLjY3NyAzMjkuNTg2IDUyOC44ODlIMzI4Ljg4OVY4NDQuNDQ0SDI1Ny43NzhWMTU1LjU1NloiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xMjguODg5IDI1My4zMzNMMTU3Ljc3OCAzNTEuMTExSDE4Mi4yMjJWNzQ2LjY2N0MxNjkuOTQ5IDc0Ni42NjcgMTYwIDc1Ni42MTYgMTYwIDc2OC44ODlWNzk1LjU1NkgxNTUuNTU2QzE0My4yODMgNzk1LjU1NiAxMzMuMzMzIDgwNS41MDUgMTMzLjMzMyA4MTcuNzc4Vjg0NC40NDRIMzgyLjIyMlY4MTcuNzc4QzM4Mi4yMjIgODA1LjUwNSAzNzIuMjczIDc5NS41NTYgMzYwIDc5NS41NTZIMzU1LjU1NlY3NjguODg5QzM1NS41NTYgNzU2LjYxNiAzNDUuNjA2IDc0Ni42NjcgMzMzLjMzMyA3NDYuNjY3SDMwNi42NjdWMjUzLjMzM0gxMjguODg5WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTY3NS41NTYgNzQ2LjY2N0M2NjMuMjgzIDc0Ni42NjcgNjUzLjMzMyA3NTYuNjE2IDY1My4zMzMgNzY4Ljg4OVY3OTUuNTU2SDY0OC44ODlDNjM2LjYxNiA3OTUuNTU2IDYyNi42NjcgODA1LjUwNSA2MjYuNjY3IDgxNy43NzhWODQ0LjQ0NEg4NzUuNTU2VjgxNy43NzhDODc1LjU1NiA4MDUuNTA1IDg2NS42MDYgNzk1LjU1NiA4NTMuMzMzIDc5NS41NTZIODQ4Ljg4OVY3NjguODg5Qzg0OC44ODkgNzU2LjYxNiA4MzguOTQgNzQ2LjY2NyA4MjYuNjY3IDc0Ni42NjdWMzUxLjExMUg4NTEuMTExTDg4MCAyNTMuMzMzSDcwMi4yMjJWNzQ2LjY2N0g2NzUuNTU2WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg=="; "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwMCIgaGVpZ2h0PSIxMDAwIiB2aWV3Qm94PSIwIDAgMTAwMCAxMDAwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cmVjdCB3aWR0aD0iMTAwMCIgaGVpZ2h0PSIxMDAwIiByeD0iMjAwIiBmaWxsPSIjODU1RENEIi8+CjxwYXRoIGQ9Ik0yNTcuNzc4IDE1NS41NTZINzQyLjIyMlY4NDQuNDQ0SDY3MS4xMTFWNTI4Ljg4OUg2NzAuNDE0QzY2Mi41NTQgNDQxLjY3NyA1ODkuMjU4IDM3My4zMzMgNTAwIDM3My4zMzNDNDEwLjc0MiAzNzMuMzMzIDMzNy40NDYgNDQxLjY3NyAzMjkuNTg2IDUyOC44ODlIMzI4Ljg4OVY4NDQuNDQ0SDI1Ny43NzhWMTU1LjU1NloiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xMjguODg5IDI1My4zMzNMMTU3Ljc3OCAzNTEuMTExSDE4Mi4yMjJWNzQ2LjY2N0MxNjkuOTQ5IDc0Ni42NjcgMTYwIDc1Ni42MTYgMTYwIDc2OC44ODlWNzk1LjU1NkgxNTUuNTU2QzE0My4yODMgNzk1LjU1NiAxMzMuMzMzIDgwNS41MDUgMTMzLjMzMyA4MTcuNzc4Vjg0NC40NDRIMzgyLjIyMlY4MTcuNzc4QzM4Mi4yMjIgODA1LjUwNSAzNzIuMjczIDc5NS41NTYgMzYwIDc5NS41NTZIMzU1LjU1NlY3NjguODg5QzM1NS41NTYgNzU2LjYxNiAzNDUuNjA2IDc0Ni42NjcgMzMzLjMzMyA3NDYuNjY3SDMwNi42NjdWMjUzLjMzM0gxMjguODg5WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTY3NS41NTYgNzQ2LjY2N0M2NjMuMjgzIDc0Ni42NjcgNjUzLjMzMyA3NTYuNjE2IDY1My4zMzMgNzY4Ljg4OVY3OTUuNTU2SDY0OC44ODlDNjM2LjYxNiA3OTUuNTU2IDYyNi42NjcgODA1LjUwNSA2MjYuNjY3IDgxNy43NzhWODQ0LjQ0NEg4NzUuNTU2VjgxNy43NzhDODc1LjU1NiA4MDUuNTA1IDg2NS42MDYgNzk1LjU1NiA4NTMuMzMzIDc5NS41NTZIODQ4Ljg4OVY3NjguODg5Qzg0OC44ODkgNzU2LjYxNiA4MzguOTQgNzQ2LjY2NyA4MjYuNjY3IDc0Ni42NjdWMzUxLjExMUg4NTEuMTExTDg4MCAyNTMuMzMzSDcwMi4yMjJWNzQ2LjY2N0g2NzUuNTU2WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==";
export const telegramIconUri = const telegramIconUri =
"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTAwMHB4IiBoZWlnaHQ9IjEwMDBweCIgdmlld0JveD0iMCAwIDEwMDAgMTAwMCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KICAgIDwhLS0gR2VuZXJhdG9yOiBTa2V0Y2ggNTMuMiAoNzI2NDMpIC0gaHR0cHM6Ly9za2V0Y2hhcHAuY29tIC0tPgogICAgPHRpdGxlPkFydGJvYXJkPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+CiAgICAgICAgPGxpbmVhckdyYWRpZW50IHgxPSI1MCUiIHkxPSIwJSIgeDI9IjUwJSIgeTI9Ijk5LjI1ODM0MDQlIiBpZD0ibGluZWFyR3JhZGllbnQtMSI+CiAgICAgICAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiMyQUFCRUUiIG9mZnNldD0iMCUiPjwvc3RvcD4KICAgICAgICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iIzIyOUVEOSIgb2Zmc2V0PSIxMDAlIj48L3N0b3A+CiAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDwvZGVmcz4KICAgIDxnIGlkPSJBcnRib2FyZCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudC0xKSIgY3g9IjUwMCIgY3k9IjUwMCIgcj0iNTAwIj48L2NpcmNsZT4KICAgICAgICA8cGF0aCBkPSJNMjI2LjMyODQxOSw0OTQuNzIyMDY5IEMzNzIuMDg4NTczLDQzMS4yMTY2ODUgNDY5LjI4NDgzOSwzODkuMzUwMDQ5IDUxNy45MTcyMTYsMzY5LjEyMjE2MSBDNjU2Ljc3MjUzNSwzMTEuMzY3NDMgNjg1LjYyNTQ4MSwzMDEuMzM0ODE1IDcwNC40MzE0MjcsMzAxLjAwMzUzMiBDNzA4LjU2NzYyMSwzMDAuOTMwNjcgNzE3LjgxNTgzOSwzMDEuOTU1NzQzIDcyMy44MDY0NDYsMzA2LjgxNjcwNyBDNzI4Ljg2NDc5NywzMTAuOTIxMjEgNzMwLjI1NjU1MiwzMTYuNDY1ODEgNzMwLjkyMjU1MSwzMjAuMzU3MzI5IEM3MzEuNTg4NTUxLDMyNC4yNDg4NDggNzMyLjQxNzg3OSwzMzMuMTEzODI4IDczMS43NTg2MjYsMzQwLjA0MDY2NiBDNzI0LjIzNDAwNyw0MTkuMTAyNDg2IDY5MS42NzUxMDQsNjEwLjk2NDY3NCA2NzUuMTEwOTgyLDY5OS41MTUyNjcgQzY2OC4xMDIwOCw3MzYuOTg0MzQyIDY1NC4zMDEzMzYsNzQ5LjU0NzUzMiA2NDAuOTQwNjE4LDc1MC43NzcwMDYgQzYxMS45MDQ2ODQsNzUzLjQ0ODkzOCA1ODkuODU2MTE1LDczMS41ODgwMzUgNTYxLjczMzM5Myw3MTMuMTUzMjM3IEM1MTcuNzI2ODg2LDY4NC4zMDY0MTYgNDkyLjg2NjAwOSw2NjYuMzQ5MTgxIDQ1MC4xNTAwNzQsNjM4LjIwMDAxMyBDNDAwLjc4NDQyLDYwNS42Njg3OCA0MzIuNzg2MTE5LDU4Ny43ODkwNDggNDYwLjkxOTQ2Miw1NTguNTY4NTYzIEM0NjguMjgyMDkxLDU1MC45MjE0MjMgNTk2LjIxNTA4LDQzNC41NTY0NzkgNTk4LjY5MTIyNyw0MjQuMDAwMzU1IEM1OTkuMDAwOTEsNDIyLjY4MDEzNSA1OTkuMjg4MzEyLDQxNy43NTg5ODEgNTk2LjM2NDc0LDQxNS4xNjA0MzEgQzU5My40NDExNjgsNDEyLjU2MTg4MSA1ODkuMTI2MjI5LDQxMy40NTA0ODQgNTg2LjAxMjQ0OCw0MTQuMTU3MTk4IEM1ODEuNTk4NzU4LDQxNS4xNTg5NDMgNTExLjI5Nzc5Myw0NjEuNjI1Mjc0IDM3NS4xMDk1NTMsNTUzLjU1NjE4OSBDMzU1LjE1NDg1OCw1NjcuMjU4NjIzIDMzNy4wODA1MTUsNTczLjkzNDkwOCAzMjAuODg2NTI0LDU3My41ODUwNDYgQzMwMy4wMzM5NDgsNTczLjE5OTM1MSAyNjguNjkyNzU0LDU2My40OTA5MjggMjQzLjE2MzYwNiw1NTUuMTkyNDA4IEMyMTEuODUxMDY3LDU0NS4wMTM5MzYgMTg2Ljk2NDQ4NCw1MzkuNjMyNTA0IDE4OS4xMzE1NDcsNTIyLjM0NjMwOSBDMTkwLjI2MDI4Nyw1MTMuMzQyNTg5IDIwMi42NTkyNDQsNTA0LjEzNDUwOSAyMjYuMzI4NDE5LDQ5NC43MjIwNjkgWiIgaWQ9IlBhdGgtMyIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgPC9nPgo8L3N2Zz4="; "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTAwMHB4IiBoZWlnaHQ9IjEwMDBweCIgdmlld0JveD0iMCAwIDEwMDAgMTAwMCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KICAgIDwhLS0gR2VuZXJhdG9yOiBTa2V0Y2ggNTMuMiAoNzI2NDMpIC0gaHR0cHM6Ly9za2V0Y2hhcHAuY29tIC0tPgogICAgPHRpdGxlPkFydGJvYXJkPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+CiAgICAgICAgPGxpbmVhckdyYWRpZW50IHgxPSI1MCUiIHkxPSIwJSIgeDI9IjUwJSIgeTI9Ijk5LjI1ODM0MDQlIiBpZD0ibGluZWFyR3JhZGllbnQtMSI+CiAgICAgICAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiMyQUFCRUUiIG9mZnNldD0iMCUiPjwvc3RvcD4KICAgICAgICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iIzIyOUVEOSIgb2Zmc2V0PSIxMDAlIj48L3N0b3A+CiAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDwvZGVmcz4KICAgIDxnIGlkPSJBcnRib2FyZCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudC0xKSIgY3g9IjUwMCIgY3k9IjUwMCIgcj0iNTAwIj48L2NpcmNsZT4KICAgICAgICA8cGF0aCBkPSJNMjI2LjMyODQxOSw0OTQuNzIyMDY5IEMzNzIuMDg4NTczLDQzMS4yMTY2ODUgNDY5LjI4NDgzOSwzODkuMzUwMDQ5IDUxNy45MTcyMTYsMzY5LjEyMjE2MSBDNjU2Ljc3MjUzNSwzMTEuMzY3NDMgNjg1LjYyNTQ4MSwzMDEuMzM0ODE1IDcwNC40MzE0MjcsMzAxLjAwMzUzMiBDNzA4LjU2NzYyMSwzMDAuOTMwNjcgNzE3LjgxNTgzOSwzMDEuOTU1NzQzIDcyMy44MDY0NDYsMzA2LjgxNjcwNyBDNzI4Ljg2NDc5NywzMTAuOTIxMjEgNzMwLjI1NjU1MiwzMTYuNDY1ODEgNzMwLjkyMjU1MSwzMjAuMzU3MzI5IEM3MzEuNTg4NTUxLDMyNC4yNDg4NDggNzMyLjQxNzg3OSwzMzMuMTEzODI4IDczMS43NTg2MjYsMzQwLjA0MDY2NiBDNzI0LjIzNDAwNyw0MTkuMTAyNDg2IDY5MS42NzUxMDQsNjEwLjk2NDY3NCA2NzUuMTEwOTgyLDY5OS41MTUyNjcgQzY2OC4xMDIwOCw3MzYuOTg0MzQyIDY1NC4zMDEzMzYsNzQ5LjU0NzUzMiA2NDAuOTQwNjE4LDc1MC43NzcwMDYgQzYxMS45MDQ2ODQsNzUzLjQ0ODkzOCA1ODkuODU2MTE1LDczMS41ODgwMzUgNTYxLjczMzM5Myw3MTMuMTUzMjM3IEM1MTcuNzI2ODg2LDY4NC4zMDY0MTYgNDkyLjg2NjAwOSw2NjYuMzQ5MTgxIDQ1MC4xNTAwNzQsNjM4LjIwMDAxMyBDNDAwLjc4NDQyLDYwNS42Njg3OCA0MzIuNzg2MTE5LDU4Ny43ODkwNDggNDYwLjkxOTQ2Miw1NTguNTY4NTYzIEM0NjguMjgyMDkxLDU1MC45MjE0MjMgNTk2LjIxNTA4LDQzNC41NTY0NzkgNTk4LjY5MTIyNyw0MjQuMDAwMzU1IEM1OTkuMDAwOTEsNDIyLjY4MDEzNSA1OTkuMjg4MzEyLDQxNy43NTg5ODEgNTk2LjM2NDc0LDQxNS4xNjA0MzEgQzU5My40NDExNjgsNDEyLjU2MTg4MSA1ODkuMTI2MjI5LDQxMy40NTA0ODQgNTg2LjAxMjQ0OCw0MTQuMTU3MTk4IEM1ODEuNTk4NzU4LDQxNS4xNTg5NDMgNTExLjI5Nzc5Myw0NjEuNjI1Mjc0IDM3NS4xMDk1NTMsNTUzLjU1NjE4OSBDMzU1LjE1NDg1OCw1NjcuMjU4NjIzIDMzNy4wODA1MTUsNTczLjkzNDkwOCAzMjAuODg2NTI0LDU3My41ODUwNDYgQzMwMy4wMzM5NDgsNTczLjE5OTM1MSAyNjguNjkyNzU0LDU2My40OTA5MjggMjQzLjE2MzYwNiw1NTUuMTkyNDA4IEMyMTEuODUxMDY3LDU0NS4wMTM5MzYgMTg2Ljk2NDQ4NCw1MzkuNjMyNTA0IDE4OS4xMzE1NDcsNTIyLjM0NjMwOSBDMTkwLjI2MDI4Nyw1MTMuMzQyNTg5IDIwMi42NTkyNDQsNTA0LjEzNDUwOSAyMjYuMzI4NDE5LDQ5NC43MjIwNjkgWiIgaWQ9IlBhdGgtMyIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgPC9nPgo8L3N2Zz4=";
export const microsoftIconUri = const xIcon =
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciICB2aWV3Qm94PSIwIDAgNDggNDgiIHdpZHRoPSI0OHB4IiBoZWlnaHQ9IjQ4cHgiPjxwYXRoIGZpbGw9IiNmZjU3MjIiIGQ9Ik02IDZIMjJWMjJINnoiIHRyYW5zZm9ybT0icm90YXRlKC0xODAgMTQgMTQpIi8+PHBhdGggZmlsbD0iIzRjYWY1MCIgZD0iTTI2IDZINDJWMjJIMjZ6IiB0cmFuc2Zvcm09InJvdGF0ZSgtMTgwIDM0IDE0KSIvPjxwYXRoIGZpbGw9IiNmZmMxMDciIGQ9Ik0yNiAyNkg0MlY0MkgyNnoiIHRyYW5zZm9ybT0icm90YXRlKC0xODAgMzQgMzQpIi8+PHBhdGggZmlsbD0iIzAzYTlmNCIgZD0iTTYgMjZIMjJWNDJINnoiIHRyYW5zZm9ybT0icm90YXRlKC0xODAgMTQgMzQpIi8+PC9zdmc+";
export const xIcon =
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIwIiBoZWlnaHQ9IjMyMCIgdmlld0JveD0iMCAwIDMyMCAzMjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIzMjAiIGhlaWdodD0iMzIwIiByeD0iMjQiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xNzcuMzE1IDE0NS4zMzVMMjQ1LjA2OCA2N0gyMjkuMDEzTDE3MC4xODIgMTM1LjAxN0wxMjMuMTk1IDY3SDY5TDE0MC4wNTUgMTY5Ljg1NEw2OSAyNTJIODUuMDU2M0wxNDcuMTgzIDE4MC4xNzJMMTk2LjgwNSAyNTJIMjUxTDE3Ny4zMTEgMTQ1LjMzNUgxNzcuMzE1Wk0xNTUuMzIzIDE3MC43NkwxNDguMTI0IDE2MC41MThMOTAuODQxNyA3OS4wMjJIMTE1LjUwM0wxNjEuNzMxIDE0NC43OTJMMTY4LjkzIDE1NS4wMzRMMjI5LjAyIDI0MC41MjVIMjA0LjM1OUwxNTUuMzIzIDE3MC43NjRWMTcwLjc2WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg=="; "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIwIiBoZWlnaHQ9IjMyMCIgdmlld0JveD0iMCAwIDMyMCAzMjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIzMjAiIGhlaWdodD0iMzIwIiByeD0iMjQiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xNzcuMzE1IDE0NS4zMzVMMjQ1LjA2OCA2N0gyMjkuMDEzTDE3MC4xODIgMTM1LjAxN0wxMjMuMTk1IDY3SDY5TDE0MC4wNTUgMTY5Ljg1NEw2OSAyNTJIODUuMDU2M0wxNDcuMTgzIDE4MC4xNzJMMTk2LjgwNSAyNTJIMjUxTDE3Ny4zMTEgMTQ1LjMzNUgxNzcuMzE1Wk0xNTUuMzIzIDE3MC43NkwxNDguMTI0IDE2MC41MThMOTAuODQxNyA3OS4wMjJIMTE1LjUwM0wxNjEuNzMxIDE0NC43OTJMMTY4LjkzIDE1NS4wMzRMMjI5LjAyIDI0MC41MjVIMjA0LjM1OUwxNTUuMzIzIDE3MC43NjRWMTcwLjc2WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==";
export const emailIcon = export const emailIcon =
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEzLjMzMzUgMi42NjY1SDIuNjY2ODNDMS45MzA0NSAyLjY2NjUgMS4zMzM1IDMuMjYzNDYgMS4zMzM1IDMuOTk5ODRWMTEuOTk5OEMxLjMzMzUgMTIuNzM2MiAxLjkzMDQ1IDEzLjMzMzIgMi42NjY4MyAxMy4zMzMySDEzLjMzMzVDMTQuMDY5OSAxMy4zMzMyIDE0LjY2NjggMTIuNzM2MiAxNC42NjY4IDExLjk5OThWMy45OTk4NEMxNC42NjY4IDMuMjYzNDYgMTQuMDY5OSAyLjY2NjUgMTMuMzMzNSAyLjY2NjVaIiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTQuNjY2OCA0LjY2NjVMOC42ODY4MyA4LjQ2NjVDOC40ODEwMSA4LjU5NTQ1IDguMjQzMDQgOC42NjM4NCA4LjAwMDE2IDguNjYzODRDNy43NTcyOCA4LjY2Mzg0IDcuNTE5MzEgOC41OTU0NSA3LjMxMzUgOC40NjY1TDEuMzMzNSA0LjY2NjUiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo="; "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEzLjMzMzUgMi42NjY1SDIuNjY2ODNDMS45MzA0NSAyLjY2NjUgMS4zMzM1IDMuMjYzNDYgMS4zMzM1IDMuOTk5ODRWMTEuOTk5OEMxLjMzMzUgMTIuNzM2MiAxLjkzMDQ1IDEzLjMzMzIgMi42NjY4MyAxMy4zMzMySDEzLjMzMzVDMTQuMDY5OSAxMy4zMzMyIDE0LjY2NjggMTIuNzM2MiAxNC42NjY4IDExLjk5OThWMy45OTk4NEMxNC42NjY4IDMuMjYzNDYgMTQuMDY5OSAyLjY2NjUgMTMuMzMzNSAyLjY2NjVaIiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTQuNjY2OCA0LjY2NjVMOC42ODY4MyA4LjQ2NjVDOC40ODEwMSA4LjU5NTQ1IDguMjQzMDQgOC42NjM4NCA4LjAwMDE2IDguNjYzODRDNy43NTcyOCA4LjY2Mzg0IDcuNTE5MzEgOC41OTU0NSA3LjMxMzUgOC40NjY1TDEuMzMzNSA0LjY2NjUiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo=";
export const phoneIcon = export const phoneIcon =
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzU2MzlfNjMyKSI+CjxwYXRoIGQ9Ik0xNC42NjY5IDExLjI4MDJWMTMuMjgwMkMxNC42Njc3IDEzLjQ2NTkgMTQuNjI5NyAxMy42NDk3IDE0LjU1NTMgMTMuODE5OEMxNC40ODA5IDEzLjk4OTkgMTQuMzcxOCAxNC4xNDI2IDE0LjIzNSAxNC4yNjgxQzE0LjA5ODIgMTQuMzkzNyAxMy45MzY3IDE0LjQ4OTIgMTMuNzYwOCAxNC41NDg3QzEzLjU4NDkgMTQuNjA4MiAxMy4zOTg1IDE0LjYzMDMgMTMuMjEzNiAxNC42MTM2QzExLjE2MjIgMTQuMzkwNyA5LjE5MTYxIDEzLjY4OTcgNy40NjAyOCAxMi41NjY5QzUuODQ5NSAxMS41NDMzIDQuNDgzODQgMTAuMTc3NyAzLjQ2MDI4IDguNTY2ODlDMi4zMzM2IDYuODI3NyAxLjYzMjQ0IDQuODQ3NTYgMS40MTM2MSAyLjc4Njg5QzEuMzk2OTUgMi42MDI1NCAxLjQxODg2IDIuNDE2NzMgMS40Nzc5NSAyLjI0MTMxQzEuNTM3MDMgMi4wNjU4OSAxLjYzMTk5IDEuOTA0NjkgMS43NTY3OSAxLjc2Nzk3QzEuODgxNTkgMS42MzEyNiAyLjAzMzQ4IDEuNTIyMDMgMi4yMDI4MSAxLjQ0NzI0QzIuMzcyMTMgMS4zNzI0NSAyLjU1NTE3IDEuMzMzNzQgMi43NDAyOCAxLjMzMzU2SDQuNzQwMjhDNS4wNjM4MiAxLjMzMDM4IDUuMzc3NDggMS40NDQ5NSA1LjYyMjc5IDEuNjU1OTJDNS44NjgxIDEuODY2ODkgNi4wMjgzMyAyLjE1OTg2IDYuMDczNjEgMi40ODAyM0M2LjE1ODAzIDMuMTIwMjcgNi4zMTQ1OCAzLjc0ODcxIDYuNTQwMjggNC4zNTM1NkM2LjYyOTk4IDQuNTkyMTggNi42NDkzOSA0Ljg1MTUgNi41OTYyMiA1LjEwMDgxQzYuNTQzMDUgNS4zNTAxMiA2LjQxOTUyIDUuNTc4OTcgNi4yNDAyOCA1Ljc2MDIzTDUuMzkzNjEgNi42MDY4OUM2LjM0MjY1IDguMjc1OTIgNy43MjQ1OCA5LjY1Nzg2IDkuMzkzNjEgMTAuNjA2OUwxMC4yNDAzIDkuNzYwMjNDMTAuNDIxNSA5LjU4MDk5IDEwLjY1MDQgOS40NTc0NiAxMC44OTk3IDkuNDA0MjlDMTEuMTQ5IDkuMzUxMTIgMTEuNDA4MyA5LjM3MDUzIDExLjY0NjkgOS40NjAyM0MxMi4yNTE4IDkuNjg1OTMgMTIuODgwMiA5Ljg0MjQ4IDEzLjUyMDMgOS45MjY4OUMxMy44NDQxIDkuOTcyNTggMTQuMTM5OSAxMC4xMzU3IDE0LjM1MTMgMTAuMzg1MkMxNC41NjI3IDEwLjYzNDggMTQuNjc1MSAxMC45NTMzIDE0LjY2NjkgMTEuMjgwMloiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLXdpZHRoPSIxLjMzMzMzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF81NjM5XzYzMiI+CjxyZWN0IHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K"; "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzU2MzlfNjMyKSI+CjxwYXRoIGQ9Ik0xNC42NjY5IDExLjI4MDJWMTMuMjgwMkMxNC42Njc3IDEzLjQ2NTkgMTQuNjI5NyAxMy42NDk3IDE0LjU1NTMgMTMuODE5OEMxNC40ODA5IDEzLjk4OTkgMTQuMzcxOCAxNC4xNDI2IDE0LjIzNSAxNC4yNjgxQzE0LjA5ODIgMTQuMzkzNyAxMy45MzY3IDE0LjQ4OTIgMTMuNzYwOCAxNC41NDg3QzEzLjU4NDkgMTQuNjA4MiAxMy4zOTg1IDE0LjYzMDMgMTMuMjEzNiAxNC42MTM2QzExLjE2MjIgMTQuMzkwNyA5LjE5MTYxIDEzLjY4OTcgNy40NjAyOCAxMi41NjY5QzUuODQ5NSAxMS41NDMzIDQuNDgzODQgMTAuMTc3NyAzLjQ2MDI4IDguNTY2ODlDMi4zMzM2IDYuODI3NyAxLjYzMjQ0IDQuODQ3NTYgMS40MTM2MSAyLjc4Njg5QzEuMzk2OTUgMi42MDI1NCAxLjQxODg2IDIuNDE2NzMgMS40Nzc5NSAyLjI0MTMxQzEuNTM3MDMgMi4wNjU4OSAxLjYzMTk5IDEuOTA0NjkgMS43NTY3OSAxLjc2Nzk3QzEuODgxNTkgMS42MzEyNiAyLjAzMzQ4IDEuNTIyMDMgMi4yMDI4MSAxLjQ0NzI0QzIuMzcyMTMgMS4zNzI0NSAyLjU1NTE3IDEuMzMzNzQgMi43NDAyOCAxLjMzMzU2SDQuNzQwMjhDNS4wNjM4MiAxLjMzMDM4IDUuMzc3NDggMS40NDQ5NSA1LjYyMjc5IDEuNjU1OTJDNS44NjgxIDEuODY2ODkgNi4wMjgzMyAyLjE1OTg2IDYuMDczNjEgMi40ODAyM0M2LjE1ODAzIDMuMTIwMjcgNi4zMTQ1OCAzLjc0ODcxIDYuNTQwMjggNC4zNTM1NkM2LjYyOTk4IDQuNTkyMTggNi42NDkzOSA0Ljg1MTUgNi41OTYyMiA1LjEwMDgxQzYuNTQzMDUgNS4zNTAxMiA2LjQxOTUyIDUuNTc4OTcgNi4yNDAyOCA1Ljc2MDIzTDUuMzkzNjEgNi42MDY4OUM2LjM0MjY1IDguMjc1OTIgNy43MjQ1OCA5LjY1Nzg2IDkuMzkzNjEgMTAuNjA2OUwxMC4yNDAzIDkuNzYwMjNDMTAuNDIxNSA5LjU4MDk5IDEwLjY1MDQgOS40NTc0NiAxMC44OTk3IDkuNDA0MjlDMTEuMTQ5IDkuMzUxMTIgMTEuNDA4MyA5LjM3MDUzIDExLjY0NjkgOS40NjAyM0MxMi4yNTE4IDkuNjg1OTMgMTIuODgwMiA5Ljg0MjQ4IDEzLjUyMDMgOS45MjY4OUMxMy44NDQxIDkuOTcyNTggMTQuMTM5OSAxMC4xMzU3IDE0LjM1MTMgMTAuMzg1MkMxNC41NjI3IDEwLjYzNDggMTQuNjc1MSAxMC45NTMzIDE0LjY2NjkgMTEuMjgwMloiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLXdpZHRoPSIxLjMzMzMzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF81NjM5XzYzMiI+CjxyZWN0IHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K";
export const genericTokenIcon = export const genericTokenIcon =
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzQwNDhfNDIzMSkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTcuNTg0IDQuODU1NjZDNy43MTA2OSA0Ljc4MjUyIDcuODU0MzkgNC43NDQwMiA4LjAwMDY3IDQuNzQ0MDJDOC4xNDY5NSA0Ljc0NDAyIDguMjkwNjUgNC43ODI1MiA4LjQxNzM0IDQuODU1NjZMMTAuNTE1MyA2LjA2NjY2QzEwLjY0MiA2LjEzOTggMTAuNzQ3MiA2LjI0NSAxMC44MjA0IDYuMzcxNjhDMTAuODkzNSA2LjQ5ODM1IDEwLjkzMiA2LjY0MjA1IDEwLjkzMiA2Ljc4ODMzVjkuMjExQzEwLjkzMiA5LjM1NzI3IDEwLjg5MzUgOS41MDA5NyAxMC44MjA0IDkuNjI3NjVDMTAuNzQ3MiA5Ljc1NDMzIDEwLjY0MiA5Ljg1OTUzIDEwLjUxNTMgOS45MzI2Nkw4LjQxNzM0IDExLjE0NEM4LjI5MDY1IDExLjIxNzEgOC4xNDY5NSAxMS4yNTU2IDguMDAwNjcgMTEuMjU1NkM3Ljg1NDM5IDExLjI1NTYgNy43MTA2OSAxMS4yMTcxIDcuNTg0IDExLjE0NEw1LjQ4NiA5LjkzMjY2QzUuMzU5MzIgOS44NTk1MyA1LjI1NDEzIDkuNzU0MzMgNS4xODA5OSA5LjYyNzY1QzUuMTA3ODUgOS41MDA5NyA1LjA2OTM0IDkuMzU3MjcgNS4wNjkzNCA5LjIxMVY2Ljc4ODY2QzUuMDY5MjggNi42NDIzMyA1LjEwNzc2IDYuNDk4NTYgNS4xODA5IDYuMzcxODJDNS4yNTQwNSA2LjI0NTA4IDUuMzU5MjcgNi4xMzk4MyA1LjQ4NiA2LjA2NjY2TDcuNTg0IDQuODU1NjZaTTguMDg0IDUuNDMzQzguMDU4NjcgNS40MTgzNyA4LjAyOTkzIDUuNDEwNjcgOC4wMDA2NyA1LjQxMDY3QzcuOTcxNDEgNS40MTA2NyA3Ljk0MjY3IDUuNDE4MzcgNy45MTczNCA1LjQzM0w1LjgxOTM0IDYuNjQ0MzNDNS43OTQgNi42NTg5NiA1Ljc3Mjk2IDYuNjggNS43NTgzMyA2LjcwNTMzQzUuNzQzNyA2LjczMDY3IDUuNzM2IDYuNzU5NDEgNS43MzYgNi43ODg2NlY5LjIxMTMzQzUuNzM2IDkuMjQwNTkgNS43NDM3IDkuMjY5MzMgNS43NTgzMyA5LjI5NDY2QzUuNzcyOTYgOS4zMiA1Ljc5NCA5LjM0MTA0IDUuODE5MzQgOS4zNTU2Nkw3LjkxNzM0IDEwLjU2NjdDNy45NDI2NyAxMC41ODEzIDcuOTcxNDEgMTAuNTg5IDguMDAwNjcgMTAuNTg5QzguMDI5OTMgMTAuNTg5IDguMDU4NjcgMTAuNTgxMyA4LjA4NCAxMC41NjY3TDEwLjE4MiA5LjM1NTMzQzEwLjIwNzMgOS4zNDA3IDEwLjIyODQgOS4zMTk2NiAxMC4yNDMgOS4yOTQzM0MxMC4yNTc2IDkuMjY4OTkgMTAuMjY1MyA5LjI0MDI1IDEwLjI2NTMgOS4yMTFWNi43ODg2NkMxMC4yNjUzIDYuNzU5NDEgMTAuMjU3NiA2LjczMDY3IDEwLjI0MyA2LjcwNTMzQzEwLjIyODQgNi42OCAxMC4yMDczIDYuNjU4OTYgMTAuMTgyIDYuNjQ0MzNMOC4wODQgNS40MzNaIiBmaWxsPSIjNUM1QzVDIi8+CjwvZz4KPGNpcmNsZSBjeD0iOCIgY3k9IjgiIHI9IjcuNjkyMzEiIHN0cm9rZT0iIzVDNUM1QyIgc3Ryb2tlLXdpZHRoPSIwLjYxNTM4NSIvPgo8Y2lyY2xlIGN4PSI3Ljk5OTU1IiBjeT0iOC4wMDAwNCIgcj0iNS44NDYxNSIgc3Ryb2tlPSIjNUM1QzVDIiBzdHJva2Utd2lkdGg9IjAuNjE1Mzg1Ii8+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzQwNDhfNDIzMSI+CjxyZWN0IHdpZHRoPSI4IiBoZWlnaHQ9IjgiIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0IDQpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg=="; "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzQwNDhfNDIzMSkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTcuNTg0IDQuODU1NjZDNy43MTA2OSA0Ljc4MjUyIDcuODU0MzkgNC43NDQwMiA4LjAwMDY3IDQuNzQ0MDJDOC4xNDY5NSA0Ljc0NDAyIDguMjkwNjUgNC43ODI1MiA4LjQxNzM0IDQuODU1NjZMMTAuNTE1MyA2LjA2NjY2QzEwLjY0MiA2LjEzOTggMTAuNzQ3MiA2LjI0NSAxMC44MjA0IDYuMzcxNjhDMTAuODkzNSA2LjQ5ODM1IDEwLjkzMiA2LjY0MjA1IDEwLjkzMiA2Ljc4ODMzVjkuMjExQzEwLjkzMiA5LjM1NzI3IDEwLjg5MzUgOS41MDA5NyAxMC44MjA0IDkuNjI3NjVDMTAuNzQ3MiA5Ljc1NDMzIDEwLjY0MiA5Ljg1OTUzIDEwLjUxNTMgOS45MzI2Nkw4LjQxNzM0IDExLjE0NEM4LjI5MDY1IDExLjIxNzEgOC4xNDY5NSAxMS4yNTU2IDguMDAwNjcgMTEuMjU1NkM3Ljg1NDM5IDExLjI1NTYgNy43MTA2OSAxMS4yMTcxIDcuNTg0IDExLjE0NEw1LjQ4NiA5LjkzMjY2QzUuMzU5MzIgOS44NTk1MyA1LjI1NDEzIDkuNzU0MzMgNS4xODA5OSA5LjYyNzY1QzUuMTA3ODUgOS41MDA5NyA1LjA2OTM0IDkuMzU3MjcgNS4wNjkzNCA5LjIxMVY2Ljc4ODY2QzUuMDY5MjggNi42NDIzMyA1LjEwNzc2IDYuNDk4NTYgNS4xODA5IDYuMzcxODJDNS4yNTQwNSA2LjI0NTA4IDUuMzU5MjcgNi4xMzk4MyA1LjQ4NiA2LjA2NjY2TDcuNTg0IDQuODU1NjZaTTguMDg0IDUuNDMzQzguMDU4NjcgNS40MTgzNyA4LjAyOTkzIDUuNDEwNjcgOC4wMDA2NyA1LjQxMDY3QzcuOTcxNDEgNS40MTA2NyA3Ljk0MjY3IDUuNDE4MzcgNy45MTczNCA1LjQzM0w1LjgxOTM0IDYuNjQ0MzNDNS43OTQgNi42NTg5NiA1Ljc3Mjk2IDYuNjggNS43NTgzMyA2LjcwNTMzQzUuNzQzNyA2LjczMDY3IDUuNzM2IDYuNzU5NDEgNS43MzYgNi43ODg2NlY5LjIxMTMzQzUuNzM2IDkuMjQwNTkgNS43NDM3IDkuMjY5MzMgNS43NTgzMyA5LjI5NDY2QzUuNzcyOTYgOS4zMiA1Ljc5NCA5LjM0MTA0IDUuODE5MzQgOS4zNTU2Nkw3LjkxNzM0IDEwLjU2NjdDNy45NDI2NyAxMC41ODEzIDcuOTcxNDEgMTAuNTg5IDguMDAwNjcgMTAuNTg5QzguMDI5OTMgMTAuNTg5IDguMDU4NjcgMTAuNTgxMyA4LjA4NCAxMC41NjY3TDEwLjE4MiA5LjM1NTMzQzEwLjIwNzMgOS4zNDA3IDEwLjIyODQgOS4zMTk2NiAxMC4yNDMgOS4yOTQzM0MxMC4yNTc2IDkuMjY4OTkgMTAuMjY1MyA5LjI0MDI1IDEwLjI2NTMgOS4yMTFWNi43ODg2NkMxMC4yNjUzIDYuNzU5NDEgMTAuMjU3NiA2LjczMDY3IDEwLjI0MyA2LjcwNTMzQzEwLjIyODQgNi42OCAxMC4yMDczIDYuNjU4OTYgMTAuMTgyIDYuNjQ0MzNMOC4wODQgNS40MzNaIiBmaWxsPSIjNUM1QzVDIi8+CjwvZz4KPGNpcmNsZSBjeD0iOCIgY3k9IjgiIHI9IjcuNjkyMzEiIHN0cm9rZT0iIzVDNUM1QyIgc3Ryb2tlLXdpZHRoPSIwLjYxNTM4NSIvPgo8Y2lyY2xlIGN4PSI3Ljk5OTU1IiBjeT0iOC4wMDAwNCIgcj0iNS44NDYxNSIgc3Ryb2tlPSIjNUM1QzVDIiBzdHJva2Utd2lkdGg9IjAuNjE1Mzg1Ii8+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzQwNDhfNDIzMSI+CjxyZWN0IHdpZHRoPSI4IiBoZWlnaHQ9IjgiIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0IDQpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==";
const guestIcon =
export const guestIcon =
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE5IDIxVjE5QzE5IDE3LjkzOTEgMTguNTc4NiAxNi45MjE3IDE3LjgyODQgMTYuMTcxNkMxNy4wNzgzIDE1LjQyMTQgMTYuMDYwOSAxNSAxNSAxNUg5QzcuOTM5MTMgMTUgNi45MjE3MiAxNS40MjE0IDYuMTcxNTcgMTYuMTcxNkM1LjQyMTQzIDE2LjkyMTcgNSAxNy45MzkxIDUgMTlWMjEiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEyIDExQzE0LjIwOTEgMTEgMTYgOS4yMDkxNCAxNiA3QzE2IDQuNzkwODYgMTQuMjA5MSAzIDEyIDNDOS43OTA4NiAzIDggNC43OTA4NiA4IDdDOCA5LjIwOTE0IDkuNzkwODYgMTEgMTIgMTFaIiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo="; "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE5IDIxVjE5QzE5IDE3LjkzOTEgMTguNTc4NiAxNi45MjE3IDE3LjgyODQgMTYuMTcxNkMxNy4wNzgzIDE1LjQyMTQgMTYuMDYwOSAxNSAxNSAxNUg5QzcuOTM5MTMgMTUgNi45MjE3MiAxNS40MjE0IDYuMTcxNTcgMTYuMTcxNkM1LjQyMTQzIDE2LjkyMTcgNSAxNy45MzkxIDUgMTlWMjEiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEyIDExQzE0LjIwOTEgMTEgMTYgOS4yMDkxNCAxNiA3QzE2IDQuNzkwODYgMTQuMjA5MSAzIDEyIDNDOS43OTA4NiAzIDggNC43OTA4NiA4IDdDOCA5LjIwOTE0IDkuNzkwODYgMTEgMTIgMTFaIiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo=";
export const genericWalletIcon = export const genericWalletIcon =
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEyLjY2NjcgNC42NjY2N1YyLjY2NjY3QzEyLjY2NjcgMi40ODk4NiAxMi41OTY0IDIuMzIwMjkgMTIuNDcxNCAyLjE5NTI2QzEyLjM0NjQgMi4wNzAyNCAxMi4xNzY4IDIgMTIgMkgzLjMzMzMzQzIuOTc5NzEgMiAyLjY0MDU3IDIuMTQwNDggMi4zOTA1MiAyLjM5MDUyQzIuMTQwNDggMi42NDA1NyAyIDIuOTc5NzEgMiAzLjMzMzMzQzIgMy42ODY5NiAyLjE0MDQ4IDQuMDI2MDkgMi4zOTA1MiA0LjI3NjE0QzIuNjQwNTcgNC41MjYxOSAyLjk3OTcxIDQuNjY2NjcgMy4zMzMzMyA0LjY2NjY3SDEzLjMzMzNDMTMuNTEwMSA0LjY2NjY3IDEzLjY3OTcgNC43MzY5IDEzLjgwNDcgNC44NjE5M0MxMy45Mjk4IDQuOTg2OTUgMTQgNS4xNTY1MiAxNCA1LjMzMzMzVjhNMTQgOEgxMkMxMS42NDY0IDggMTEuMzA3MiA4LjE0MDQ4IDExLjA1NzIgOC4zOTA1MkMxMC44MDcxIDguNjQwNTcgMTAuNjY2NyA4Ljk3OTcxIDEwLjY2NjcgOS4zMzMzM0MxMC42NjY3IDkuNjg2OTYgMTAuODA3MSAxMC4wMjYxIDExLjA1NzIgMTAuMjc2MUMxMS4zMDcyIDEwLjUyNjIgMTEuNjQ2NCAxMC42NjY3IDEyIDEwLjY2NjdIMTRDMTQuMTc2OCAxMC42NjY3IDE0LjM0NjQgMTAuNTk2NCAxNC40NzE0IDEwLjQ3MTRDMTQuNTk2NCAxMC4zNDY0IDE0LjY2NjcgMTAuMTc2OCAxNC42NjY3IDEwVjguNjY2NjdDMTQuNjY2NyA4LjQ4OTg2IDE0LjU5NjQgOC4zMjAyOSAxNC40NzE0IDguMTk1MjZDMTQuMzQ2NCA4LjA3MDI0IDE0LjE3NjggOCAxNCA4WiIgc3Ryb2tlPSIjMzM4NUZGIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTIgMy4zMzM1VjEyLjY2NjhDMiAxMy4wMjA1IDIuMTQwNDggMTMuMzU5NiAyLjM5MDUyIDEzLjYwOTZDMi42NDA1NyAxMy44NTk3IDIuOTc5NzEgMTQuMDAwMiAzLjMzMzMzIDE0LjAwMDJIMTMuMzMzM0MxMy41MTAxIDE0LjAwMDIgMTMuNjc5NyAxMy45Mjk5IDEzLjgwNDcgMTMuODA0OUMxMy45Mjk4IDEzLjY3OTkgMTQgMTMuNTEwMyAxNCAxMy4zMzM1VjEwLjY2NjgiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo="; "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEyLjY2NjcgNC42NjY2N1YyLjY2NjY3QzEyLjY2NjcgMi40ODk4NiAxMi41OTY0IDIuMzIwMjkgMTIuNDcxNCAyLjE5NTI2QzEyLjM0NjQgMi4wNzAyNCAxMi4xNzY4IDIgMTIgMkgzLjMzMzMzQzIuOTc5NzEgMiAyLjY0MDU3IDIuMTQwNDggMi4zOTA1MiAyLjM5MDUyQzIuMTQwNDggMi42NDA1NyAyIDIuOTc5NzEgMiAzLjMzMzMzQzIgMy42ODY5NiAyLjE0MDQ4IDQuMDI2MDkgMi4zOTA1MiA0LjI3NjE0QzIuNjQwNTcgNC41MjYxOSAyLjk3OTcxIDQuNjY2NjcgMy4zMzMzMyA0LjY2NjY3SDEzLjMzMzNDMTMuNTEwMSA0LjY2NjY3IDEzLjY3OTcgNC43MzY5IDEzLjgwNDcgNC44NjE5M0MxMy45Mjk4IDQuOTg2OTUgMTQgNS4xNTY1MiAxNCA1LjMzMzMzVjhNMTQgOEgxMkMxMS42NDY0IDggMTEuMzA3MiA4LjE0MDQ4IDExLjA1NzIgOC4zOTA1MkMxMC44MDcxIDguNjQwNTcgMTAuNjY2NyA4Ljk3OTcxIDEwLjY2NjcgOS4zMzMzM0MxMC42NjY3IDkuNjg2OTYgMTAuODA3MSAxMC4wMjYxIDExLjA1NzIgMTAuMjc2MUMxMS4zMDcyIDEwLjUyNjIgMTEuNjQ2NCAxMC42NjY3IDEyIDEwLjY2NjdIMTRDMTQuMTc2OCAxMC42NjY3IDE0LjM0NjQgMTAuNTk2NCAxNC40NzE0IDEwLjQ3MTRDMTQuNTk2NCAxMC4zNDY0IDE0LjY2NjcgMTAuMTc2OCAxNC42NjY3IDEwVjguNjY2NjdDMTQuNjY2NyA4LjQ4OTg2IDE0LjU5NjQgOC4zMjAyOSAxNC40NzE0IDguMTk1MjZDMTQuMzQ2NCA4LjA3MDI0IDE0LjE3NjggOCAxNCA4WiIgc3Ryb2tlPSIjMzM4NUZGIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTIgMy4zMzM1VjEyLjY2NjhDMiAxMy4wMjA1IDIuMTQwNDggMTMuMzU5NiAyLjM5MDUyIDEzLjYwOTZDMi42NDA1NyAxMy44NTk3IDIuOTc5NzEgMTQuMDAwMiAzLjMzMzMzIDE0LjAwMDJIMTMuMzMzM0MxMy41MTAxIDE0LjAwMDIgMTMuNjc5NyAxMy45Mjk5IDEzLjgwNDcgMTMuODA0OUMxMy45Mjk4IDEzLjY3OTkgMTQgMTMuNTEwMyAxNCAxMy4zMzM1VjEwLjY2NjgiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo=";
export const passkeyIcon = export const passkeyIcon =
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzU2MzlfMzIpIj4KPHBhdGggZD0iTTcuOTk5NTkgNi42NjY1QzcuNjQ1OTYgNi42NjY1IDcuMzA2ODMgNi44MDY5OCA3LjA1Njc4IDcuMDU3MDNDNi44MDY3MyA3LjMwNzA4IDYuNjY2MjUgNy42NDYyMiA2LjY2NjI1IDcuOTk5ODRDNi42NjYyNSA4LjY3OTg0IDYuNTk5NTkgOS42NzMxNyA2LjQ5MjkyIDEwLjY2NjUiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLXdpZHRoPSIxLjI1NDkiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNOS4zMzI5MyA4Ljc0NjU4QzkuMzMyOTMgMTAuMzMzMiA5LjMzMjkzIDEyLjk5OTkgOC42NjYyNiAxNC42NjY2IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTExLjUyNzMgMTQuMDEzM0MxMS42MDczIDEzLjYxMzMgMTEuODE0IDEyLjQ4IDExLjg2MDcgMTIiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLXdpZHRoPSIxLjI1NDkiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMS4zMzM5OCA4LjAwMDE2QzEuMzMzOTggNi42MDA5NSAxLjc3NDIzIDUuMjM3MiAyLjU5MjM3IDQuMTAyMDlDMy40MTA1MSAyLjk2Njk5IDQuNTY1MDUgMi4xMTgwOCA1Ljg5MjQ3IDEuNjc1NjFDNy4yMTk4OCAxLjIzMzE0IDguNjUyODYgMS4yMTk1NCA5Ljk4ODQ0IDEuNjM2NzRDMTEuMzI0IDIuMDUzOTQgMTIuNDk0NSAyLjg4MDc5IDEzLjMzNCA0LjAwMDE2IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEuMzMzOTggMTAuNjY2NUgxLjMzOTE0IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTE0LjUzMjcgMTAuNjY2NUMxNC42NjYgOS4zMzMxNyAxNC42MiA3LjA5NzE3IDE0LjUzMjcgNi42NjY1IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTMuMzMzOTggMTIuOTk5OEMzLjY2NzMyIDExLjk5OTggNC4wMDA2NSA5Ljk5OTg0IDQuMDAwNjUgNy45OTk4NEMzLjk5OTk4IDcuNTQ1NzUgNC4wNzY2MyA3LjA5NDg2IDQuMjI3MzIgNi42NjY1IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTUuNzY3MDkgMTQuNjY2OEM1LjkwNzA5IDE0LjIyNjggNi4wNjcwOSAxMy43ODY4IDYuMTQ3MDkgMTMuMzMzNSIgc3Ryb2tlPSIjMzM4NUZGIiBzdHJva2Utd2lkdGg9IjEuMjU0OSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik02IDQuNTMzNDZDNi42MDgyNyA0LjE4MjI4IDcuMjk4MjggMy45OTc0NSA4LjAwMDY0IDMuOTk3NTZDOC43MDMwMSAzLjk5NzY3IDkuMzkyOTYgNC4xODI3MiAxMC4wMDExIDQuNTM0MUMxMC42MDkzIDQuODg1NDggMTEuMTE0MiA1LjM5MDc5IDExLjQ2NTEgNS45OTkyM0MxMS44MTYgNi42MDc2NiAxMi4wMDA1IDcuMjk3NzYgMTIgOC4wMDAxMlY5LjMzMzQ2IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF81NjM5XzMyIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="; "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzU2MzlfMzIpIj4KPHBhdGggZD0iTTcuOTk5NTkgNi42NjY1QzcuNjQ1OTYgNi42NjY1IDcuMzA2ODMgNi44MDY5OCA3LjA1Njc4IDcuMDU3MDNDNi44MDY3MyA3LjMwNzA4IDYuNjY2MjUgNy42NDYyMiA2LjY2NjI1IDcuOTk5ODRDNi42NjYyNSA4LjY3OTg0IDYuNTk5NTkgOS42NzMxNyA2LjQ5MjkyIDEwLjY2NjUiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLXdpZHRoPSIxLjI1NDkiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNOS4zMzI5MyA4Ljc0NjU4QzkuMzMyOTMgMTAuMzMzMiA5LjMzMjkzIDEyLjk5OTkgOC42NjYyNiAxNC42NjY2IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTExLjUyNzMgMTQuMDEzM0MxMS42MDczIDEzLjYxMzMgMTEuODE0IDEyLjQ4IDExLjg2MDcgMTIiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLXdpZHRoPSIxLjI1NDkiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMS4zMzM5OCA4LjAwMDE2QzEuMzMzOTggNi42MDA5NSAxLjc3NDIzIDUuMjM3MiAyLjU5MjM3IDQuMTAyMDlDMy40MTA1MSAyLjk2Njk5IDQuNTY1MDUgMi4xMTgwOCA1Ljg5MjQ3IDEuNjc1NjFDNy4yMTk4OCAxLjIzMzE0IDguNjUyODYgMS4yMTk1NCA5Ljk4ODQ0IDEuNjM2NzRDMTEuMzI0IDIuMDUzOTQgMTIuNDk0NSAyLjg4MDc5IDEzLjMzNCA0LjAwMDE2IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEuMzMzOTggMTAuNjY2NUgxLjMzOTE0IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTE0LjUzMjcgMTAuNjY2NUMxNC42NjYgOS4zMzMxNyAxNC42MiA3LjA5NzE3IDE0LjUzMjcgNi42NjY1IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTMuMzMzOTggMTIuOTk5OEMzLjY2NzMyIDExLjk5OTggNC4wMDA2NSA5Ljk5OTg0IDQuMDAwNjUgNy45OTk4NEMzLjk5OTk4IDcuNTQ1NzUgNC4wNzY2MyA3LjA5NDg2IDQuMjI3MzIgNi42NjY1IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTUuNzY3MDkgMTQuNjY2OEM1LjkwNzA5IDE0LjIyNjggNi4wNjcwOSAxMy43ODY4IDYuMTQ3MDkgMTMuMzMzNSIgc3Ryb2tlPSIjMzM4NUZGIiBzdHJva2Utd2lkdGg9IjEuMjU0OSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik02IDQuNTMzNDZDNi42MDgyNyA0LjE4MjI4IDcuMjk4MjggMy45OTc0NSA4LjAwMDY0IDMuOTk3NTZDOC43MDMwMSAzLjk5NzY3IDkuMzkyOTYgNC4xODI3MiAxMC4wMDExIDQuNTM0MUMxMC42MDkzIDQuODg1NDggMTEuMTE0MiA1LjM5MDc5IDExLjQ2NTEgNS45OTkyM0MxMS44MTYgNi42MDc2NiAxMi4wMDA1IDcuMjk3NzYgMTIgOC4wMDAxMlY5LjMzMzQ2IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF81NjM5XzMyIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=";
@@ -1,7 +1,5 @@
"use client"; "use client";
import { useEffect } from "react";
import type { AutoConnectProps } from "../../../core/hooks/connection/types.js"; import type { AutoConnectProps } from "../../../core/hooks/connection/types.js";
import { useSetActiveWalletConnectionStatus } from "../../../core/hooks/wallets/useSetActiveWalletConnectionStatus.js";
import { useAutoConnect } from "../../hooks/wallets/useAutoConnect.js"; import { useAutoConnect } from "../../hooks/wallets/useAutoConnect.js";
/** /**
@@ -39,21 +37,3 @@ export function AutoConnect(props: AutoConnectProps) {
useAutoConnect(props); useAutoConnect(props);
return <></>; return <></>;
} }
let noAutoConnectDone = false;
/**
* @internal
*/
export function NoAutoConnect() {
const setConnectionStatus = useSetActiveWalletConnectionStatus();
useEffect(() => {
if (noAutoConnectDone) {
return;
}
noAutoConnectDone = true;
setConnectionStatus("disconnected");
});
return null;
}
@@ -7,7 +7,7 @@ import { CHECK, COPY_ICON } from "../icons/svgs.js";
import { RNImage } from "./RNImage.js"; import { RNImage } from "./RNImage.js";
import { ThemedText } from "./text.js"; import { ThemedText } from "./text.js";
export type AddressProps = { type AddressProps = {
account: Account; account: Account;
theme: Theme; theme: Theme;
addressOrENS: string; addressOrENS: string;
@@ -7,7 +7,7 @@ import { useChainIconUrl } from "../../../core/hooks/others/useChainQuery.js";
import { CHAIN_ICON } from "../icons/svgs.js"; import { CHAIN_ICON } from "../icons/svgs.js";
import { RNImage } from "./RNImage.js"; import { RNImage } from "./RNImage.js";
export type ChainIconProps = { type ChainIconProps = {
theme: Theme; theme: Theme;
size: number; size: number;
client: ThirdwebClient; client: ThirdwebClient;
@@ -4,7 +4,7 @@ import { SvgXml } from "react-native-svg";
import type { Theme } from "../../../core/design-system/index.js"; import type { Theme } from "../../../core/design-system/index.js";
import { radius } from "../../design-system/index.js"; import { radius } from "../../design-system/index.js";
export type ImageInfo = { type ImageInfo = {
size: number; size: number;
theme: Theme; theme: Theme;
data?: string | null; data?: string | null;
@@ -9,7 +9,7 @@ import { radius, spacing } from "../../design-system/index.js";
import { RNImage } from "./RNImage.js"; import { RNImage } from "./RNImage.js";
import { ThemedText } from "./text.js"; import { ThemedText } from "./text.js";
export type ThemedButtonProps = TouchableOpacityProps & { type ThemedButtonProps = TouchableOpacityProps & {
theme: Theme; theme: Theme;
variant?: "primary" | "secondary" | "accent"; variant?: "primary" | "secondary" | "accent";
}; };
@@ -12,7 +12,7 @@ import { radius, spacing } from "../../design-system/index.js";
import { RIGHT_ARROW } from "../icons/svgs.js"; import { RIGHT_ARROW } from "../icons/svgs.js";
import { ThemedSpinner } from "./spinner.js"; import { ThemedSpinner } from "./spinner.js";
export type ThemedInputProps = { type ThemedInputProps = {
theme: Theme; theme: Theme;
rightView?: React.ReactNode; rightView?: React.ReactNode;
} & TextInputProps; } & TextInputProps;
@@ -1,6 +1,6 @@
import { ActivityIndicator, type ActivityIndicatorProps } from "react-native"; import { ActivityIndicator, type ActivityIndicatorProps } from "react-native";
export type ThemedSpinnerProps = ActivityIndicatorProps; type ThemedSpinnerProps = ActivityIndicatorProps;
export function ThemedSpinner(props: ThemedSpinnerProps) { export function ThemedSpinner(props: ThemedSpinnerProps) {
return <ActivityIndicator {...props} />; return <ActivityIndicator {...props} />;
@@ -1,7 +1,7 @@
import { StyleSheet, Text, type TextProps } from "react-native"; import { StyleSheet, Text, type TextProps } from "react-native";
import type { Theme } from "../../../core/design-system/index.js"; import type { Theme } from "../../../core/design-system/index.js";
export type ThemedTextProps = TextProps & { type ThemedTextProps = TextProps & {
theme: Theme; theme: Theme;
type?: type?:
| "default" | "default"
@@ -1,7 +1,7 @@
import { View, type ViewProps } from "react-native"; import { View, type ViewProps } from "react-native";
import type { Theme } from "../../../core/design-system/index.js"; import type { Theme } from "../../../core/design-system/index.js";
export type ThemedViewProps = ViewProps & { type ThemedViewProps = ViewProps & {
theme: Theme; theme: Theme;
}; };
@@ -581,7 +581,7 @@ function SignInView({
); );
} }
export function OrDivider({ theme }: { theme: Theme }) { function OrDivider({ theme }: { theme: Theme }) {
return ( return (
<View <View
style={{ style={{
@@ -265,25 +265,6 @@ const ChainSwitcher = (props: ConnectedModalPropsInner) => {
); );
}; };
/** TODO (rn) implement transactions screen
const Transactions = (props: ConnectedModalPropsInner) => {
const { client, wallet, theme } = props;
return (
<TouchableOpacity style={styles.walletMenuRow} onPress={() => {}}>
<RNImage
theme={theme}
size={32}
data={TRANSACTIONS_ICON}
color={theme.colors.secondaryIconColor}
/>
<ThemedText theme={theme} type="defaultSemiBold">
Transactions
</ThemedText>
</TouchableOpacity>
);
};
*/
const ViewFunds = (props: ConnectedModalPropsInner) => { const ViewFunds = (props: ConnectedModalPropsInner) => {
const { theme, setModalState } = props; const { theme, setModalState } = props;
return ( return (
@@ -5,7 +5,7 @@ import { RNImage } from "../components/RNImage.js";
import { ThemedText } from "../components/text.js"; import { ThemedText } from "../components/text.js";
import { CLOSE_CIRCLE } from "../icons/svgs.js"; import { CLOSE_CIRCLE } from "../icons/svgs.js";
export type ErrorViewProps = { type ErrorViewProps = {
theme: Theme; theme: Theme;
title: string; title: string;
}; };
@@ -16,7 +16,7 @@ import type { ContainerType } from "../components/Header.js";
import { Skeleton } from "../components/Skeleton.js"; import { Skeleton } from "../components/Skeleton.js";
import { ThemedText } from "../components/text.js"; import { ThemedText } from "../components/text.js";
export type ExternalWalletsUiProps = { type ExternalWalletsUiProps = {
theme: Theme; theme: Theme;
client: ThirdwebClient; client: ThirdwebClient;
connector: (args: { connector: (args: {
@@ -3,7 +3,7 @@ import type { Theme } from "../../../core/design-system/index.js";
import { spacing } from "../../design-system/index.js"; import { spacing } from "../../design-system/index.js";
import { ThemedSpinner } from "../components/spinner.js"; import { ThemedSpinner } from "../components/spinner.js";
export type LoadingViewProps = { type LoadingViewProps = {
theme: Theme; theme: Theme;
}; };
@@ -9,7 +9,7 @@ import { WalletImage } from "../components/WalletImage.js";
import { Spacer } from "../components/spacer.js"; import { Spacer } from "../components/spacer.js";
import { ThemedText } from "../components/text.js"; import { ThemedText } from "../components/text.js";
export type ReceiveScreenProps = { type ReceiveScreenProps = {
theme: Theme; theme: Theme;
wallet: Wallet; wallet: Wallet;
account: Account; account: Account;
@@ -21,7 +21,7 @@ import { ErrorView } from "./ErrorView.js";
import { SuccessView } from "./SuccessView.js"; import { SuccessView } from "./SuccessView.js";
import { TokenListScreen, TokenRow } from "./TokenListScreen.js"; import { TokenListScreen, TokenRow } from "./TokenListScreen.js";
export type SendScreenProps = { type SendScreenProps = {
theme: Theme; theme: Theme;
client: ThirdwebClient; client: ThirdwebClient;
onClose?: () => void; onClose?: () => void;
@@ -5,7 +5,7 @@ import { RNImage } from "../components/RNImage.js";
import { ThemedText } from "../components/text.js"; import { ThemedText } from "../components/text.js";
import { CHECK_CIRCLE } from "../icons/svgs.js"; import { CHECK_CIRCLE } from "../icons/svgs.js";
export type SuccessViewProps = { type SuccessViewProps = {
theme: Theme; theme: Theme;
title: string; title: string;
}; };

Some files were not shown because too many files have changed in this diff Show More