Compare commits

..
Author SHA1 Message Date
Joaquim VergesGitHubgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
869bbcfa68 Version Packages (#8237)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-10-11 07:42:22 +07:00
Prithvish BaidyaandGitHub 35c7d21e36 [Vault SDK] Add Solana operations support (#8168) 2025-10-11 07:37:27 +07:00
MananTank edf3aad8c4 [BLD-396] Dashboard: Fix changing tabs in /nfts/<id> page shows full page loading indicator (#8224)
<!--

## title your PR with this format: "[SDK/Dashboard/Portal] Feature/Fix: Concise title for the changes"

If you did not copy the branch name from Linear, paste the issue tag here (format is TEAM-0000):

## Notes for the reviewer

Anything important to call out? Be sure to also clarify these in your comments.

## How to test

Unit tests, playground, etc.

-->

<!-- start pr-codex -->

---

## PR-Codex overview
This PR enhances the `TokenIdPage` component by introducing `Suspense` for improved loading state handling and adjusting the layout of the loading spinner.

### Detailed summary
- Added `Suspense` for handling loading states.
- Updated the loading spinner layout with additional padding (`py-20`).
- Wrapped the tab rendering logic within the `Suspense` component for better user experience during data fetching.

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

<!-- end pr-codex -->

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- New Features
  - Introduced a loading experience for NFT tab content using Suspense, providing a fallback UI while content loads.
  - Improves responsiveness when switching tabs by deferring heavy content until ready.

- Style
  - Increased vertical padding for the pending NFT state to enhance visual spacing and readability.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-10-09 22:14:06 +00:00
Joaquim VergesGitHubgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
ab4190e23a Version Packages (#8230)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-10-09 14:19:19 -07:00
Joaquim VergesandGitHub 9086cdba20 [Playground] Add payTo parameter to X402 payment API (#8231) 2025-10-09 14:19:00 -07:00
Joaquim VergesandGitHub 0082e996ca [SDK] Add x402 recipientAddress to payment request and replace deprecated payTo (#8226) 2025-10-09 13:51:19 -07:00
25 changed files with 3191 additions and 66 deletions
@@ -2,7 +2,7 @@
import { ExternalLinkIcon } from "lucide-react";
import Link from "next/link";
import { useState } from "react";
import { Suspense, useState } from "react";
import type { NFT, ThirdwebClient, ThirdwebContract } from "thirdweb";
import { getNFT as getErc721NFT } from "thirdweb/extensions/erc721";
import { getNFT as getErc1155NFT } from "thirdweb/extensions/erc1155";
@@ -89,7 +89,7 @@ export const TokenIdPage: React.FC<TokenIdPageProps> = ({
if (isPending) {
return (
<div className="flex h-[400px] items-center justify-center">
<div className="flex h-[400px] items-center justify-center py-20">
<Spinner className="size-10" />
</div>
);
@@ -179,15 +179,26 @@ export const TokenIdPage: React.FC<TokenIdPageProps> = ({
<NFTDetailsTab client={contract.client} nft={nft} />
)}
{tabs.map((tb) => {
return (
tb.title === tab && (
<div className="w-full" key={tb.title}>
{tb.children}
<Suspense
fallback={
<div className="h-full">
<div className="flex items-center gap-1.5">
<Spinner className="size-4" />
<p className="text-sm text-muted-foreground"> Loading </p>
</div>
)
);
})}
</div>
}
>
{tabs.map((tb) => {
return (
tb.title === tab && (
<div className="w-full" key={tb.title}>
{tb.children}
</div>
)
);
})}
</Suspense>
</div>
</div>
</div>
@@ -7,24 +7,25 @@ import { token } from "../../payments/x402/components/constants";
// Allow streaming responses up to 5 minutes
export const maxDuration = 300;
const client = createThirdwebClient({
secretKey: process.env.THIRDWEB_SECRET_KEY as string,
});
const BACKEND_WALLET_ADDRESS = process.env.ENGINE_BACKEND_WALLET as string;
// const BACKEND_WALLET_ADDRESS = process.env.ENGINE_BACKEND_SMART_WALLET as string;
const ENGINE_VAULT_ACCESS_TOKEN = process.env
.ENGINE_VAULT_ACCESS_TOKEN as string;
// const API_URL = `https://${process.env.NEXT_PUBLIC_API_URL || "api.thirdweb.com"}`;
const API_URL = "http://localhost:3030";
const twFacilitator = facilitator({
baseUrl: `${API_URL}/v1/payments/x402`,
client,
serverWalletAddress: BACKEND_WALLET_ADDRESS,
vaultAccessToken: ENGINE_VAULT_ACCESS_TOKEN,
});
export async function GET(request: NextRequest) {
const client = createThirdwebClient({
secretKey: process.env.THIRDWEB_SECRET_KEY as string,
});
const BACKEND_WALLET_ADDRESS = process.env.ENGINE_BACKEND_WALLET as string;
// const BACKEND_WALLET_ADDRESS = process.env.ENGINE_BACKEND_SMART_WALLET as string;
const ENGINE_VAULT_ACCESS_TOKEN = process.env
.ENGINE_VAULT_ACCESS_TOKEN as string;
const API_URL = `https://${process.env.NEXT_PUBLIC_API_URL || "api.thirdweb.com"}`;
const twFacilitator = facilitator({
baseUrl: `${API_URL}/v1/payments/x402`,
client,
serverWalletAddress: BACKEND_WALLET_ADDRESS,
vaultAccessToken: ENGINE_VAULT_ACCESS_TOKEN,
});
const paymentData = request.headers.get("X-PAYMENT");
const queryParams = request.nextUrl.searchParams;
@@ -38,6 +39,7 @@ export async function GET(request: NextRequest) {
}
const amount = queryParams.get("amount") || "0.01";
const payTo = queryParams.get("payTo") ?? undefined;
const tokenAddress = queryParams.get("tokenAddress") || token.address;
const decimals = queryParams.get("decimals") || token.decimals.toString();
const waitUntil =
@@ -49,6 +51,7 @@ export async function GET(request: NextRequest) {
method: "GET",
paymentData,
network: defineChain(Number(chainId)),
payTo,
price: {
amount: toUnits(amount, parseInt(decimals)).toString(),
asset: {
@@ -45,6 +45,7 @@ export function X402LeftSection(props: {
const tokenId = useId();
const amountId = useId();
const waitUntilId = useId();
const payToId = useId();
const handleChainChange = (chainId: number) => {
setSelectedChain(chainId);
@@ -81,6 +82,13 @@ export function X402LeftSection(props: {
}));
};
const handlePayToChange = (e: React.ChangeEvent<HTMLInputElement>) => {
setOptions((v) => ({
...v,
payTo: e.target.value as `0x${string}`,
}));
};
const handleWaitUntilChange = (
value: "simulated" | "submitted" | "confirmed",
) => {
@@ -140,6 +148,22 @@ export function X402LeftSection(props: {
)}
</div>
{/* Pay To input */}
<div className="flex flex-col gap-2">
<Label htmlFor={payToId}>Pay To Address</Label>
<Input
id={payToId}
type="text"
placeholder="0x..."
value={options.payTo}
onChange={handlePayToChange}
className="bg-card"
/>
<p className="text-sm text-muted-foreground">
The wallet address that will receive the payment
</p>
</div>
{/* Wait Until selection */}
<div className="flex flex-col gap-2">
<Label htmlFor={waitUntilId}>Wait Until</Label>
+8
View File
@@ -1,5 +1,13 @@
# wagmi-inapp
## 0.0.7
### Patch Changes
- Updated dependencies [[`0082e99`](https://github.com/thirdweb-dev/js/commit/0082e996cae47a326110e74457c72b3f3936743d), [`0082e99`](https://github.com/thirdweb-dev/js/commit/0082e996cae47a326110e74457c72b3f3936743d)]:
- thirdweb@5.108.12
- @thirdweb-dev/wagmi-adapter@0.2.162
## 0.0.6
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "wagmi-inapp",
"private": true,
"version": "0.0.6",
"version": "0.0.7",
"type": "module",
"scripts": {
"dev": "vite",
+7
View File
@@ -1,5 +1,12 @@
# @thirdweb-dev/nebula
## 0.2.65
### Patch Changes
- Updated dependencies [[`0082e99`](https://github.com/thirdweb-dev/js/commit/0082e996cae47a326110e74457c72b3f3936743d), [`0082e99`](https://github.com/thirdweb-dev/js/commit/0082e996cae47a326110e74457c72b3f3936743d)]:
- thirdweb@5.108.12
## 0.2.64
### Patch Changes
+1 -1
View File
@@ -57,5 +57,5 @@
"type": "module",
"types": "./dist/types/exports/thirdweb.d.ts",
"typings": "./dist/types/exports/thirdweb.d.ts",
"version": "0.2.64"
"version": "0.2.65"
}
+8
View File
@@ -1,5 +1,13 @@
# thirdweb
## 5.108.12
### Patch Changes
- [#8226](https://github.com/thirdweb-dev/js/pull/8226) [`0082e99`](https://github.com/thirdweb-dev/js/commit/0082e996cae47a326110e74457c72b3f3936743d) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Add optional recipientAddress to x402 settlePayment
- [#8226](https://github.com/thirdweb-dev/js/pull/8226) [`0082e99`](https://github.com/thirdweb-dev/js/commit/0082e996cae47a326110e74457c72b3f3936743d) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Expose 7702 utility functions
## 5.108.11
### Patch Changes
+1 -1
View File
@@ -430,5 +430,5 @@
}
},
"typings": "./dist/types/exports/thirdweb.d.ts",
"version": "5.108.11"
"version": "5.108.12"
}
@@ -54,6 +54,7 @@ export {
createSessionKey,
isCreateSessionKeySupported,
} from "../../extensions/erc7702/account/createSessionKey.js";
export type {
Condition,
LimitType,
+3 -1
View File
@@ -44,6 +44,7 @@ export async function decodePaymentRequest(
price,
network,
facilitator,
payTo,
resourceUrl,
routeConfig = {},
method,
@@ -104,7 +105,7 @@ export async function decodePaymentRequest(
resource: resourceUrl,
description: description ?? "",
mimeType: mimeType ?? "application/json",
payTo: getAddress(facilitator.address),
payTo: getAddress(facilitator.address), // always pay to the facilitator address first
maxTimeoutSeconds: maxTimeoutSeconds ?? 300,
asset: getAddress(asset.address),
outputSchema: {
@@ -117,6 +118,7 @@ export async function decodePaymentRequest(
output: outputSchema,
},
extra: {
recipientAddress: payTo, // input payTo is the final recipient address
...((asset as ERC20TokenAmount["asset"]).eip712 ?? {}),
},
});
+1 -1
View File
@@ -34,7 +34,7 @@ export type PaymentArgs = {
facilitator: ThirdwebX402Facilitator;
/** Optional configuration for the payment middleware route */
routeConfig?: PaymentMiddlewareConfig;
/** @deprecated Use facilitator.address instead */
/** Optional recipient address to receive the payment if different from your facilitator address */
payTo?: string;
};
+6
View File
@@ -1,5 +1,11 @@
# @thirdweb-dev/react-native-adapter
## 0.1.0
### Minor Changes
- [#8168](https://github.com/thirdweb-dev/js/pull/8168) [`35c7d21`](https://github.com/thirdweb-dev/js/commit/35c7d21e368f9ea5636c8663ba31b7d473b5b343) Thanks [@d4mr](https://github.com/d4mr)! - Added Vault operations support for Solana.
## 0.0.3
### Patch Changes
+1 -13
View File
@@ -1,16 +1,4 @@
{
"$schema": "https://biomejs.dev/schemas/2.0.6/schema.json",
"extends": "//",
"overrides": [
{
"assist": {
"actions": {
"source": {
"useSortedKeys": "off"
}
}
},
"includes": ["package.json"]
}
]
"extends": "//"
}
+11 -2
View File
@@ -7,12 +7,20 @@
"@noble/ciphers": "^1.2.1",
"@noble/curves": "1.8.2",
"@noble/hashes": "1.7.2",
"@solana/addresses": "^3.0.0",
"@solana/keys": "^3.0.0",
"@solana/kit": "^4.0.0",
"@solana/rpc": "^3.0.0",
"@solana/transactions": "^3.0.0",
"abitype": "1.0.8",
"jose": "6.0.11"
},
"devDependencies": {
"@biomejs/biome": "2.0.6",
"rimraf": "6.0.1"
"@solana-program/system": "^0.8.1",
"bs58": "^6.0.0",
"rimraf": "6.0.1",
"vitest": "3.2.4"
},
"engines": {
"node": ">=18"
@@ -51,6 +59,7 @@
"build:esm": "tsc --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm && printf '{\"type\": \"module\",\"sideEffects\":false}' > ./dist/esm/package.json",
"build:types": "tsc --project ./tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap",
"clean": "rimraf dist",
"test:solana": "vitest ./tests/solana.test.ts",
"dev": "tsc --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm --watch",
"fix": "biome check ./src --fix",
"format": "biome format ./src --write",
@@ -59,5 +68,5 @@
"type": "module",
"types": "./dist/types/exports/thirdweb.d.ts",
"typings": "./dist/types/exports/thirdweb.d.ts",
"version": "0.0.3"
"version": "0.1.0"
}
@@ -3,15 +3,19 @@ export {
createEoa,
createServiceAccount,
createSignedAccessToken,
createSolanaAccount,
createVaultClient,
getServiceAccount,
listAccessTokens,
listEoas,
listSolanaAccounts,
ping,
revokeAccessToken,
rotateServiceAccount,
signAuthorization,
signMessage,
signSolanaMessage,
signSolanaTransaction,
signStructuredMessage,
signTransaction,
signTypedData,
@@ -31,6 +35,7 @@ export type {
CreateAccessTokenPayload,
CreateEoaPayload,
CreateServiceAccountPayload,
CreateSolanaAccountPayload,
EncryptedPayload,
GenericPayload,
GetAccessTokensData,
@@ -38,6 +43,7 @@ export type {
GetServiceAccountPayload,
ListAccessTokensPayload,
ListEoaPayload,
ListSolanaAccountsPayload,
Payload,
PingPayload,
PolicyComponent,
@@ -49,6 +55,8 @@ export type {
SignAuthorizationRules,
SignedAuthorization,
SignMessagePayload,
SignSolanaMessagePayload,
SignSolanaTransactionPayload,
SignStructuredMessageData,
SignStructuredMessageOptions,
SignStructuredMessagePayload,
+102 -1
View File
@@ -3,18 +3,27 @@ import { x25519 } from "@noble/curves/ed25519";
import { hkdf } from "@noble/hashes/hkdf";
import { sha256 } from "@noble/hashes/sha256";
import { bytesToHex, hexToBytes, randomBytes } from "@noble/hashes/utils";
import {
address,
getBase58Encoder,
getTransactionDecoder,
getTransactionEncoder,
} from "@solana/kit";
import type { TypedData } from "abitype";
import * as jose from "jose";
import type {
CheckedSignTypedDataPayload,
CreateAccessTokenPayload,
CreateEoaPayload,
CreateServiceAccountPayload,
CreateSolanaAccountPayload,
EncryptedPayload,
GetServiceAccountPayload,
ListAccessTokensPayload,
ListEoaPayload,
ListSolanaAccountsPayload,
Payload,
PingPayload,
PolicyComponent,
@@ -23,6 +32,8 @@ import type {
RotateServiceAccountPayload,
SignAuthorizationPayload,
SignMessagePayload,
SignSolanaMessagePayload,
SignSolanaTransactionPayload,
SignStructuredMessagePayload,
SignTransactionPayload,
UnencryptedErrorResponse,
@@ -447,6 +458,96 @@ export function listAccessTokens({
});
}
// ========== Solana Functions ==========
export function createSolanaAccount({
client,
request: options,
}: PayloadParams<CreateSolanaAccountPayload>) {
return sendRequest<CreateSolanaAccountPayload>({
client,
request: {
operation: "solana:create",
...options,
},
});
}
export function listSolanaAccounts({
client,
request: options,
}: PayloadParams<ListSolanaAccountsPayload>) {
return sendRequest<ListSolanaAccountsPayload>({
client,
request: {
operation: "solana:list",
...options,
},
});
}
export function signSolanaTransaction({
client,
request: options,
}: PayloadParams<SignSolanaTransactionPayload>) {
return sendRequest<SignSolanaTransactionPayload>({
client,
request: {
operation: "solana:signTransaction",
...options,
},
});
}
/**
* Reconstruct a signed solana transaction from the vault signature using @solana/kit
*/
export function reconstructSolanaSignedTransaction(
base64Transaction: string,
base58Signature: string,
signerPubkey: string,
): Uint8Array {
// Decode the base64 transaction into bytes
const base64TransactionBytes = new Uint8Array(
Buffer.from(base64Transaction, "base64"),
);
// Decode the transaction to get its structure
const transactionDecoder = getTransactionDecoder();
const transaction = transactionDecoder.decode(base64TransactionBytes);
// Decode the base58 signature to bytes
const base58Encoder = getBase58Encoder();
const signatureBytes = base58Encoder.encode(base58Signature);
// Add the signature to the transaction
const signedTransaction = {
...transaction,
signatures: {
...transaction.signatures,
[address(signerPubkey)]: signatureBytes,
},
};
// Re-encode the signed transaction
const transactionEncoder = getTransactionEncoder();
const signedTransactionBytes = transactionEncoder.encode(signedTransaction);
return new Uint8Array(signedTransactionBytes);
}
export function signSolanaMessage({
client,
request: options,
}: PayloadParams<SignSolanaMessagePayload>) {
return sendRequest<SignSolanaMessagePayload>({
client,
request: {
operation: "solana:signMessage",
...options,
},
});
}
const SIGNED_TOKEN_PREFIX = "vt_sat_";
const DEFAULT_SIGNING_CONTEXT = "encryption"; // Default context for HKDF
+154 -2
View File
@@ -58,7 +58,7 @@ export type UnencryptedErrorResponse = {
type EncryptedError = {
code: string;
message: string;
details?: string;
details?: string | { reason: string };
};
type GenericSuccessResponse<Data> = {
@@ -148,6 +148,50 @@ type SignMessageOptions = {
format?: "text" | "hex";
};
// ========== Solana Options Types ==========
// Solana message type that's compatible with both Kit and our Rust serialization
export type SolanaVersionedMessage = {
version: "legacy" | "v0";
header: {
numRequiredSignatures: number;
numReadonlySignedAccounts: number;
numReadonlyUnsignedAccounts: number;
};
staticAccountKeys: string[]; // Use string instead of SolanaAddress for simplicity
recentBlockhash: string;
instructions: Array<{
programIdIndex: number;
accountKeyIndexes: number[];
data: Uint8Array;
}>;
addressTableLookups?: Array<{
accountKey: string; // Use string instead of SolanaAddress
writableIndexes: number[];
readonlyIndexes: number[];
}>;
};
type CreateSolanaAccountOptions = {
metadata: Record<string, MetadataValue>;
};
type GetSolanaAccountsOptions = {
page?: number;
pageSize?: number;
};
type SignSolanaTransactionOptions = {
transaction: string; // Base64 encoded VersionedTransaction
from: string; // Use string for Solana public key
};
type SignSolanaMessageOptions = {
message: string;
from: string; // Use string for Solana public key
format?: "text" | "hex";
};
type CheckedSignTypedDataOptions<
Types extends TypedData,
PrimaryType extends keyof Types | "EIP712Domain" = keyof Types,
@@ -315,12 +359,63 @@ export type PolicyComponent =
useropV07?: UserOperationV07Rules;
};
}
| {
type: "solana:create";
requiredMetadataPatterns?: MetadataRule[];
allowedMetadataPatterns?: MetadataRule[];
}
| {
type: "solana:read";
metadataPatterns?: MetadataRule[];
}
| {
type: "solana:signTransaction";
allowlist?: string[]; // Use string for Solana addresses
metadataPatterns?: MetadataRule[];
payloadPatterns?: Record<string, Rule[]>;
transactionPatterns?: SolanaTransactionPatterns;
}
| {
type: "solana:signMessage";
allowlist?: string[]; // Use string for Solana addresses
metadataPatterns?: MetadataRule[];
messagePattern?: string;
}
| {
type: "accessToken:read";
metadataPatterns?: MetadataRule[];
revealSensitive: boolean;
};
// Solana transaction patterns
export type SolanaTransactionPatterns = {
programs?: ProgramAccessControl;
writableAccounts?: AccountAccessControl;
requiredCosigners?: string[];
maxInstructions?: number;
canPayFees?: boolean;
};
export type ProgramAccessControl =
| {
type: "allow";
programs: string[];
}
| {
type: "deny";
programs: string[];
};
export type AccountAccessControl =
| {
type: "allow";
accounts: string[];
}
| {
type: "deny";
accounts: string[];
};
type OwnerType = string; // Define based on your eoa models
type CreateAccessTokenOptions = {
@@ -399,6 +494,30 @@ type SignMessageData = {
signature: string;
};
// ========== Solana Data Types ==========
type CreateSolanaAccountData = {
pubkey: string;
metadata: Record<string, MetadataValue>;
createdAt: string;
updatedAt: string;
};
type GetSolanaAccountsData = {
accounts: CreateSolanaAccountData[];
totalCount: number;
page: number;
pageSize: number;
};
type SignSolanaTransactionData = {
signature: string; // Base58 encoded signature
signerPubkey: string; // Use string for Solana public key
};
type SignSolanaMessageData = {
signature: string; // Base58 encoded signature
};
type SignTypedDataData = {
signature: string;
};
@@ -553,6 +672,35 @@ export type RevokeAccessTokenPayload = GenericPayload<{
data: AccessTokenData;
}>;
// ========== Solana Payload Types ==========
export type CreateSolanaAccountPayload = GenericPayload<{
operation: "solana:create";
auth: Auth;
options: CreateSolanaAccountOptions;
data: CreateSolanaAccountData;
}>;
export type ListSolanaAccountsPayload = GenericPayload<{
operation: "solana:list";
auth: Auth;
options: GetSolanaAccountsOptions;
data: GetSolanaAccountsData;
}>;
export type SignSolanaTransactionPayload = GenericPayload<{
operation: "solana:signTransaction";
auth: Auth;
options: SignSolanaTransactionOptions;
data: SignSolanaTransactionData;
}>;
export type SignSolanaMessagePayload = GenericPayload<{
operation: "solana:signMessage";
auth: Auth;
options: SignSolanaMessageOptions;
data: SignSolanaMessageData;
}>;
// ========== Union of all payloads ==========
export type Payload =
| PingPayload
@@ -568,4 +716,8 @@ export type Payload =
| RevokeAccessTokenPayload
| SignAuthorizationPayload
| SignStructuredMessagePayload
| ListAccessTokensPayload;
| ListAccessTokensPayload
| CreateSolanaAccountPayload
| ListSolanaAccountsPayload
| SignSolanaTransactionPayload
| SignSolanaMessagePayload;
+6
View File
@@ -0,0 +1,6 @@
# Solana RPC Configuration
SOLANA_RPC_HTTP_URL=http://127.0.0.1:8899
SOLANA_RPC_WS_URL=ws://127.0.0.1:8900
# Vault Configuration
VAULT_URL=http://localhost:3000
+11
View File
@@ -0,0 +1,11 @@
import { dirname, join } from "node:path";
import { loadEnvFile } from "node:process";
import { fileURLToPath } from "node:url";
const __dirname = dirname(fileURLToPath(import.meta.url));
try {
loadEnvFile(join(__dirname, ".env"));
} catch (_error) {
console.warn("No .env file found, using default values");
}
File diff suppressed because it is too large Load Diff
+17
View File
@@ -0,0 +1,17 @@
import { join } from "node:path";
import { defineConfig } from "vitest/config";
export default defineConfig({
test: {
globals: true,
environment: "node",
testTimeout: 60000, // 60 seconds default timeout
hookTimeout: 60000, // 60 seconds for beforeAll/afterAll
teardownTimeout: 10000,
sequence: {
shuffle: false, // Run tests in order
},
// load .env.test
setupFiles: [join(__dirname, "./tests/env-setup.ts")],
},
});
+2
View File
@@ -1,5 +1,7 @@
# @thirdweb-dev/wagmi-adapter
## 0.2.162
## 0.2.161
## 0.2.160
+1 -1
View File
@@ -56,5 +56,5 @@
"type": "module",
"types": "./dist/types/exports/thirdweb.d.ts",
"typings": "./dist/types/exports/thirdweb.d.ts",
"version": "0.2.161"
"version": "0.2.162"
}
+1076 -15
View File
File diff suppressed because it is too large Load Diff