Compare commits

...
Author SHA1 Message Date
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
0b7010eccb Version Packages (#2249)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-02-01 15:52:14 -08:00
041c01341b chore(chains): update chains (#2250)
Co-authored-by: GitHub Action <[email protected]>
2024-02-01 15:09:04 -08:00
Manan TankandGitHub 439a377aa7 [react] add detailsModalFooter prop in ConnectWallet (#2252) 2024-02-01 21:53:21 +00:00
Nacho IacovinoandGitHub 4f52c29611 Update error message link (#2248) 2024-02-01 18:39:14 +00:00
374671fd9a chore(chains): update chains (#2247)
Co-authored-by: GitHub Action <[email protected]>
2024-01-31 21:25:01 -08:00
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
0a9fc269ff Version Packages (#2246)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-01-31 16:59:43 -08:00
iketwandGitHub 2e3cc7cdd4 Adds support for RN 0.73 and removes magic (#2225) 2024-02-01 00:34:28 +00:00
3ba15366be [Analytics] Unify client analytics (#2224)
Co-authored-by: ikethirdweb <[email protected]>
2024-01-31 23:46:44 +00:00
771bd1e1b2 chore(chains): update chains (#2245)
Co-authored-by: GitHub Action <[email protected]>
2024-01-31 01:05:57 -08:00
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
1baa98fba4 Version Packages (#2241)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-01-30 18:57:04 -08:00
39e79282ac chore(chains): update chains (#2243)
Co-authored-by: GitHub Action <[email protected]>
2024-01-30 17:40:17 -08:00
FirekeeperandGitHub 13d5b86ae5 sync-chains add step to create changeset (#2244) 2024-01-31 01:19:55 +00:00
FirekeeperandGitHub 8edb3f1b34 fix sync chains workflow (#2242) 2024-01-31 00:57:52 +00:00
Jonas DanielsandGitHub 69c3eb910f chore(chains): sync (#2240) 2024-01-31 00:17:44 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
c8f881c2b9 Bump fastify from 4.24.2 to 4.25.2 (#2205)
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-30 23:57:21 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
71ac41adae Bump @typescript-eslint/parser from 6.2.0 to 6.19.1 (#2206)
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-30 23:57:11 +00:00
Jonas DanielsandGitHub ddb2121c67 [docs] remove non-gz documentation json files (2/2) (#2239) 2024-01-30 23:52:17 +00:00
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
558dc10a63 Version Packages (#2236)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-01-30 15:22:39 -08:00
Joaquim VergesandGitHub c9f1fd8fc2 update serviceUtils types (#2238) 2024-01-30 15:04:15 -08:00
Jonas DanielsandGitHub e75b48cfe9 [docs] GZIP docs 1 of 2 (#2237) 2024-01-30 22:28:43 +00:00
farhanW3andGitHub 173b3b2ad9 [Service-Utils] Usage Tracker Updates (#2235) 2024-01-30 20:02:23 +00:00
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
654aaa2171 Version Packages (#2211)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-01-29 18:12:25 -08:00
Joaquim VergesandGitHub 627d209927 update chains (#2232) 2024-01-30 01:02:21 +00:00
iketwandGitHub 57320957aa [RN] Adds ability to delete the ews active account (#2199) 2024-01-29 21:36:40 +00:00
Joaquim VergesandGitHub 6fdade6c45 [ServiceUtils] Option to include policy checks (#2230) 2024-01-29 20:59:41 +00:00
6d25586d08 [react, wallets] Add XDEFI wallet (#2218)
Co-authored-by: Manan Tank <[email protected]>
2024-01-26 19:21:41 +00:00
Manan TankandGitHub 4d89dc1efa [wallets] Update Safe SDK (#2221) 2024-01-26 17:57:28 +00:00
FirekeeperandGitHub a5653f07f8 [Docs] Document deployOnSign (#2223) 2024-01-26 17:54:54 +00:00
Manan TankandGitHub 7f35caff5d [react, react-native] update defaultTokens used in ConnectWallet (#2217) 2024-01-26 16:47:12 +00:00
FirekeeperandGitHub bf90fa5005 [AA] Option to not deploy SW on sign message (#2222) 2024-01-26 01:06:15 +00:00
FirekeeperandGitHub 3d63a2cb69 [SDK] Add erc1155.transferBatch (#2220) 2024-01-26 00:02:40 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Manan Tank
466b1e75dc Bump @radix-ui/react-tooltip from 1.0.6 to 1.0.7 (#2204)
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Manan Tank <[email protected]>
2024-01-25 22:39:43 +00:00
Manan TankandGitHub 3dfc003902 [react] Allow uppercase email address in ConnectWallet (#2219) 2024-01-25 21:39:30 +00:00
Joaquim VergesandGitHub b34737d27a [SDK] switch to LRU caches (#2215) 2024-01-25 20:24:26 +00:00
1a5d41cc8a feat(auth): Next.js App Router support (#2106)
Signed-off-by: Adam Majmudar <[email protected]>
Co-authored-by: Adam Majmudar <[email protected]>
2024-01-25 00:25:14 +00:00
Tair AsimandGitHub a5541a1c55 service-utils: update api key metadata (#2210) 2024-01-23 19:36:39 +00:00
Tair AsimandGitHub 13e389a63e service-utils: polish usage hit error code (#2200) 2024-01-23 17:06:30 +00:00
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
6884815428 Version Packages (#2195)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-01-22 17:19:49 -08:00
Joaquim VergesandGitHub f29f91d7e0 [React] show embedded wallet free tier error msg in connect (#2209) 2024-01-23 00:54:30 +00:00
Manan TankandGitHub 212b2e7bc2 [react, react-native] ConnectWallet Details Modal UI, hide testnet faucet link by default (#2197) 2024-01-22 20:03:03 +00:00
iketwandGitHub 3f2ee85a1a chore: synced chains with db (#2203) 2024-01-22 18:56:10 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
24450ed7ac Bump vite from 3.2.7 to 3.2.8 (#2201)
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-22 16:13:32 +00:00
Kien NgoandGitHub ba978f55b0 [react-core] Update code sample for useTokenSupply (#2202) 2024-01-21 05:06:08 +00:00
iketwandGitHub 94e4dc9aab [RN] UI improvements (#2198) 2024-01-18 22:52:26 +00:00
Manan TankandGitHub 67656c7131 Add missing react-native in release-artifacts (#2196) 2024-01-17 23:57:58 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
dccb9ddd0e Version Packages (#2180)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-01-17 15:20:06 -08:00
Joaquim VergesandGitHub c3b264982d export sig minting classes for docs (#2194) 2024-01-17 23:14:26 +00:00
Manan TankandGitHub 0efd0f9d26 [react] add useSetWalletModalConfig hook (#2193) 2024-01-17 22:49:17 +00:00
Manan TankandGitHub 7af35a0133 only commit generated files in release-artifacts workflow (#2192) 2024-01-17 21:02:34 +00:00
Manan TankandGitHub 9caf201f24 Reorder commands in release-artifacts.yml (#2191) 2024-01-17 19:56:28 +00:00
Manan TankandGitHub ea7da5fb77 Refactor release-artifacts workflow (#2190) 2024-01-17 18:56:57 +00:00
89641e3378 [react] Add switchNetworkBtnTitle prop in ConnectWallet and Web3Button (#1884)
Co-authored-by: Manan Tank <[email protected]>
2024-01-17 16:36:39 +00:00
Manan TankandGitHub dcb6afa148 Fix release-artifacts workflow (#2189) 2024-01-17 15:38:37 +00:00
iketwandGitHub 324330d354 [RN] Exports ConnectEmbed as a standalone component (#2185) 2024-01-17 15:14:19 +00:00
Manan TankandGitHub 056643ad83 Fix error in typedoc and snippets workflows (#2188) 2024-01-17 14:39:43 +00:00
Gerry SaporitoandGitHub e21f7bb171 chore: synced chains with db (#2187) 2024-01-17 03:50:19 +00:00
Manan TankandGitHub 148e6a9166 Add bun setup in release-artifacts workflow to fix setup job (#2184) 2024-01-16 21:53:33 +00:00
YashandGitHub 9a23de2be0 [SDK] ZkSync Sepolia Addresses (#2183) 2024-01-16 21:32:46 +00:00
Manan TankandGitHub c377e868ed Fix Docs and Release workflows (#2179) 2024-01-16 21:21:50 +00:00
iketwandGitHub c4f1309dcd [RN] Reports react-native only (#2182) 2024-01-16 20:34:25 +00:00
Manan TankandGitHub 2e057827e3 [react] Remove unused deps (#2181) 2024-01-16 14:53:44 +00:00
YashandGitHub 9e1455294a Add: Example for useOwnedNFTs hook for queryParams (#2170) 2024-01-16 14:35:30 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Manan Tank
e11e645c74 Bump fuse.js from 6.6.2 to 7.0.0 (#2177)
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Manan Tank <[email protected]>
2024-01-16 14:35:12 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
d2322fc404 Version Packages (#2166)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-01-12 13:47:41 -08:00
Manan TankandGitHub e249a56892 [react] Add onConnect prop on ConnectWallet and ConnectEmbed, JSDoc improvements (#2169) 2024-01-12 21:16:42 +00:00
iketwandGitHub 7a74bd9c8a [RN] Upgrade min RN version requirenment to 0.71 and mmkv to 2.11.0 (#2165) 2024-01-12 01:44:22 +00:00
Joaquim VergesandGitHub f6599fdc8b build before snippet generation (#2164) 2024-01-12 00:39:48 +00:00
286 changed files with 16675 additions and 2958 deletions
+68
View File
@@ -0,0 +1,68 @@
# On the Version Packages branch
# Generate and Commit the Typedoc JSON files and the Snippets JSON files
name: Commit Release Artifacts
on:
push:
branches:
- changeset-release/main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
release-artifacts:
timeout-minutes: 15
runs-on: ubuntu-latest-16
steps:
- name: Checkout branch
uses: actions/checkout@v3
# bun setup is required, because pnpm typdoc will run pnpm build and some packages uses bun for build
- name: Setup bun
uses: oven-sh/setup-bun@v1
with:
bun-version: 1.0.21
- name: Install
uses: ./.github/composite-actions/install
- name: Build
run: pnpm build
- name: Typedoc
run: pnpm typedoc
- name: Generate Docs
run: |
cd packages/sdk
pnpm generate-docs
cd ../react-core
pnpm generate-docs
cd ../react
pnpm generate-docs
cd ../..
- name: Generate Snippets
run: pnpm generate-snippets
- name: Commit changes
run: |
git config --local user.email "[email protected]"
git config --local user.name "GitHub Action"
git status
git add packages/react/typedoc/documentation.json.gz
git add packages/react-core/typedoc/documentation.json.gz
git add packages/react-native/typedoc/documentation.json.gz
git add packages/sdk/typedoc/documentation.json.gz
git add packages/storage/typedoc/documentation.json.gz
git add packages/wallets/typedoc/documentation.json.gz
git add snippets/feature_snippets_react.json
git add snippets/feature_snippets_sdk.json
git add snippets/snippets.json
git commit -m "Commit Release Artifacts [skip ci]"
git push
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+7 -16
View File
@@ -1,3 +1,6 @@
# Using CUSTOM_GITHUB_TOKEN instead of GITHUB_TOKEN is required to trigger workflows in "Version Packages" PR created by changesets/action
# CUSTOM_GITHUB_TOKEN should be a PAT with write access to the repo and has to be created and set as a secret in the repo manually
name: Release Nightly & Stable
on:
@@ -25,6 +28,8 @@ jobs:
uses: actions/checkout@v3
with:
fetch-depth: 0
# Do not use the GITHUB_TOKEN by default
token: ${{ secrets.CUSTOM_GITHUB_TOKEN }}
- name: Setup bun
uses: oven-sh/setup-bun@v1
@@ -46,7 +51,7 @@ jobs:
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ secrets.CUSTOM_GITHUB_TOKEN }}
- name: Create @nightly release
if: steps.changesets.outputs.published != 'true'
@@ -56,18 +61,4 @@ jobs:
pnpm release:nightly
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Generate docs
if: steps.changesets.outputs.published == 'true'
run: |
pnpm typedoc
pnpm generate-docs
pnpm generate-snippets
git config --local user.email "[email protected]"
git config --local user.name "GitHub Action"
git add -A
git commit -m "doc automation: update JSON files [skip ci]"
git push
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ secrets.CUSTOM_GITHUB_TOKEN }}
+17 -4
View File
@@ -24,10 +24,23 @@ jobs:
- name: Check for Changes
id: git-check
run: |
git diff --exit-code || echo "step.git-check.outputs.changes=true" >> $GITHUB_ENV
if git diff --quiet; then
echo "CHANGES_FOUND=false" >> $GITHUB_ENV
else
echo "CHANGES_FOUND=true" >> $GITHUB_ENV
fi
- name: Create or Update sync-chains.md
if: env.CHANGES_FOUND == 'true'
run: |
echo '---' > .changeset/sync-chains.md
echo '"@thirdweb-dev/chains": patch' >> .changeset/sync-chains.md
echo '---' >> .changeset/sync-chains.md
echo '' >> .changeset/sync-chains.md
echo 'Synced Chains Package' >> .changeset/sync-chains.md
- name: Commit Changes
if: env.step.git-check.outputs.changes == 'true'
if: env.CHANGES_FOUND == 'true'
run: |
git config --local user.email "[email protected]"
git config --local user.name "GitHub Action"
@@ -35,10 +48,10 @@ jobs:
git commit -m "chore(chains): sync from db"
- name: Create or Update Pull Request
if: env.step.git-check.outputs.changes == 'true'
if: env.CHANGES_FOUND == 'true'
uses: peter-evans/create-pull-request@v3
with:
title: "chore(chains): update chains"
branch: "sync-chains" # You can specify a different branch name if you wish
branch: "sync-chains"
body: "This PR was automatically created by a GitHub Action. It updates the chains package with the latest changes from the database."
commit-message: "chore(chains): sync from db"
-1
View File
@@ -15,7 +15,6 @@
"e2e": "turbo run e2e",
"build": "turbo run build --filter=./packages/*",
"typedoc": "turbo run typedoc",
"generate-docs": "turbo run generate-docs",
"generate-snippets": "node ./scripts/generate-snippets/index.mjs",
"build:release": "turbo run build --force --filter=./packages/*",
"dev": "turbo run dev --no-cache --parallel --continue",
+44
View File
@@ -1,5 +1,49 @@
# @thirdweb-dev/auth
## 4.1.29
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@2.4.7
## 4.1.28
### Patch Changes
- Updated dependencies [[`3ba15366`](https://github.com/thirdweb-dev/js/commit/3ba15366be8b57e577b871c44e386978dc9d4a8a)]:
- @thirdweb-dev/wallets@2.4.6
## 4.1.27
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@2.4.5
## 4.1.26
### Patch Changes
- [#2106](https://github.com/thirdweb-dev/js/pull/2106) [`1a5d41cc`](https://github.com/thirdweb-dev/js/commit/1a5d41cc8afeef5f9882753473aad3bc0c7757ac) Thanks [@hsynlms](https://github.com/hsynlms)! - Add support for Next.js App Router
- Updated dependencies [[`a5653f07`](https://github.com/thirdweb-dev/js/commit/a5653f07f82e3f94e193d2b90c9d0c163223583c), [`bf90fa50`](https://github.com/thirdweb-dev/js/commit/bf90fa5005358e040475627ae23a474f7b263803), [`6fdade6c`](https://github.com/thirdweb-dev/js/commit/6fdade6c45f5d93fb3571d33720ab8103a7d002c), [`4d89dc1e`](https://github.com/thirdweb-dev/js/commit/4d89dc1efa2412b1e121cd14b1e2e72c667fceb0)]:
- @thirdweb-dev/wallets@2.4.4
## 4.1.25
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@2.4.3
## 4.1.24
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@2.4.2
## 4.1.23
### Patch Changes
+5 -5
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/auth",
"version": "4.1.23",
"version": "4.1.29",
"main": "dist/thirdweb-dev-auth.cjs.js",
"module": "dist/thirdweb-dev-auth.esm.js",
"browser": {
@@ -97,7 +97,7 @@
"@types/mocha": "^10.0.0",
"@types/uuid": "^9.0.5",
"@typescript-eslint/eslint-plugin": "^6.2.0",
"@typescript-eslint/parser": "^6.2.0",
"@typescript-eslint/parser": "^6.19.1",
"chai": "^4.3.6",
"cookie-parser": "^1.4.6",
"eslint": "^8.56.0",
@@ -109,9 +109,9 @@
"eslint-plugin-tsdoc": "^0.2.16",
"ethers": "^5.7.2",
"express": "^4.18.1",
"fastify": "^4.24.2",
"fastify": "^4.25.2",
"mocha": "^10.2.0",
"next": "^12.3.4",
"next": "^13.4",
"next-auth": "^4.22.3",
"prettier": "^3.1.1",
"typescript": "^5.3.3"
@@ -120,7 +120,7 @@
"cookie-parser": "^1.4.6",
"ethers": "^5",
"express": "^4",
"fastify": "^4.24.2",
"fastify": "^4.25.2",
"next": "^12 || ^13 || ^14",
"next-auth": "^4"
},
+62
View File
@@ -0,0 +1,62 @@
import type { GenericAuthWallet } from "@thirdweb-dev/wallets";
import { z } from "zod";
import { Json, LoginPayloadOutputSchema, User } from "../../core";
export const PayloadBodySchema = z.object({
address: z.string(),
chainId: z.string().optional(),
});
export const ActiveBodySchema = z.object({
address: z.string(),
});
export const LoginPayloadBodySchema = z.object({
payload: LoginPayloadOutputSchema,
});
export type ThirdwebAuthRoute =
| "payload"
| "login"
| "logout"
| "user"
| "switch-account";
export type ThirdwebAuthUser<
TData extends Json = Json,
TSession extends Json = Json,
> = User<TSession> & {
data?: TData;
};
export type ThirdwebAuthConfigShared = {
domain: string;
wallet: GenericAuthWallet;
authOptions?: {
statement?: string;
uri?: string;
version?: string;
chainId?: string;
resources?: string[];
validateNonce?:
| ((nonce: string) => void)
| ((nonce: string) => Promise<void>);
validateTokenId?:
| ((tokenId: string) => void)
| ((tokenId: string) => Promise<void>);
loginPayloadDurationInSeconds?: number;
tokenDurationInSeconds?: number;
refreshIntervalInSeconds?: number;
};
cookieOptions?: {
domain?: string;
path?: string;
sameSite?: "lax" | "strict" | "none";
secure?: boolean;
};
};
export type ThirdwebNextContext = {
params?: Record<string, string | string[]>
};
+18 -74
View File
@@ -1,77 +1,21 @@
import { Json, ThirdwebAuth as ThirdwebAuthSDK } from "../core";
import { getUser } from "./helpers/user";
import payloadHandler from "./routes/payload";
import loginHandler from "./routes/login";
import logoutHandler from "./routes/logout";
import userHandler from "./routes/user";
import switchAccountHandler from "./routes/switch-account";
import {
// Next.js Pages Router support
// default and backward compatible
export { ThirdwebAuth } from './router-pages'
export type {
ThirdwebAuthConfig,
ThirdwebAuthContext,
} from './router-pages/types'
// Next.js App Router support
export { ThirdwebAuth as ThirdwebAuthAppRouter } from './router-app'
export type {
ThirdwebAuthConfig as ThirdwebAuthAppRouterConfig,
ThirdwebAuthContext as ThirdwebAuthAppRouterContext,
} from './router-app/types'
// common types
export type {
ThirdwebAuthRoute,
} from "./types";
import { NextRequest } from "next/server";
import {
GetServerSidePropsContext,
NextApiRequest,
NextApiResponse,
} from "next/types";
export * from "./types";
async function ThirdwebAuthRouter(
req: NextApiRequest,
res: NextApiResponse,
ctx: ThirdwebAuthContext,
) {
// Catch-all route must be named with [...thirdweb]
const { thirdweb } = req.query;
const action = thirdweb?.[0] as ThirdwebAuthRoute;
switch (action) {
case "payload":
return await payloadHandler(req, res, ctx);
case "login":
return await loginHandler(req, res, ctx);
case "user":
return await userHandler(req, res, ctx);
case "logout":
return await logoutHandler(req, res, ctx);
case "switch-account":
return await switchAccountHandler(req, res, ctx);
default:
return res.status(400).json({
message: "Invalid route for authentication.",
});
}
}
export function ThirdwebAuth<
TData extends Json = Json,
TSession extends Json = Json,
>(cfg: ThirdwebAuthConfig<TData, TSession>) {
const ctx = {
...cfg,
auth: new ThirdwebAuthSDK(cfg.wallet, cfg.domain),
};
function ThirdwebAuthHandler(
...args: [] | [NextApiRequest, NextApiResponse]
) {
if (args.length === 0) {
return async (req: NextApiRequest, res: NextApiResponse) =>
await ThirdwebAuthRouter(req, res, ctx as ThirdwebAuthContext);
}
return ThirdwebAuthRouter(args[0], args[1], ctx as ThirdwebAuthContext);
}
return {
ThirdwebAuthHandler,
getUser: (
req: GetServerSidePropsContext["req"] | NextRequest | NextApiRequest,
) => {
return getUser<TData, TSession>(req, ctx);
},
};
}
ThirdwebAuthUser,
ThirdwebNextContext,
} from './common/types'
@@ -0,0 +1,75 @@
import { cookies, headers } from "next/headers";
import {
THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE,
THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX,
} from "../../../constants";
import type { Json } from "../../../core";
import type { ThirdwebAuthUser } from "../../common/types";
import type { ThirdwebAuthContext } from "../types";
export function getCookie(cookie: string): string | undefined {
return cookies().get(cookie)?.value;
}
export function getActiveCookie(): string | undefined {
const activeAccount = getCookie(THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE);
if (activeAccount) {
return `${THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX}_${activeAccount}`;
}
// If active account is not present, then use the old default
return THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX;
}
export function getToken(): string | undefined {
const headerList = headers();
if (headerList.has("authorization")) {
const authorizationHeader = headerList.get("authorization")?.split(" ");
if (authorizationHeader?.length === 2) {
return authorizationHeader[1];
}
}
const activeCookie = getActiveCookie();
if (!activeCookie) {
return undefined;
}
return getCookie(activeCookie);
}
export async function getUser<
TData extends Json = Json,
TSession extends Json = Json,
>(
ctx: ThirdwebAuthContext<TData, TSession>
): Promise<ThirdwebAuthUser<TData, TSession> | null> {
const token = getToken();
if (!token) {
return null;
}
let authenticatedUser: ThirdwebAuthUser<TData, TSession>;
try {
authenticatedUser = await ctx.auth.authenticate<TSession>(token, {
validateTokenId: async (tokenId: string) => {
if (ctx.authOptions?.validateTokenId) {
await ctx.authOptions?.validateTokenId(tokenId);
}
},
});
} catch (err) {
return null;
}
if (ctx.callbacks?.onUser) {
const data = await ctx.callbacks.onUser(authenticatedUser);
if (data) {
return { ...authenticatedUser, data };
}
}
return authenticatedUser;
}
@@ -0,0 +1,76 @@
import type { NextRequest } from "next/server";
import type { Json } from "../../core";
import { ThirdwebAuth as ThirdwebAuthSDK } from "../../core";
import { getUser } from "./helpers/user";
import payloadHandler from "./routes/payload";
import loginHandler from "./routes/login";
import logoutHandler from "./routes/logout";
import userHandler from "./routes/user";
import switchAccountHandler from "./routes/switch-account";
import type {
ThirdwebAuthConfig,
ThirdwebAuthContext,
} from "./types";
import type {
ThirdwebAuthRoute,
ThirdwebNextContext,
} from "../common/types";
export type {
ThirdwebAuthConfig,
ThirdwebAuthContext,
} from "./types";
export async function ThirdwebAuthRouter(
req: NextRequest,
ctx: ThirdwebNextContext,
authCtx: ThirdwebAuthContext,
) {
// Catch-all route must be named with [...thirdweb]
const action = ctx.params?.thirdweb?.[0] as ThirdwebAuthRoute;
switch (action) {
case "payload":
return await payloadHandler(req, authCtx);
case "login":
return await loginHandler(req, authCtx);
case "user":
return await userHandler(req, authCtx);
case "logout":
return await logoutHandler(req, authCtx);
case "switch-account":
return await switchAccountHandler(req, authCtx);
default:
return Response.json(
{ message: "Invalid route for authentication." },
{ status: 400},
);
}
}
export function ThirdwebAuth<
TData extends Json = Json,
TSession extends Json = Json,
>(cfg: ThirdwebAuthConfig<TData, TSession>) {
const authCtx = {
...cfg,
auth: new ThirdwebAuthSDK(cfg.wallet, cfg.domain),
};
async function ThirdwebAuthHandler(...args: [] | [NextRequest, ThirdwebNextContext]) {
if (args.length === 0) {
return async (req: NextRequest, ctx: ThirdwebNextContext): Promise<void | Response> =>
await ThirdwebAuthRouter(req, ctx, authCtx as ThirdwebAuthContext);
}
return ThirdwebAuthRouter(args[0], args[1], authCtx as ThirdwebAuthContext);
}
return {
ThirdwebAuthHandler,
getUser: async () => {
return await getUser<TData, TSession>(authCtx);
},
};
}
@@ -0,0 +1,123 @@
import type { NextRequest } from "next/server";
import { NextResponse } from "next/server";
import {
THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE,
THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX,
} from "../../../constants";
import type { GenerateOptionsWithOptionalDomain } from "../../../core";
import type { ThirdwebAuthContext } from "../types";
import { LoginPayloadBodySchema } from "../types";
export default async function handler(
req: NextRequest,
ctx: ThirdwebAuthContext,
) {
if (req.method !== "POST") {
return Response.json(
{ error: "Invalid method. Only POST supported" },
{ status: 405 },
);
}
const reqBody = await req.json();
const parsedPayload = LoginPayloadBodySchema.safeParse(reqBody);
// Get signed login payload from the frontend
if (!parsedPayload.success) {
return Response.json(
{ error: "Invalid login payload" },
{ status: 400 },
);
}
const payload = parsedPayload.data.payload;
const validateNonce = async (nonce: string) => {
if (ctx.authOptions?.validateNonce) {
await ctx.authOptions?.validateNonce(nonce);
}
};
const getSession = async (address: string) => {
if (ctx.callbacks?.onLogin) {
return ctx.callbacks.onLogin(address);
}
};
const expirationTime = ctx.authOptions?.tokenDurationInSeconds
? new Date(Date.now() + 1000 * ctx.authOptions.tokenDurationInSeconds)
: undefined;
const generateOptions: GenerateOptionsWithOptionalDomain = {
verifyOptions: {
statement: ctx.authOptions?.statement,
uri: ctx.authOptions?.uri,
version: ctx.authOptions?.version,
chainId: ctx.authOptions?.chainId,
validateNonce,
resources: ctx.authOptions?.resources,
},
expirationTime,
session: getSession,
};
let token: string;
try {
// Generate an access token with the SDK using the signed payload
token = await ctx.auth.generate(payload, generateOptions);
} catch (err: any) {
if (err.message) {
return Response.json(
{ error: err.message },
{ status: 400 },
);
} else if (typeof err === "string") {
return Response.json(
{ error: err },
{ status: 400 },
);
} else {
return Response.json(
{ error: "Invalid login payload" },
{ status: 400 },
);
}
}
if (ctx.callbacks?.onToken) {
await ctx.callbacks.onToken(token);
}
const {
payload: { exp },
} = ctx.auth.parseToken(token);
// Securely set httpOnly cookie on request to prevent XSS on frontend
// And set path to / to enable thirdweb_auth_token usage on all endpoints
const response = NextResponse.json({ token }, { status: 200 });
response.cookies.set({
name: `${THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX}_${payload.payload.address}`,
value: token,
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: new Date(exp * 1000),
httpOnly: true,
secure: ctx.cookieOptions?.secure || true,
});
response.cookies.set({
name: THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE,
value: payload.payload.address,
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: new Date(exp * 1000),
httpOnly: true,
secure: ctx.cookieOptions?.secure || true,
});
// Send token in body and as cookie for frontend and backend use cases
return response;
}
@@ -0,0 +1,51 @@
import type { NextRequest } from "next/server";
import { NextResponse } from "next/server";
import { getActiveCookie, getUser } from "../helpers/user";
import type { ThirdwebAuthContext } from "../types";
export default async function handler(
req: NextRequest,
ctx: ThirdwebAuthContext,
) {
if (req.method !== "POST") {
return Response.json(
{ error: "Invalid method. Only POST supported" },
{ status: 405 },
);
}
const activeCookie = getActiveCookie();
if (!activeCookie) {
return Response.json(
{ error: "No logged in user to logout" },
{ status: 400 },
);
}
if (ctx.callbacks?.onLogout) {
const user = await getUser(ctx);
if (user) {
await ctx.callbacks.onLogout(user);
}
}
// Set the access token to 'none' and expire in 5 seconds
const response = NextResponse.json(
{ message: "Successfully logged out" },
{ status: 200 },
);
response.cookies.set({
name: activeCookie,
value: '',
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: new Date(Date.now() + 5 * 1000),
httpOnly: true,
secure: ctx.cookieOptions?.secure || true,
});
return response;
}
@@ -0,0 +1,44 @@
import type { NextRequest } from "next/server";
import type { ThirdwebAuthContext } from "../types";
import { PayloadBodySchema } from "../types";
export default async function handler(
req: NextRequest,
ctx: ThirdwebAuthContext,
) {
if (req.method !== "POST") {
return Response.json(
{ error: "Invalid method. Only POST supported" },
{ status: 405 },
);
}
const reqBody = await req.json();
const parsedPayload = PayloadBodySchema.safeParse(reqBody);
if (!parsedPayload.success) {
return Response.json(
{ error: "Please provide an address" },
{ status: 400 },
);
}
// TODO: Add nonce generation + custom expiration + invalid before
const payload = await ctx.auth.payload({
address: parsedPayload.data.address,
statement: ctx.authOptions?.statement,
uri: ctx.authOptions?.uri,
version: ctx.authOptions?.version,
chainId: parsedPayload.data.chainId || ctx.authOptions?.chainId,
resources: ctx.authOptions?.resources,
expirationTime: ctx.authOptions?.loginPayloadDurationInSeconds
? new Date(
Date.now() + 1000 * ctx.authOptions.loginPayloadDurationInSeconds,
)
: undefined,
});
const response = Response.json({ payload }, { status: 200 });
return response;
}
@@ -0,0 +1,68 @@
import type { NextRequest } from "next/server";
import { NextResponse } from "next/server";
import type { ThirdwebAuthContext } from "../types";
import { ActiveBodySchema } from "../types";
import {
THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE,
THIRDWEB_AUTH_DEFAULT_TOKEN_DURATION_IN_SECONDS,
THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX,
} from "../../../constants";
import { getCookie } from "../helpers/user";
export default async function handler(
req: NextRequest,
ctx: ThirdwebAuthContext,
) {
if (req.method !== "POST") {
return Response.json(
{ error: "Invalid method. Only POST supported" },
{ status: 405 },
);
}
const reqBody = await req.json();
const parsedPayload = ActiveBodySchema.safeParse(reqBody);
if (!parsedPayload.success) {
return Response.json(
{ error: "Please provide an address" },
{ status: 400 },
);
}
let cookieExpiration: Date;
const cookie = getCookie(`${THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX}_${parsedPayload.data.address}`);
if (cookie) {
// If the new account is already logged in, get the expiration time from the cookie
const {
payload: { exp },
} = ctx.auth.parseToken(cookie);
cookieExpiration = new Date(exp * 1000);
} else if (ctx.authOptions?.tokenDurationInSeconds) {
// Otherwise, if we have a token duration in seconds, set it to that
cookieExpiration = new Date(
Date.now() + 1000 * ctx.authOptions.tokenDurationInSeconds,
);
} else {
// Otherwise, just default to 24 hours
cookieExpiration = new Date(
Date.now() + 1000 * THIRDWEB_AUTH_DEFAULT_TOKEN_DURATION_IN_SECONDS,
);
}
const response = NextResponse.json('', { status: 200 });
response.cookies.set({
name: THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE,
value: parsedPayload.data.address,
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: cookieExpiration,
httpOnly: true,
secure: ctx.cookieOptions?.secure || true,
});
return response;
}
@@ -0,0 +1,76 @@
import type { NextRequest } from "next/server";
import { NextResponse } from "next/server";
import {
THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE,
THIRDWEB_AUTH_DEFAULT_REFRESH_INTERVAL_IN_SECONDS,
THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX,
} from "../../../constants";
import { getToken, getUser } from "../helpers/user";
import type { ThirdwebAuthContext } from "../types";
export default async function handler(
req: NextRequest,
ctx: ThirdwebAuthContext,
) {
if (req.method !== "GET") {
return Response.json(
{ error: "Invalid method. Only GET supported" },
{ status: 405 },
);
}
const user = await getUser(ctx);
const response = NextResponse.json(user, { status: 200 });
// Importantly, make sure the user was actually logged in before refreshing
if (user) {
const token = getToken();
if (token) {
const payload = ctx.auth.parseToken(token);
const refreshDate = ctx.authOptions?.refreshIntervalInSeconds
? new Date(
payload.payload.iat * 1000 +
ctx.authOptions.refreshIntervalInSeconds * 1000,
)
: new Date(
payload.payload.iat * 1000 +
THIRDWEB_AUTH_DEFAULT_REFRESH_INTERVAL_IN_SECONDS * 1000,
);
if (new Date() > refreshDate) {
const expirationTime = ctx.authOptions?.tokenDurationInSeconds
? new Date(Date.now() + 1000 * ctx.authOptions.tokenDurationInSeconds)
: undefined;
const refreshedToken = await ctx.auth.refresh(token, expirationTime);
const refreshedPayload = ctx.auth.parseToken(refreshedToken);
response.cookies.set({
name: `${THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX}_${user.address}`,
value: refreshedToken,
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: new Date(refreshedPayload.payload.exp * 1000),
httpOnly: true,
secure: ctx.cookieOptions?.secure || true,
});
response.cookies.set({
name: THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE,
value: user.address,
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: new Date(refreshedPayload.payload.exp * 1000),
httpOnly: true,
secure: ctx.cookieOptions?.secure || true,
});
}
}
}
return response;
}
@@ -0,0 +1,35 @@
import type { Json, ThirdwebAuth, User } from "../../../core";
import type { ThirdwebAuthConfigShared } from '../../common/types'
export {
ActiveBodySchema,
LoginPayloadBodySchema,
PayloadBodySchema
} from '../../common/types'
export type ThirdwebAuthConfig<
TData extends Json = Json,
TSession extends Json = Json,
> = ThirdwebAuthConfigShared & {
callbacks?: {
onLogin?:
| ((address: string) => void | TSession)
| ((address: string) => Promise<void | TSession>);
onToken?:
| ((token: string) => void)
| ((token: string) => Promise<void>);
onUser?:
| ((user: User<TSession>) => void | TData)
| ((user: User<TSession>) => Promise<void | TData>);
onLogout?:
| ((user: User) => void)
| ((user: User) => Promise<void>);
};
};
export type ThirdwebAuthContext<
TData extends Json = Json,
TSession extends Json = Json,
> = Omit<Omit<ThirdwebAuthConfig<TData, TSession>, "wallet">, "domain"> & {
auth: ThirdwebAuth;
};
@@ -1,18 +1,19 @@
import {
THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE,
THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX,
} from "../../constants";
import { Json } from "../../core";
import { ThirdwebAuthContext, ThirdwebAuthUser } from "../types";
import { GetServerSidePropsContext, NextApiRequest } from "next";
import { NextRequest } from "next/server";
} from "../../../constants";
import type { Json } from "../../../core";
import type { ThirdwebAuthContext } from "../types";
import type { ThirdwebAuthUser } from "../../common/types";
import type { GetServerSidePropsContext, NextApiRequest } from "next";
import type { NextRequest } from "next/server";
export function getCookie(
req: GetServerSidePropsContext["req"] | NextRequest | NextApiRequest,
cookie: string,
): string | undefined {
if (typeof req.cookies.get === "function") {
return req.cookies.get(cookie);
return req.cookies.get(cookie)?.value;
}
return (req.cookies as any)[cookie];
@@ -0,0 +1,77 @@
import { Json, ThirdwebAuth as ThirdwebAuthSDK } from "../../core";
import { getUser } from "./helpers/user";
import payloadHandler from "./routes/payload";
import loginHandler from "./routes/login";
import logoutHandler from "./routes/logout";
import userHandler from "./routes/user";
import switchAccountHandler from "./routes/switch-account";
import {
ThirdwebAuthConfig,
ThirdwebAuthContext,
ThirdwebAuthRoute,
} from "./types";
import { NextRequest } from "next/server";
import {
GetServerSidePropsContext,
NextApiRequest,
NextApiResponse,
} from "next/types";
export * from "./types";
async function ThirdwebAuthRouter(
req: NextApiRequest,
res: NextApiResponse,
ctx: ThirdwebAuthContext,
) {
// Catch-all route must be named with [...thirdweb]
const { thirdweb } = req.query;
const action = thirdweb?.[0] as ThirdwebAuthRoute;
switch (action) {
case "payload":
return await payloadHandler(req, res, ctx);
case "login":
return await loginHandler(req, res, ctx);
case "user":
return await userHandler(req, res, ctx);
case "logout":
return await logoutHandler(req, res, ctx);
case "switch-account":
return await switchAccountHandler(req, res, ctx);
default:
return res.status(400).json({
message: "Invalid route for authentication.",
});
}
}
export function ThirdwebAuth<
TData extends Json = Json,
TSession extends Json = Json,
>(cfg: ThirdwebAuthConfig<TData, TSession>) {
const ctx = {
...cfg,
auth: new ThirdwebAuthSDK(cfg.wallet, cfg.domain),
};
function ThirdwebAuthHandler(
...args: [] | [NextApiRequest, NextApiResponse]
) {
if (args.length === 0) {
return async (req: NextApiRequest, res: NextApiResponse) =>
await ThirdwebAuthRouter(req, res, ctx as ThirdwebAuthContext);
}
return ThirdwebAuthRouter(args[0], args[1], ctx as ThirdwebAuthContext);
}
return {
ThirdwebAuthHandler,
getUser: (
req: GetServerSidePropsContext["req"] | NextRequest | NextApiRequest,
) => {
return getUser<TData, TSession>(req, ctx);
},
};
}
@@ -1,11 +1,12 @@
import {
THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE,
THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX,
} from "../../constants";
import { GenerateOptionsWithOptionalDomain } from "../../core";
import { LoginPayloadBodySchema, ThirdwebAuthContext } from "../types";
} from "../../../constants";
import type { GenerateOptionsWithOptionalDomain } from "../../../core";
import type { ThirdwebAuthContext } from "../types";
import { LoginPayloadBodySchema } from "../types";
import { serialize } from "cookie";
import { NextApiRequest, NextApiResponse } from "next";
import type { NextApiRequest, NextApiResponse } from "next";
export default async function handler(
req: NextApiRequest,
@@ -1,7 +1,7 @@
import { getActiveCookie, getUser } from "../helpers/user";
import { ThirdwebAuthContext } from "../types";
import type { ThirdwebAuthContext } from "../types";
import { serialize } from "cookie";
import { NextApiRequest, NextApiResponse } from "next";
import type { NextApiRequest, NextApiResponse } from "next";
export default async function handler(
req: NextApiRequest,
@@ -10,14 +10,14 @@ export default async function handler(
) {
if (req.method !== "POST") {
return res.status(405).json({
error: "Invalid method. Only POST supported.",
error: "Invalid method. Only POST supported",
});
}
const activeCookie = getActiveCookie(req);
if (!activeCookie) {
return res.status(400).json({
error: "No logged in user to logout.",
error: "No logged in user to logout",
});
}
@@ -1,5 +1,6 @@
import { PayloadBodySchema, ThirdwebAuthContext } from "../types";
import { NextApiRequest, NextApiResponse } from "next";
import type { ThirdwebAuthContext } from "../types";
import { PayloadBodySchema } from "../types";
import type { NextApiRequest, NextApiResponse } from "next";
export default async function handler(
req: NextApiRequest,
@@ -8,7 +9,7 @@ export default async function handler(
) {
if (req.method !== "POST") {
return res.status(405).json({
error: "Invalid method. Only POST supported.",
error: "Invalid method. Only POST supported",
});
}
@@ -1,12 +1,13 @@
import { serialize } from "cookie";
import { getCookie } from "../helpers/user";
import { ActiveBodySchema, ThirdwebAuthContext } from "../types";
import { NextApiRequest, NextApiResponse } from "next";
import type { ThirdwebAuthContext } from "../types";
import { ActiveBodySchema } from "../types";
import type { NextApiRequest, NextApiResponse } from "next";
import {
THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE,
THIRDWEB_AUTH_DEFAULT_TOKEN_DURATION_IN_SECONDS,
THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX,
} from "../../constants";
} from "../../../constants";
export default async function handler(
req: NextApiRequest,
@@ -15,7 +16,7 @@ export default async function handler(
) {
if (req.method !== "POST") {
return res.status(405).json({
error: "Invalid method. Only POST supported.",
error: "Invalid method. Only POST supported",
});
}
@@ -3,10 +3,10 @@ import {
THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE,
THIRDWEB_AUTH_DEFAULT_REFRESH_INTERVAL_IN_SECONDS,
THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX,
} from "../../constants";
} from "../../../constants";
import { getToken, getUser } from "../helpers/user";
import { ThirdwebAuthContext } from "../types";
import { NextApiRequest, NextApiResponse } from "next";
import type { ThirdwebAuthContext } from "../types";
import type { NextApiRequest, NextApiResponse } from "next";
export default async function handler(
req: NextApiRequest,
@@ -14,8 +14,8 @@ export default async function handler(
ctx: ThirdwebAuthContext,
) {
if (req.method !== "GET") {
return res.status(400).json({
error: "Invalid method. Only GET supported.",
return res.status(405).json({
error: "Invalid method. Only GET supported",
});
}
@@ -0,0 +1,48 @@
import type { Json, ThirdwebAuth, User } from "../../../core";
import type { GetServerSidePropsContext, NextApiRequest } from "next";
import type { NextRequest } from "next/server";
import type { ThirdwebAuthConfigShared } from '../../common/types'
export {
ActiveBodySchema,
LoginPayloadBodySchema,
PayloadBodySchema
} from '../../common/types'
type RequestType =
| GetServerSidePropsContext["req"]
| NextRequest
| NextApiRequest;
export type ThirdwebAuthConfig<
TData extends Json = Json,
TSession extends Json = Json,
> = ThirdwebAuthConfigShared & {
callbacks?: {
onLogin?:
| ((address: string, req: NextApiRequest) => void | TSession)
| ((address: string, req: NextApiRequest) => Promise<void | TSession>);
onToken?:
| ((token: string, req: NextApiRequest) => void)
| ((token: string, req: NextApiRequest) => Promise<void>);
onUser?:
| (<TRequestType extends RequestType = RequestType>(
user: User<TSession>,
req: TRequestType,
) => void | TData)
| (<TRequestType extends RequestType = RequestType>(
user: User<TSession>,
req: TRequestType,
) => Promise<void | TData>);
onLogout?:
| ((user: User, req: NextApiRequest) => void)
| ((user: User, req: NextApiRequest) => Promise<void>);
};
};
export type ThirdwebAuthContext<
TData extends Json = Json,
TSession extends Json = Json,
> = Omit<Omit<ThirdwebAuthConfig<TData, TSession>, "wallet">, "domain"> & {
auth: ThirdwebAuth;
};
-94
View File
@@ -1,94 +0,0 @@
import { Json, LoginPayloadOutputSchema, ThirdwebAuth, User } from "../../core";
import type { GenericAuthWallet } from "@thirdweb-dev/wallets";
import { GetServerSidePropsContext, NextApiRequest } from "next";
import { NextRequest } from "next/server";
import { z } from "zod";
export const PayloadBodySchema = z.object({
address: z.string(),
chainId: z.string().optional(),
});
export const ActiveBodySchema = z.object({
address: z.string(),
});
export const LoginPayloadBodySchema = z.object({
payload: LoginPayloadOutputSchema,
});
type RequestType =
| GetServerSidePropsContext["req"]
| NextRequest
| NextApiRequest;
export type ThirdwebAuthRoute =
| "payload"
| "login"
| "logout"
| "user"
| "switch-account";
export type ThirdwebAuthUser<
TData extends Json = Json,
TSession extends Json = Json,
> = User<TSession> & {
data?: TData;
};
export type ThirdwebAuthConfig<
TData extends Json = Json,
TSession extends Json = Json,
> = {
domain: string;
wallet: GenericAuthWallet;
authOptions?: {
statement?: string;
uri?: string;
version?: string;
chainId?: string;
resources?: string[];
validateNonce?:
| ((nonce: string) => void)
| ((nonce: string) => Promise<void>);
validateTokenId?:
| ((tokenId: string) => void)
| ((tokenId: string) => Promise<void>);
loginPayloadDurationInSeconds?: number;
tokenDurationInSeconds?: number;
refreshIntervalInSeconds?: number;
};
cookieOptions?: {
domain?: string;
path?: string;
sameSite?: "lax" | "strict" | "none";
secure?: boolean;
};
callbacks?: {
onLogin?:
| ((address: string, req: NextApiRequest) => void | TSession)
| ((address: string, req: NextApiRequest) => Promise<void | TSession>);
onToken?:
| ((token: string, req: NextApiRequest) => void)
| ((token: string, req: NextApiRequest) => Promise<void>);
onUser?:
| (<TRequestType extends RequestType = RequestType>(
user: User<TSession>,
req: TRequestType,
) => void | TData)
| (<TRequestType extends RequestType = RequestType>(
user: User<TSession>,
req: TRequestType,
) => Promise<void | TData>);
onLogout?:
| ((user: User, req: NextApiRequest) => void)
| ((user: User, req: NextApiRequest) => Promise<void>);
};
};
export type ThirdwebAuthContext<
TData extends Json = Json,
TSession extends Json = Json,
> = Omit<Omit<ThirdwebAuthConfig<TData, TSession>, "wallet">, "domain"> & {
auth: ThirdwebAuth;
};
+38
View File
@@ -1,5 +1,43 @@
# @thirdweb-dev/chains
## 0.1.69
### Patch Changes
- [#2247](https://github.com/thirdweb-dev/js/pull/2247) [`374671fd`](https://github.com/thirdweb-dev/js/commit/374671fd9ac97a93263b09c6c0a53cfd129881d7) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
## 0.1.68
### Patch Changes
- [#2245](https://github.com/thirdweb-dev/js/pull/2245) [`771bd1e1`](https://github.com/thirdweb-dev/js/commit/771bd1e1b280681992195103c22aafa1fb98f7e0) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
## 0.1.67
### Patch Changes
- [#2243](https://github.com/thirdweb-dev/js/pull/2243) [`39e79282`](https://github.com/thirdweb-dev/js/commit/39e79282acb70959ba8140c779fa521c41c80a5f) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
- [#2240](https://github.com/thirdweb-dev/js/pull/2240) [`69c3eb91`](https://github.com/thirdweb-dev/js/commit/69c3eb910feb2265833a07b7472e32fac5a79d90) Thanks [@jnsdls](https://github.com/jnsdls)! - sync chains
## 0.1.66
### Patch Changes
- [#2232](https://github.com/thirdweb-dev/js/pull/2232) [`627d2099`](https://github.com/thirdweb-dev/js/commit/627d20992770670ab0c954ceea0b8679ce4f3088) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Update chains
## 0.1.65
### Patch Changes
- [#2203](https://github.com/thirdweb-dev/js/pull/2203) [`3f2ee85a`](https://github.com/thirdweb-dev/js/commit/3f2ee85a1ab70e74aefe7f458379a2ccaf4058a9) Thanks [@iketw](https://github.com/iketw)! - Syncs Chains
## 0.1.64
### Patch Changes
- [#2187](https://github.com/thirdweb-dev/js/pull/2187) [`e21f7bb1`](https://github.com/thirdweb-dev/js/commit/e21f7bb171334fa3003c954060e60c1ce8c1228f) Thanks [@gerrysaporito](https://github.com/gerrysaporito)! - synced chains package with chains db
## 0.1.63
### Patch Changes
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 103454,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "Masa Testnet",
"nativeCurrency": {
"name": "Masa Testnet Token",
"symbol": "tMASA",
"decimals": 18
},
"networkId": 103454,
"redFlags": [],
"rpc": [
"https://masa-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://103454.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/masatestne/testnet/rpc"
],
"shortName": "Masa Testnet",
"slug": "masa-testnet",
"testnet": true
} as const satisfies Chain;
+3 -2
View File
@@ -42,11 +42,12 @@ export default {
"https://humans-ai.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1089.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://jsonrpc.humans.nodestake.top",
"https://humans-mainnet-evm.itrocket.net:443",
"https://humans-mainnet-evm.itrocket.net",
"https://humans-evm-rpc.staketab.org:443",
"https://evm.humans.stakepool.dev.br",
"https://mainnet-humans-evm.konsortech.xyz",
"https://evm-rpc.mainnet.humans.zone"
"https://evm-rpc.mainnet.humans.zone",
"https://json-rpc.humans.bh.rocks"
],
"shortName": "humans",
"slug": "humans-ai",
+24
View File
@@ -0,0 +1,24 @@
import type { Chain } from "../src/types";
export default {
"chain": "Dymension",
"chainId": 1100,
"explorers": [],
"faucets": [],
"infoURL": "https://dymension.xyz",
"name": "Dymension",
"nativeCurrency": {
"name": "DYM",
"symbol": "DYM",
"decimals": 18
},
"networkId": 1100,
"rpc": [
"https://dymension.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1100.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://dymension-evm.blockpi.network/v1/rpc/public"
],
"shortName": "dymension",
"slug": "dymension",
"status": "incubating",
"testnet": false
} as const satisfies Chain;
+8
View File
@@ -18,6 +18,13 @@ export default {
"faucets": [
"https://app.optimism.io/faucet"
],
"features": [],
"icon": {
"url": "ipfs://QmcxZHpyJa8T4i63xqjPYrZ6tKrt55tZJpbXcjSDKuKaf9/optimism/512.png",
"width": 512,
"height": 512,
"format": "png"
},
"infoURL": "https://optimism.io",
"name": "OP Sepolia Testnet",
"nativeCurrency": {
@@ -26,6 +33,7 @@ export default {
"decimals": 18
},
"networkId": 11155420,
"redFlags": [],
"rpc": [
"https://op-sepolia-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://11155420.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
+10 -4
View File
@@ -4,9 +4,14 @@ export default {
"chainId": 11297108099,
"explorers": [
{
"name": "Palm Testnet Explorer",
"url": "https://explorer.palm-uat.xyz",
"name": "Chainlens",
"url": "https://testnet.palm.chainlens.com",
"standard": "EIP3091"
},
{
"name": "Dora",
"url": "https://www.ondora.xyz/network/palm-testnet",
"standard": "none"
}
],
"faucets": [],
@@ -16,7 +21,7 @@ export default {
"height": 72,
"format": "svg"
},
"infoURL": "https://palm.io",
"infoURL": "https://palm.network",
"name": "Palm Testnet",
"nativeCurrency": {
"name": "PALM",
@@ -27,7 +32,8 @@ export default {
"rpc": [
"https://palm-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://11297108099.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://palm-testnet.infura.io/v3/${INFURA_API_KEY}"
"https://palm-testnet.infura.io/v3/${INFURA_API_KEY}",
"https://palm-testnet.public.blastapi.io"
],
"shortName": "tpalm",
"slip44": 1,
+10 -4
View File
@@ -4,9 +4,14 @@ export default {
"chainId": 11297108109,
"explorers": [
{
"name": "Palm Explorer",
"url": "https://explorer.palm.io",
"name": "Chainlens",
"url": "https://palm.chainlens.com",
"standard": "EIP3091"
},
{
"name": "Dora",
"url": "https://www.ondora.xyz/network/palm",
"standard": "none"
}
],
"faucets": [],
@@ -16,7 +21,7 @@ export default {
"height": 72,
"format": "svg"
},
"infoURL": "https://palm.io",
"infoURL": "https://palm.network",
"name": "Palm",
"nativeCurrency": {
"name": "PALM",
@@ -27,7 +32,8 @@ export default {
"rpc": [
"https://palm.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://11297108109.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://palm-mainnet.infura.io/v3/${INFURA_API_KEY}"
"https://palm-mainnet.infura.io/v3/${INFURA_API_KEY}",
"https://palm-mainnet.public.blastapi.io"
],
"shortName": "palm",
"slug": "palm",
+35
View File
@@ -0,0 +1,35 @@
import type { Chain } from "../src/types";
export default {
"chain": "BEVM",
"chainId": 11503,
"explorers": [
{
"name": "bevm testnet scan",
"url": "https://scan-testnet.bevm.io",
"standard": "none"
}
],
"faucets": [],
"icon": {
"url": "ipfs://QmfMXiYn4xF9JwdjaqM5YKhqoByox51XvnL68VvKJS6yyu",
"width": 1000,
"height": 1000,
"format": "png"
},
"infoURL": "https://bevm.io",
"name": "BEVM Testnet",
"nativeCurrency": {
"name": "BTC",
"symbol": "BTC",
"decimals": 18
},
"networkId": 11503,
"rpc": [
"https://bevm-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://11503.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet.bevm.io/"
],
"shortName": "bevm",
"slug": "bevm-testnet",
"testnet": true
} as const satisfies Chain;
+37
View File
@@ -0,0 +1,37 @@
import type { Chain } from "../src/types";
export default {
"chain": "MetaDAP",
"chainId": 119139,
"explorers": [
{
"name": "MetaDAP Enterprise Testnet explorer",
"url": "https://explorer.testnet.chain.metadap.io",
"standard": "none"
}
],
"faucets": [],
"icon": {
"url": "ipfs://QmcCFUTStKKJKfzTwrjfMFoVaPCMsvAvWXRdDkYMvCkEs3",
"width": 800,
"height": 800,
"format": "svg"
},
"infoURL": "https://metadap.io/",
"name": "MetaDAP Enterprise Testnet",
"nativeCurrency": {
"name": "DAP",
"symbol": "DAP",
"decimals": 18
},
"networkId": 119139,
"rpc": [
"https://metadap-enterprise-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://119139.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.testnet.chain.metadap.io",
"wss://rpc-ws.testnet.chain.metadap.io"
],
"shortName": "MetaDAP-T",
"slug": "metadap-enterprise-testnet",
"testnet": true,
"title": "MetaDAP Enterprise Testnet"
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "1220",
"chainId": 1220,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "ipfs://QmXo2p1i4zsbTNEu41EjjrhdmbKFDGHEHeADXZ3x2fgNKE/1682003789585.jpeg",
"width": 3600,
"height": 3600,
"format": "jpeg"
},
"infoURL": "https://flagblockchain.com/",
"name": "Flag Testnet",
"nativeCurrency": {
"name": "FLAG",
"symbol": "FLAG",
"decimals": 18
},
"networkId": 1220,
"redFlags": [],
"rpc": [
"https://flag-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1220.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet.flagscan.io"
],
"shortName": "Flag",
"slug": "flag-testnet",
"testnet": true
} as const satisfies Chain;
+42
View File
@@ -0,0 +1,42 @@
import type { Chain } from "../src/types";
export default {
"chain": "INNOVATOR",
"chainId": 129,
"explorers": [
{
"name": "Innovator Explorer",
"url": "https://evm.innovatorchain.com",
"standard": "none",
"icon": {
"url": "ipfs://QmYtUimyqHkkFxYdbXXRbUqNg2VLPUg6Uu2C2nmFWowiZM",
"width": 551,
"height": 540,
"format": "png"
}
}
],
"faucets": [],
"features": [],
"icon": {
"url": "ipfs://QmVJBGeFYZXMQqicNdzctMfvPN5CrtRrfZBTw3CEpkCBsS",
"width": 1500,
"height": 1500,
"format": "png"
},
"infoURL": "https://innovatorchain.com",
"name": "Innovator Chain",
"nativeCurrency": {
"name": "INOV8",
"symbol": "INOV8",
"decimals": 18
},
"networkId": 129,
"rpc": [
"https://innovator-chain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://129.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.innovatorchain.com"
],
"shortName": "Innovator",
"slug": "innovator-chain",
"testnet": false
} as const satisfies Chain;
+35
View File
@@ -0,0 +1,35 @@
import type { Chain } from "../src/types";
export default {
"chain": "NEAR",
"chainId": 1313161560,
"explorers": [
{
"name": "PowerGold explorer",
"url": "https://explorer.powergold.aurora.dev",
"standard": "EIP3091"
}
],
"faucets": [],
"icon": {
"url": "ipfs://bafkreib2sabb6vgfoskobp2wdr6if7v6s34f2xwjecfceui6qhjudmu4u4",
"width": 512,
"height": 512,
"format": "png"
},
"infoURL": "https://www.powergold.tech",
"name": "PowerGold",
"nativeCurrency": {
"name": "Ether",
"symbol": "ETH",
"decimals": 18
},
"networkId": 1313161560,
"rpc": [
"https://powergold.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1313161560.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://powergold.aurora.dev"
],
"shortName": "powergold",
"slug": "powergold",
"testnet": false
} as const satisfies Chain;
+40
View File
@@ -0,0 +1,40 @@
import type { Chain } from "../src/types";
export default {
"chain": "Rari",
"chainId": 1380012617,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "ipfs://QmdAX6818vZ3bAsPRv1DZGrc7qc8XTrgCnRLWrMecixhXb/RARI%20Chain%20Logomark%20Color.png",
"width": 512,
"height": 512,
"format": "png"
},
"infoURL": "https://rari-mainnet.caldera.dev/",
"name": "Rari Mainnet",
"nativeCurrency": {
"name": "Ether",
"symbol": "ETH",
"decimals": 18
},
"networkId": 1380012617,
"parent": {
"type": "L2",
"chain": "eip155-1",
"bridges": [
{
"url": "https://rari.calderabridge.xyz/"
}
]
},
"redFlags": [],
"rpc": [
"https://rari.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1380012617.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet.rpc.rarichain.org/http"
],
"shortName": "rari",
"slug": "rari",
"testnet": false
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 13838,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "XTraderlands Subnet Tesnet",
"nativeCurrency": {
"name": "XTraderlands Subnet Tesnet Token",
"symbol": "XTDL",
"decimals": 18
},
"networkId": 13838,
"redFlags": [],
"rpc": [
"https://xtraderlands-subnet-tesnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://13838.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/xtraderlan/testnet/rpc"
],
"shortName": "XTraderlands Subnet Tesnet",
"slug": "xtraderlands-subnet-tesnet",
"testnet": true
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 141221,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "Xantus Testnet",
"nativeCurrency": {
"name": "Xantus Testnet Token",
"symbol": "XAN",
"decimals": 18
},
"networkId": 141221,
"redFlags": [],
"rpc": [
"https://xantus-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://141221.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/xantustest/testnet/rpc"
],
"shortName": "Xantus Testnet",
"slug": "xantus-testnet",
"testnet": true
} as const satisfies Chain;
+7 -7
View File
@@ -4,8 +4,8 @@ export default {
"chainId": 1501,
"explorers": [
{
"name": "bevm scan",
"url": "https://scan.bevm.io",
"name": "bevm canary scan",
"url": "https://scan-canary.bevm.io",
"standard": "none"
}
],
@@ -18,7 +18,7 @@ export default {
"format": "png"
},
"infoURL": "https://chainx.org",
"name": "BEVM",
"name": "BEVM Canary",
"nativeCurrency": {
"name": "BTC",
"symbol": "BTC",
@@ -27,12 +27,12 @@ export default {
"networkId": 1501,
"redFlags": [],
"rpc": [
"https://bevm.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://bevm-canary.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1501.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc-1.bevm.io/",
"https://rpc-2.bevm.io/"
"https://rpc-canary-1.bevm.io/",
"https://rpc-canary-2.bevm.io/"
],
"shortName": "chainx",
"slug": "bevm",
"slug": "bevm-canary",
"testnet": false
} as const satisfies Chain;
+37
View File
@@ -0,0 +1,37 @@
import type { Chain } from "../src/types";
export default {
"chain": "Puppynet Shibarium",
"chainId": 157,
"explorers": [
{
"name": "puppyscan",
"url": "https://puppyscan.shib.io",
"standard": "none"
}
],
"faucets": [
"https://beta.shibariumtech.com/faucet"
],
"icon": {
"url": "ipfs://QmYNVkoZgRjDBQzJz6kog9mA2yPzQFW2oSKvhnkwuBhLQE",
"width": 2000,
"height": 2000,
"format": "png"
},
"infoURL": "https://shibariumecosystem.com",
"name": "Puppynet Shibarium",
"nativeCurrency": {
"name": "BONE",
"symbol": "BONE",
"decimals": 18
},
"networkId": 157,
"rpc": [
"https://puppynet-shibarium.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://157.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://puppynet.shibrpc.com"
],
"shortName": "puppynet",
"slug": "puppynet-shibarium",
"testnet": false
} as const satisfies Chain;
+3 -1
View File
@@ -10,6 +10,7 @@ export default {
}
],
"faucets": [],
"features": [],
"icon": {
"url": "ipfs://QmcHdmVr5VRUJq13jnM6tgah5Ge7hn3Dm14eY6vwivJ5ui",
"width": 288,
@@ -24,6 +25,7 @@ export default {
"decimals": 18
},
"networkId": 167008,
"redFlags": [],
"rpc": [
"https://taiko-katla-l2.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://167008.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
@@ -32,5 +34,5 @@ export default {
"shortName": "tko-katla",
"slug": "taiko-katla-l2",
"status": "active",
"testnet": false
"testnet": true
} as const satisfies Chain;
+47
View File
@@ -0,0 +1,47 @@
import type { Chain } from "../src/types";
export default {
"chain": "ETH",
"chainId": 168587773,
"explorers": [
{
"name": "Blast Sepolia Explorer",
"url": "https://testnet.blastscan.io",
"standard": "EIP3091",
"icon": {
"url": "ipfs://bafybeifc2h3x7jgy4x4nmg2m54ghbvmkfu6oweujambwefzqzew5vujhsi",
"width": 400,
"height": 400,
"format": "jpg"
}
}
],
"faucets": [
"https://faucet.quicknode.com/blast/sepolia"
],
"icon": {
"url": "ipfs://bafybeifc2h3x7jgy4x4nmg2m54ghbvmkfu6oweujambwefzqzew5vujhsi",
"width": 400,
"height": 400,
"format": "jpg"
},
"infoURL": "https://blast.io/",
"name": "Blast Sepolia Testnet",
"nativeCurrency": {
"name": "Sepolia Ether",
"symbol": "ETH",
"decimals": 18
},
"networkId": 168587773,
"parent": {
"type": "L2",
"chain": "eip155-11155111"
},
"rpc": [
"https://blast-sepolia-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://168587773.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://sepolia.blast.io"
],
"shortName": "blastsepolia",
"slug": "blast-sepolia-testnet",
"testnet": true
} as const satisfies Chain;
+50
View File
@@ -0,0 +1,50 @@
import type { Chain } from "../src/types";
export default {
"chain": "ETH",
"chainId": 1686,
"explorers": [
{
"name": "blockscout",
"url": "https://testnet-explorer.mintchain.io",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmQsYisbKkCTKoKG2YSVs94UGuWWMiBspirH4Af4FyZeZz",
"width": 80,
"height": 80,
"format": "png"
}
}
],
"faucets": [],
"icon": {
"url": "ipfs://QmQsYisbKkCTKoKG2YSVs94UGuWWMiBspirH4Af4FyZeZz",
"width": 80,
"height": 80,
"format": "png"
},
"infoURL": "https://www.mintchain.io",
"name": "Mint Testnet",
"nativeCurrency": {
"name": "Sepolia Ether",
"symbol": "ETH",
"decimals": 18
},
"networkId": 1686,
"parent": {
"type": "L2",
"chain": "eip155-1",
"bridges": [
{
"url": "https://testnet-bridge.mintchain.io"
}
]
},
"rpc": [
"https://mint-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1686.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet-rpc.mintchain.io"
],
"shortName": "minttest",
"slug": "mint-testnet",
"testnet": true
} as const satisfies Chain;
+34
View File
@@ -0,0 +1,34 @@
import type { Chain } from "../src/types";
export default {
"chain": "ECLIPSE",
"chainId": 17172,
"explorers": [
{
"name": "ECLIPSE Explorer",
"url": "https://subnets-test.avax.network/eclipse",
"standard": "EIP3091"
}
],
"faucets": [],
"features": [
{
"name": "EIP1559"
}
],
"infoURL": "http://eclipsenet.io",
"name": "Eclipse Subnet",
"nativeCurrency": {
"name": "Eclipse",
"symbol": "ECLP",
"decimals": 16
},
"networkId": 17172,
"rpc": [
"https://eclipse-subnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://17172.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/eclipse/testnet/rpc"
],
"shortName": "eclipse",
"slug": "eclipse-subnet",
"testnet": true
} as const satisfies Chain;
+1 -1
View File
@@ -14,7 +14,7 @@ export default {
"rpc": [
"https://turkey-demo-dev.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1731313.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://blockscout-poa.huabeizhenxuan.com"
"https://devchain-poa.huabeizhenxuan.com"
],
"shortName": "TDD",
"slug": "turkey-demo-dev",
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 17511,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "PST 1-17-24",
"nativeCurrency": {
"name": "PST 1-17-24 Token",
"symbol": "MUB",
"decimals": 18
},
"networkId": 17511,
"redFlags": [],
"rpc": [
"https://pst-1-17-24.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://17511.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
],
"shortName": "PST 1-17-24",
"slug": "pst-1-17-24",
"testnet": true
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 18303,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "Zeroone Testnet",
"nativeCurrency": {
"name": "Zeroone Testnet Token",
"symbol": "ZERO",
"decimals": 18
},
"networkId": 18303,
"redFlags": [],
"rpc": [
"https://zeroone-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://18303.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/zeroonetes/testnet/rpc"
],
"shortName": "Zeroone Testnet",
"slug": "zeroone-testnet",
"testnet": true
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 1838,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "Traderlands Testnet",
"nativeCurrency": {
"name": "Traderlands Testnet Token",
"symbol": "TDL3",
"decimals": 18
},
"networkId": 1838,
"redFlags": [],
"rpc": [
"https://traderlands-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1838.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/traderland/testnet/rpc"
],
"shortName": "Traderlands Testnet",
"slug": "traderlands-testnet",
"testnet": true
} as const satisfies Chain;
+23
View File
@@ -0,0 +1,23 @@
import type { Chain } from "../src/types";
export default {
"chain": "Magnet",
"chainId": 19527,
"explorers": [],
"faucets": [],
"infoURL": "https://magnet.magport.io/",
"name": "Magnet Network",
"nativeCurrency": {
"name": "Magnet Network",
"symbol": "DOT",
"decimals": 18
},
"networkId": 19527,
"rpc": [
"https://magnet-network.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://19527.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://magnet-rpc.magport.io/"
],
"shortName": "mgt",
"slug": "magnet-network",
"testnet": false
} as const satisfies Chain;
+2 -2
View File
@@ -10,7 +10,7 @@ export default {
}
],
"faucets": [],
"infoURL": "https:/bt.io",
"infoURL": "https://bt.io",
"name": "BitTorrent Chain Mainnet",
"nativeCurrency": {
"name": "BitTorrent",
@@ -21,7 +21,7 @@ export default {
"rpc": [
"https://bittorrent-chain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://199.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.bittorrentchain.io/"
"https://rpc.bt.io"
],
"shortName": "BTT",
"slug": "bittorrent-chain",
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 20139,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "QR0129I1",
"nativeCurrency": {
"name": "QR0129I1 Token",
"symbol": "YOD",
"decimals": 18
},
"networkId": 20139,
"redFlags": [],
"rpc": [
"https://qr0129i1.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://20139.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/qr0129i1/testnet/rpc"
],
"shortName": "QR0129I1",
"slug": "qr0129i1",
"testnet": true
} as const satisfies Chain;
+3 -5
View File
@@ -9,9 +9,7 @@ export default {
"standard": "EIP3091"
}
],
"faucets": [
"https://faucet.mainnetz.io"
],
"faucets": [],
"icon": {
"url": "ipfs://QmT5gJ5weBiLT3GoYuF5yRTRLdPLCVZ3tXznfqW7M8fxgG",
"width": 400,
@@ -21,7 +19,7 @@ export default {
"infoURL": "https://mainnetz.io",
"name": "MainnetZ Mainnet",
"nativeCurrency": {
"name": "mainnetz",
"name": "MainnetZ",
"symbol": "NetZ",
"decimals": 18
},
@@ -32,7 +30,7 @@ export default {
"https://mainnet-rpc.mainnetz.io",
"https://eu-rpc.mainnetz.io"
],
"shortName": "NetZm",
"shortName": "netz",
"slug": "z-mainnet",
"testnet": false
} as const satisfies Chain;
+39
View File
@@ -0,0 +1,39 @@
import type { Chain } from "../src/types";
export default {
"chain": "JONO11",
"chainId": 20765,
"explorers": [
{
"name": "JONO11 Explorer",
"url": "https://subnets-test.avax.network/jono11",
"standard": "EIP3091"
}
],
"faucets": [],
"features": [
{
"name": "EIP1559"
}
],
"icon": {
"url": "ipfs://bafkreievzx4ke62dtc77o47x7vs7nn67ghzrwku6h5dxo3hwcsqfeblke4",
"width": 612,
"height": 612,
"format": "png"
},
"name": "Jono11 Subnet",
"nativeCurrency": {
"name": "Jono11 Token",
"symbol": "JONO",
"decimals": 18
},
"networkId": 20765,
"rpc": [
"https://jono11-subnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://20765.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/jono11/testnet/rpc"
],
"shortName": "jono11",
"slug": "jono11-subnet",
"testnet": true
} as const satisfies Chain;
+37
View File
@@ -0,0 +1,37 @@
import type { Chain } from "../src/types";
export default {
"chain": "AAH",
"chainId": 21133,
"explorers": [
{
"name": "AAH Blockscout",
"url": "https://exp.c4ex.net",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmY7HDEj3vnTZzCmenotr48nYyD13R2Fyd5t12R9ARu4wJ",
"width": 256,
"height": 256,
"format": "png"
}
}
],
"faucets": [
"https://t.me/c4eiAirdrop"
],
"infoURL": "https://c4ex.net",
"name": "All About Healthy",
"nativeCurrency": {
"name": "AAH",
"symbol": "AAH",
"decimals": 18
},
"networkId": 21133,
"rpc": [
"https://all-about-healthy.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://21133.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.c4ex.net"
],
"shortName": "aah",
"slug": "all-about-healthy",
"testnet": false
} as const satisfies Chain;
+11 -11
View File
@@ -1,32 +1,32 @@
import type { Chain } from "../src/types";
export default {
"chain": "MAP",
"chain": "MAPO",
"chainId": 212,
"explorers": [
{
"name": "mapscan",
"url": "https://testnet.mapscan.io",
"name": "maposcan",
"url": "https://testnet.maposcan.io",
"standard": "EIP3091"
}
],
"faucets": [
"https://faucet.maplabs.io"
"https://faucet.mapprotocol.io"
],
"infoURL": "https://maplabs.io",
"name": "MAP Makalu",
"infoURL": "https://mapprotocol.io/",
"name": "MAPO Makalu",
"nativeCurrency": {
"name": "Makalu MAP",
"symbol": "MAP",
"name": "Makalu MAPO",
"symbol": "MAPO",
"decimals": 18
},
"networkId": 212,
"rpc": [
"https://map-makalu.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mapo-makalu.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://212.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet-rpc.maplabs.io"
],
"shortName": "makalu",
"slug": "map-makalu",
"slug": "mapo-makalu",
"testnet": true,
"title": "MAP Testnet Makalu"
"title": "MAPO Testnet Makalu"
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 21758,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "FST 01-16 Multi",
"nativeCurrency": {
"name": "FST 01-16 Multi Token",
"symbol": "RUI",
"decimals": 18
},
"networkId": 21758,
"redFlags": [],
"rpc": [
"https://fst-01-16-multi.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://21758.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
],
"shortName": "FST 01-16 Multi",
"slug": "fst-01-16-multi",
"testnet": true
} as const satisfies Chain;
+19 -19
View File
@@ -1,37 +1,37 @@
import type { Chain } from "../src/types";
export default {
"chain": "ETH",
"chain": "Flag",
"chainId": 220,
"explorers": [
{
"name": "scalind",
"url": "https://explorer-sepolia.scalind.com",
"name": "flagscan",
"url": "https://scan.flagscan.io",
"standard": "EIP3091"
}
],
"faucets": [
"https://faucet.scalind.com"
],
"faucets": [],
"features": [],
"icon": {
"url": "ipfs://QmayuauUTSkYxbT1xi2AkkG5VLEMDhcMeZ18WZHiApPa9M",
"width": 512,
"height": 512,
"format": "png"
"url": "ipfs://QmXo2p1i4zsbTNEu41EjjrhdmbKFDGHEHeADXZ3x2fgNKE/1682003789585.jpeg",
"width": 200,
"height": 200,
"format": "jpeg"
},
"infoURL": "https://scalind.com",
"name": "Scalind Testnet",
"infoURL": "https://flagblockchain.com/",
"name": "Flag Mainnet",
"nativeCurrency": {
"name": "Sepolia Ether",
"symbol": "ETH",
"name": "Flag",
"symbol": "Flag",
"decimals": 18
},
"networkId": 220,
"redFlags": [],
"rpc": [
"https://scalind-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://flag.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://220.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc-sepolia.scalind.com"
"https://mainnet.flagscan.io/"
],
"shortName": "sepscal",
"slug": "scalind-testnet",
"testnet": true
"shortName": "Flag",
"slug": "flag",
"testnet": false
} as const satisfies Chain;
+12 -1
View File
@@ -3,6 +3,17 @@ export default {
"chain": "Kanazawa",
"chainId": 222000222,
"explorers": [
{
"name": "explorer",
"url": "https://testnet.meldscan.io",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmRhB4AbjDrhvwfSAQi2JvKirFiDWxzJvKEvG8S8AdDdED",
"width": 4000,
"height": 4000,
"format": "png"
}
},
{
"name": "explorer",
"url": "https://subnets-test.avax.network/meld",
@@ -34,7 +45,7 @@ export default {
"rpc": [
"https://kanazawa.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://222000222.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/meld/testnet/rpc"
"https://testnet-rpc.meld.com"
],
"shortName": "kanazawa",
"slip44": 1,
+4 -1
View File
@@ -37,7 +37,10 @@ export default {
"https://kava-rpc.gateway.pokt.network",
"wss://wevm.kava.io",
"https://kava-evm.publicnode.com",
"wss://kava-evm.publicnode.com"
"wss://kava-evm.publicnode.com",
"https://evm.kava-rpc.com",
"https://rpc.ankr.com/kava_evm",
"wss://wevm.kava-rpc.com"
],
"shortName": "kava",
"slug": "kava",
+8 -8
View File
@@ -1,11 +1,11 @@
import type { Chain } from "../src/types";
export default {
"chain": "MAP",
"chain": "MAPO",
"chainId": 22776,
"explorers": [
{
"name": "mapscan",
"url": "https://mapscan.io",
"name": "maposcan",
"url": "https://maposcan.io",
"standard": "EIP3091"
}
],
@@ -16,8 +16,8 @@ export default {
"height": 512,
"format": "png"
},
"infoURL": "https://maplabs.io",
"name": "MAP Mainnet",
"infoURL": "https://mapprotocol.io/",
"name": "MAP Protocol",
"nativeCurrency": {
"name": "MAPO",
"symbol": "MAPO",
@@ -25,12 +25,12 @@ export default {
},
"networkId": 22776,
"rpc": [
"https://map.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://map-protocol.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://22776.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.maplabs.io"
],
"shortName": "map",
"shortName": "mapo",
"slip44": 60,
"slug": "map",
"slug": "map-protocol",
"testnet": false
} as const satisfies Chain;
+35
View File
@@ -0,0 +1,35 @@
import type { Chain } from "../src/types";
export default {
"chain": "LiquidLayer",
"chainId": 25186,
"explorers": [
{
"name": "LiquidLayer Mainnet Explorer",
"url": "https://scan.liquidlayer.network",
"standard": "EIP3091"
}
],
"faucets": [],
"icon": {
"url": "ipfs://bafkreiayuuzfpcgwjll4us4hquvpqa5gwq3lbiedv4qftmlwcxhcyjzzpq",
"width": 500,
"height": 500,
"format": "png"
},
"infoURL": "https://scan.liquidlayer.network",
"name": "LiquidLayer Mainnet",
"nativeCurrency": {
"name": "LiquidLayer",
"symbol": "LILA",
"decimals": 18
},
"networkId": 25186,
"rpc": [
"https://liquidlayer.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://25186.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet.liquidlayer.network"
],
"shortName": "LILA",
"slug": "liquidlayer",
"testnet": false
} as const satisfies Chain;
+2 -12
View File
@@ -13,17 +13,6 @@ export default {
"height": 540,
"format": "png"
}
},
{
"name": "etherscan",
"url": "https://kromascan.com/",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmYtUimyqHkkFxYdbXXRbUqNg2VLPUg6Uu2C2nmFWowiZM",
"width": 551,
"height": 540,
"format": "png"
}
}
],
"faucets": [],
@@ -55,7 +44,8 @@ export default {
"rpc": [
"https://kroma.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://255.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://api.kroma.network"
"https://api.kroma.network",
"https://1rpc.io/kroma"
],
"shortName": "kroma",
"slug": "kroma",
+1 -3
View File
@@ -9,9 +9,7 @@ export default {
"standard": "EIP3091"
}
],
"faucets": [
"https://faucet.egonscan.com"
],
"faucets": [],
"icon": {
"url": "ipfs://QmNZiMmzMQYjyGtNSghtzLg4UooYhDgMQsa677DAP5KsBg",
"width": 512,
+30
View File
@@ -0,0 +1,30 @@
import type { Chain } from "../src/types";
export default {
"chain": "BPX",
"chainId": 279,
"explorers": [],
"faucets": [],
"icon": {
"url": "ipfs://bafkreiatcu42wbjlo24mr35jou4awvsqpaqys6iv4kxgkjhno3haovsiaq",
"width": 140,
"height": 140,
"format": "svg"
},
"infoURL": "https://bpxchain.cc",
"name": "BPX Blockchain",
"nativeCurrency": {
"name": "BPX",
"symbol": "BPX",
"decimals": 18
},
"networkId": 279,
"rpc": [
"https://bpx-blockchain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://279.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.mainnet.bpxchain.cc",
"https://bpx-dataseed.infinex.cc"
],
"shortName": "bpx",
"slug": "bpx-blockchain",
"testnet": false
} as const satisfies Chain;
+36
View File
@@ -0,0 +1,36 @@
import type { Chain } from "../src/types";
export default {
"chain": "Ancient8",
"chainId": 28122024,
"explorers": [
{
"name": "scan-testnet",
"url": "https://scanv2-testnet.ancient8.gg",
"standard": "EIP3091"
}
],
"faucets": [],
"icon": {
"url": "ipfs://bafkreievnqg3xjokaty4kfbxxbrzm5v5y7exbaaia2txrh4sfgrqsalfym",
"width": 128,
"height": 128,
"format": "png"
},
"infoURL": "https://ancient8.gg/",
"name": "Ancient8 Testnet",
"nativeCurrency": {
"name": "Ether",
"symbol": "ETH",
"decimals": 18
},
"networkId": 28122024,
"rpc": [
"https://ancient8-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://28122024.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpcv2-testnet.ancient8.gg"
],
"shortName": "a8",
"slip44": 1,
"slug": "ancient8-testnet",
"testnet": true
} as const satisfies Chain;
+8 -7
View File
@@ -11,13 +11,13 @@ export default {
],
"faucets": [],
"icon": {
"url": "ipfs://QmSX8sHToRzyFupT8BvPQjVsegRWFYz2mdnLkVnqBFKohY",
"width": 901,
"height": 901,
"url": "ipfs://bafkreievnqg3xjokaty4kfbxxbrzm5v5y7exbaaia2txrh4sfgrqsalfym",
"width": 128,
"height": 128,
"format": "png"
},
"infoURL": "https://ancient8.gg/",
"name": "Ancient8 Testnet",
"name": "Ancient8 Testnet (deprecated)",
"nativeCurrency": {
"name": "Ether",
"symbol": "ETH",
@@ -25,12 +25,13 @@ export default {
},
"networkId": 2863311531,
"rpc": [
"https://ancient8-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://ancient8-testnet-deprecated.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://2863311531.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc-testnet.ancient8.gg"
],
"shortName": "a8",
"shortName": "a8old",
"slip44": 1,
"slug": "ancient8-testnet",
"slug": "ancient8-testnet-deprecated",
"status": "deprecated",
"testnet": true
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 28982,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "Testnet",
"nativeCurrency": {
"name": "Testnet Token",
"symbol": "RUI",
"decimals": 18
},
"networkId": 28982,
"redFlags": [],
"rpc": [
"https://testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://28982.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
],
"shortName": "Testnet",
"slug": "testnet",
"testnet": true
} as const satisfies Chain;
+39
View File
@@ -0,0 +1,39 @@
import type { Chain } from "../src/types";
export default {
"chain": "XEN",
"chainId": 2941,
"explorers": [
{
"name": "Xenon testnet Explorer",
"url": "https://testnet.xenonchain.com",
"standard": "none"
}
],
"faucets": [
"https://xfaucet.xenonchain.com"
],
"icon": {
"url": "ipfs://QmNSoxDnj6MV8mPJWiuzzLbATcbk5op11NTwMTdzcr272F",
"width": 500,
"height": 500,
"format": "png"
},
"infoURL": "https://xenonchain.com",
"name": "Xenon Chain Testnet",
"nativeCurrency": {
"name": "Xenon Testnet",
"symbol": "tXEN",
"decimals": 18
},
"networkId": 2941,
"rpc": [
"https://xenon-chain-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://2941.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet-chain.xenonchain.com/",
"https://testnet-dev.xenonchain.com/"
],
"shortName": "xenon",
"slip44": 1,
"slug": "xenon-chain-testnet",
"testnet": true
} as const satisfies Chain;
+37
View File
@@ -0,0 +1,37 @@
import type { Chain } from "../src/types";
export default {
"chain": "Lovely",
"chainId": 307,
"explorers": [
{
"name": "Lovely Network Testnet",
"url": "https://tscan.lovely.network",
"standard": "EIP3091"
}
],
"faucets": [
"https://faucet.lovely.network"
],
"icon": {
"url": "ipfs://QmPB7uW7Wj8zWWdeuPnUHPJ5FhaiTL76tv4ZQ4oKWEpb1g",
"width": 897,
"height": 824,
"format": "png"
},
"infoURL": "https://lovely.network",
"name": "Lovely Network Testnet",
"nativeCurrency": {
"name": "Lovely",
"symbol": "LOVELY",
"decimals": 18
},
"networkId": 307,
"rpc": [
"https://lovely-network-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://307.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://trpc.lovely.network"
],
"shortName": "LOVELY-Testnet",
"slug": "lovely-network-testnet",
"testnet": true
} as const satisfies Chain;
+37
View File
@@ -0,0 +1,37 @@
import type { Chain } from "../src/types";
export default {
"chain": "Evoke",
"chainId": 31414,
"explorers": [
{
"name": "Evoke SmartChain Testnet Explorer",
"url": "https://testnet-explorer.evokescan.org",
"standard": "EIP3091"
}
],
"faucets": [
"https://faucet.evokescan.org"
],
"icon": {
"url": "ipfs://bafkreia5q26knsvxgkwxze7woepvsqat5n2hodokh4ozzphmhexqez5s34",
"width": 100,
"height": 100,
"format": "png"
},
"infoURL": "https://testnet-explorer.evokescan.org",
"name": "Evoke Testnet",
"nativeCurrency": {
"name": "MTHN Testnet",
"symbol": "MTHN",
"decimals": 18
},
"networkId": 31414,
"rpc": [
"https://evoke-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://31414.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet-rpc.evokescan.org"
],
"shortName": "tmthn",
"slug": "evoke-testnet",
"testnet": true
} as const satisfies Chain;
+42
View File
@@ -0,0 +1,42 @@
import type { Chain } from "../src/types";
export default {
"chain": "ETH",
"chainId": 32001,
"explorers": [
{
"name": "W3Gamez Holesky Explorer",
"url": "https://w3gamez-holesky.web3games.com",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmUc57w3UTHiWapNW9oQb1dP57ymtdemTTbpvGkjVHBRCo",
"width": 192,
"height": 192,
"format": "png"
}
}
],
"faucets": [],
"icon": {
"url": "ipfs://QmaQdiE7vwxKeuWCjk4nKBikcpg4XCzQkFWGrAZHmMKnrq",
"width": 400,
"height": 400,
"format": "png"
},
"infoURL": "https://web3games.com/",
"name": "W3Gamez Holesky Testnet",
"nativeCurrency": {
"name": "W3Gamez Testnet Ether",
"symbol": "ETH",
"decimals": 18
},
"networkId": 32001,
"rpc": [
"https://w3gamez-holesky-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://32001.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc-holesky.w3gamez.network"
],
"shortName": "w3gamez",
"slip44": 1,
"slug": "w3gamez-holesky-testnet",
"testnet": true
} as const satisfies Chain;
+35
View File
@@ -0,0 +1,35 @@
import type { Chain } from "../src/types";
export default {
"chain": "CVM",
"chainId": 323,
"explorers": [
{
"name": "Blockscout",
"url": "https://explorer.cosvm.net",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmYtUimyqHkkFxYdbXXRbUqNg2VLPUg6Uu2C2nmFWowiZM",
"width": 551,
"height": 540,
"format": "png"
}
}
],
"faucets": [],
"infoURL": "https://cosvm.network",
"name": "Cosvm Mainnet",
"nativeCurrency": {
"name": "Cosvm",
"symbol": "CVM",
"decimals": 18
},
"networkId": 323,
"rpc": [
"https://cosvm.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://323.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.cosvm.net"
],
"shortName": "cvm",
"slug": "cosvm",
"testnet": false
} as const satisfies Chain;
+37
View File
@@ -0,0 +1,37 @@
import type { Chain } from "../src/types";
export default {
"chain": "Bloom",
"chainId": 323213,
"explorers": [
{
"name": "Bloom Genesis Testnet",
"url": "https://testnet.bloomgenesis.com",
"standard": "EIP3091"
}
],
"faucets": [
"https://faucet.bloomgenesis.com"
],
"icon": {
"url": "ipfs://Qmetu9hMLvczYo7tDPRyjqjBHwwpHU8mEgW3PEPPre56su",
"width": 2794,
"height": 2711,
"format": "png"
},
"infoURL": "https://www.bloomgenesis.com",
"name": "Bloom Genesis Testnet",
"nativeCurrency": {
"name": "Bloom",
"symbol": "BGBC",
"decimals": 18
},
"networkId": 323213,
"rpc": [
"https://bloom-genesis-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://323213.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet-rpc.bloomgenesis.com"
],
"shortName": "BGBC-Testnet",
"slug": "bloom-genesis-testnet",
"testnet": true
} as const satisfies Chain;
+12 -1
View File
@@ -3,6 +3,17 @@ export default {
"chain": "MELD",
"chainId": 333000333,
"explorers": [
{
"name": "explorer",
"url": "https://meldscan.io",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmRhB4AbjDrhvwfSAQi2JvKirFiDWxzJvKEvG8S8AdDdED",
"width": 4000,
"height": 4000,
"format": "png"
}
},
{
"name": "explorer",
"url": "https://subnets.avax.network/meld",
@@ -34,7 +45,7 @@ export default {
"rpc": [
"https://meld.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://333000333.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/meld/mainnet/rpc"
"https://rpc-1.meld.com"
],
"shortName": "meld",
"slug": "meld",
+35
View File
@@ -0,0 +1,35 @@
import type { Chain } from "../src/types";
export default {
"chain": "Bloom",
"chainId": 333313,
"explorers": [
{
"name": "Bloom Genesis Mainnet",
"url": "https://explorer.bloomgenesis.com",
"standard": "EIP3091"
}
],
"faucets": [],
"icon": {
"url": "ipfs://Qmetu9hMLvczYo7tDPRyjqjBHwwpHU8mEgW3PEPPre56su",
"width": 2794,
"height": 2711,
"format": "png"
},
"infoURL": "https://www.bloomgenesis.com",
"name": "Bloom Genesis Mainnet",
"nativeCurrency": {
"name": "Bloom",
"symbol": "BGBC",
"decimals": 18
},
"networkId": 333313,
"rpc": [
"https://bloom-genesis.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://333313.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet-rpc.bloomgenesis.com"
],
"shortName": "BGBC",
"slug": "bloom-genesis",
"testnet": false
} as const satisfies Chain;
+1 -3
View File
@@ -9,9 +9,7 @@ export default {
"standard": "EIP3091"
}
],
"faucets": [
"https://faucet.securechain.ai"
],
"faucets": [],
"icon": {
"url": "ipfs://Qme2Z8VFYjhHGfLQPBnfseNpEdRfmTDy7VXqrdH4AHETJf",
"width": 150,
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 35439,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "QI M 2401122",
"nativeCurrency": {
"name": "QI M 2401122 Token",
"symbol": "HZU",
"decimals": 18
},
"networkId": 35439,
"redFlags": [],
"rpc": [
"https://qi-m-2401122.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://35439.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avacloud-dev.io/f14d837e-de8f-446d-8222-0077f26e6694"
],
"shortName": "QI M 2401122",
"slug": "qi-m-2401122",
"testnet": true
} as const satisfies Chain;
+42
View File
@@ -0,0 +1,42 @@
import type { Chain } from "../src/types";
export default {
"chain": "Xai Sepolia",
"chainId": 37714555429,
"explorers": [
{
"name": "blockscout",
"url": "https://testnet-explorer-v2.xai-chain.net/",
"standard": "EIP3091"
}
],
"faucets": [],
"features": [],
"icon": {
"url": "ipfs://QmZKFekbHxDkB8gFmmmjWz89SLhwg38GkALmAKo3gn753N/2024-01-10%2012.50.15.jpg",
"width": 512,
"height": 512,
"format": "jpg"
},
"infoURL": "https://xai.games",
"name": "Xai Sepolia",
"nativeCurrency": {
"name": "sXAI",
"symbol": "sXAI",
"decimals": 18
},
"networkId": 37714555429,
"parent": {
"type": "L3",
"chain": "eip155-1",
"bridges": []
},
"redFlags": [],
"rpc": [
"https://xai-sepolia.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://37714555429.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet-v2.xai-chain.net/rpc"
],
"shortName": "xai-sepolia",
"slug": "xai-sepolia",
"testnet": true
} as const satisfies Chain;
+14 -7
View File
@@ -6,17 +6,23 @@ export default {
{
"name": "AlveyScan",
"url": "https://alveyscan.com",
"standard": "EIP3091"
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmTuY2Goyxpuy5GmA32EMYZBwxRcGsahiMFgfeBixSk7rb",
"width": 2048,
"height": 1538,
"format": "png"
}
}
],
"faucets": [],
"icon": {
"url": "ipfs://QmSwczpPLBG6ob1a8WLoujthiCPzwEyJNp7WdKRi52qbWX",
"width": 310,
"height": 310,
"url": "ipfs://QmTuY2Goyxpuy5GmA32EMYZBwxRcGsahiMFgfeBixSk7rb",
"width": 2048,
"height": 1538,
"format": "png"
},
"infoURL": "https://alveyscan.com/rpc",
"infoURL": "https://alveychain.com/",
"name": "AlveyChain Mainnet",
"nativeCurrency": {
"name": "AlveyCoin",
@@ -27,8 +33,9 @@ export default {
"rpc": [
"https://alveychain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://3797.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.alveychain.com/rpc",
"https://rpc2.alvey.io/rpc"
"https://elves-core1.alvey.io",
"https://elves-core2.alvey.io",
"https://elves-core3.alvey.io"
],
"shortName": "alv",
"slug": "alveychain",
+46
View File
@@ -0,0 +1,46 @@
import type { Chain } from "../src/types";
export default {
"chain": "Tangle Testnet",
"chainId": 3799,
"explorers": [
{
"name": "ttntscan",
"url": "https://testnet-explorer.tangle.tools",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmYtUimyqHkkFxYdbXXRbUqNg2VLPUg6Uu2C2nmFWowiZM",
"width": 551,
"height": 540,
"format": "png"
}
}
],
"faucets": [
"https://faucet.tangle.tools"
],
"icon": {
"url": "ipfs://QmbxMNBTeQgch8t9GpWdLiS2R3wPYCzVRaX5kCQ4o5QU3w",
"width": 1600,
"height": 1600,
"format": "png"
},
"infoURL": "https://docs.tangle.tools",
"name": "Tangle Testnet",
"nativeCurrency": {
"name": "Testnet Tangle Network Token",
"symbol": "tTNT",
"decimals": 18
},
"networkId": 3799,
"rpc": [
"https://tangle-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://3799.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet-rpc.tangle.tools",
"https://testnet-rpc-archive.tangle.tools",
"wss://testnet-rpc.tangle.tools",
"wss://testnet-rpc-archive.tangle.tools"
],
"shortName": "tTangle",
"slug": "tangle-testnet",
"testnet": true
} as const satisfies Chain;
+51
View File
@@ -0,0 +1,51 @@
import type { Chain } from "../src/types";
export default {
"chain": "FIL",
"chainId": 380,
"explorers": [
{
"name": "ZKAmoeba Test Explorer",
"url": "https://testnetexplorer.zkamoeba.com",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmRTChjmiwh9HrGsLh9qECsH7WHQAhqT5Ww8S34s8ME2Cp",
"width": 512,
"height": 512,
"format": "png"
}
}
],
"faucets": [],
"icon": {
"url": "ipfs://QmRTChjmiwh9HrGsLh9qECsH7WHQAhqT5Ww8S34s8ME2Cp",
"width": 512,
"height": 512,
"format": "png"
},
"infoURL": "https://testnet.zkamoeba.com",
"name": "ZKAmoeba Testnet",
"nativeCurrency": {
"name": "filecoin",
"symbol": "FIL",
"decimals": 18
},
"networkId": 380,
"parent": {
"type": "L2",
"chain": "eip155-314",
"bridges": [
{
"url": "https://testnet.zkamoeba.com/en/bridge"
}
]
},
"rpc": [
"https://zkamoeba-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://380.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.testnet.zkamoeba.com:4050/",
"https://rpc1.testnet.zkamoeba.com:4050/"
],
"shortName": "zkamoeba-test",
"slug": "zkamoeba-testnet",
"testnet": true
} as const satisfies Chain;
+50
View File
@@ -0,0 +1,50 @@
import type { Chain } from "../src/types";
export default {
"chain": "FIL",
"chainId": 381,
"explorers": [
{
"name": "ZKAmoeba Explorer",
"url": "https://explorer.zkamoeba.com",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmRTChjmiwh9HrGsLh9qECsH7WHQAhqT5Ww8S34s8ME2Cp",
"width": 512,
"height": 512,
"format": "png"
}
}
],
"faucets": [],
"icon": {
"url": "ipfs://QmRTChjmiwh9HrGsLh9qECsH7WHQAhqT5Ww8S34s8ME2Cp",
"width": 512,
"height": 512,
"format": "png"
},
"infoURL": "https://www.zkamoeba.com",
"name": "ZKAmoeba Mainnet",
"nativeCurrency": {
"name": "filecoin",
"symbol": "FIL",
"decimals": 18
},
"networkId": 381,
"parent": {
"type": "L2",
"chain": "eip155-314",
"bridges": [
{
"url": "https://www.zkamoeba.com/en/bridge"
}
]
},
"rpc": [
"https://zkamoeba.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://381.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.mainnet.zkamoeba.com/rpc"
],
"shortName": "zkamoeba",
"slug": "zkamoeba",
"testnet": false
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 39098,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "QI 20240108",
"nativeCurrency": {
"name": "QI 20240108 Token",
"symbol": "COZ",
"decimals": 18
},
"networkId": 39098,
"redFlags": [],
"rpc": [
"https://qi-20240108.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://39098.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avacloud-dev.io/f575b5b1-8b60-47f3-af28-13f3f3de2ba5"
],
"shortName": "QI 20240108",
"slug": "qi-20240108",
"testnet": true
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 39747,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "QaUser41Testnet",
"nativeCurrency": {
"name": "QaUser41Testnet Token",
"symbol": "GYF",
"decimals": 18
},
"networkId": 39747,
"redFlags": [],
"rpc": [
"https://qauser41testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://39747.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
],
"shortName": "QaUser41Testnet",
"slug": "qauser41testnet",
"testnet": true
} as const satisfies Chain;
+36
View File
@@ -0,0 +1,36 @@
import type { Chain } from "../src/types";
export default {
"chain": "ETH",
"chainId": 4202,
"explorers": [
{
"name": "liskscout",
"url": "https://sepolia-blockscout.lisk.com",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmYtUimyqHkkFxYdbXXRbUqNg2VLPUg6Uu2C2nmFWowiZM",
"width": 551,
"height": 540,
"format": "png"
}
}
],
"faucets": [],
"infoURL": "https://lisk.com",
"name": "Lisk Sepolia Testnet",
"nativeCurrency": {
"name": "Sepolia Ether",
"symbol": "ETH",
"decimals": 18
},
"networkId": 4202,
"rpc": [
"https://lisk-sepolia-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://4202.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.sepolia-api.lisk.com"
],
"shortName": "lisksep",
"slip44": 134,
"slug": "lisk-sepolia-testnet",
"testnet": true
} as const satisfies Chain;
+40
View File
@@ -0,0 +1,40 @@
import type { Chain } from "../src/types";
export default {
"chain": "SYNDRSEPOLIA",
"chainId": 444444,
"explorers": [
{
"name": "Syndr L3 Sepolia Testnet Explorer",
"url": "https://sepolia-explorer.syndr.com",
"standard": "EIP3091"
}
],
"faucets": [],
"infoURL": "https://syndr.com",
"name": "Syndr L3 Sepolia",
"nativeCurrency": {
"name": "Sepolia Ether",
"symbol": "ETH",
"decimals": 18
},
"networkId": 444444,
"parent": {
"type": "L2",
"chain": "eip155-421614",
"bridges": [
{
"url": "https://sepolia-bridge.syndr.com"
}
]
},
"rpc": [
"https://syndr-l3-sepolia.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://444444.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://sepolia.syndr.com/http",
"wss://sepolia.syndr.com/ws"
],
"shortName": "syndr",
"slug": "syndr-l3-sepolia",
"testnet": true,
"title": "Syndr L3 Sepolia Rollup Testnet"
} as const satisfies Chain;
+38
View File
@@ -0,0 +1,38 @@
import type { Chain } from "../src/types";
export default {
"chain": "DEE",
"chainId": 45510,
"explorers": [
{
"name": "Deelance Mainnet Explorer",
"url": "https://deescan.com",
"standard": "EIP3091"
}
],
"faucets": [
"https://faucet.deelance.com"
],
"icon": {
"url": "ipfs://Qmay2j8biuo5xLJL8NcLtrzubAEHuCWz65cdbKE1pSnGf6",
"width": 500,
"height": 500,
"format": "png"
},
"infoURL": "https://deelance.com",
"name": "Deelance Mainnet",
"nativeCurrency": {
"name": "Deelance",
"symbol": "DEE",
"decimals": 18
},
"networkId": 45510,
"rpc": [
"https://deelance.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://45510.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.deelance.com"
],
"shortName": "dee",
"slug": "deelance",
"testnet": false,
"title": "Deelance Network Mainnet"
} as const satisfies Chain;
+5 -1
View File
@@ -27,7 +27,11 @@ export default {
"rpc": [
"https://areon-network.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://463.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet-rpc.areon.network"
"https://mainnet-rpc.areon.network",
"https://mainnet-rpc2.areon.network",
"https://mainnet-rpc3.areon.network",
"https://mainnet-rpc4.areon.network",
"https://mainnet-rpc5.areon.network"
],
"shortName": "area",
"slug": "areon-network",
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 48267,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "QI0130I2",
"nativeCurrency": {
"name": "QI0130I2 Token",
"symbol": "NZY",
"decimals": 18
},
"networkId": 48267,
"redFlags": [],
"rpc": [
"https://qi0130i2.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://48267.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
],
"shortName": "QI0130I2",
"slug": "qi0130i2",
"testnet": true
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 50059,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "QI0122I1 Testnet",
"nativeCurrency": {
"name": "QI0122I1 Testnet Token",
"symbol": "MPX",
"decimals": 18
},
"networkId": 50059,
"redFlags": [],
"rpc": [
"https://qi0122i1-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://50059.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
],
"shortName": "QI0122I1 Testnet",
"slug": "qi0122i1-testnet",
"testnet": true
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 5042,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "OMOCHI",
"nativeCurrency": {
"name": "OMOCHI Token",
"symbol": "OMCH",
"decimals": 18
},
"networkId": 5042,
"redFlags": [],
"rpc": [
"https://omochi.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://5042.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/omochi/testnet/rpc"
],
"shortName": "OMOCHI",
"slug": "omochi",
"testnet": true
} as const satisfies Chain;
+49
View File
@@ -0,0 +1,49 @@
import type { Chain } from "../src/types";
export default {
"chain": "DOID",
"chainId": 53277,
"explorers": [
{
"name": "DOID Scan",
"url": "https://scan.doid.tech",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmXYSMyMnMvBf2F1ih6dTcRVUhmMnpzvmuP7vieLjmNQo5",
"width": 41,
"height": 52,
"format": "svg"
}
}
],
"faucets": [],
"features": [
{
"name": "EIP155"
},
{
"name": "EIP1559"
}
],
"icon": {
"url": "ipfs://QmXYSMyMnMvBf2F1ih6dTcRVUhmMnpzvmuP7vieLjmNQo5",
"width": 41,
"height": 52,
"format": "svg"
},
"infoURL": "https://doid.tech",
"name": "DOID",
"nativeCurrency": {
"name": "DOID",
"symbol": "DOID",
"decimals": 18
},
"networkId": 53277,
"rpc": [
"https://doid.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://53277.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.doid.tech"
],
"shortName": "DOID",
"slug": "doid",
"testnet": false
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 53383,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "Jambon's Testnet",
"nativeCurrency": {
"name": "Jambon's Testnet Token",
"symbol": "GNF",
"decimals": 18
},
"networkId": 53383,
"redFlags": [],
"rpc": [
"https://jambon-s-testnet-jambon's testnet-53383.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://53383.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avacloud-dev.io/c37c3f83-6d95-4473-b5c7-626fad519f50"
],
"shortName": "Jambon's Testnet",
"slug": "jambon-s-testnet-jambon's testnet-53383",
"testnet": true
} as const satisfies Chain;
+4 -1
View File
@@ -16,6 +16,7 @@ export default {
}
],
"faucets": [],
"features": [],
"icon": {
"url": "ipfs://QmQB48m15TzhUFrmu56QCRQjkrkgUaKfgCmKE8o3RzmuPJ",
"width": 500,
@@ -30,10 +31,12 @@ export default {
"decimals": 18
},
"networkId": 53935,
"redFlags": [],
"rpc": [
"https://dfk-chain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://53935.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc",
"https://avax-pokt.nodies.app/ext/bc/q2aTwKuyzgs8pynF7UXBZCU7DejbZbZ6EUyHr3JQzYgwNPUPi/rpc"
],
"shortName": "DFK",
"slug": "dfk-chain",
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 56400,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "Testnet Zeroone",
"nativeCurrency": {
"name": "Testnet Zeroone Token",
"symbol": "ZERO",
"decimals": 18
},
"networkId": 56400,
"redFlags": [],
"rpc": [
"https://testnet-zeroone.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://56400.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/testnetzer/testnet/rpc"
],
"shortName": "Testnet Zeroone",
"slug": "testnet-zeroone",
"testnet": true
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 56570,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "QaUser4Testnet",
"nativeCurrency": {
"name": "QaUser4Testnet Token",
"symbol": "GYF",
"decimals": 18
},
"networkId": 56570,
"redFlags": [],
"rpc": [
"https://qauser4testnet-qauser4testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://56570.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
],
"shortName": "QaUser4Testnet",
"slug": "qauser4testnet-qauser4testnet",
"testnet": true
} as const satisfies Chain;
+49
View File
@@ -0,0 +1,49 @@
import type { Chain } from "../src/types";
export default {
"chain": "DOID",
"chainId": 56797,
"explorers": [
{
"name": "DOID Testnet Scan",
"url": "https://scan.testnet.doid.tech",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmXYSMyMnMvBf2F1ih6dTcRVUhmMnpzvmuP7vieLjmNQo5",
"width": 41,
"height": 52,
"format": "svg"
}
}
],
"faucets": [],
"features": [
{
"name": "EIP155"
},
{
"name": "EIP1559"
}
],
"icon": {
"url": "ipfs://QmXYSMyMnMvBf2F1ih6dTcRVUhmMnpzvmuP7vieLjmNQo5",
"width": 41,
"height": 52,
"format": "svg"
},
"infoURL": "https://doid.tech",
"name": "DOID Testnet",
"nativeCurrency": {
"name": "DOID",
"symbol": "DOID",
"decimals": 18
},
"networkId": 56797,
"rpc": [
"https://doid-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://56797.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.testnet.doid.tech"
],
"shortName": "doidTestnet",
"slug": "doid-testnet",
"testnet": true
} as const satisfies Chain;
+34
View File
@@ -0,0 +1,34 @@
import type { Chain } from "../src/types";
export default {
"chain": "EIOB",
"chainId": 612,
"explorers": [
{
"name": "EIOB Explorer",
"url": "https://explorer.eiob.xyz",
"standard": "none"
}
],
"faucets": [],
"icon": {
"url": "ipfs://QmfJLG2mXgSqKx2V3A2jzTwt4vkozvQTTXkRy3os27wEVm",
"width": 48,
"height": 48,
"format": "png"
},
"name": "EIOB Mainnet",
"nativeCurrency": {
"name": "EIOB",
"symbol": "EIOB",
"decimals": 18
},
"networkId": 612,
"rpc": [
"https://eiob.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://612.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.eiob.xyz"
],
"shortName": "eiob",
"slug": "eiob",
"testnet": false
} as const satisfies Chain;

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