Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6a41fe9829 | ||
|
|
0092e2a317 | ||
|
|
87b9e6d42d | ||
|
|
336dfd3b37 | ||
|
|
957c75a36e | ||
|
|
357886e31b | ||
|
|
330c270f3c | ||
|
|
9096bdc0f1 | ||
|
|
62ef83c9e0 | ||
|
|
1e7a7a5f3c | ||
|
|
433d49e3ab | ||
|
|
5a3f7fa123 | ||
|
|
3857cba8ab | ||
|
|
6a3cacb622 | ||
|
|
bdf60e9890 | ||
|
|
1e50caeed1 | ||
|
|
1decd52a36 | ||
|
|
0b7010eccb | ||
|
|
041c01341b | ||
|
|
439a377aa7 | ||
|
|
4f52c29611 | ||
|
|
374671fd9a | ||
|
|
0a9fc269ff | ||
|
|
2e3cc7cdd4 | ||
|
|
3ba15366be | ||
|
|
771bd1e1b2 | ||
|
|
1baa98fba4 | ||
|
|
39e79282ac | ||
|
|
13d5b86ae5 | ||
|
|
8edb3f1b34 | ||
|
|
69c3eb910f | ||
|
|
c8f881c2b9 | ||
|
|
71ac41adae | ||
|
|
ddb2121c67 | ||
|
|
558dc10a63 | ||
|
|
c9f1fd8fc2 | ||
|
|
e75b48cfe9 | ||
|
|
173b3b2ad9 | ||
|
|
654aaa2171 | ||
|
|
627d209927 | ||
|
|
57320957aa | ||
|
|
6fdade6c45 | ||
|
|
6d25586d08 | ||
|
|
4d89dc1efa | ||
|
|
a5653f07f8 | ||
|
|
7f35caff5d | ||
|
|
bf90fa5005 | ||
|
|
3d63a2cb69 | ||
|
|
466b1e75dc | ||
|
|
3dfc003902 | ||
|
|
b34737d27a | ||
|
|
1a5d41cc8a | ||
|
|
a5541a1c55 | ||
|
|
13e389a63e | ||
|
|
6884815428 | ||
|
|
f29f91d7e0 | ||
|
|
212b2e7bc2 | ||
|
|
3f2ee85a1a | ||
|
|
24450ed7ac | ||
|
|
ba978f55b0 | ||
|
|
94e4dc9aab | ||
|
|
67656c7131 | ||
|
|
dccb9ddd0e | ||
|
|
c3b264982d | ||
|
|
0efd0f9d26 | ||
|
|
7af35a0133 | ||
|
|
9caf201f24 | ||
|
|
ea7da5fb77 | ||
|
|
89641e3378 | ||
|
|
dcb6afa148 | ||
|
|
324330d354 | ||
|
|
056643ad83 | ||
|
|
e21f7bb171 | ||
|
|
148e6a9166 | ||
|
|
9a23de2be0 | ||
|
|
c377e868ed | ||
|
|
c4f1309dcd | ||
|
|
2e057827e3 | ||
|
|
9e1455294a | ||
|
|
e11e645c74 |
+2
-1
@@ -3,4 +3,5 @@
|
||||
|
||||
# used for unit tests that hit real IPFS gateway
|
||||
# get a secret key from https://thirdweb.com/create-api-key
|
||||
TW_SECRET_KEY=""
|
||||
# Learn more about API keys. https://portal.thirdweb.com/account/api-keys
|
||||
TW_SECRET_KEY=""
|
||||
|
||||
@@ -11,3 +11,9 @@ Short description of the bug fixed or feature added
|
||||
|
||||
- [ ] Automated tests: link to unit test file
|
||||
- [ ] Manual tests: step by step instructions on how to test
|
||||
|
||||
## Contributor NFT
|
||||
|
||||
Paste in your wallet address below and we will airdrop you a special NFT when your pull request is merged.
|
||||
|
||||
```Address: ```
|
||||
|
||||
@@ -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 }}
|
||||
@@ -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,19 +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 build
|
||||
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 }}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -1,5 +1,65 @@
|
||||
# @thirdweb-dev/auth
|
||||
|
||||
## 4.1.31
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#2278](https://github.com/thirdweb-dev/js/pull/2278) [`0092e2a3`](https://github.com/thirdweb-dev/js/commit/0092e2a3177364ad26af15ecafb4381591dc9be1) Thanks [@hsynlms](https://github.com/hsynlms)! - fix(auth): Next.js App Router handler return type
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/wallets@2.4.9
|
||||
|
||||
## 4.1.30
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/wallets@2.4.8
|
||||
|
||||
## 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
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/auth",
|
||||
"version": "4.1.23",
|
||||
"version": "4.1.31",
|
||||
"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"
|
||||
},
|
||||
|
||||
@@ -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[]>
|
||||
};
|
||||
@@ -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,71 @@
|
||||
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(req: NextRequest, ctx: ThirdwebNextContext) {
|
||||
return await ThirdwebAuthRouter(req, ctx, 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;
|
||||
};
|
||||
+7
-6
@@ -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);
|
||||
},
|
||||
};
|
||||
}
|
||||
+5
-4
@@ -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,
|
||||
+4
-4
@@ -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",
|
||||
});
|
||||
}
|
||||
|
||||
+4
-3
@@ -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",
|
||||
});
|
||||
}
|
||||
|
||||
+5
-4
@@ -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",
|
||||
});
|
||||
}
|
||||
|
||||
+5
-5
@@ -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;
|
||||
};
|
||||
@@ -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;
|
||||
};
|
||||
@@ -1,5 +1,55 @@
|
||||
# @thirdweb-dev/chains
|
||||
|
||||
## 0.1.71
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#2258](https://github.com/thirdweb-dev/js/pull/2258) [`357886e3`](https://github.com/thirdweb-dev/js/commit/357886e31b37aad950731ce8f013a101190ebd07) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
|
||||
|
||||
## 0.1.70
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#2255](https://github.com/thirdweb-dev/js/pull/2255) [`1e50caee`](https://github.com/thirdweb-dev/js/commit/1e50caeed1b85f91a6d2efb2e5204f3acf300134) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
|
||||
|
||||
## 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
|
||||
|
||||
@@ -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;
|
||||
@@ -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",
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Dymension",
|
||||
"chainId": 1100,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "dym.fyi",
|
||||
"url": "https://dym.fyi",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://bafkreic4sjyqikz33xzpcctczvkiwfj44q5i3i7zslycnjiqmyx5ybc3fi",
|
||||
"width": 1200,
|
||||
"height": 1200,
|
||||
"format": "png"
|
||||
},
|
||||
"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",
|
||||
"testnet": false
|
||||
} as const satisfies Chain;
|
||||
@@ -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}",
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -0,0 +1,31 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 12001,
|
||||
"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": "Mikias's Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "Mikias's Testnet Token",
|
||||
"symbol": "XVL",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 12001,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://mikias-s-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://12001.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avacloud-test.io/c3c8cc74-5101-4380-937f-4f534cad0128"
|
||||
],
|
||||
"shortName": "Mikias's Testnet",
|
||||
"slug": "mikias-s-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -1,7 +1,7 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "XRPL",
|
||||
"chainId": 1440001,
|
||||
"chainId": 1440002,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "XRP Ledger Explorer",
|
||||
@@ -23,11 +23,11 @@ export default {
|
||||
"symbol": "XRP",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 1440001,
|
||||
"networkId": 1440002,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://xrp-ledger-evm-devnet-sidechain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://1440001.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://1440002.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc-evm-sidechain.xrpl.org"
|
||||
],
|
||||
"shortName": "XRPL-EVM-Devnet-Sidechain",
|
||||
@@ -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;
|
||||
@@ -0,0 +1,31 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 15056,
|
||||
"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 2402052",
|
||||
"nativeCurrency": {
|
||||
"name": "QI M 2402052 Token",
|
||||
"symbol": "ACI",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 15056,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://qi-m-2402052.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://15056.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avacloud-dev.io/c908add6-74c5-4407-8091-18762786a0b9"
|
||||
],
|
||||
"shortName": "QI M 2402052",
|
||||
"slug": "qi-m-2402052",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,31 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 15104,
|
||||
"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 2402054",
|
||||
"nativeCurrency": {
|
||||
"name": "QI M 2402054 Token",
|
||||
"symbol": "ACI",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 15104,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://qi-m-2402054.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://15104.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avacloud-dev.io/c908add6-74c5-4407-8091-18762786a0b9"
|
||||
],
|
||||
"shortName": "QI M 2402054",
|
||||
"slug": "qi-m-2402054",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -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;
|
||||
@@ -1,36 +0,0 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "ETH",
|
||||
"chainId": 167005,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://explorer.test.taiko.xyz",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmcHdmVr5VRUJq13jnM6tgah5Ge7hn3Dm14eY6vwivJ5ui",
|
||||
"width": 288,
|
||||
"height": 258,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://taiko.xyz",
|
||||
"name": "Taiko Grimsvotn L2",
|
||||
"nativeCurrency": {
|
||||
"name": "Ether",
|
||||
"symbol": "ETH",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 167005,
|
||||
"rpc": [
|
||||
"https://taiko-grimsvotn-l2.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://167005.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.test.taiko.xyz"
|
||||
],
|
||||
"shortName": "taiko-l2",
|
||||
"slug": "taiko-grimsvotn-l2",
|
||||
"status": "deprecated",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -1,36 +0,0 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "ETH",
|
||||
"chainId": 167006,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://explorer.l3test.taiko.xyz",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmcHdmVr5VRUJq13jnM6tgah5Ge7hn3Dm14eY6vwivJ5ui",
|
||||
"width": 288,
|
||||
"height": 258,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://taiko.xyz",
|
||||
"name": "Taiko Eldfell L3",
|
||||
"nativeCurrency": {
|
||||
"name": "Ether",
|
||||
"symbol": "ETH",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 167006,
|
||||
"rpc": [
|
||||
"https://taiko-eldfell-l3.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://167006.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.l3test.taiko.xyz"
|
||||
],
|
||||
"shortName": "taiko-l3",
|
||||
"slug": "taiko-eldfell-l3",
|
||||
"status": "deprecated",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -1,36 +0,0 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "ETH",
|
||||
"chainId": 167007,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://explorer.jolnir.taiko.xyz",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmcHdmVr5VRUJq13jnM6tgah5Ge7hn3Dm14eY6vwivJ5ui",
|
||||
"width": 288,
|
||||
"height": 258,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://taiko.xyz",
|
||||
"name": "Taiko Jolnir L2",
|
||||
"nativeCurrency": {
|
||||
"name": "Ether",
|
||||
"symbol": "ETH",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 167007,
|
||||
"rpc": [
|
||||
"https://taiko-jolnir-l2.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://167007.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.jolnir.taiko.xyz"
|
||||
],
|
||||
"shortName": "tko-jolnir",
|
||||
"slug": "taiko-jolnir-l2",
|
||||
"status": "deprecated",
|
||||
"testnet": false
|
||||
} as const satisfies Chain;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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",
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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",
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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,
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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;
|
||||
@@ -0,0 +1,31 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 234560,
|
||||
"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": "Project Orc",
|
||||
"nativeCurrency": {
|
||||
"name": "Project Orc Token",
|
||||
"symbol": "STX",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 234560,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://project-orc.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://234560.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/projectorc/testnet/rpc"
|
||||
],
|
||||
"shortName": "Project Orc",
|
||||
"slug": "project-orc",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -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;
|
||||
@@ -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",
|
||||
|
||||
@@ -9,9 +9,7 @@ export default {
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [
|
||||
"https://faucet.egonscan.com"
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmNZiMmzMQYjyGtNSghtzLg4UooYhDgMQsa677DAP5KsBg",
|
||||
"width": 512,
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Elizabeth",
|
||||
"chainId": 2731,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Time Network Explorer",
|
||||
"url": "https://testnet-scanner.timenetwork.io",
|
||||
"standard": "none",
|
||||
"icon": {
|
||||
"url": "ipfs://bafkreidoudwo453gr3hoxpreleguga73rm55yl6vuedxrfmhknljppqbiu",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
}
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://bafkreidoudwo453gr3hoxpreleguga73rm55yl6vuedxrfmhknljppqbiu",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://whitepaper.anttime.net/overview/anttime",
|
||||
"name": "Elizabeth Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "TIME",
|
||||
"symbol": "TIME",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 2731,
|
||||
"rpc": [
|
||||
"https://elizabeth-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://2731.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://testnet-rpc.timenetwork.io"
|
||||
],
|
||||
"shortName": "TIME",
|
||||
"slug": "elizabeth-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -0,0 +1,31 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 29442,
|
||||
"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 2402055",
|
||||
"nativeCurrency": {
|
||||
"name": "QI M 2402055 Token",
|
||||
"symbol": "ACI",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 29442,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://qi-m-2402055.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://29442.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avacloud-dev.io/c908add6-74c5-4407-8091-18762786a0b9"
|
||||
],
|
||||
"shortName": "QI M 2402055",
|
||||
"slug": "qi-m-2402055",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,31 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 30266,
|
||||
"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": "Tnet02-06",
|
||||
"nativeCurrency": {
|
||||
"name": "Tnet02-06 Token",
|
||||
"symbol": "LFC",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 30266,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://tnet02-06.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://30266.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "Tnet02-06",
|
||||
"slug": "tnet02-06",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -0,0 +1,31 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 32277,
|
||||
"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 2402058",
|
||||
"nativeCurrency": {
|
||||
"name": "QI M 2402058 Token",
|
||||
"symbol": "ACI",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 32277,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://qi-m-2402058.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://32277.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avacloud-dev.io/c908add6-74c5-4407-8091-18762786a0b9"
|
||||
],
|
||||
"shortName": "QI M 2402058",
|
||||
"slug": "qi-m-2402058",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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",
|
||||
|
||||
@@ -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;
|
||||
@@ -9,9 +9,7 @@ export default {
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [
|
||||
"https://faucet.securechain.ai"
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://Qme2Z8VFYjhHGfLQPBnfseNpEdRfmTDy7VXqrdH4AHETJf",
|
||||
"width": 150,
|
||||
|
||||
@@ -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;
|
||||
@@ -0,0 +1,31 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 37375,
|
||||
"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 2402057",
|
||||
"nativeCurrency": {
|
||||
"name": "QI M 2402057 Token",
|
||||
"symbol": "ACI",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 37375,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://qi-m-2402057.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://37375.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avacloud-dev.io/c908add6-74c5-4407-8091-18762786a0b9"
|
||||
],
|
||||
"shortName": "QI M 2402057",
|
||||
"slug": "qi-m-2402057",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -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;
|
||||
@@ -0,0 +1,31 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 37767,
|
||||
"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": "Tnet 01-15",
|
||||
"nativeCurrency": {
|
||||
"name": "Tnet 01-15 Token",
|
||||
"symbol": "LFC",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 37767,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://tnet-01-15.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://37767.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "Tnet 01-15",
|
||||
"slug": "tnet-01-15",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -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",
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user