From ffc588b1e626bc2356083b2d4b9ef6de3c980fac Mon Sep 17 00:00:00 2001 From: JoE11-y Date: Mon, 13 Apr 2026 23:26:24 +0100 Subject: [PATCH 1/6] feat: integrate stellar to proofbridge ui --- .../migration.sql | 2 + apps/backend-relayer/prisma/schema.prisma | 4 + .../modules/admin/admin.controller.spec.ts | 2 +- .../src/modules/ads/ad.service.ts | 32 +- .../src/modules/ads/dto/ad.dto.ts | 37 +- .../src/modules/routes/route.service.ts | 22 +- .../src/modules/token/dto/token.dto.ts | 32 + .../src/modules/token/token.service.ts | 73 +- .../src/modules/trades/dto/trade.dto.ts | 31 +- .../src/modules/trades/trade.service.ts | 26 +- apps/backend-relayer/src/types/index.d.ts | 34 +- .../test/e2e/token.e2e-spec.ts | 119 +- apps/frontend/abis/AdManager.abi.ts | 2454 ++++++--- apps/frontend/abis/ERC20.abi.ts | 390 +- apps/frontend/abis/orderPortal.abi.ts | 1758 +++++-- apps/frontend/app/(app)/bridge/page.tsx | 5 +- apps/frontend/app/layout.tsx | 15 +- .../ad-management-ui/AddLiquidity.tsx | 13 +- .../components/bridge-ui/BridgeTab.tsx | 86 +- .../frontend/components/bridge-ui/SellAdd.tsx | 2 +- .../frontend/components/bridge-ui/TradeAd.tsx | 20 +- .../connect-wallet/ConnectWalletButton.tsx | 84 +- apps/frontend/components/landing/Approach.tsx | 4 +- apps/frontend/components/landing/Features.tsx | 8 +- apps/frontend/components/landing/Hero-Alt.tsx | 4 +- apps/frontend/components/landing/Hero.tsx | 2 +- .../components/landing/ReImagining.tsx | 4 +- .../components/orders/OrdersTable.tsx | 40 +- .../components/providers/RainbowKit.tsx | 45 +- .../components/providers/StellarWallet.tsx | 193 + apps/frontend/hooks/useAds.ts | 199 +- apps/frontend/hooks/useStellarAuth.ts | 54 + apps/frontend/hooks/useTrades.ts | 348 +- apps/frontend/lib/chain-icons.ts | 2 + apps/frontend/lib/chains.ts | 14 + apps/frontend/lib/stellar-adapter.ts | 45 + apps/frontend/package.json | 2 + .../public/assets/logos/stellar-logo.svg | 1 + .../public/assets/logos/stellar-xlm-logo.png | Bin 0 -> 77118 bytes apps/frontend/services/ads.service.ts | 8 +- apps/frontend/services/auth.service.ts | 60 + apps/frontend/types/ads.ts | 54 +- apps/frontend/types/chains.ts | 3 + apps/frontend/types/tokens.ts | 8 +- apps/frontend/types/trades.ts | 83 +- apps/frontend/utils/amount.ts | 15 + apps/frontend/utils/evm/address.ts | 19 + apps/frontend/utils/evm/index.ts | 2 + apps/frontend/utils/evm/typedData.ts | 122 + apps/frontend/utils/format-address.ts | 42 + apps/frontend/utils/stellar/actions.ts | 246 + apps/frontend/utils/stellar/address.ts | 44 + apps/frontend/utils/stellar/index.ts | 4 + apps/frontend/utils/stellar/invoke.ts | 74 + apps/frontend/utils/stellar/scval.ts | 112 + apps/frontend/utils/stellar/trustline.ts | 91 + pnpm-lock.yaml | 4430 +++++++++++++++-- 57 files changed, 9417 insertions(+), 2206 deletions(-) create mode 100644 apps/backend-relayer/prisma/migrations/20260413000000_add_token_asset_issuer/migration.sql create mode 100644 apps/frontend/components/providers/StellarWallet.tsx create mode 100644 apps/frontend/hooks/useStellarAuth.ts create mode 100644 apps/frontend/lib/stellar-adapter.ts create mode 100644 apps/frontend/public/assets/logos/stellar-logo.svg create mode 100644 apps/frontend/public/assets/logos/stellar-xlm-logo.png create mode 100644 apps/frontend/services/auth.service.ts create mode 100644 apps/frontend/utils/amount.ts create mode 100644 apps/frontend/utils/evm/address.ts create mode 100644 apps/frontend/utils/evm/index.ts create mode 100644 apps/frontend/utils/evm/typedData.ts create mode 100644 apps/frontend/utils/format-address.ts create mode 100644 apps/frontend/utils/stellar/actions.ts create mode 100644 apps/frontend/utils/stellar/address.ts create mode 100644 apps/frontend/utils/stellar/index.ts create mode 100644 apps/frontend/utils/stellar/invoke.ts create mode 100644 apps/frontend/utils/stellar/scval.ts create mode 100644 apps/frontend/utils/stellar/trustline.ts diff --git a/apps/backend-relayer/prisma/migrations/20260413000000_add_token_asset_issuer/migration.sql b/apps/backend-relayer/prisma/migrations/20260413000000_add_token_asset_issuer/migration.sql new file mode 100644 index 0000000..60ad3e4 --- /dev/null +++ b/apps/backend-relayer/prisma/migrations/20260413000000_add_token_asset_issuer/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "Token" ADD COLUMN "assetIssuer" TEXT; diff --git a/apps/backend-relayer/prisma/schema.prisma b/apps/backend-relayer/prisma/schema.prisma index d4c46e1..0e14944 100644 --- a/apps/backend-relayer/prisma/schema.prisma +++ b/apps/backend-relayer/prisma/schema.prisma @@ -83,6 +83,10 @@ model Token { kind TokenKind @default(ERC20) decimals Int + /// Stellar classic-asset issuer (G-strkey). Populated only for SAC tokens; + /// null for NATIVE/ERC20/SEP41. Asset code is read from `symbol`. + assetIssuer String? + chainUid String chain Chain @relation(fields: [chainUid], references: [id], onDelete: Cascade) diff --git a/apps/backend-relayer/src/modules/admin/admin.controller.spec.ts b/apps/backend-relayer/src/modules/admin/admin.controller.spec.ts index 48951f4..b91153d 100644 --- a/apps/backend-relayer/src/modules/admin/admin.controller.spec.ts +++ b/apps/backend-relayer/src/modules/admin/admin.controller.spec.ts @@ -144,7 +144,7 @@ describe('AdminController (unit)', () => { chain: {} as any, }; - const created = { id: 'tok-1', ...dto }; + const created = { id: 'tok-1', assetIssuer: null, ...dto }; const spy = jest .spyOn(service, 'createToken') diff --git a/apps/backend-relayer/src/modules/ads/ad.service.ts b/apps/backend-relayer/src/modules/ads/ad.service.ts index b80cf21..d8f0873 100644 --- a/apps/backend-relayer/src/modules/ads/ad.service.ts +++ b/apps/backend-relayer/src/modules/ads/ad.service.ts @@ -116,7 +116,7 @@ export class AdsService { maxAmount: true, adToken: { select: { - chain: { select: { chainId: true } }, + chain: { select: { chainId: true, kind: true } }, address: true, symbol: true, name: true, @@ -126,7 +126,7 @@ export class AdsService { }, orderToken: { select: { - chain: { select: { chainId: true } }, + chain: { select: { chainId: true, kind: true } }, address: true, symbol: true, name: true, @@ -197,6 +197,7 @@ export class AdsService { address: i.adToken.address, decimals: i.adToken.decimals, chainId: i.adToken.chain.chainId.toString(), + chainKind: i.adToken.chain.kind as string, kind: i.adToken.kind as string, }, orderToken: { @@ -205,6 +206,7 @@ export class AdsService { address: i.orderToken.address, decimals: i.orderToken.decimals, chainId: i.orderToken.chain.chainId.toString(), + chainKind: i.orderToken.chain.kind as string, kind: i.orderToken.kind as string, }, }; @@ -244,7 +246,7 @@ export class AdsService { metadata: true, adToken: { select: { - chain: { select: { chainId: true } }, + chain: { select: { chainId: true, kind: true } }, address: true, symbol: true, name: true, @@ -254,7 +256,7 @@ export class AdsService { }, orderToken: { select: { - chain: { select: { chainId: true } }, + chain: { select: { chainId: true, kind: true } }, address: true, symbol: true, name: true, @@ -301,6 +303,7 @@ export class AdsService { address: ad.adToken.address, decimals: ad.adToken.decimals, chainId: ad.adToken.chain.chainId.toString(), + chainKind: ad.adToken.chain.kind as string, kind: ad.adToken.kind as string, }, orderToken: { @@ -309,6 +312,7 @@ export class AdsService { address: ad.orderToken.address, decimals: ad.orderToken.decimals, chainId: ad.orderToken.chain.chainId.toString(), + chainKind: ad.orderToken.chain.kind as string, kind: ad.orderToken.kind as string, }, metadata: ad.metadata ?? null, @@ -497,7 +501,10 @@ export class AdsService { return reqContractDetails; }); - return requestDetails; + return { + ...requestDetails, + chainKind: route.adToken.chain.kind as string, + }; } catch (e) { if (e instanceof Error) { if (e instanceof HttpException) throw e; @@ -618,7 +625,10 @@ export class AdsService { return entry; }); - return reqContractDetails; + return { + ...reqContractDetails, + chainKind: ad.route.adToken.chain.kind as string, + }; } catch (e) { if (e instanceof Error) { if (e instanceof HttpException) throw e; @@ -762,7 +772,10 @@ export class AdsService { } }); - return reqContractDetails; + return { + ...reqContractDetails, + chainKind: ad.route.adToken.chain.kind as string, + }; } catch (e) { if (e instanceof Error) { if (e instanceof HttpException) throw e; @@ -975,7 +988,10 @@ export class AdsService { } }); - return reqContractDetails; + return { + ...reqContractDetails, + chainKind: ad.route.adToken.chain.kind as string, + }; } catch (e) { if (e instanceof Error) { if (e instanceof HttpException) throw e; diff --git a/apps/backend-relayer/src/modules/ads/dto/ad.dto.ts b/apps/backend-relayer/src/modules/ads/dto/ad.dto.ts index ed04d09..4f43cb3 100644 --- a/apps/backend-relayer/src/modules/ads/dto/ad.dto.ts +++ b/apps/backend-relayer/src/modules/ads/dto/ad.dto.ts @@ -241,13 +241,20 @@ export class TokenDto { symbol!: string; @ApiProperty({ type: String, description: 'Token contract address' }) address!: string; - @ApiProperty({ type: String, description: 'Token decimal places' }) + @ApiProperty({ type: Number, description: 'Token decimal places' }) decimals!: number; @ApiProperty({ type: String, description: 'Blockchain chain ID' }) chainId!: string; @ApiProperty({ - enum: ['ERC20', 'NATIVE'], - description: 'Token kind (e.g., ERC20, NATIVE)', + enum: ['EVM', 'STELLAR'], + description: + 'Kind of the underlying chain — tells the client which address format and signing scheme the token lives on.', + }) + chainKind!: string; + @ApiProperty({ + enum: ['ERC20', 'NATIVE', 'SAC', 'SEP41'], + description: + 'Token kind (EVM: ERC20/NATIVE; Stellar: NATIVE/SAC/SEP41)', }) kind!: string; } @@ -410,6 +417,12 @@ export class CreateAdResponseDto { '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', }) reqHash!: `0x${string}`; + + @ApiProperty({ + enum: ['EVM', 'STELLAR'], + description: 'Kind of chain the ad contract runs on', + }) + chainKind!: 'EVM' | 'STELLAR'; } export class FundAdResponseDto { @ApiProperty({ @@ -461,6 +474,12 @@ export class FundAdResponseDto { '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', }) reqHash!: `0x${string}`; + + @ApiProperty({ + enum: ['EVM', 'STELLAR'], + description: 'Kind of chain the ad contract runs on', + }) + chainKind!: 'EVM' | 'STELLAR'; } export class WithdrawAdResponseDto { @@ -519,6 +538,12 @@ export class WithdrawAdResponseDto { '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', }) reqHash!: `0x${string}`; + + @ApiProperty({ + enum: ['EVM', 'STELLAR'], + description: 'Kind of chain the ad contract runs on', + }) + chainKind!: 'EVM' | 'STELLAR'; } export class ConfirmChainActionADResponseDto { @@ -621,4 +646,10 @@ export class CloseAdResponseDto { '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', }) reqHash!: `0x${string}`; + + @ApiProperty({ + enum: ['EVM', 'STELLAR'], + description: 'Kind of chain the ad contract runs on', + }) + chainKind!: 'EVM' | 'STELLAR'; } diff --git a/apps/backend-relayer/src/modules/routes/route.service.ts b/apps/backend-relayer/src/modules/routes/route.service.ts index ace88f7..c6de13b 100644 --- a/apps/backend-relayer/src/modules/routes/route.service.ts +++ b/apps/backend-relayer/src/modules/routes/route.service.ts @@ -90,7 +90,8 @@ export class RoutesService { address: true, decimals: true, kind: true, - chain: { select: { id: true, name: true, chainId: true } }, + assetIssuer: true, + chain: { select: { id: true, name: true, chainId: true, kind: true } }, }, }, orderToken: { @@ -101,7 +102,8 @@ export class RoutesService { address: true, decimals: true, kind: true, - chain: { select: { id: true, name: true, chainId: true } }, + assetIssuer: true, + chain: { select: { id: true, name: true, chainId: true, kind: true } }, }, }, }, @@ -150,7 +152,8 @@ export class RoutesService { address: true, decimals: true, kind: true, - chain: { select: { id: true, name: true, chainId: true } }, + assetIssuer: true, + chain: { select: { id: true, name: true, chainId: true, kind: true } }, }, }, orderToken: { @@ -161,7 +164,8 @@ export class RoutesService { address: true, decimals: true, kind: true, - chain: { select: { id: true, name: true, chainId: true } }, + assetIssuer: true, + chain: { select: { id: true, name: true, chainId: true, kind: true } }, }, }, }, @@ -232,7 +236,8 @@ export class RoutesService { address: true, decimals: true, kind: true, - chain: { select: { id: true, name: true, chainId: true } }, + assetIssuer: true, + chain: { select: { id: true, name: true, chainId: true, kind: true } }, }, }, orderToken: { @@ -243,7 +248,8 @@ export class RoutesService { address: true, decimals: true, kind: true, - chain: { select: { id: true, name: true, chainId: true } }, + assetIssuer: true, + chain: { select: { id: true, name: true, chainId: true, kind: true } }, }, }, }, @@ -282,10 +288,12 @@ export class RoutesService { address: row.adToken.address, decimals: row.adToken.decimals, kind: row.adToken.kind, + assetIssuer: row.adToken.assetIssuer, chain: { id: row.adToken.chain.id, name: row.adToken.chain.name, chainId: row.adToken.chain.chainId.toString(), + kind: row.adToken.chain.kind, }, }, orderToken: { @@ -295,10 +303,12 @@ export class RoutesService { address: row.orderToken.address, decimals: row.orderToken.decimals, kind: row.orderToken.kind, + assetIssuer: row.orderToken.assetIssuer, chain: { id: row.orderToken.chain.id, name: row.orderToken.chain.name, chainId: row.orderToken.chain.chainId.toString(), + kind: row.orderToken.chain.kind, }, }, }; diff --git a/apps/backend-relayer/src/modules/token/dto/token.dto.ts b/apps/backend-relayer/src/modules/token/dto/token.dto.ts index c5a4fa8..e92b916 100644 --- a/apps/backend-relayer/src/modules/token/dto/token.dto.ts +++ b/apps/backend-relayer/src/modules/token/dto/token.dto.ts @@ -127,6 +127,15 @@ export class CreateTokenDto { message: `kind must be one of: ${Object.values(TokenKind).join(', ')}`, }) kind?: TokenKind; + + @ApiPropertyOptional({ + description: + 'Stellar classic-asset issuer (G-strkey). Required only for SAC tokens.', + example: 'GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN', + }) + @IsOptional() + @IsString() + assetIssuer?: string; } export class UpdateTokenDto { @@ -188,6 +197,15 @@ export class UpdateTokenDto { message: `kind must be one of: ${Object.values(TokenKind).join(', ')}`, }) kind?: TokenKind; + + @ApiPropertyOptional({ + description: + 'Stellar classic-asset issuer (G-strkey). Pass an empty string to clear.', + example: 'GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN', + }) + @IsOptional() + @IsString() + assetIssuer?: string; } export class TokenChainDto { @@ -208,6 +226,12 @@ export class TokenChainDto { type: 'string', }) chainId!: string; + + @ApiProperty({ + description: 'Chain kind', + enum: ['EVM', 'STELLAR'], + }) + kind!: 'EVM' | 'STELLAR'; } export class TokenDataResponseDto { @@ -247,6 +271,14 @@ export class TokenDataResponseDto { }) kind!: string; + @ApiProperty({ + description: + 'Stellar classic-asset issuer (G-strkey). Populated only for SAC tokens.', + type: 'string', + nullable: true, + }) + assetIssuer!: string | null; + @ApiProperty({ description: 'Creation timestamp', type: 'string', diff --git a/apps/backend-relayer/src/modules/token/token.service.ts b/apps/backend-relayer/src/modules/token/token.service.ts index 07a2deb..0dae544 100644 --- a/apps/backend-relayer/src/modules/token/token.service.ts +++ b/apps/backend-relayer/src/modules/token/token.service.ts @@ -1,4 +1,5 @@ import { + BadRequestException, ConflictException, HttpException, HttpStatus, @@ -13,6 +14,36 @@ import { } from './dto/token.dto'; import { TokenRow } from '../../types'; import { getAddress } from 'ethers'; +import { StrKey } from '@stellar/stellar-sdk'; + +/** + * `assetIssuer` is only meaningful for SAC tokens, which wrap a classic + * Stellar asset. Enforce both presence (for SAC) and absence (for the other + * kinds) at the service boundary so data stays consistent. + */ +function validateAssetIssuer( + kind: string | undefined, + assetIssuer: string | undefined, +): void { + if (kind === 'SAC') { + if (!assetIssuer) { + throw new BadRequestException( + 'assetIssuer is required for SAC tokens (classic-asset issuer G-strkey)', + ); + } + if (!StrKey.isValidEd25519PublicKey(assetIssuer)) { + throw new BadRequestException( + 'assetIssuer must be a valid Stellar G-strkey', + ); + } + return; + } + if (assetIssuer) { + throw new BadRequestException( + 'assetIssuer is only allowed for SAC tokens', + ); + } +} @Injectable() export class TokenService { @@ -64,9 +95,10 @@ export class TokenService { address: true, decimals: true, kind: true, + assetIssuer: true, createdAt: true, updatedAt: true, - chain: { select: { id: true, name: true, chainId: true } }, + chain: { select: { id: true, name: true, chainId: true, kind: true } }, }, }); @@ -105,9 +137,10 @@ export class TokenService { address: true, decimals: true, kind: true, + assetIssuer: true, createdAt: true, updatedAt: true, - chain: { select: { id: true, name: true, chainId: true } }, + chain: { select: { id: true, name: true, chainId: true, kind: true } }, }, }); if (!row) throw new NotFoundException('Token not found'); @@ -130,6 +163,7 @@ export class TokenService { } async create(dto: CreateTokenDto) { + validateAssetIssuer(dto.kind, dto.assetIssuer); try { const created = await this.prisma.token.create({ data: { @@ -139,6 +173,7 @@ export class TokenService { address: dto.address.toLowerCase(), decimals: dto.decimals, kind: dto.kind, + assetIssuer: dto.assetIssuer, }, select: { id: true, @@ -147,9 +182,10 @@ export class TokenService { address: true, decimals: true, kind: true, + assetIssuer: true, createdAt: true, updatedAt: true, - chain: { select: { id: true, name: true, chainId: true } }, + chain: { select: { id: true, name: true, chainId: true, kind: true } }, }, }); return this.serialize(created); @@ -167,10 +203,28 @@ export class TokenService { async update(id: string, dto: UpdateTokenDto) { const exists = await this.prisma.token.findUnique({ where: { id }, - select: { id: true }, + select: { id: true, kind: true }, }); if (!exists) throw new NotFoundException('Token not found'); + // Compute the post-update kind so we validate against the row's final + // state, not just what the DTO partially carries. + const nextKind = dto.kind ?? exists.kind; + if (dto.assetIssuer !== undefined) { + validateAssetIssuer( + nextKind, + dto.assetIssuer === '' ? undefined : dto.assetIssuer, + ); + } else if (dto.kind && dto.kind !== exists.kind) { + // Kind is changing without touching assetIssuer. If moving off SAC, the + // caller must also clear assetIssuer explicitly. + if (dto.kind !== 'SAC') { + throw new BadRequestException( + 'Changing kind away from SAC requires clearing assetIssuer (pass an empty string)', + ); + } + } + try { const updated = await this.prisma.token.update({ where: { id }, @@ -181,6 +235,9 @@ export class TokenService { ...(dto.address ? { address: dto.address.toLowerCase() } : {}), ...(dto.decimals !== undefined ? { decimals: dto.decimals } : {}), ...(dto.kind ? { kind: dto.kind } : {}), + ...(dto.assetIssuer !== undefined + ? { assetIssuer: dto.assetIssuer === '' ? null : dto.assetIssuer } + : {}), }, select: { id: true, @@ -189,9 +246,10 @@ export class TokenService { address: true, decimals: true, kind: true, + assetIssuer: true, createdAt: true, updatedAt: true, - chain: { select: { id: true, name: true, chainId: true } }, + chain: { select: { id: true, name: true, chainId: true, kind: true } }, }, }); return this.serialize(updated); @@ -217,15 +275,18 @@ export class TokenService { id: row.id, symbol: row.symbol, name: row.name, - address: getAddress(row.address), + address: + row.chain.kind === 'EVM' ? getAddress(row.address) : row.address, decimals: row.decimals, kind: row.kind, + assetIssuer: row.assetIssuer, createdAt: row.createdAt.toISOString(), updatedAt: row.updatedAt.toISOString(), chain: { id: row.chain.id, name: row.chain.name, chainId: row.chain.chainId.toString(), + kind: row.chain.kind, }, }; } diff --git a/apps/backend-relayer/src/modules/trades/dto/trade.dto.ts b/apps/backend-relayer/src/modules/trades/dto/trade.dto.ts index f61b896..9b9f851 100644 --- a/apps/backend-relayer/src/modules/trades/dto/trade.dto.ts +++ b/apps/backend-relayer/src/modules/trades/dto/trade.dto.ts @@ -158,6 +158,14 @@ export class ChainDto { @ApiProperty({ example: '1' }) chainId!: string; + + @ApiProperty({ + example: 'EVM', + enum: ['EVM', 'STELLAR'], + description: + 'Kind of the underlying chain — tells the client which address format and signing scheme the token lives on.', + }) + kind!: string; } export class TokenDto { @@ -172,8 +180,9 @@ export class TokenDto { @ApiProperty({ example: 'ERC20', - enum: ['ERC20', 'NATIVE'], - description: 'Token kind (e.g., ERC20, NATIVE)', + enum: ['ERC20', 'NATIVE', 'SAC', 'SEP41'], + description: + 'Token kind (EVM: ERC20/NATIVE; Stellar: NATIVE/SAC/SEP41)', }) kind!: string; @@ -393,6 +402,12 @@ export class LockForOrderResponseDto { }) @IsString() orderHash!: string; + + @ApiProperty({ + enum: ['EVM', 'STELLAR'], + description: 'Kind of chain the ad contract runs on', + }) + chainKind!: 'EVM' | 'STELLAR'; } export class OrderPortalParamsDto { @@ -527,6 +542,12 @@ export class CreateOrderRequestContractDetailsDto { }) @IsString() reqHash!: `0x${string}`; + + @ApiProperty({ + enum: ['EVM', 'STELLAR'], + description: 'Kind of chain the order contract runs on', + }) + chainKind!: 'EVM' | 'STELLAR'; } export class CreateTradeRequestContractResponseDto { @@ -630,6 +651,12 @@ export class UnlockOrderResponseDto { }) @IsString() reqHash!: `0x${string}`; + + @ApiProperty({ + enum: ['EVM', 'STELLAR'], + description: 'Kind of chain the unlock runs on', + }) + chainKind!: 'EVM' | 'STELLAR'; } export class ConfirmChainActionTradeResponseDto { diff --git a/apps/backend-relayer/src/modules/trades/trade.service.ts b/apps/backend-relayer/src/modules/trades/trade.service.ts index 04d82e2..b44e0c0 100644 --- a/apps/backend-relayer/src/modules/trades/trade.service.ts +++ b/apps/backend-relayer/src/modules/trades/trade.service.ts @@ -61,7 +61,7 @@ export class TradesService { select: { id: true, symbol: true, - chain: { select: { name: true, chainId: true } }, + chain: { select: { name: true, chainId: true, kind: true } }, kind: true, address: true, decimals: true, @@ -71,7 +71,7 @@ export class TradesService { select: { id: true, symbol: true, - chain: { select: { name: true, chainId: true } }, + chain: { select: { name: true, chainId: true, kind: true } }, kind: true, address: true, decimals: true, @@ -187,7 +187,7 @@ export class TradesService { select: { id: true, symbol: true, - chain: { select: { name: true, chainId: true } }, + chain: { select: { name: true, chainId: true, kind: true } }, kind: true, address: true, decimals: true, @@ -197,7 +197,7 @@ export class TradesService { select: { id: true, symbol: true, - chain: { select: { name: true, chainId: true } }, + chain: { select: { name: true, chainId: true, kind: true } }, kind: true, address: true, decimals: true, @@ -465,7 +465,13 @@ export class TradesService { return { tradeId: trade.id, reqContractDetails }; }); - return result; + return { + ...result, + reqContractDetails: { + ...result.reqContractDetails, + chainKind: ad.route.orderToken.chain.kind as string, + }, + }; } catch (e) { if (e instanceof Error) { if (e instanceof HttpException) throw e; @@ -716,7 +722,10 @@ export class TradesService { }, }); - return reqContractDetails; + return { + ...reqContractDetails, + chainKind: trade.route.adToken.chain.kind as string, + }; } catch (e) { if (e instanceof Error) { if (e instanceof HttpException) throw e; @@ -946,7 +955,10 @@ export class TradesService { }, }); - return requestContractDetails; + return { + ...requestContractDetails, + chainKind: unlockChain.kind as string, + }; } catch (e) { console.log(e); if (e instanceof Error) { diff --git a/apps/backend-relayer/src/types/index.d.ts b/apps/backend-relayer/src/types/index.d.ts index ebbd647..89efb7f 100644 --- a/apps/backend-relayer/src/types/index.d.ts +++ b/apps/backend-relayer/src/types/index.d.ts @@ -28,9 +28,21 @@ type TokenRow = { address: string; decimals: number; kind: string; + assetIssuer: string | null; createdAt: Date; updatedAt: Date; - chain: { id: string; name: string; chainId: bigint }; + chain: { id: string; name: string; chainId: bigint; kind: ChainKind }; +}; + +type RouteTokenEmbed = { + id: string; + symbol: string; + name: string; + address: string; + decimals: number; + kind: string; + assetIssuer: string | null; + chain: { id: string; name: string; chainId: bigint; kind: ChainKind }; }; type RouteRow = { @@ -38,22 +50,6 @@ type RouteRow = { metadata: Prisma.JsonValue | null; createdAt: Date; updatedAt: Date; - adToken: { - id: string; - symbol: string; - name: string; - address: string; - decimals: number; - kind: string; - chain: { id: string; name: string; chainId: bigint }; - }; - orderToken: { - id: string; - symbol: string; - name: string; - address: string; - decimals: number; - kind: string; - chain: { id: string; name: string; chainId: bigint }; - }; + adToken: RouteTokenEmbed; + orderToken: RouteTokenEmbed; }; diff --git a/apps/backend-relayer/test/e2e/token.e2e-spec.ts b/apps/backend-relayer/test/e2e/token.e2e-spec.ts index 3181801..48aa396 100644 --- a/apps/backend-relayer/test/e2e/token.e2e-spec.ts +++ b/apps/backend-relayer/test/e2e/token.e2e-spec.ts @@ -1,7 +1,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import request from 'supertest'; import { INestApplication } from '@nestjs/common'; -import { PrismaClient } from '@prisma/client'; +import { ChainKind, PrismaClient } from '@prisma/client'; +import { Keypair } from '@stellar/stellar-sdk'; import { createTestingApp } from '../setups/create-app'; import { loginAsAdmin, randomAddress, seedChain } from '../setups/utils'; import { getAddress } from 'ethers'; @@ -216,4 +217,120 @@ describe('Tokens E2E', () => { await request(app.getHttpServer()).get(`/v1/tokens/${tokId}`).expect(404); }); + + describe('SAC tokens (Stellar)', () => { + let stellarChain: { id: string; name: string; chainId: bigint }; + const randomContractHex = () => + '0x' + + Array.from({ length: 64 }, () => + Math.floor(Math.random() * 16).toString(16), + ).join(''); + + beforeAll(async () => { + stellarChain = await seedChain(prisma, { kind: ChainKind.STELLAR }); + }); + + it('accepts SAC token with valid assetIssuer', async () => { + const access = await loginAsAdmin(app); + const issuer = Keypair.random().publicKey(); + const address = randomContractHex(); + const res = await request(app.getHttpServer()) + .post('/v1/admin/tokens/create') + .set('Authorization', `Bearer ${access}`) + .send({ + chainUid: stellarChain.id, + symbol: 'USDC', + name: 'USD Coin', + address, + decimals: 7, + kind: 'SAC', + assetIssuer: issuer, + }) + .expect(201); + + expect(res.body).toMatchObject({ + symbol: 'USDC', + kind: 'SAC', + assetIssuer: issuer, + chain: { kind: 'STELLAR' }, + }); + }); + + it('rejects SAC token without assetIssuer (400)', async () => { + const access = await loginAsAdmin(app); + await request(app.getHttpServer()) + .post('/v1/admin/tokens/create') + .set('Authorization', `Bearer ${access}`) + .send({ + chainUid: stellarChain.id, + symbol: 'USDC', + name: 'USD Coin', + address: randomContractHex(), + decimals: 7, + kind: 'SAC', + }) + .expect(400); + }); + + it('rejects malformed assetIssuer (400)', async () => { + const access = await loginAsAdmin(app); + await request(app.getHttpServer()) + .post('/v1/admin/tokens/create') + .set('Authorization', `Bearer ${access}`) + .send({ + chainUid: stellarChain.id, + symbol: 'USDC', + name: 'USD Coin', + address: randomContractHex(), + decimals: 7, + kind: 'SAC', + assetIssuer: 'not-a-g-strkey', + }) + .expect(400); + }); + + it('rejects assetIssuer on non-SAC kinds (400)', async () => { + const access = await loginAsAdmin(app); + await request(app.getHttpServer()) + .post('/v1/admin/tokens/create') + .set('Authorization', `Bearer ${access}`) + .send({ + chainUid: chain.id, + symbol: 'ETH', + name: 'Ether', + address: randomAddress(), + decimals: 18, + kind: 'NATIVE', + assetIssuer: Keypair.random().publicKey(), + }) + .expect(400); + }); + + it('PATCH can clear assetIssuer when moving off SAC', async () => { + const access = await loginAsAdmin(app); + const issuer = Keypair.random().publicKey(); + const create = await request(app.getHttpServer()) + .post('/v1/admin/tokens/create') + .set('Authorization', `Bearer ${access}`) + .send({ + chainUid: stellarChain.id, + symbol: 'USDC', + name: 'USD Coin', + address: randomContractHex(), + decimals: 7, + kind: 'SAC', + assetIssuer: issuer, + }) + .expect(201); + + const tokId = create.body.id as string; + const updated = await request(app.getHttpServer()) + .patch(`/v1/admin/tokens/${tokId}`) + .set('Authorization', `Bearer ${access}`) + .send({ kind: 'SEP41', assetIssuer: '' }) + .expect(200); + expect(updated.body.assetIssuer).toBeNull(); + expect(updated.body.kind).toBe('SEP41'); + }); + }); }); diff --git a/apps/frontend/abis/AdManager.abi.ts b/apps/frontend/abis/AdManager.abi.ts index 541fa59..931f3be 100644 --- a/apps/frontend/abis/AdManager.abi.ts +++ b/apps/frontend/abis/AdManager.abi.ts @@ -1,978 +1,2024 @@ export const AD_MANAGER_ABI = [ { - type: "constructor", - inputs: [ - { name: "admin", type: "address", internalType: "address" }, + "type": "constructor", + "inputs": [ { - name: "_verifier", - type: "address", - internalType: "contract IVerifier", + "name": "admin", + "type": "address", + "internalType": "address" }, { - name: "_merkleManager", - type: "address", - internalType: "contract IMerkleManager", + "name": "_verifier", + "type": "address", + "internalType": "contract IVerifier" }, { - name: "_wNativeToken", - type: "address", - internalType: "contract IwNativeToken", + "name": "_merkleManager", + "type": "address", + "internalType": "contract IMerkleManager" }, + { + "name": "_wNativeToken", + "type": "address", + "internalType": "contract IwNativeToken" + } ], - stateMutability: "nonpayable", + "stateMutability": "nonpayable" }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, { - type: "function", - name: "ADMIN_ROLE", - inputs: [], - outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "type": "fallback", + "stateMutability": "payable" }, { - type: "function", - name: "DEFAULT_ADMIN_ROLE", - inputs: [], - outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "type": "receive", + "stateMutability": "payable" }, { - type: "function", - name: "DOMAIN_TYPEHASH_MIN", - inputs: [], - outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "type": "function", + "name": "ADMIN_ROLE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "NATIVE_TOKEN_ADDRESS", - inputs: [], - outputs: [{ name: "", type: "address", internalType: "address" }], - stateMutability: "view", + "type": "function", + "name": "DEFAULT_ADMIN_ROLE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "ORDER_TYPEHASH", - inputs: [], - outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "type": "function", + "name": "DOMAIN_TYPEHASH_MIN", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "adIds", - inputs: [{ name: "", type: "string", internalType: "string" }], - outputs: [{ name: "", type: "bool", internalType: "bool" }], - stateMutability: "view", + "type": "function", + "name": "NATIVE_TOKEN_ADDRESS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "ads", - inputs: [{ name: "", type: "string", internalType: "string" }], - outputs: [ - { name: "orderChainId", type: "uint256", internalType: "uint256" }, - { name: "adRecipient", type: "address", internalType: "address" }, - { name: "maker", type: "address", internalType: "address" }, - { name: "token", type: "address", internalType: "address" }, - { name: "balance", type: "uint256", internalType: "uint256" }, - { name: "locked", type: "uint256", internalType: "uint256" }, - { name: "open", type: "bool", internalType: "bool" }, + "type": "function", + "name": "ORDER_TYPEHASH", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } ], - stateMutability: "view", + "stateMutability": "view" }, { - type: "function", - name: "availableLiquidity", - inputs: [{ name: "adId", type: "string", internalType: "string" }], - outputs: [{ name: "amount", type: "uint256", internalType: "uint256" }], - stateMutability: "view", + "type": "function", + "name": "adIds", + "inputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "chains", - inputs: [{ name: "", type: "uint256", internalType: "uint256" }], - outputs: [ - { name: "supported", type: "bool", internalType: "bool" }, - { name: "orderPortal", type: "address", internalType: "address" }, + "type": "function", + "name": "ads", + "inputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "orderChainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "adRecipient", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "maker", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "balance", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "locked", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "open", + "type": "bool", + "internalType": "bool" + } ], - stateMutability: "view", + "stateMutability": "view" }, { - type: "function", - name: "checkRequestHashExists", - inputs: [{ name: "message", type: "bytes32", internalType: "bytes32" }], - outputs: [{ name: "", type: "bool", internalType: "bool" }], - stateMutability: "view", + "type": "function", + "name": "availableLiquidity", + "inputs": [ + { + "name": "adId", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "closeAd", - inputs: [ - { name: "signature", type: "bytes", internalType: "bytes" }, - { name: "authToken", type: "bytes32", internalType: "bytes32" }, - { name: "timeToExpire", type: "uint256", internalType: "uint256" }, - { name: "adId", type: "string", internalType: "string" }, - { name: "to", type: "address", internalType: "address" }, + "type": "function", + "name": "chains", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "supported", + "type": "bool", + "internalType": "bool" + }, + { + "name": "orderPortal", + "type": "bytes32", + "internalType": "bytes32" + } ], - outputs: [], - stateMutability: "payable", + "stateMutability": "view" }, { - type: "function", - name: "closeAdRequestHash", - inputs: [ - { name: "adId", type: "string", internalType: "string" }, - { name: "to", type: "address", internalType: "address" }, - { name: "authToken", type: "bytes32", internalType: "bytes32" }, - { name: "timeToExpire", type: "uint256", internalType: "uint256" }, - ], - outputs: [{ name: "message", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "type": "function", + "name": "checkRequestHashExists", + "inputs": [ + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "createAd", - inputs: [ - { name: "signature", type: "bytes", internalType: "bytes" }, - { name: "authToken", type: "bytes32", internalType: "bytes32" }, - { name: "timeToExpire", type: "uint256", internalType: "uint256" }, - { name: "adId", type: "string", internalType: "string" }, - { name: "adToken", type: "address", internalType: "address" }, - { name: "initialAmount", type: "uint256", internalType: "uint256" }, - { name: "orderChainId", type: "uint256", internalType: "uint256" }, - { name: "adRecipient", type: "address", internalType: "address" }, + "type": "function", + "name": "closeAd", + "inputs": [ + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "authToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timeToExpire", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "adId", + "type": "string", + "internalType": "string" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + } ], - outputs: [], - stateMutability: "payable", + "outputs": [], + "stateMutability": "payable" }, { - type: "function", - name: "createAdRequestHash", - inputs: [ - { name: "adId", type: "string", internalType: "string" }, - { name: "adToken", type: "address", internalType: "address" }, - { name: "initialAmount", type: "uint256", internalType: "uint256" }, - { name: "orderChainId", type: "uint256", internalType: "uint256" }, - { name: "adRecipient", type: "address", internalType: "address" }, - { name: "authToken", type: "bytes32", internalType: "bytes32" }, - { name: "timeToExpire", type: "uint256", internalType: "uint256" }, + "type": "function", + "name": "closeAdRequestHash", + "inputs": [ + { + "name": "adId", + "type": "string", + "internalType": "string" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "authToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timeToExpire", + "type": "uint256", + "internalType": "uint256" + } ], - outputs: [{ name: "message", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - name: "eip712Domain", - inputs: [], - outputs: [ - { name: "fields", type: "bytes1", internalType: "bytes1" }, - { name: "name", type: "string", internalType: "string" }, - { name: "version", type: "string", internalType: "string" }, - { name: "chainId", type: "uint256", internalType: "uint256" }, - { name: "verifyingContract", type: "address", internalType: "address" }, - { name: "salt", type: "bytes32", internalType: "bytes32" }, - { name: "extensions", type: "uint256[]", internalType: "uint256[]" }, + "outputs": [ + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + } ], - stateMutability: "view", + "stateMutability": "view" }, { - type: "function", - name: "fundAd", - inputs: [ - { name: "signature", type: "bytes", internalType: "bytes" }, - { name: "authToken", type: "bytes32", internalType: "bytes32" }, - { name: "timeToExpire", type: "uint256", internalType: "uint256" }, - { name: "adId", type: "string", internalType: "string" }, - { name: "amount", type: "uint256", internalType: "uint256" }, + "type": "function", + "name": "createAd", + "inputs": [ + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "authToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timeToExpire", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "adId", + "type": "string", + "internalType": "string" + }, + { + "name": "adToken", + "type": "address", + "internalType": "address" + }, + { + "name": "initialAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "orderChainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "adRecipient", + "type": "bytes32", + "internalType": "bytes32" + } ], - outputs: [], - stateMutability: "payable", + "outputs": [], + "stateMutability": "payable" }, { - type: "function", - name: "fundAdRequestHash", - inputs: [ - { name: "adId", type: "string", internalType: "string" }, - { name: "amount", type: "uint256", internalType: "uint256" }, - { name: "authToken", type: "bytes32", internalType: "bytes32" }, - { name: "timeToExpire", type: "uint256", internalType: "uint256" }, + "type": "function", + "name": "createAdRequestHash", + "inputs": [ + { + "name": "adId", + "type": "string", + "internalType": "string" + }, + { + "name": "adToken", + "type": "address", + "internalType": "address" + }, + { + "name": "initialAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "orderChainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "adRecipient", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "authToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timeToExpire", + "type": "uint256", + "internalType": "uint256" + } ], - outputs: [{ name: "message", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "outputs": [ + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "getChainID", - inputs: [], - outputs: [{ name: "", type: "uint256", internalType: "uint256" }], - stateMutability: "view", + "type": "function", + "name": "eip712Domain", + "inputs": [], + "outputs": [ + { + "name": "fields", + "type": "bytes1", + "internalType": "bytes1" + }, + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "version", + "type": "string", + "internalType": "string" + }, + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "verifyingContract", + "type": "address", + "internalType": "address" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "extensions", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "getHistoricalRoot", - inputs: [{ name: "index", type: "uint256", internalType: "uint256" }], - outputs: [{ name: "root", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - name: "getLatestMerkleRoot", - inputs: [], - outputs: [{ name: "root", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - name: "getMerkleLeafCount", - inputs: [], - outputs: [{ name: "count", type: "uint256", internalType: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - name: "getRoleAdmin", - inputs: [{ name: "role", type: "bytes32", internalType: "bytes32" }], - outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "type": "function", + "name": "fundAd", + "inputs": [ + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "authToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timeToExpire", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "adId", + "type": "string", + "internalType": "string" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "payable" }, { - type: "function", - name: "getSigner", - inputs: [ - { name: "message", type: "bytes32", internalType: "bytes32" }, - { name: "signature", type: "bytes", internalType: "bytes" }, + "type": "function", + "name": "fundAdRequestHash", + "inputs": [ + { + "name": "adId", + "type": "string", + "internalType": "string" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "authToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timeToExpire", + "type": "uint256", + "internalType": "uint256" + } ], - outputs: [{ name: "", type: "address", internalType: "address" }], - stateMutability: "pure", + "outputs": [ + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "grantRole", - inputs: [ - { name: "role", type: "bytes32", internalType: "bytes32" }, - { name: "account", type: "address", internalType: "address" }, + "type": "function", + "name": "getChainID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } ], - outputs: [], - stateMutability: "nonpayable", + "stateMutability": "view" }, { - type: "function", - name: "hasRole", - inputs: [ - { name: "role", type: "bytes32", internalType: "bytes32" }, - { name: "account", type: "address", internalType: "address" }, + "type": "function", + "name": "getHistoricalRoot", + "inputs": [ + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "root", + "type": "bytes32", + "internalType": "bytes32" + } ], - outputs: [{ name: "", type: "bool", internalType: "bool" }], - stateMutability: "view", + "stateMutability": "view" }, { - type: "function", - name: "hashRequest", - inputs: [ - { name: "authToken", type: "bytes32", internalType: "bytes32" }, - { name: "timeToExpire", type: "uint256", internalType: "uint256" }, - { name: "_action", type: "string", internalType: "string" }, - { name: "_params", type: "bytes[]", internalType: "bytes[]" }, + "type": "function", + "name": "getLatestMerkleRoot", + "inputs": [], + "outputs": [ + { + "name": "root", + "type": "bytes32", + "internalType": "bytes32" + } ], - outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "stateMutability": "view" }, { - type: "function", - name: "i_merkleManager", - inputs: [], - outputs: [ - { name: "", type: "address", internalType: "contract IMerkleManager" }, + "type": "function", + "name": "getMerkleLeafCount", + "inputs": [], + "outputs": [ + { + "name": "count", + "type": "uint256", + "internalType": "uint256" + } ], - stateMutability: "view", + "stateMutability": "view" }, { - type: "function", - name: "i_verifier", - inputs: [], - outputs: [ - { name: "", type: "address", internalType: "contract IVerifier" }, + "type": "function", + "name": "getRoleAdmin", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + } ], - stateMutability: "view", + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "lockForOrder", - inputs: [ - { name: "signature", type: "bytes", internalType: "bytes" }, - { name: "authToken", type: "bytes32", internalType: "bytes32" }, - { name: "timeToExpire", type: "uint256", internalType: "uint256" }, + "type": "function", + "name": "getSigner", + "inputs": [ { - name: "params", - type: "tuple", - internalType: "struct AdManager.OrderParams", - components: [ - { name: "orderChainToken", type: "address", internalType: "address" }, - { name: "adChainToken", type: "address", internalType: "address" }, - { name: "amount", type: "uint256", internalType: "uint256" }, - { name: "bridger", type: "address", internalType: "address" }, - { name: "orderChainId", type: "uint256", internalType: "uint256" }, - { name: "srcOrderPortal", type: "address", internalType: "address" }, - { name: "orderRecipient", type: "address", internalType: "address" }, - { name: "adId", type: "string", internalType: "string" }, - { name: "adCreator", type: "address", internalType: "address" }, - { name: "adRecipient", type: "address", internalType: "address" }, - { name: "salt", type: "uint256", internalType: "uint256" }, - ], + "name": "message", + "type": "bytes32", + "internalType": "bytes32" }, + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + } ], - outputs: [{ name: "orderHash", type: "bytes32", internalType: "bytes32" }], - stateMutability: "nonpayable", + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "pure" }, { - type: "function", - name: "lockForOrderRequestHash", - inputs: [ - { name: "adId", type: "string", internalType: "string" }, - { name: "orderHash", type: "bytes32", internalType: "bytes32" }, - { name: "authToken", type: "bytes32", internalType: "bytes32" }, - { name: "timeToExpire", type: "uint256", internalType: "uint256" }, + "type": "function", + "name": "grantRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } ], - outputs: [{ name: "message", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "outputs": [], + "stateMutability": "nonpayable" }, { - type: "function", - name: "managers", - inputs: [{ name: "", type: "address", internalType: "address" }], - outputs: [{ name: "", type: "bool", internalType: "bool" }], - stateMutability: "view", + "type": "function", + "name": "hasRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "nullifierUsed", - inputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - outputs: [{ name: "", type: "bool", internalType: "bool" }], - stateMutability: "view", + "type": "function", + "name": "hashRequest", + "inputs": [ + { + "name": "authToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timeToExpire", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_action", + "type": "string", + "internalType": "string" + }, + { + "name": "_params", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "orders", - inputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - outputs: [ - { name: "", type: "uint8", internalType: "enum AdManager.Status" }, + "type": "function", + "name": "i_merkleManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IMerkleManager" + } ], - stateMutability: "view", + "stateMutability": "view" }, { - type: "function", - name: "removeChain", - inputs: [ - { name: "orderChainId", type: "uint256", internalType: "uint256" }, + "type": "function", + "name": "i_verifier", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IVerifier" + } ], - outputs: [], - stateMutability: "nonpayable", + "stateMutability": "view" }, { - type: "function", - name: "removeTokenRoute", - inputs: [ - { name: "adToken", type: "address", internalType: "address" }, - { name: "orderChainId", type: "uint256", internalType: "uint256" }, + "type": "function", + "name": "lockForOrder", + "inputs": [ + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "authToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timeToExpire", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct AdManager.OrderParams", + "components": [ + { + "name": "orderChainToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "adChainToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "bridger", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "orderChainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "srcOrderPortal", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "orderRecipient", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "adId", + "type": "string", + "internalType": "string" + }, + { + "name": "adCreator", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "adRecipient", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "salt", + "type": "uint256", + "internalType": "uint256" + } + ] + } ], - outputs: [], - stateMutability: "nonpayable", + "outputs": [ + { + "name": "orderHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "nonpayable" }, { - type: "function", - name: "renounceRole", - inputs: [ - { name: "role", type: "bytes32", internalType: "bytes32" }, - { name: "callerConfirmation", type: "address", internalType: "address" }, + "type": "function", + "name": "lockForOrderRequestHash", + "inputs": [ + { + "name": "adId", + "type": "string", + "internalType": "string" + }, + { + "name": "orderHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "authToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timeToExpire", + "type": "uint256", + "internalType": "uint256" + } ], - outputs: [], - stateMutability: "nonpayable", + "outputs": [ + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "requestHashes", - inputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - outputs: [{ name: "", type: "bool", internalType: "bool" }], - stateMutability: "view", + "type": "function", + "name": "managers", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "requestTokens", - inputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - outputs: [{ name: "", type: "bool", internalType: "bool" }], - stateMutability: "view", + "type": "function", + "name": "nullifierUsed", + "inputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "revokeRole", - inputs: [ - { name: "role", type: "bytes32", internalType: "bytes32" }, - { name: "account", type: "address", internalType: "address" }, + "type": "function", + "name": "orders", + "inputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } ], - outputs: [], - stateMutability: "nonpayable", + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum AdManager.Status" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "setChain", - inputs: [ - { name: "orderChainId", type: "uint256", internalType: "uint256" }, - { name: "orderPortal", type: "address", internalType: "address" }, - { name: "supported", type: "bool", internalType: "bool" }, + "type": "function", + "name": "removeChain", + "inputs": [ + { + "name": "orderChainId", + "type": "uint256", + "internalType": "uint256" + } ], - outputs: [], - stateMutability: "nonpayable", + "outputs": [], + "stateMutability": "nonpayable" }, { - type: "function", - name: "setManager", - inputs: [ - { name: "_manager", type: "address", internalType: "address" }, - { name: "_status", type: "bool", internalType: "bool" }, + "type": "function", + "name": "removeTokenRoute", + "inputs": [ + { + "name": "adToken", + "type": "address", + "internalType": "address" + }, + { + "name": "orderChainId", + "type": "uint256", + "internalType": "uint256" + } ], - outputs: [], - stateMutability: "nonpayable", + "outputs": [], + "stateMutability": "nonpayable" }, { - type: "function", - name: "setTokenRoute", - inputs: [ - { name: "adToken", type: "address", internalType: "address" }, - { name: "orderToken", type: "address", internalType: "address" }, - { name: "orderChainId", type: "uint256", internalType: "uint256" }, + "type": "function", + "name": "renounceRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "callerConfirmation", + "type": "address", + "internalType": "address" + } ], - outputs: [], - stateMutability: "nonpayable", + "outputs": [], + "stateMutability": "nonpayable" }, { - type: "function", - name: "supportsInterface", - inputs: [{ name: "interfaceId", type: "bytes4", internalType: "bytes4" }], - outputs: [{ name: "", type: "bool", internalType: "bool" }], - stateMutability: "view", + "type": "function", + "name": "requestHashes", + "inputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "tokenRoute", - inputs: [ - { name: "", type: "address", internalType: "address" }, - { name: "", type: "uint256", internalType: "uint256" }, + "type": "function", + "name": "requestTokens", + "inputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } ], - outputs: [{ name: "", type: "address", internalType: "address" }], - stateMutability: "view", + "stateMutability": "view" }, { - type: "function", - name: "unlock", - inputs: [ - { name: "signature", type: "bytes", internalType: "bytes" }, - { name: "authToken", type: "bytes32", internalType: "bytes32" }, - { name: "timeToExpire", type: "uint256", internalType: "uint256" }, + "type": "function", + "name": "revokeRole", + "inputs": [ { - name: "params", - type: "tuple", - internalType: "struct AdManager.OrderParams", - components: [ - { name: "orderChainToken", type: "address", internalType: "address" }, - { name: "adChainToken", type: "address", internalType: "address" }, - { name: "amount", type: "uint256", internalType: "uint256" }, - { name: "bridger", type: "address", internalType: "address" }, - { name: "orderChainId", type: "uint256", internalType: "uint256" }, - { name: "srcOrderPortal", type: "address", internalType: "address" }, - { name: "orderRecipient", type: "address", internalType: "address" }, - { name: "adId", type: "string", internalType: "string" }, - { name: "adCreator", type: "address", internalType: "address" }, - { name: "adRecipient", type: "address", internalType: "address" }, - { name: "salt", type: "uint256", internalType: "uint256" }, - ], + "name": "role", + "type": "bytes32", + "internalType": "bytes32" }, - { name: "nullifierHash", type: "bytes32", internalType: "bytes32" }, - { name: "targetRoot", type: "bytes32", internalType: "bytes32" }, - { name: "proof", type: "bytes", internalType: "bytes" }, + { + "name": "account", + "type": "address", + "internalType": "address" + } ], - outputs: [], - stateMutability: "payable", + "outputs": [], + "stateMutability": "nonpayable" }, { - type: "function", - name: "unlockOrderRequestHash", - inputs: [ - { name: "adId", type: "string", internalType: "string" }, - { name: "orderHash", type: "bytes32", internalType: "bytes32" }, - { name: "_targetRoot", type: "bytes32", internalType: "bytes32" }, - { name: "authToken", type: "bytes32", internalType: "bytes32" }, - { name: "timeToExpire", type: "uint256", internalType: "uint256" }, + "type": "function", + "name": "setChain", + "inputs": [ + { + "name": "orderChainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "orderPortal", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "supported", + "type": "bool", + "internalType": "bool" + } ], - outputs: [{ name: "message", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "outputs": [], + "stateMutability": "nonpayable" }, { - type: "function", - name: "wNativeToken", - inputs: [], - outputs: [ - { name: "", type: "address", internalType: "contract IwNativeToken" }, + "type": "function", + "name": "setManager", + "inputs": [ + { + "name": "_manager", + "type": "address", + "internalType": "address" + }, + { + "name": "_status", + "type": "bool", + "internalType": "bool" + } ], - stateMutability: "view", + "outputs": [], + "stateMutability": "nonpayable" }, { - type: "function", - name: "withdrawFromAd", - inputs: [ - { name: "signature", type: "bytes", internalType: "bytes" }, - { name: "authToken", type: "bytes32", internalType: "bytes32" }, - { name: "timeToExpire", type: "uint256", internalType: "uint256" }, - { name: "adId", type: "string", internalType: "string" }, - { name: "amount", type: "uint256", internalType: "uint256" }, - { name: "to", type: "address", internalType: "address" }, + "type": "function", + "name": "setTokenRoute", + "inputs": [ + { + "name": "adToken", + "type": "address", + "internalType": "address" + }, + { + "name": "orderToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "orderChainId", + "type": "uint256", + "internalType": "uint256" + } ], - outputs: [], - stateMutability: "payable", + "outputs": [], + "stateMutability": "nonpayable" }, { - type: "function", - name: "withdrawFromAdRequestHash", - inputs: [ - { name: "adId", type: "string", internalType: "string" }, - { name: "amount", type: "uint256", internalType: "uint256" }, - { name: "to", type: "address", internalType: "address" }, - { name: "authToken", type: "bytes32", internalType: "bytes32" }, - { name: "timeToExpire", type: "uint256", internalType: "uint256" }, + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } ], - outputs: [{ name: "message", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "stateMutability": "view" }, { - type: "event", - name: "AdClosed", - inputs: [ - { name: "adId", type: "string", indexed: true, internalType: "string" }, + "type": "function", + "name": "tokenRoute", + "inputs": [ { - name: "maker", - type: "address", - indexed: true, - internalType: "address", + "name": "", + "type": "address", + "internalType": "address" }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } ], - anonymous: false, + "stateMutability": "view" }, { - type: "event", - name: "AdCreated", - inputs: [ - { name: "adId", type: "string", indexed: true, internalType: "string" }, + "type": "function", + "name": "unlock", + "inputs": [ { - name: "maker", - type: "address", - indexed: true, - internalType: "address", + "name": "signature", + "type": "bytes", + "internalType": "bytes" }, { - name: "token", - type: "address", - indexed: true, - internalType: "address", + "name": "authToken", + "type": "bytes32", + "internalType": "bytes32" }, { - name: "initAmount", - type: "uint256", - indexed: false, - internalType: "uint256", + "name": "timeToExpire", + "type": "uint256", + "internalType": "uint256" }, { - name: "orderChainId", - type: "uint256", - indexed: false, - internalType: "uint256", + "name": "params", + "type": "tuple", + "internalType": "struct AdManager.OrderParams", + "components": [ + { + "name": "orderChainToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "adChainToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "bridger", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "orderChainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "srcOrderPortal", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "orderRecipient", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "adId", + "type": "string", + "internalType": "string" + }, + { + "name": "adCreator", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "adRecipient", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "salt", + "type": "uint256", + "internalType": "uint256" + } + ] }, + { + "name": "nullifierHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "targetRoot", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "proof", + "type": "bytes", + "internalType": "bytes" + } ], - anonymous: false, + "outputs": [], + "stateMutability": "payable" }, { - type: "event", - name: "AdFunded", - inputs: [ - { name: "adId", type: "string", indexed: true, internalType: "string" }, + "type": "function", + "name": "unlockOrderRequestHash", + "inputs": [ + { + "name": "adId", + "type": "string", + "internalType": "string" + }, { - name: "maker", - type: "address", - indexed: true, - internalType: "address", + "name": "orderHash", + "type": "bytes32", + "internalType": "bytes32" }, { - name: "amount", - type: "uint256", - indexed: false, - internalType: "uint256", + "name": "_targetRoot", + "type": "bytes32", + "internalType": "bytes32" }, { - name: "newBalance", - type: "uint256", - indexed: false, - internalType: "uint256", + "name": "authToken", + "type": "bytes32", + "internalType": "bytes32" }, + { + "name": "timeToExpire", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "wNativeToken", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IwNativeToken" + } ], - anonymous: false, + "stateMutability": "view" }, { - type: "event", - name: "AdWithdrawn", - inputs: [ - { name: "adId", type: "string", indexed: true, internalType: "string" }, + "type": "function", + "name": "withdrawFromAd", + "inputs": [ + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "authToken", + "type": "bytes32", + "internalType": "bytes32" + }, { - name: "maker", - type: "address", - indexed: true, - internalType: "address", + "name": "timeToExpire", + "type": "uint256", + "internalType": "uint256" }, { - name: "amount", - type: "uint256", - indexed: false, - internalType: "uint256", + "name": "adId", + "type": "string", + "internalType": "string" }, { - name: "newBalance", - type: "uint256", - indexed: false, - internalType: "uint256", + "name": "amount", + "type": "uint256", + "internalType": "uint256" }, + { + "name": "to", + "type": "address", + "internalType": "address" + } ], - anonymous: false, + "outputs": [], + "stateMutability": "payable" }, { - type: "event", - name: "ChainSet", - inputs: [ + "type": "function", + "name": "withdrawFromAdRequestHash", + "inputs": [ + { + "name": "adId", + "type": "string", + "internalType": "string" + }, { - name: "chainId", - type: "uint256", - indexed: true, - internalType: "uint256", + "name": "amount", + "type": "uint256", + "internalType": "uint256" }, { - name: "orderPortal", - type: "address", - indexed: true, - internalType: "address", + "name": "to", + "type": "address", + "internalType": "address" }, - { name: "supported", type: "bool", indexed: false, internalType: "bool" }, + { + "name": "authToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timeToExpire", + "type": "uint256", + "internalType": "uint256" + } ], - anonymous: false, + "outputs": [ + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, - { type: "event", name: "EIP712DomainChanged", inputs: [], anonymous: false }, { - type: "event", - name: "OrderLocked", - inputs: [ - { name: "adId", type: "string", indexed: true, internalType: "string" }, + "type": "event", + "name": "AdClosed", + "inputs": [ { - name: "orderHash", - type: "bytes32", - indexed: true, - internalType: "bytes32", + "name": "adId", + "type": "string", + "indexed": true, + "internalType": "string" }, { - name: "maker", - type: "address", - indexed: false, - internalType: "address", - }, + "name": "maker", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "AdCreated", + "inputs": [ { - name: "token", - type: "address", - indexed: false, - internalType: "address", + "name": "adId", + "type": "string", + "indexed": true, + "internalType": "string" }, { - name: "amount", - type: "uint256", - indexed: false, - internalType: "uint256", + "name": "maker", + "type": "address", + "indexed": true, + "internalType": "address" }, { - name: "bridger", - type: "address", - indexed: false, - internalType: "address", + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" }, { - name: "recipient", - type: "address", - indexed: false, - internalType: "address", + "name": "initAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" }, + { + "name": "orderChainId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } ], - anonymous: false, + "anonymous": false }, { - type: "event", - name: "OrderUnlocked", - inputs: [ + "type": "event", + "name": "AdFunded", + "inputs": [ { - name: "orderHash", - type: "bytes32", - indexed: true, - internalType: "bytes32", + "name": "adId", + "type": "string", + "indexed": true, + "internalType": "string" }, { - name: "recipient", - type: "address", - indexed: true, - internalType: "address", + "name": "maker", + "type": "address", + "indexed": true, + "internalType": "address" }, { - name: "nullifierHash", - type: "bytes32", - indexed: false, - internalType: "bytes32", + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" }, + { + "name": "newBalance", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } ], - anonymous: false, + "anonymous": false }, { - type: "event", - name: "RoleAdminChanged", - inputs: [ - { name: "role", type: "bytes32", indexed: true, internalType: "bytes32" }, + "type": "event", + "name": "AdWithdrawn", + "inputs": [ + { + "name": "adId", + "type": "string", + "indexed": true, + "internalType": "string" + }, { - name: "previousAdminRole", - type: "bytes32", - indexed: true, - internalType: "bytes32", + "name": "maker", + "type": "address", + "indexed": true, + "internalType": "address" }, { - name: "newAdminRole", - type: "bytes32", - indexed: true, - internalType: "bytes32", + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" }, + { + "name": "newBalance", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } ], - anonymous: false, + "anonymous": false }, { - type: "event", - name: "RoleGranted", - inputs: [ - { name: "role", type: "bytes32", indexed: true, internalType: "bytes32" }, + "type": "event", + "name": "ChainSet", + "inputs": [ { - name: "account", - type: "address", - indexed: true, - internalType: "address", + "name": "chainId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" }, { - name: "sender", - type: "address", - indexed: true, - internalType: "address", + "name": "orderPortal", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, + { + "name": "supported", + "type": "bool", + "indexed": false, + "internalType": "bool" + } ], - anonymous: false, + "anonymous": false }, { - type: "event", - name: "RoleRevoked", - inputs: [ - { name: "role", type: "bytes32", indexed: true, internalType: "bytes32" }, + "type": "event", + "name": "EIP712DomainChanged", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "OrderLocked", + "inputs": [ + { + "name": "adId", + "type": "string", + "indexed": true, + "internalType": "string" + }, + { + "name": "orderHash", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, { - name: "account", - type: "address", - indexed: true, - internalType: "address", + "name": "maker", + "type": "address", + "indexed": false, + "internalType": "address" }, { - name: "sender", - type: "address", - indexed: true, - internalType: "address", + "name": "token", + "type": "address", + "indexed": false, + "internalType": "address" }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "bridger", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + }, + { + "name": "recipient", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } ], - anonymous: false, + "anonymous": false }, { - type: "event", - name: "TokenRouteRemoved", - inputs: [ + "type": "event", + "name": "OrderUnlocked", + "inputs": [ { - name: "adToken", - type: "address", - indexed: true, - internalType: "address", + "name": "orderHash", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, { - name: "orderChainToken", - type: "address", - indexed: true, - internalType: "address", + "name": "recipient", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, { - name: "adChainId", - type: "uint256", - indexed: true, - internalType: "uint256", - }, + "name": "nullifierHash", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } ], - anonymous: false, + "anonymous": false }, { - type: "event", - name: "TokenRouteSet", - inputs: [ + "type": "event", + "name": "RoleAdminChanged", + "inputs": [ { - name: "orderChainToken", - type: "address", - indexed: true, - internalType: "address", + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, { - name: "adChainId", - type: "uint256", - indexed: true, - internalType: "uint256", + "name": "previousAdminRole", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "newAdminRole", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleGranted", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, { - name: "adChainToken", - type: "address", - indexed: true, - internalType: "address", + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" }, + { + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" + } ], - anonymous: false, + "anonymous": false }, { - type: "event", - name: "UpdateManager", - inputs: [ + "type": "event", + "name": "RoleRevoked", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, { - name: "manager", - type: "address", - indexed: true, - internalType: "address", + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" }, - { name: "status", type: "bool", indexed: false, internalType: "bool" }, + { + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" + } ], - anonymous: false, + "anonymous": false }, - { type: "error", name: "AccessControlBadConfirmation", inputs: [] }, { - type: "error", - name: "AccessControlUnauthorizedAccount", - inputs: [ - { name: "account", type: "address", internalType: "address" }, - { name: "neededRole", type: "bytes32", internalType: "bytes32" }, + "type": "event", + "name": "TokenRouteRemoved", + "inputs": [ + { + "name": "adToken", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "orderChainToken", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "orderChainId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } ], + "anonymous": false }, - { type: "error", name: "AdManager__AdClosed", inputs: [] }, - { type: "error", name: "AdManager__AdNotFound", inputs: [] }, { - type: "error", - name: "AdManager__AdRecipientMismatch", - inputs: [ - { name: "expected", type: "address", internalType: "address" }, - { name: "provided", type: "address", internalType: "address" }, + "type": "event", + "name": "TokenRouteSet", + "inputs": [ + { + "name": "adToken", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "orderChainId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "orderChainToken", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + } ], + "anonymous": false }, { - type: "error", - name: "AdManager__AdTokenMismatch", - inputs: [ - { name: "expected", type: "address", internalType: "address" }, - { name: "provided", type: "address", internalType: "address" }, + "type": "event", + "name": "UpdateManager", + "inputs": [ + { + "name": "manager", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "status", + "type": "bool", + "indexed": false, + "internalType": "bool" + } ], + "anonymous": false }, - { type: "error", name: "AdManager__BridgerZero", inputs: [] }, { - type: "error", - name: "AdManager__ChainNotSupported", - inputs: [{ name: "chainId", type: "uint256", internalType: "uint256" }], + "type": "error", + "name": "AccessControlBadConfirmation", + "inputs": [] }, - { type: "error", name: "AdManager__InsufficientLiquidity", inputs: [] }, - { type: "error", name: "AdManager__InvalidMessage", inputs: [] }, - { type: "error", name: "AdManager__InvalidProof", inputs: [] }, - { type: "error", name: "AdManager__MerkleManagerAppendFailed", inputs: [] }, { - type: "error", - name: "AdManager__MissingRoute", - inputs: [ - { name: "orderChainToken", type: "address", internalType: "address" }, - { name: "adChainId", type: "uint256", internalType: "uint256" }, - ], + "type": "error", + "name": "AccessControlUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "neededRole", + "type": "bytes32", + "internalType": "bytes32" + } + ] }, - { type: "error", name: "AdManager__NotMaker", inputs: [] }, { - type: "error", - name: "AdManager__NullifierUsed", - inputs: [ - { name: "nullifierHash", type: "bytes32", internalType: "bytes32" }, - ], + "type": "error", + "name": "AdManager__AdClosed", + "inputs": [] }, { - type: "error", - name: "AdManager__OrderChainMismatch", - inputs: [ - { name: "expected", type: "uint256", internalType: "uint256" }, - { name: "provided", type: "uint256", internalType: "uint256" }, - ], + "type": "error", + "name": "AdManager__AdNotFound", + "inputs": [] }, { - type: "error", - name: "AdManager__OrderExists", - inputs: [{ name: "orderHash", type: "bytes32", internalType: "bytes32" }], + "type": "error", + "name": "AdManager__AdRecipientMismatch", + "inputs": [ + { + "name": "expected", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "provided", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "AdManager__AdTokenMismatch", + "inputs": [ + { + "name": "expected", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "provided", + "type": "bytes32", + "internalType": "bytes32" + } + ] }, { - type: "error", - name: "AdManager__OrderNotOpen", - inputs: [{ name: "orderHash", type: "bytes32", internalType: "bytes32" }], + "type": "error", + "name": "AdManager__BridgerZero", + "inputs": [] }, { - type: "error", - name: "AdManager__OrderPortalMismatch", - inputs: [ - { name: "expected", type: "address", internalType: "address" }, - { name: "provided", type: "address", internalType: "address" }, - ], + "type": "error", + "name": "AdManager__ChainNotSupported", + "inputs": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + } + ] }, { - type: "error", - name: "AdManager__OrderTokenMismatch", - inputs: [ - { name: "expected", type: "address", internalType: "address" }, - { name: "provided", type: "address", internalType: "address" }, - ], + "type": "error", + "name": "AdManager__InsufficientLiquidity", + "inputs": [] + }, + { + "type": "error", + "name": "AdManager__InvalidMessage", + "inputs": [] + }, + { + "type": "error", + "name": "AdManager__InvalidProof", + "inputs": [] + }, + { + "type": "error", + "name": "AdManager__MerkleManagerAppendFailed", + "inputs": [] + }, + { + "type": "error", + "name": "AdManager__MissingRoute", + "inputs": [ + { + "name": "orderChainToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "adChainId", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "AdManager__NotEvmAddress", + "inputs": [ + { + "name": "value", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "AdManager__NotMaker", + "inputs": [] + }, + { + "type": "error", + "name": "AdManager__NullifierUsed", + "inputs": [ + { + "name": "nullifierHash", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "AdManager__OrderChainMismatch", + "inputs": [ + { + "name": "expected", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "provided", + "type": "uint256", + "internalType": "uint256" + } + ] }, - { type: "error", name: "AdManager__RecipientZero", inputs: [] }, - { type: "error", name: "AdManager__RequestTokenExpired", inputs: [] }, - { type: "error", name: "AdManager__TokenAlreadyUsed", inputs: [] }, - { type: "error", name: "AdManager__TokenZeroAddress", inputs: [] }, - { type: "error", name: "AdManager__UsedAdId", inputs: [] }, - { type: "error", name: "AdManager__ZeroAddress", inputs: [] }, - { type: "error", name: "AdManager__ZeroAmount", inputs: [] }, - { type: "error", name: "Admanage__ZeroSigner", inputs: [] }, - { type: "error", name: "Admanager__ActiveLocks", inputs: [] }, - { type: "error", name: "Admanager__InvalidSigner", inputs: [] }, - { type: "error", name: "Admanager__RequestHashedProcessed", inputs: [] }, - { type: "error", name: "ECDSAInvalidSignature", inputs: [] }, { - type: "error", - name: "ECDSAInvalidSignatureLength", - inputs: [{ name: "length", type: "uint256", internalType: "uint256" }], + "type": "error", + "name": "AdManager__OrderExists", + "inputs": [ + { + "name": "orderHash", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "AdManager__OrderNotOpen", + "inputs": [ + { + "name": "orderHash", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "AdManager__OrderPortalMismatch", + "inputs": [ + { + "name": "expected", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "provided", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "AdManager__OrderTokenMismatch", + "inputs": [ + { + "name": "expected", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "provided", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "AdManager__RecipientZero", + "inputs": [] + }, + { + "type": "error", + "name": "AdManager__RequestTokenExpired", + "inputs": [] + }, + { + "type": "error", + "name": "AdManager__TokenAlreadyUsed", + "inputs": [] + }, + { + "type": "error", + "name": "AdManager__TokenZeroAddress", + "inputs": [] + }, + { + "type": "error", + "name": "AdManager__UsedAdId", + "inputs": [] }, { - type: "error", - name: "ECDSAInvalidSignatureS", - inputs: [{ name: "s", type: "bytes32", internalType: "bytes32" }], + "type": "error", + "name": "AdManager__ZeroAddress", + "inputs": [] }, - { type: "error", name: "InvalidShortString", inputs: [] }, - { type: "error", name: "ReentrancyGuardReentrantCall", inputs: [] }, { - type: "error", - name: "SafeERC20FailedOperation", - inputs: [{ name: "token", type: "address", internalType: "address" }], + "type": "error", + "name": "AdManager__ZeroAmount", + "inputs": [] }, { - type: "error", - name: "StringTooLong", - inputs: [{ name: "str", type: "string", internalType: "string" }], + "type": "error", + "name": "Admanage__ZeroSigner", + "inputs": [] }, -]; + { + "type": "error", + "name": "Admanager__ActiveLocks", + "inputs": [] + }, + { + "type": "error", + "name": "Admanager__InvalidSigner", + "inputs": [] + }, + { + "type": "error", + "name": "Admanager__RequestHashedProcessed", + "inputs": [] + }, + { + "type": "error", + "name": "ECDSAInvalidSignature", + "inputs": [] + }, + { + "type": "error", + "name": "ECDSAInvalidSignatureLength", + "inputs": [ + { + "name": "length", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ECDSAInvalidSignatureS", + "inputs": [ + { + "name": "s", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "InvalidShortString", + "inputs": [] + }, + { + "type": "error", + "name": "ReentrancyGuardReentrantCall", + "inputs": [] + }, + { + "type": "error", + "name": "SafeERC20FailedOperation", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "StringTooLong", + "inputs": [ + { + "name": "str", + "type": "string", + "internalType": "string" + } + ] + } +] as const; diff --git a/apps/frontend/abis/ERC20.abi.ts b/apps/frontend/abis/ERC20.abi.ts index 8d6179d..b78b2c5 100644 --- a/apps/frontend/abis/ERC20.abi.ts +++ b/apps/frontend/abis/ERC20.abi.ts @@ -1,222 +1,310 @@ export const ERC20_ABI = [ { - constant: true, - inputs: [], - name: "name", - outputs: [ + "type": "function", + "name": "allowance", + "inputs": [ { - name: "", - type: "string", + "name": "owner", + "type": "address", + "internalType": "address" }, + { + "name": "spender", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } ], - payable: false, - stateMutability: "view", - type: "function", + "stateMutability": "view" }, { - constant: false, - inputs: [ + "type": "function", + "name": "approve", + "inputs": [ { - name: "_spender", - type: "address", + "name": "spender", + "type": "address", + "internalType": "address" }, { - name: "_value", - type: "uint256", - }, + "name": "value", + "type": "uint256", + "internalType": "uint256" + } ], - name: "approve", - outputs: [ + "outputs": [ { - name: "", - type: "bool", - }, + "name": "", + "type": "bool", + "internalType": "bool" + } ], - payable: false, - stateMutability: "nonpayable", - type: "function", + "stateMutability": "nonpayable" }, { - constant: true, - inputs: [], - name: "totalSupply", - outputs: [ + "type": "function", + "name": "balanceOf", + "inputs": [ { - name: "", - type: "uint256", - }, + "name": "account", + "type": "address", + "internalType": "address" + } ], - payable: false, - stateMutability: "view", - type: "function", + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" }, { - constant: false, - inputs: [ - { - name: "_from", - type: "address", - }, + "type": "function", + "name": "decimals", + "inputs": [], + "outputs": [ { - name: "_to", - type: "address", - }, + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ { - name: "_value", - type: "uint256", - }, + "name": "", + "type": "string", + "internalType": "string" + } ], - name: "transferFrom", - outputs: [ + "stateMutability": "view" + }, + { + "type": "function", + "name": "symbol", + "inputs": [], + "outputs": [ { - name: "", - type: "bool", - }, + "name": "", + "type": "string", + "internalType": "string" + } ], - payable: false, - stateMutability: "nonpayable", - type: "function", + "stateMutability": "view" }, { - constant: true, - inputs: [], - name: "decimals", - outputs: [ + "type": "function", + "name": "totalSupply", + "inputs": [], + "outputs": [ { - name: "", - type: "uint8", - }, + "name": "", + "type": "uint256", + "internalType": "uint256" + } ], - payable: false, - stateMutability: "view", - type: "function", + "stateMutability": "view" }, { - constant: true, - inputs: [ + "type": "function", + "name": "transfer", + "inputs": [ { - name: "_owner", - type: "address", + "name": "to", + "type": "address", + "internalType": "address" }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + } ], - name: "balanceOf", - outputs: [ + "outputs": [ { - name: "balance", - type: "uint256", - }, + "name": "", + "type": "bool", + "internalType": "bool" + } ], - payable: false, - stateMutability: "view", - type: "function", + "stateMutability": "nonpayable" }, { - constant: true, - inputs: [], - name: "symbol", - outputs: [ + "type": "function", + "name": "transferFrom", + "inputs": [ { - name: "", - type: "string", + "name": "from", + "type": "address", + "internalType": "address" }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + } ], - payable: false, - stateMutability: "view", - type: "function", + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" }, { - constant: false, - inputs: [ + "type": "event", + "name": "Approval", + "inputs": [ { - name: "_to", - type: "address", + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" }, { - name: "_value", - type: "uint256", + "name": "spender", + "type": "address", + "indexed": true, + "internalType": "address" }, - ], - name: "transfer", - outputs: [ { - name: "", - type: "bool", - }, + "name": "value", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } ], - payable: false, - stateMutability: "nonpayable", - type: "function", + "anonymous": false }, { - constant: true, - inputs: [ + "type": "event", + "name": "Transfer", + "inputs": [ { - name: "_owner", - type: "address", + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" }, { - name: "_spender", - type: "address", + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" }, - ], - name: "allowance", - outputs: [ { - name: "", - type: "uint256", - }, + "name": "value", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } ], - payable: false, - stateMutability: "view", - type: "function", + "anonymous": false }, { - payable: true, - stateMutability: "payable", - type: "fallback", - }, - { - anonymous: false, - inputs: [ + "type": "error", + "name": "ERC20InsufficientAllowance", + "inputs": [ { - indexed: true, - name: "owner", - type: "address", + "name": "spender", + "type": "address", + "internalType": "address" }, { - indexed: true, - name: "spender", - type: "address", + "name": "allowance", + "type": "uint256", + "internalType": "uint256" }, { - indexed: false, - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", + "name": "needed", + "type": "uint256", + "internalType": "uint256" + } + ] }, { - anonymous: false, - inputs: [ + "type": "error", + "name": "ERC20InsufficientBalance", + "inputs": [ { - indexed: true, - name: "from", - type: "address", + "name": "sender", + "type": "address", + "internalType": "address" }, { - indexed: true, - name: "to", - type: "address", + "name": "balance", + "type": "uint256", + "internalType": "uint256" }, { - indexed: false, - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", + "name": "needed", + "type": "uint256", + "internalType": "uint256" + } + ] }, -] + { + "type": "error", + "name": "ERC20InvalidApprover", + "inputs": [ + { + "name": "approver", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC20InvalidReceiver", + "inputs": [ + { + "name": "receiver", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC20InvalidSender", + "inputs": [ + { + "name": "sender", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC20InvalidSpender", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + } + ] + } +] as const; diff --git a/apps/frontend/abis/orderPortal.abi.ts b/apps/frontend/abis/orderPortal.abi.ts index c7d99a4..d66cf75 100644 --- a/apps/frontend/abis/orderPortal.abi.ts +++ b/apps/frontend/abis/orderPortal.abi.ts @@ -1,726 +1,1458 @@ export const ORDER_PORTAL_ABI = [ { - type: "constructor", - inputs: [ - { name: "admin", type: "address", internalType: "address" }, + "type": "constructor", + "inputs": [ { - name: "_verifier", - type: "address", - internalType: "contract IVerifier", + "name": "admin", + "type": "address", + "internalType": "address" }, { - name: "_merkleManager", - type: "address", - internalType: "contract IMerkleManager", + "name": "_verifier", + "type": "address", + "internalType": "contract IVerifier" }, { - name: "_wNativeToken", - type: "address", - internalType: "contract IwNativeToken", + "name": "_merkleManager", + "type": "address", + "internalType": "contract IMerkleManager" }, + { + "name": "_wNativeToken", + "type": "address", + "internalType": "contract IwNativeToken" + } ], - stateMutability: "nonpayable", + "stateMutability": "nonpayable" }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, { - type: "function", - name: "ADMIN_ROLE", - inputs: [], - outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "type": "fallback", + "stateMutability": "payable" }, { - type: "function", - name: "DEFAULT_ADMIN_ROLE", - inputs: [], - outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "type": "receive", + "stateMutability": "payable" }, { - type: "function", - name: "DOMAIN_TYPEHASH_MIN", - inputs: [], - outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "type": "function", + "name": "ADMIN_ROLE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "NATIVE_TOKEN_ADDRESS", - inputs: [], - outputs: [{ name: "", type: "address", internalType: "address" }], - stateMutability: "view", + "type": "function", + "name": "DEFAULT_ADMIN_ROLE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "ORDER_TYPEHASH", - inputs: [], - outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "type": "function", + "name": "DOMAIN_TYPEHASH_MIN", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "chains", - inputs: [{ name: "", type: "uint256", internalType: "uint256" }], - outputs: [ - { name: "supported", type: "bool", internalType: "bool" }, - { name: "adManager", type: "address", internalType: "address" }, + "type": "function", + "name": "NATIVE_TOKEN_ADDRESS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } ], - stateMutability: "view", + "stateMutability": "view" }, { - type: "function", - name: "checkRequestHashExists", - inputs: [{ name: "message", type: "bytes32", internalType: "bytes32" }], - outputs: [{ name: "", type: "bool", internalType: "bool" }], - stateMutability: "view", + "type": "function", + "name": "ORDER_TYPEHASH", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "createOrder", - inputs: [ - { name: "signature", type: "bytes", internalType: "bytes" }, - { name: "authToken", type: "bytes32", internalType: "bytes32" }, - { name: "timeToExpire", type: "uint256", internalType: "uint256" }, + "type": "function", + "name": "chains", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ { - name: "params", - type: "tuple", - internalType: "struct OrderPortal.OrderParams", - components: [ - { name: "orderChainToken", type: "address", internalType: "address" }, - { name: "adChainToken", type: "address", internalType: "address" }, - { name: "amount", type: "uint256", internalType: "uint256" }, - { name: "bridger", type: "address", internalType: "address" }, - { name: "orderRecipient", type: "address", internalType: "address" }, - { name: "adChainId", type: "uint256", internalType: "uint256" }, - { name: "adManager", type: "address", internalType: "address" }, - { name: "adId", type: "string", internalType: "string" }, - { name: "adCreator", type: "address", internalType: "address" }, - { name: "adRecipient", type: "address", internalType: "address" }, - { name: "salt", type: "uint256", internalType: "uint256" }, - ], + "name": "supported", + "type": "bool", + "internalType": "bool" }, + { + "name": "adManager", + "type": "bytes32", + "internalType": "bytes32" + } ], - outputs: [{ name: "orderHash", type: "bytes32", internalType: "bytes32" }], - stateMutability: "payable", + "stateMutability": "view" }, { - type: "function", - name: "createOrderRequestHash", - inputs: [ - { name: "adId", type: "string", internalType: "string" }, - { name: "orderHash", type: "bytes32", internalType: "bytes32" }, - { name: "authToken", type: "bytes32", internalType: "bytes32" }, - { name: "timeToExpire", type: "uint256", internalType: "uint256" }, + "type": "function", + "name": "checkRequestHashExists", + "inputs": [ + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } ], - outputs: [{ name: "message", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "stateMutability": "view" }, { - type: "function", - name: "eip712Domain", - inputs: [], - outputs: [ - { name: "fields", type: "bytes1", internalType: "bytes1" }, - { name: "name", type: "string", internalType: "string" }, - { name: "version", type: "string", internalType: "string" }, - { name: "chainId", type: "uint256", internalType: "uint256" }, - { name: "verifyingContract", type: "address", internalType: "address" }, - { name: "salt", type: "bytes32", internalType: "bytes32" }, - { name: "extensions", type: "uint256[]", internalType: "uint256[]" }, + "type": "function", + "name": "createOrder", + "inputs": [ + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "authToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timeToExpire", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct OrderPortal.OrderParams", + "components": [ + { + "name": "orderChainToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "adChainToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "bridger", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "orderRecipient", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "adChainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "adManager", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "adId", + "type": "string", + "internalType": "string" + }, + { + "name": "adCreator", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "adRecipient", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "salt", + "type": "uint256", + "internalType": "uint256" + } + ] + } ], - stateMutability: "view", + "outputs": [ + { + "name": "orderHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "payable" }, { - type: "function", - name: "getChainID", - inputs: [], - outputs: [{ name: "", type: "uint256", internalType: "uint256" }], - stateMutability: "view", + "type": "function", + "name": "createOrderRequestHash", + "inputs": [ + { + "name": "adId", + "type": "string", + "internalType": "string" + }, + { + "name": "orderHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "authToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timeToExpire", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "getDestToken", - inputs: [ - { name: "orderToken", type: "address", internalType: "address" }, - { name: "adChainId", type: "uint256", internalType: "uint256" }, + "type": "function", + "name": "eip712Domain", + "inputs": [], + "outputs": [ + { + "name": "fields", + "type": "bytes1", + "internalType": "bytes1" + }, + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "version", + "type": "string", + "internalType": "string" + }, + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "verifyingContract", + "type": "address", + "internalType": "address" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "extensions", + "type": "uint256[]", + "internalType": "uint256[]" + } ], - outputs: [ - { name: "adChainToken", type: "address", internalType: "address" }, + "stateMutability": "view" + }, + { + "type": "function", + "name": "getChainID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } ], - stateMutability: "view", + "stateMutability": "view" }, { - type: "function", - name: "getHistoricalRoot", - inputs: [{ name: "index", type: "uint256", internalType: "uint256" }], - outputs: [{ name: "root", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "type": "function", + "name": "getDestToken", + "inputs": [ + { + "name": "orderToken", + "type": "address", + "internalType": "address" + }, + { + "name": "adChainId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "adChainToken", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "getLatestMerkleRoot", - inputs: [], - outputs: [{ name: "root", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "type": "function", + "name": "getHistoricalRoot", + "inputs": [ + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "root", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "getMerkleLeafCount", - inputs: [], - outputs: [{ name: "count", type: "uint256", internalType: "uint256" }], - stateMutability: "view", + "type": "function", + "name": "getLatestMerkleRoot", + "inputs": [], + "outputs": [ + { + "name": "root", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "getRoleAdmin", - inputs: [{ name: "role", type: "bytes32", internalType: "bytes32" }], - outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "type": "function", + "name": "getMerkleLeafCount", + "inputs": [], + "outputs": [ + { + "name": "count", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "getSigner", - inputs: [ - { name: "message", type: "bytes32", internalType: "bytes32" }, - { name: "signature", type: "bytes", internalType: "bytes" }, + "type": "function", + "name": "getRoleAdmin", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } ], - outputs: [{ name: "", type: "address", internalType: "address" }], - stateMutability: "pure", + "stateMutability": "view" }, { - type: "function", - name: "grantRole", - inputs: [ - { name: "role", type: "bytes32", internalType: "bytes32" }, - { name: "account", type: "address", internalType: "address" }, + "type": "function", + "name": "getSigner", + "inputs": [ + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + } ], - outputs: [], - stateMutability: "nonpayable", + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "pure" }, { - type: "function", - name: "hasRole", - inputs: [ - { name: "role", type: "bytes32", internalType: "bytes32" }, - { name: "account", type: "address", internalType: "address" }, + "type": "function", + "name": "grantRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } ], - outputs: [{ name: "", type: "bool", internalType: "bool" }], - stateMutability: "view", + "outputs": [], + "stateMutability": "nonpayable" }, { - type: "function", - name: "hashRequest", - inputs: [ - { name: "authToken", type: "bytes32", internalType: "bytes32" }, - { name: "timeToExpire", type: "uint256", internalType: "uint256" }, - { name: "_action", type: "string", internalType: "string" }, - { name: "_params", type: "bytes[]", internalType: "bytes[]" }, + "type": "function", + "name": "hasRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } ], - outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "i_merkleManager", - inputs: [], - outputs: [ - { name: "", type: "address", internalType: "contract IMerkleManager" }, + "type": "function", + "name": "hashRequest", + "inputs": [ + { + "name": "authToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timeToExpire", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_action", + "type": "string", + "internalType": "string" + }, + { + "name": "_params", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } ], - stateMutability: "view", + "stateMutability": "view" }, { - type: "function", - name: "i_verifier", - inputs: [], - outputs: [ - { name: "", type: "address", internalType: "contract IVerifier" }, + "type": "function", + "name": "i_merkleManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IMerkleManager" + } ], - stateMutability: "view", + "stateMutability": "view" }, { - type: "function", - name: "managers", - inputs: [{ name: "", type: "address", internalType: "address" }], - outputs: [{ name: "", type: "bool", internalType: "bool" }], - stateMutability: "view", + "type": "function", + "name": "i_verifier", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IVerifier" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "nullifierUsed", - inputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - outputs: [{ name: "", type: "bool", internalType: "bool" }], - stateMutability: "view", + "type": "function", + "name": "managers", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "orders", - inputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - outputs: [ - { name: "", type: "uint8", internalType: "enum OrderPortal.Status" }, + "type": "function", + "name": "nullifierUsed", + "inputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } ], - stateMutability: "view", + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "removeChain", - inputs: [{ name: "adChainId", type: "uint256", internalType: "uint256" }], - outputs: [], - stateMutability: "nonpayable", + "type": "function", + "name": "orders", + "inputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum OrderPortal.Status" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "removeTokenRoute", - inputs: [ - { name: "orderToken", type: "address", internalType: "address" }, - { name: "adChainId", type: "uint256", internalType: "uint256" }, + "type": "function", + "name": "removeChain", + "inputs": [ + { + "name": "adChainId", + "type": "uint256", + "internalType": "uint256" + } ], - outputs: [], - stateMutability: "nonpayable", + "outputs": [], + "stateMutability": "nonpayable" }, { - type: "function", - name: "renounceRole", - inputs: [ - { name: "role", type: "bytes32", internalType: "bytes32" }, - { name: "callerConfirmation", type: "address", internalType: "address" }, + "type": "function", + "name": "removeTokenRoute", + "inputs": [ + { + "name": "orderToken", + "type": "address", + "internalType": "address" + }, + { + "name": "adChainId", + "type": "uint256", + "internalType": "uint256" + } ], - outputs: [], - stateMutability: "nonpayable", + "outputs": [], + "stateMutability": "nonpayable" }, { - type: "function", - name: "requestHashes", - inputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - outputs: [{ name: "", type: "bool", internalType: "bool" }], - stateMutability: "view", + "type": "function", + "name": "renounceRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "callerConfirmation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { - type: "function", - name: "requestTokens", - inputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], - outputs: [{ name: "", type: "bool", internalType: "bool" }], - stateMutability: "view", + "type": "function", + "name": "requestHashes", + "inputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "revokeRole", - inputs: [ - { name: "role", type: "bytes32", internalType: "bytes32" }, - { name: "account", type: "address", internalType: "address" }, + "type": "function", + "name": "requestTokens", + "inputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } ], - outputs: [], - stateMutability: "nonpayable", + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "setChain", - inputs: [ - { name: "adChainId", type: "uint256", internalType: "uint256" }, - { name: "adManager", type: "address", internalType: "address" }, - { name: "supported", type: "bool", internalType: "bool" }, + "type": "function", + "name": "revokeRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } ], - outputs: [], - stateMutability: "nonpayable", + "outputs": [], + "stateMutability": "nonpayable" }, { - type: "function", - name: "setManager", - inputs: [ - { name: "_manager", type: "address", internalType: "address" }, - { name: "_status", type: "bool", internalType: "bool" }, + "type": "function", + "name": "setChain", + "inputs": [ + { + "name": "adChainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "adManager", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "supported", + "type": "bool", + "internalType": "bool" + } ], - outputs: [], - stateMutability: "nonpayable", + "outputs": [], + "stateMutability": "nonpayable" }, { - type: "function", - name: "setTokenRoute", - inputs: [ - { name: "orderToken", type: "address", internalType: "address" }, - { name: "adChainId", type: "uint256", internalType: "uint256" }, - { name: "adToken", type: "address", internalType: "address" }, + "type": "function", + "name": "setManager", + "inputs": [ + { + "name": "_manager", + "type": "address", + "internalType": "address" + }, + { + "name": "_status", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setTokenRoute", + "inputs": [ + { + "name": "orderToken", + "type": "address", + "internalType": "address" + }, + { + "name": "adChainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "adToken", + "type": "bytes32", + "internalType": "bytes32" + } ], - outputs: [], - stateMutability: "nonpayable", + "outputs": [], + "stateMutability": "nonpayable" }, { - type: "function", - name: "supportsInterface", - inputs: [{ name: "interfaceId", type: "bytes4", internalType: "bytes4" }], - outputs: [{ name: "", type: "bool", internalType: "bool" }], - stateMutability: "view", + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" }, { - type: "function", - name: "tokenRoute", - inputs: [ - { name: "", type: "address", internalType: "address" }, - { name: "", type: "uint256", internalType: "uint256" }, + "type": "function", + "name": "tokenRoute", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } ], - outputs: [{ name: "", type: "address", internalType: "address" }], - stateMutability: "view", + "stateMutability": "view" }, { - type: "function", - name: "unlock", - inputs: [ - { name: "signature", type: "bytes", internalType: "bytes" }, - { name: "authToken", type: "bytes32", internalType: "bytes32" }, - { name: "timeToExpire", type: "uint256", internalType: "uint256" }, + "type": "function", + "name": "unlock", + "inputs": [ + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "authToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timeToExpire", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct OrderPortal.OrderParams", + "components": [ + { + "name": "orderChainToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "adChainToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "bridger", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "orderRecipient", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "adChainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "adManager", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "adId", + "type": "string", + "internalType": "string" + }, + { + "name": "adCreator", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "adRecipient", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "salt", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "nullifierHash", + "type": "bytes32", + "internalType": "bytes32" + }, { - name: "params", - type: "tuple", - internalType: "struct OrderPortal.OrderParams", - components: [ - { name: "orderChainToken", type: "address", internalType: "address" }, - { name: "adChainToken", type: "address", internalType: "address" }, - { name: "amount", type: "uint256", internalType: "uint256" }, - { name: "bridger", type: "address", internalType: "address" }, - { name: "orderRecipient", type: "address", internalType: "address" }, - { name: "adChainId", type: "uint256", internalType: "uint256" }, - { name: "adManager", type: "address", internalType: "address" }, - { name: "adId", type: "string", internalType: "string" }, - { name: "adCreator", type: "address", internalType: "address" }, - { name: "adRecipient", type: "address", internalType: "address" }, - { name: "salt", type: "uint256", internalType: "uint256" }, - ], + "name": "targetRoot", + "type": "bytes32", + "internalType": "bytes32" }, - { name: "nullifierHash", type: "bytes32", internalType: "bytes32" }, - { name: "targetRoot", type: "bytes32", internalType: "bytes32" }, - { name: "proof", type: "bytes", internalType: "bytes" }, + { + "name": "proof", + "type": "bytes", + "internalType": "bytes" + } ], - outputs: [], - stateMutability: "payable", + "outputs": [], + "stateMutability": "payable" }, { - type: "function", - name: "unlockOrderRequestHash", - inputs: [ - { name: "adId", type: "string", internalType: "string" }, - { name: "orderHash", type: "bytes32", internalType: "bytes32" }, - { name: "_targetRoot", type: "bytes32", internalType: "bytes32" }, - { name: "authToken", type: "bytes32", internalType: "bytes32" }, - { name: "timeToExpire", type: "uint256", internalType: "uint256" }, + "type": "function", + "name": "unlockOrderRequestHash", + "inputs": [ + { + "name": "adId", + "type": "string", + "internalType": "string" + }, + { + "name": "orderHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "_targetRoot", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "authToken", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timeToExpire", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + } ], - outputs: [{ name: "message", type: "bytes32", internalType: "bytes32" }], - stateMutability: "view", + "stateMutability": "view" }, { - type: "function", - name: "wNativeToken", - inputs: [], - outputs: [ - { name: "", type: "address", internalType: "contract IwNativeToken" }, + "type": "function", + "name": "wNativeToken", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IwNativeToken" + } ], - stateMutability: "view", + "stateMutability": "view" }, { - type: "event", - name: "ChainSet", - inputs: [ + "type": "event", + "name": "ChainSet", + "inputs": [ { - name: "chainId", - type: "uint256", - indexed: true, - internalType: "uint256", + "name": "chainId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" }, { - name: "adManager", - type: "address", - indexed: true, - internalType: "address", + "name": "adManager", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, - { name: "supported", type: "bool", indexed: false, internalType: "bool" }, + { + "name": "supported", + "type": "bool", + "indexed": false, + "internalType": "bool" + } ], - anonymous: false, + "anonymous": false + }, + { + "type": "event", + "name": "EIP712DomainChanged", + "inputs": [], + "anonymous": false }, - { type: "event", name: "EIP712DomainChanged", inputs: [], anonymous: false }, { - type: "event", - name: "OrderCreated", - inputs: [ + "type": "event", + "name": "OrderCreated", + "inputs": [ { - name: "orderHash", - type: "bytes32", - indexed: true, - internalType: "bytes32", + "name": "orderHash", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, { - name: "bridger", - type: "address", - indexed: true, - internalType: "address", + "name": "bridger", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, { - name: "orderChainToken", - type: "address", - indexed: true, - internalType: "address", + "name": "orderChainToken", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, { - name: "amount", - type: "uint256", - indexed: false, - internalType: "uint256", + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" }, { - name: "adChainId", - type: "uint256", - indexed: false, - internalType: "uint256", + "name": "adChainId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" }, { - name: "adChainToken", - type: "address", - indexed: false, - internalType: "address", + "name": "adChainToken", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" }, { - name: "adManager", - type: "address", - indexed: false, - internalType: "address", + "name": "adManager", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" }, - { name: "adId", type: "string", indexed: false, internalType: "string" }, { - name: "adCreator", - type: "address", - indexed: false, - internalType: "address", + "name": "adId", + "type": "string", + "indexed": false, + "internalType": "string" }, { - name: "adRecipient", - type: "address", - indexed: false, - internalType: "address", + "name": "adCreator", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" }, + { + "name": "adRecipient", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } ], - anonymous: false, + "anonymous": false }, { - type: "event", - name: "OrderUnlocked", - inputs: [ + "type": "event", + "name": "OrderUnlocked", + "inputs": [ { - name: "orderHash", - type: "bytes32", - indexed: true, - internalType: "bytes32", + "name": "orderHash", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, { - name: "recipient", - type: "address", - indexed: true, - internalType: "address", + "name": "recipient", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, { - name: "nullifierHash", - type: "bytes32", - indexed: true, - internalType: "bytes32", - }, + "name": "nullifierHash", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + } ], - anonymous: false, + "anonymous": false }, { - type: "event", - name: "RoleAdminChanged", - inputs: [ - { name: "role", type: "bytes32", indexed: true, internalType: "bytes32" }, + "type": "event", + "name": "RoleAdminChanged", + "inputs": [ { - name: "previousAdminRole", - type: "bytes32", - indexed: true, - internalType: "bytes32", + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, { - name: "newAdminRole", - type: "bytes32", - indexed: true, - internalType: "bytes32", + "name": "previousAdminRole", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, + { + "name": "newAdminRole", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + } ], - anonymous: false, + "anonymous": false }, { - type: "event", - name: "RoleGranted", - inputs: [ - { name: "role", type: "bytes32", indexed: true, internalType: "bytes32" }, + "type": "event", + "name": "RoleGranted", + "inputs": [ { - name: "account", - type: "address", - indexed: true, - internalType: "address", + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, { - name: "sender", - type: "address", - indexed: true, - internalType: "address", + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" }, + { + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" + } ], - anonymous: false, + "anonymous": false }, { - type: "event", - name: "RoleRevoked", - inputs: [ - { name: "role", type: "bytes32", indexed: true, internalType: "bytes32" }, + "type": "event", + "name": "RoleRevoked", + "inputs": [ { - name: "account", - type: "address", - indexed: true, - internalType: "address", + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, { - name: "sender", - type: "address", - indexed: true, - internalType: "address", + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" }, + { + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" + } ], - anonymous: false, + "anonymous": false }, { - type: "event", - name: "TokenRouteRemoved", - inputs: [ + "type": "event", + "name": "TokenRouteRemoved", + "inputs": [ { - name: "orderChainToken", - type: "address", - indexed: true, - internalType: "address", + "name": "orderChainToken", + "type": "address", + "indexed": true, + "internalType": "address" }, { - name: "adChainId", - type: "uint256", - indexed: true, - internalType: "uint256", - }, + "name": "adChainId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } ], - anonymous: false, + "anonymous": false }, { - type: "event", - name: "TokenRouteSet", - inputs: [ + "type": "event", + "name": "TokenRouteSet", + "inputs": [ { - name: "orderChainToken", - type: "address", - indexed: true, - internalType: "address", + "name": "orderChainToken", + "type": "address", + "indexed": true, + "internalType": "address" }, { - name: "adChainId", - type: "uint256", - indexed: true, - internalType: "uint256", + "name": "adChainId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" }, { - name: "adChainToken", - type: "address", - indexed: true, - internalType: "address", - }, + "name": "adChainToken", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + } ], - anonymous: false, + "anonymous": false }, { - type: "event", - name: "UpdateManager", - inputs: [ + "type": "event", + "name": "UpdateManager", + "inputs": [ { - name: "manager", - type: "address", - indexed: true, - internalType: "address", + "name": "manager", + "type": "address", + "indexed": true, + "internalType": "address" }, - { name: "status", type: "bool", indexed: false, internalType: "bool" }, + { + "name": "status", + "type": "bool", + "indexed": false, + "internalType": "bool" + } ], - anonymous: false, + "anonymous": false }, - { type: "error", name: "AccessControlBadConfirmation", inputs: [] }, { - type: "error", - name: "AccessControlUnauthorizedAccount", - inputs: [ - { name: "account", type: "address", internalType: "address" }, - { name: "neededRole", type: "bytes32", internalType: "bytes32" }, - ], + "type": "error", + "name": "AccessControlBadConfirmation", + "inputs": [] }, - { type: "error", name: "ECDSAInvalidSignature", inputs: [] }, { - type: "error", - name: "ECDSAInvalidSignatureLength", - inputs: [{ name: "length", type: "uint256", internalType: "uint256" }], + "type": "error", + "name": "AccessControlUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "neededRole", + "type": "bytes32", + "internalType": "bytes32" + } + ] }, { - type: "error", - name: "ECDSAInvalidSignatureS", - inputs: [{ name: "s", type: "bytes32", internalType: "bytes32" }], + "type": "error", + "name": "ECDSAInvalidSignature", + "inputs": [] }, - { type: "error", name: "InvalidShortString", inputs: [] }, { - type: "error", - name: "OrderPortal__AdChainNotSupported", - inputs: [{ name: "adChainId", type: "uint256", internalType: "uint256" }], + "type": "error", + "name": "ECDSAInvalidSignatureLength", + "inputs": [ + { + "name": "length", + "type": "uint256", + "internalType": "uint256" + } + ] }, { - type: "error", - name: "OrderPortal__AdManagerMismatch", - inputs: [{ name: "expected", type: "address", internalType: "address" }], + "type": "error", + "name": "ECDSAInvalidSignatureS", + "inputs": [ + { + "name": "s", + "type": "bytes32", + "internalType": "bytes32" + } + ] }, - { type: "error", name: "OrderPortal__AdTokenMismatch", inputs: [] }, - { type: "error", name: "OrderPortal__BridgerMustBeSender", inputs: [] }, - { type: "error", name: "OrderPortal__InsufficientLiquidity", inputs: [] }, - { type: "error", name: "OrderPortal__InvalidAdRecipient", inputs: [] }, - { type: "error", name: "OrderPortal__InvalidMessage", inputs: [] }, - { type: "error", name: "OrderPortal__InvalidProof", inputs: [] }, - { type: "error", name: "OrderPortal__InvalidSigner", inputs: [] }, - { type: "error", name: "OrderPortal__MerkleManagerAppendFailed", inputs: [] }, - { type: "error", name: "OrderPortal__MissingRoute", inputs: [] }, { - type: "error", - name: "OrderPortal__NullifierUsed", - inputs: [ - { name: "nullifierHash", type: "bytes32", internalType: "bytes32" }, - ], + "type": "error", + "name": "InvalidShortString", + "inputs": [] }, { - type: "error", - name: "OrderPortal__OrderExists", - inputs: [{ name: "orderHash", type: "bytes32", internalType: "bytes32" }], + "type": "error", + "name": "OrderPortal__AdChainNotSupported", + "inputs": [ + { + "name": "adChainId", + "type": "uint256", + "internalType": "uint256" + } + ] }, { - type: "error", - name: "OrderPortal__OrderNotOpen", - inputs: [{ name: "orderHash", type: "bytes32", internalType: "bytes32" }], + "type": "error", + "name": "OrderPortal__AdManagerMismatch", + "inputs": [ + { + "name": "expected", + "type": "bytes32", + "internalType": "bytes32" + } + ] }, - { type: "error", name: "OrderPortal__RequestHashedProcessed", inputs: [] }, - { type: "error", name: "OrderPortal__RequestTokenExpired", inputs: [] }, { - type: "error", - name: "OrderPortal__RoutesZeroAddress", - inputs: [ - { name: "orderToken", type: "address", internalType: "address" }, - { name: "adToken", type: "address", internalType: "address" }, - ], + "type": "error", + "name": "OrderPortal__AdTokenMismatch", + "inputs": [] + }, + { + "type": "error", + "name": "OrderPortal__BridgerMustBeSender", + "inputs": [] + }, + { + "type": "error", + "name": "OrderPortal__InsufficientLiquidity", + "inputs": [] }, - { type: "error", name: "OrderPortal__TokenAlreadyUsed", inputs: [] }, - { type: "error", name: "OrderPortal__ZeroAddress", inputs: [] }, - { type: "error", name: "OrderPortal__ZeroAmount", inputs: [] }, - { type: "error", name: "OrderPortal__ZeroSigner", inputs: [] }, - { type: "error", name: "ReentrancyGuardReentrantCall", inputs: [] }, { - type: "error", - name: "SafeERC20FailedOperation", - inputs: [{ name: "token", type: "address", internalType: "address" }], + "type": "error", + "name": "OrderPortal__InvalidAdRecipient", + "inputs": [] }, { - type: "error", - name: "StringTooLong", - inputs: [{ name: "str", type: "string", internalType: "string" }], + "type": "error", + "name": "OrderPortal__InvalidMessage", + "inputs": [] }, -]; + { + "type": "error", + "name": "OrderPortal__InvalidProof", + "inputs": [] + }, + { + "type": "error", + "name": "OrderPortal__InvalidSigner", + "inputs": [] + }, + { + "type": "error", + "name": "OrderPortal__MerkleManagerAppendFailed", + "inputs": [] + }, + { + "type": "error", + "name": "OrderPortal__MissingRoute", + "inputs": [] + }, + { + "type": "error", + "name": "OrderPortal__NotEvmAddress", + "inputs": [ + { + "name": "value", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "OrderPortal__NullifierUsed", + "inputs": [ + { + "name": "nullifierHash", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "OrderPortal__OrderExists", + "inputs": [ + { + "name": "orderHash", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "OrderPortal__OrderNotOpen", + "inputs": [ + { + "name": "orderHash", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "OrderPortal__RequestHashedProcessed", + "inputs": [] + }, + { + "type": "error", + "name": "OrderPortal__RequestTokenExpired", + "inputs": [] + }, + { + "type": "error", + "name": "OrderPortal__RoutesZeroAddress", + "inputs": [ + { + "name": "orderToken", + "type": "address", + "internalType": "address" + }, + { + "name": "adToken", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "OrderPortal__TokenAlreadyUsed", + "inputs": [] + }, + { + "type": "error", + "name": "OrderPortal__ZeroAddress", + "inputs": [] + }, + { + "type": "error", + "name": "OrderPortal__ZeroAmount", + "inputs": [] + }, + { + "type": "error", + "name": "OrderPortal__ZeroSigner", + "inputs": [] + }, + { + "type": "error", + "name": "ReentrancyGuardReentrantCall", + "inputs": [] + }, + { + "type": "error", + "name": "SafeERC20FailedOperation", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "StringTooLong", + "inputs": [ + { + "name": "str", + "type": "string", + "internalType": "string" + } + ] + } +] as const; diff --git a/apps/frontend/app/(app)/bridge/page.tsx b/apps/frontend/app/(app)/bridge/page.tsx index f571295..ba5197a 100644 --- a/apps/frontend/app/(app)/bridge/page.tsx +++ b/apps/frontend/app/(app)/bridge/page.tsx @@ -11,10 +11,11 @@ const BridgePage = () => {

- First P2P cross-chain bridge on Hedera + P2P cross-chain bridge across Ethereum & Stellar

- Unlocking the next generation of cross-chain bridging on Hedera.{" "} + Unlocking the next generation of cross-chain bridging between + Ethereum and Stellar.{" "} create ad diff --git a/apps/frontend/app/layout.tsx b/apps/frontend/app/layout.tsx index 6a529f0..2b26752 100644 --- a/apps/frontend/app/layout.tsx +++ b/apps/frontend/app/layout.tsx @@ -7,6 +7,7 @@ import { SmoothScroll } from "@/components/shared/SmoothScroller" import { TanstackQueryProvider } from "@/components/providers/TanstackProvider" import { Wagmi } from "@/components/providers/Wagmi" import { RainbowKit } from "@/components/providers/RainbowKit" +import { StellarWalletProvider } from "@/components/providers/StellarWallet" import { Toaster } from "@/components/ui/sonner" const perfectlyNineties = localFont({ @@ -56,12 +57,14 @@ export default function RootLayout({ > - - - {children} - - - + + + + {children} + + + + diff --git a/apps/frontend/components/ad-management-ui/AddLiquidity.tsx b/apps/frontend/components/ad-management-ui/AddLiquidity.tsx index c7a69c3..f5910bd 100644 --- a/apps/frontend/components/ad-management-ui/AddLiquidity.tsx +++ b/apps/frontend/components/ad-management-ui/AddLiquidity.tsx @@ -9,6 +9,7 @@ import { Chain, parseUnits } from "viem" import { useAccount } from "wagmi" import { useChainModal } from "@rainbow-me/rainbowkit" import { useGetAllChains } from "@/hooks/useChains" +import { isVisibleChain } from "@/lib/chains" import { GiCancel } from "react-icons/gi" import { hederaTestnet, @@ -106,7 +107,11 @@ export const AddLiquidity = () => { loading={loadingChains} className="w-full !h-[40px]" options={chains?.rows - .filter((chain) => Number(chain.chainId) !== order_chain?.id!) + .filter( + (chain) => + isVisibleChain(chain.chainId) && + Number(chain.chainId) !== order_chain?.id! + ) .map((chain) => { return { label: chain.name, @@ -132,7 +137,11 @@ export const AddLiquidity = () => { loading={loadingChains} className="w-full !h-[40px]" options={chains?.rows - .filter((chain) => Number(chain.chainId) !== base_chain?.id!) + .filter( + (chain) => + isVisibleChain(chain.chainId) && + Number(chain.chainId) !== base_chain?.id! + ) .map((chain) => { return { label: chain.name, diff --git a/apps/frontend/components/bridge-ui/BridgeTab.tsx b/apps/frontend/components/bridge-ui/BridgeTab.tsx index 11b618e..6848b02 100644 --- a/apps/frontend/components/bridge-ui/BridgeTab.tsx +++ b/apps/frontend/components/bridge-ui/BridgeTab.tsx @@ -2,10 +2,8 @@ import React, { useEffect, useState } from "react" import { Alert, - Avatar, Button, Divider, - Input, Select, Skeleton, Tooltip, @@ -20,8 +18,9 @@ import { useGetAllTokens } from "@/hooks/useTokens" import { useGetAllAds } from "@/hooks/useAds" import { GiChainLightning } from "react-icons/gi" import SkeletonTradeAd from "./SkeletonTradeAd" -import { hederaTestnet, sepolia } from "viem/chains" +import { sepolia } from "viem/chains" import { chain_icons } from "@/lib/chain-icons" +import { isVisibleChain, STELLAR_TESTNET_CHAIN_ID } from "@/lib/chains" import { IoDocumentText } from "react-icons/io5" import { Logo } from "../shared/Logo" @@ -29,7 +28,7 @@ export const BridgeTab = () => { const { data: chains, isLoading: loadingChains } = useGetAllChains({}) const [selectedBaseChainId, setSelectedBaseChainId] = useState( - `${hederaTestnet.id}` + STELLAR_TESTNET_CHAIN_ID ) const [selectedDstChainId, setSelectedDstChainId] = useState( `${sepolia.id}` @@ -66,13 +65,13 @@ export const BridgeTab = () => {

From Chain

-
+

To Chain

-
+
{loadingChains ? ( <> @@ -85,21 +84,23 @@ export const BridgeTab = () => { className="min-w-[200px] !h-[40px]" value={selectedBaseChainId} > - {chains?.rows?.map((chain) => { - return ( - -
- - {chain.name} -
-
- ) - })} + {chains?.rows + ?.filter((chain) => isVisibleChain(chain.chainId)) + .map((chain) => { + return ( + +
+ + {chain.name} +
+
+ ) + })}
@@ -109,21 +110,23 @@ export const BridgeTab = () => { className="min-w-[200px] !h-[40px]" value={selectedDstChainId} > - {chains?.rows?.map((chain) => { - return ( - -
- - {chain.name} -
-
- ) - })} + {chains?.rows + ?.filter((chain) => isVisibleChain(chain.chainId)) + .map((chain) => { + return ( + +
+ + {chain.name} +
+
+ ) + })} )} @@ -154,11 +157,10 @@ export const BridgeTab = () => { return (

setSelectedTokenId(token.id)} > {token.name} @@ -229,7 +231,7 @@ export const BridgeTab = () => { type="primary" className="mt-4" onClick={() => { - setSelectedBaseChainId(`${hederaTestnet.id}`) + setSelectedBaseChainId(STELLAR_TESTNET_CHAIN_ID) setSelectedDstChainId(`${sepolia.id}`) }} > diff --git a/apps/frontend/components/bridge-ui/SellAdd.tsx b/apps/frontend/components/bridge-ui/SellAdd.tsx index 5a38f99..06e4ee6 100644 --- a/apps/frontend/components/bridge-ui/SellAdd.tsx +++ b/apps/frontend/components/bridge-ui/SellAdd.tsx @@ -130,7 +130,7 @@ export const SellAd = ({ ...props }: propsI) => {

I will get

{ const handleCreateTrade = async () => { await mutateAsync({ - adId: props.id, - routeId: props.routeId, - amount: parseUnits(amount, props.orderToken.decimals).toString(), - bridgerDstAddress: account.address!, + payload: { + adId: props.id, + routeId: props.routeId, + amount: parseUnits(amount, props.orderToken.decimals).toString(), + bridgerDstAddress: account.address!, + }, orderTokenId: props.orderTokenId, }) toggleModal() @@ -358,7 +361,12 @@ const MerchantInfo = ({ creatorAddress, ...props }: merchantI) => { - const initial = creatorAddress[creatorAddress.length - 1] + // Ad creators fund on the ad chain — render their address in its native form. + const displayAddress = formatChainAddress( + creatorAddress, + props.adToken?.chainKind, + ) + const initial = displayAddress[displayAddress.length - 1] ?? "?" return ( <> @@ -375,7 +383,7 @@ const MerchantInfo = ({

- {truncateString(creatorAddress, 5, 5)} + {truncateString(displayAddress, 5, 5)}

diff --git a/apps/frontend/components/connect-wallet/ConnectWalletButton.tsx b/apps/frontend/components/connect-wallet/ConnectWalletButton.tsx index df83607..a582d56 100644 --- a/apps/frontend/components/connect-wallet/ConnectWalletButton.tsx +++ b/apps/frontend/components/connect-wallet/ConnectWalletButton.tsx @@ -1,25 +1,75 @@ "use client" -import React, { useState } from "react" -import { SpecialButton } from "../ui/SpecialButton" -import { Connector, injected, useConnect } from "wagmi" +import React from "react" +import Cookies from "js-cookie" +import { Button, Dropdown } from "antd" +import type { MenuProps } from "antd" import { ConnectButton } from "@rainbow-me/rainbowkit" +import { ChevronDown, LogOut } from "lucide-react" +import { useStellarWallet } from "@/components/providers/StellarWallet" +import { useStellarLogin } from "@/hooks/useStellarAuth" + +const shortAddress = (addr: string) => + `${addr.slice(0, 4)}…${addr.slice(-4)}` + +const StellarConnect = () => { + const { address, connect, disconnect, isConnecting } = useStellarWallet() + const login = useStellarLogin() + + const authed = Boolean(Cookies.get("auth_token")) + + if (!address) { + return ( + + ) + } + + if (!authed) { + return ( +
+ +
+ ) + } + + const items: MenuProps["items"] = [ + { + key: "disconnect", + label: "Disconnect", + onClick: async () => { + await disconnect() + Cookies.remove("auth_token") + Cookies.remove("refresh_token") + window.location.reload() + }, + }, + ] + return ( + + + + ) +} export const ConnectWalletButton = () => { - const { connect, connectors } = useConnect() return ( -
- - {/* - connect({ - connector: walletConnect({ - projectId: "b56e18d47c72ab683b10814fe9495694", - }), - }) - } - > - Connect Wallet - */} +
+ +
) } diff --git a/apps/frontend/components/landing/Approach.tsx b/apps/frontend/components/landing/Approach.tsx index c69cb9d..8183a73 100644 --- a/apps/frontend/components/landing/Approach.tsx +++ b/apps/frontend/components/landing/Approach.tsx @@ -55,8 +55,8 @@ export const OurApproach = () => {

- ProofBridge is the new frontier of bridging, piloted by - Hedera. + ProofBridge is the new frontier of bridging, connecting + Ethereum and Stellar.

diff --git a/apps/frontend/components/landing/Features.tsx b/apps/frontend/components/landing/Features.tsx index 72cbb35..675bece 100644 --- a/apps/frontend/components/landing/Features.tsx +++ b/apps/frontend/components/landing/Features.tsx @@ -9,25 +9,25 @@ const features = [ title: "P2P bridge", desc: "Peer-to-Peer Cross-Chain Transactions. Direct interaction between users without intermediaries.", img: "/bridge.png", - explore: "First P2P bridge on Hedera", + explore: "P2P bridge across Ethereum & Stellar", }, { title: "ZK-Based Security", desc: "Zero-Knowledge Proof Validation. Ensures correctness of computations and state transitions.", img: "/assets/features/shield.png", - explore: "First P2P bridge on Hedera", + explore: "P2P bridge across Ethereum & Stellar", }, { title: "Multi-Chain support", desc: "Multi-Chain Compatibility. Supports Ethereum, EVM-compatible chains, and extensibility for non-EVM chains.", img: "/assets/features/tokens.png", - explore: "First P2P bridge on Hedera", + explore: "P2P bridge across Ethereum & Stellar", }, { title: "Trustless Operations", desc: "Removes reliance on custodians, relayers, or centralized sequencers.", img: "/assets/features/wall.png", - explore: "First P2P bridge on Hedera", + explore: "P2P bridge across Ethereum & Stellar", }, ] diff --git a/apps/frontend/components/landing/Hero-Alt.tsx b/apps/frontend/components/landing/Hero-Alt.tsx index 3d7110f..d3a20a9 100644 --- a/apps/frontend/components/landing/Hero-Alt.tsx +++ b/apps/frontend/components/landing/Hero-Alt.tsx @@ -32,7 +32,7 @@ export const HeroAlt = () => {

- Hedera's First + Ethereum & Stellar

@@ -40,7 +40,7 @@ export const HeroAlt = () => { ProofBridge® is Unlocking the next generation of cross-chain - bridging on Hedera + bridging between Ethereum and Stellar

diff --git a/apps/frontend/components/landing/Hero.tsx b/apps/frontend/components/landing/Hero.tsx index e5e811b..49aa0dd 100644 --- a/apps/frontend/components/landing/Hero.tsx +++ b/apps/frontend/components/landing/Hero.tsx @@ -68,7 +68,7 @@ export const Hero = () => { Bridge

- Unlocking the next generation of cross-chain bridging on Hedera + Unlocking the next generation of cross-chain bridging between Ethereum and Stellar

diff --git a/apps/frontend/components/orders/OrdersTable.tsx b/apps/frontend/components/orders/OrdersTable.tsx index ff9282f..924ac49 100644 --- a/apps/frontend/components/orders/OrdersTable.tsx +++ b/apps/frontend/components/orders/OrdersTable.tsx @@ -11,6 +11,7 @@ import { } from "@/hooks/useTrades" import { useAccount } from "wagmi" import { truncateString } from "@/utils/truncate-string" +import { formatChainAddressShort } from "@/utils/format-address" import { Status } from "../shared/Status" import moment from "moment" import { formatUnits } from "viem" @@ -55,14 +56,18 @@ export const OrdersTable: React.FC<{ type?: "incoming" | "outgoing" }> = ({ title: "Bridger", dataIndex: "bridgerAddress", render: (value, rowData) => { - return

{truncateString(value, 3, 3)}

+ // Bridger pays on the order chain. + const kind = rowData.route.orderToken.chain.kind + return

{formatChainAddressShort(value, kind, 3, 3)}

}, } : { title: "Ad Creator", dataIndex: "adCreatorAddress", render: (value, rowData) => { - return

{truncateString(value, 3, 3)}

+ // Ad creator funds on the ad chain. + const kind = rowData.route.adToken.chain.kind + return

{formatChainAddressShort(value, kind, 3, 3)}

}, }, { @@ -107,26 +112,10 @@ export const OrdersTable: React.FC<{ type?: "incoming" | "outgoing" }> = ({ dataIndex: "status", showSorterTooltip: { target: "full-header" }, filters: [ - { - text: "ACTIVE", - value: "ACTIVE", - }, - { - text: "LOCKED", - value: "LOCKED", - }, - { - text: "INACTIVE", - value: "INACTIVE", - }, - { - text: "EXHAUSTED", - value: "EXHAUSTED", - }, - { - text: "CLOSED", - value: "CLOSED", - }, + { text: "ACTIVE", value: "ACTIVE" }, + { text: "LOCKED", value: "LOCKED" }, + { text: "INACTIVE", value: "INACTIVE" }, + { text: "COMPLETED", value: "COMPLETED" }, ], onFilter: (value, record) => record.status.indexOf(value as string) === 0, sortDirections: ["descend"], @@ -299,7 +288,12 @@ export const OrdersTable: React.FC<{ type?: "incoming" | "outgoing" }> = ({
Bridger - {truncateString(tradeInfo.bridgerAddress, 4, 4)} + {formatChainAddressShort( + tradeInfo.bridgerAddress, + tradeInfo.route.orderToken.chain.kind, + 4, + 4, + )}
diff --git a/apps/frontend/components/providers/RainbowKit.tsx b/apps/frontend/components/providers/RainbowKit.tsx index af28c35..8fd60fe 100644 --- a/apps/frontend/components/providers/RainbowKit.tsx +++ b/apps/frontend/components/providers/RainbowKit.tsx @@ -10,6 +10,7 @@ import { SiweMessage } from "siwe" import { useAccount } from "wagmi" import Cookies from "js-cookie" import { urls } from "@/utils/urls" +import { requestChallenge, submitLogin } from "@/services/auth.service" function useAuthenticationAdapter() { // If the user is logged in but the account is different (e.g. they changed account in Metamask), log them out and reload the page. @@ -18,18 +19,11 @@ function useAuthenticationAdapter() { return useMemo(() => { return createAuthenticationAdapter({ getNonce: async () => { - const res = await fetch( - "https://proofbridge.onrender.com/v1/auth/challenge", - { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - address: account.address, - }), - } - ) - const data = await res.json() - return data.nonce + const res = await requestChallenge("EVM", account.address ?? "") + if (res.chainKind !== "EVM") { + throw new Error("Unexpected challenge kind") + } + return res.nonce }, createMessage: ({ nonce, address, chainId }) => { return new SiweMessage({ @@ -44,22 +38,21 @@ function useAuthenticationAdapter() { }, verify: async ({ message, signature }) => { - const loginRes = await fetch( - "https://proofbridge.onrender.com/v1/auth/login", - { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ message, signature }), - } - ) - const data = await loginRes.json() - Cookies.set("auth_token", data.tokens.access) - Cookies.set("refresh_token", data.tokens.refresh) - window.location.reload() - return Boolean(loginRes.ok) + try { + const data = await submitLogin({ + chainKind: "EVM", + message, + signature, + }) + Cookies.set("auth_token", data.tokens.access) + Cookies.set("refresh_token", data.tokens.refresh) + window.location.reload() + return true + } catch { + return false + } }, signOut: async () => { - // await fetch("/api/logout") Cookies.remove("auth_token") Cookies.remove("refresh_token") window.location.reload() diff --git a/apps/frontend/components/providers/StellarWallet.tsx b/apps/frontend/components/providers/StellarWallet.tsx new file mode 100644 index 0000000..6a69975 --- /dev/null +++ b/apps/frontend/components/providers/StellarWallet.tsx @@ -0,0 +1,193 @@ +"use client" +import React, { + createContext, + useCallback, + useContext, + useEffect, + useMemo, + useRef, + useState, +} from "react" +import { + Networks, + StellarWalletsKit, + KitEventType, +} from "@creit.tech/stellar-wallets-kit" +import { FreighterModule } from "@creit.tech/stellar-wallets-kit/modules/freighter" +import { AlbedoModule } from "@creit.tech/stellar-wallets-kit/modules/albedo" +import { LobstrModule } from "@creit.tech/stellar-wallets-kit/modules/lobstr" +import { xBullModule } from "@creit.tech/stellar-wallets-kit/modules/xbull" +import { RabetModule } from "@creit.tech/stellar-wallets-kit/modules/rabet" +import { HanaModule } from "@creit.tech/stellar-wallets-kit/modules/hana" + +interface StellarWalletContextValue { + address: string | null + networkPassphrase: string + isConnecting: boolean + isReady: boolean + connect: () => Promise + disconnect: () => Promise + signTransaction: ( + xdr: string, + networkPassphrase?: string, + ) => Promise +} + +const StellarWalletContext = createContext( + null, +) + +const STORAGE_ADDRESS_KEY = "stellar_wallet_address" +const STORAGE_WALLET_KEY = "stellar_wallet_id" + +export const StellarWalletProvider = ({ + children, +}: { + children: React.ReactNode +}) => { + const [address, setAddress] = useState(null) + const [isConnecting, setIsConnecting] = useState(false) + const [isReady, setIsReady] = useState(false) + const initialized = useRef(false) + + useEffect(() => { + if (initialized.current) return + initialized.current = true + + const cachedWallet = + typeof window !== "undefined" + ? window.localStorage.getItem(STORAGE_WALLET_KEY) ?? undefined + : undefined + + StellarWalletsKit.init({ + network: Networks.TESTNET, + selectedWalletId: cachedWallet, + modules: [ + new FreighterModule(), + new AlbedoModule(), + new LobstrModule(), + new xBullModule(), + new RabetModule(), + new HanaModule(), + ], + }) + + const cached = + typeof window !== "undefined" + ? window.localStorage.getItem(STORAGE_ADDRESS_KEY) + : null + if (cached) setAddress(cached) + + const unsubState = StellarWalletsKit.on( + KitEventType.STATE_UPDATED, + ({ payload }) => { + if (payload.address) { + setAddress(payload.address) + window.localStorage.setItem(STORAGE_ADDRESS_KEY, payload.address) + } + }, + ) + const unsubSelected = StellarWalletsKit.on( + KitEventType.WALLET_SELECTED, + ({ payload }) => { + if (payload.id) { + window.localStorage.setItem(STORAGE_WALLET_KEY, payload.id) + } + }, + ) + const unsubDisconnect = StellarWalletsKit.on( + KitEventType.DISCONNECT, + () => { + setAddress(null) + window.localStorage.removeItem(STORAGE_ADDRESS_KEY) + window.localStorage.removeItem(STORAGE_WALLET_KEY) + }, + ) + + setIsReady(true) + + return () => { + unsubState() + unsubSelected() + unsubDisconnect() + } + }, []) + + const connect = useCallback(async () => { + setIsConnecting(true) + try { + const result = await new Promise((resolve, reject) => { + StellarWalletsKit.authModal({}).then( + () => { + StellarWalletsKit.getAddress().then( + ({ address }) => resolve(address), + reject, + ) + }, + (err) => { + if (err?.message?.toLowerCase?.().includes("closed")) resolve(null) + else reject(err) + }, + ) + }) + if (result) { + setAddress(result) + window.localStorage.setItem(STORAGE_ADDRESS_KEY, result) + } + return result + } finally { + setIsConnecting(false) + } + }, []) + + const disconnect = useCallback(async () => { + try { + await StellarWalletsKit.disconnect() + } catch { + // some modules don't implement disconnect — ignore + } + setAddress(null) + window.localStorage.removeItem(STORAGE_ADDRESS_KEY) + window.localStorage.removeItem(STORAGE_WALLET_KEY) + }, []) + + const signTransaction = useCallback( + async (xdr: string, networkPassphrase?: string) => { + const { signedTxXdr } = await StellarWalletsKit.signTransaction(xdr, { + networkPassphrase: networkPassphrase ?? Networks.TESTNET, + address: address ?? undefined, + }) + return signedTxXdr + }, + [address], + ) + + const value = useMemo( + () => ({ + address, + networkPassphrase: Networks.TESTNET, + isConnecting, + isReady, + connect, + disconnect, + signTransaction, + }), + [address, isConnecting, isReady, connect, disconnect, signTransaction], + ) + + return ( + + {children} + + ) +} + +export const useStellarWallet = () => { + const ctx = useContext(StellarWalletContext) + if (!ctx) { + throw new Error( + "useStellarWallet must be used inside ", + ) + } + return ctx +} diff --git a/apps/frontend/hooks/useAds.ts b/apps/frontend/hooks/useAds.ts index efd655b..1e1828d 100644 --- a/apps/frontend/hooks/useAds.ts +++ b/apps/frontend/hooks/useAds.ts @@ -22,17 +22,91 @@ import { useMutation, useQuery } from "@tanstack/react-query"; import { toast } from "sonner"; import { useAccount, useWriteContract } from "wagmi"; import { waitForTransactionReceipt } from "wagmi/actions"; -import { getSingleToken, getTokens } from "@/services/tokens.service"; +import { getSingleToken } from "@/services/tokens.service"; import { IToken } from "@/types/tokens"; -import { formatUnits, parseEther, parseUnits } from "viem"; +import { formatUnits, parseEther } from "viem"; +import { useStellarAdapter } from "@/lib/stellar-adapter"; +import { + closeAdSoroban, + createAdSoroban, + fundAdSoroban, + withdrawFromAdSoroban, +} from "@/utils/stellar/actions"; +import { + establishTrustline, + hasTrustline, +} from "@/utils/stellar/trustline"; +import type { TrustlineCtx } from "@/utils/stellar/trustline"; + +/** + * For SAC tokens, the signer's account must trust the underlying classic + * asset or the SAC transfer will fail. Adds the trustline on-demand before + * the contract call. No-op for NATIVE/SEP41 and when the trustline already + * exists. + */ +async function ensureSacTrustline( + token: IToken, + ctx: TrustlineCtx, +): Promise { + if (token.kind !== "SAC") return; + if (!token.assetIssuer) { + throw new Error( + `Token ${token.symbol} is marked SAC but has no assetIssuer configured`, + ); + } + const ok = await hasTrustline( + ctx.signerPublicKey, + token.symbol, + token.assetIssuer, + ctx.horizonUrl, + ); + if (ok) return; + toast.info(`Establishing trustline for ${token.symbol}…`); + await establishTrustline(ctx, token.symbol, token.assetIssuer); +} export const useCreateAd = () => { const { writeContractAsync } = useWriteContract(); + const { + buildCtx: buildStellarCtx, + buildTrustlineCtx, + address: stellarAddress, + } = useStellarAdapter(); return useMutation({ mutationKey: ["create-ad"], mutationFn: async (data: { payload: ICreateAdRequest; token: IToken }) => { const response = await createAd(data.payload); const token = data.token; + + if (response.chainKind === "STELLAR") { + if (!stellarAddress) throw new Error("Stellar wallet not connected"); + await ensureSacTrustline(token, buildTrustlineCtx()); + const txHash = await createAdSoroban( + buildStellarCtx(), + { + signatureHex: response.signature, + signerPublicKeyHex: response.signerPublicKey!, + authTokenHex: response.authToken, + timeToExpire: response.timeToExpire, + }, + { + creatorPublicKey: stellarAddress, + adId: response.adId, + adTokenHex: response.adToken, + initialAmount: data.payload.fundAmount, + orderChainId: response.orderChainId, + adRecipientHex: response.adRecipient, + adManagerHex: response.contractAddress, + }, + ); + await confirmAdTx({ + txHash, + signature: response.signature, + adId: response.adId, + }); + return response; + } + const performERC20Tx = async () => { const txHash = await writeContractAsync({ address: response.contractAddress, @@ -45,7 +119,7 @@ export const useCreateAd = () => { BigInt(response.timeToExpire), response.adId, response.adToken, - data.payload.fundAmount, + BigInt(data.payload.fundAmount), BigInt(response.orderChainId), response.adRecipient, ], @@ -72,7 +146,7 @@ export const useCreateAd = () => { abi: ERC20_ABI, chainId: Number(response.chainId), functionName: "approve", - args: [response.contractAddress, data.payload.fundAmount], + args: [response.contractAddress, BigInt(data.payload.fundAmount)], }); const approveReceipt = await waitForTransactionReceipt(config, { hash: approveHash, @@ -100,7 +174,7 @@ export const useCreateAd = () => { BigInt(response.timeToExpire), response.adId, response.adToken, - data.payload.fundAmount, + BigInt(data.payload.fundAmount), BigInt(response.orderChainId), response.adRecipient, ], @@ -125,12 +199,9 @@ export const useCreateAd = () => { onSuccess: () => { toast.success("Ad creation was successful"); }, - onError: function (error: any, variables, result, ctx) { + onError: function (error: any) { toast.error( - error.response.data.message || error.message || "Unable to create ad", - { - description: "", - } + error.response?.data?.message || error.message || "Unable to create ad", ); }, }); @@ -138,13 +209,38 @@ export const useCreateAd = () => { export const useFundAd = () => { const { writeContractAsync } = useWriteContract(); - const account = useAccount(); + const { buildCtx: buildStellarCtx, buildTrustlineCtx } = useStellarAdapter(); return useMutation({ mutationKey: ["fund-ad"], mutationFn: async (data: ITopUpAdRequest) => { const response = await fundAd(data); const token = await getSingleToken(data.tokenId); + + if (response.chainKind === "STELLAR") { + await ensureSacTrustline(token, buildTrustlineCtx()); + const txHash = await fundAdSoroban( + buildStellarCtx(), + { + signatureHex: response.signature, + signerPublicKeyHex: response.signerPublicKey!, + authTokenHex: response.authToken, + timeToExpire: response.timeToExpire, + }, + { + adId: response.adId, + amount: data.amountBigInt.toString(), + adManagerHex: response.contractAddress, + }, + ); + await confirmAdTx({ + txHash, + signature: response.signature, + adId: response.adId, + }); + return response; + } + if (token.kind === "ERC20") { const approveHash = await writeContractAsync({ address: token.address, @@ -233,12 +329,9 @@ export const useFundAd = () => { onSuccess: () => { toast.success("Ad top up was successful"); }, - onError: function (error: any, variables, result, ctx) { + onError: function (error: any) { toast.error( - error.response.data.message || error.message || "Unable to top up ad", - { - description: "", - } + error.response?.data?.message || error.message || "Unable to top up ad", ); }, }); @@ -246,12 +339,37 @@ export const useFundAd = () => { export const useWithdrawFunds = () => { const { writeContractAsync } = useWriteContract(); + const { buildCtx: buildStellarCtx } = useStellarAdapter(); return useMutation({ mutationKey: ["withdraw-ad"], mutationFn: async (data: IWithdrawFromAdRequest) => { const response = await withdrawFromAd(data); + if (response.chainKind === "STELLAR") { + const txHash = await withdrawFromAdSoroban( + buildStellarCtx(), + { + signatureHex: response.signature, + signerPublicKeyHex: response.signerPublicKey!, + authTokenHex: response.authToken, + timeToExpire: response.timeToExpire, + }, + { + adId: response.adId, + amount: data.amountBigInt.toString(), + toPublicKey: data.to, + adManagerHex: response.contractAddress, + }, + ); + await confirmAdTx({ + txHash, + signature: response.signature, + adId: response.adId, + }); + return response; + } + const txHash = await writeContractAsync({ address: response.contractAddress, abi: AD_MANAGER_ABI, @@ -263,7 +381,7 @@ export const useWithdrawFunds = () => { BigInt(response.timeToExpire), response.adId, data.amountBigInt, - data.to, + data.to as `0x${string}`, ], }); const receipt = await waitForTransactionReceipt(config, { @@ -282,12 +400,9 @@ export const useWithdrawFunds = () => { onSuccess: () => { toast.success("Funds withdrawal was successful"); }, - onError: function (error: any, variables, result, ctx) { + onError: function (error: any) { toast.error( - error.response.data.message || error.message || "Unable to withdraw", - { - description: "", - } + error.response?.data?.message || error.message || "Unable to withdraw", ); }, }); @@ -295,12 +410,36 @@ export const useWithdrawFunds = () => { export const useCloseAd = () => { const { writeContractAsync } = useWriteContract(); + const { buildCtx: buildStellarCtx } = useStellarAdapter(); return useMutation({ mutationKey: ["close-ad"], mutationFn: async (data: ICloseAdRequest) => { const response = await closeAd(data); + if (response.chainKind === "STELLAR") { + const txHash = await closeAdSoroban( + buildStellarCtx(), + { + signatureHex: response.signature, + signerPublicKeyHex: response.signerPublicKey!, + authTokenHex: response.authToken, + timeToExpire: response.timeToExpire, + }, + { + adId: response.adId, + toPublicKey: data.to, + adManagerHex: response.contractAddress, + }, + ); + await confirmAdTx({ + txHash, + signature: response.signature, + adId: response.adId, + }); + return response; + } + const txHash = await writeContractAsync({ address: response.contractAddress, abi: AD_MANAGER_ABI, @@ -311,7 +450,7 @@ export const useCloseAd = () => { response.authToken, BigInt(response.timeToExpire), response.adId, - data.to, + data.to as `0x${string}`, ], }); const receipt = await waitForTransactionReceipt(config, { @@ -330,12 +469,9 @@ export const useCloseAd = () => { onSuccess: () => { toast.success("Ad closed successfully"); }, - onError: function (error: any, variables, result, ctx) { + onError: function (error: any) { toast.error( - error.response.data.message || error.message || "Unable to close ad", - { - description: "", - } + error.response?.data?.message || error.message || "Unable to close ad", ); }, }); @@ -350,12 +486,9 @@ export const useConfirmAdTx = () => { onSuccess: () => { toast.success("Tx confirmed successful"); }, - onError: function (error: any, variables, result, ctx) { + onError: function (error: any) { toast.error( - error.response.data.message || error.message || "Unable to confirm ad", - { - description: "", - } + error.response?.data?.message || error.message || "Unable to confirm ad", ); }, }); diff --git a/apps/frontend/hooks/useStellarAuth.ts b/apps/frontend/hooks/useStellarAuth.ts new file mode 100644 index 0000000..92eb9a2 --- /dev/null +++ b/apps/frontend/hooks/useStellarAuth.ts @@ -0,0 +1,54 @@ +"use client" +import { useMutation } from "@tanstack/react-query" +import Cookies from "js-cookie" +import { toast } from "sonner" +import { requestChallenge, submitLogin } from "@/services/auth.service" +import { useStellarWallet } from "@/components/providers/StellarWallet" + +/** + * Runs the full SEP-10 login dance: + * 1. ensure wallet is connected (returns G-strkey) + * 2. POST /auth/challenge → server-signed challenge XDR + * 3. ask wallet to co-sign the XDR + * 4. POST /auth/login → { tokens, user } + * 5. persist tokens in cookies + */ +export const useStellarLogin = () => { + const { address, connect, signTransaction, networkPassphrase } = + useStellarWallet() + + return useMutation({ + mutationKey: ["stellar-sep10-login"], + mutationFn: async () => { + const accountId = address ?? (await connect()) + if (!accountId) throw new Error("Stellar wallet not connected") + + const challenge = await requestChallenge("STELLAR", accountId) + if (challenge.chainKind !== "STELLAR") { + throw new Error("Unexpected challenge kind from backend") + } + + const signedXdr = await signTransaction( + challenge.transaction, + challenge.networkPassphrase ?? networkPassphrase, + ) + + const data = await submitLogin({ + chainKind: "STELLAR", + transaction: signedXdr, + }) + + Cookies.set("auth_token", data.tokens.access) + Cookies.set("refresh_token", data.tokens.refresh) + window.location.reload() + return data + }, + onError: (error: any) => { + toast.error( + error?.response?.data?.message || + error?.message || + "Stellar sign-in failed", + ) + }, + }) +} diff --git a/apps/frontend/hooks/useTrades.ts b/apps/frontend/hooks/useTrades.ts index 403cede..ae7bee1 100644 --- a/apps/frontend/hooks/useTrades.ts +++ b/apps/frontend/hooks/useTrades.ts @@ -9,9 +9,10 @@ import { unlockFunds, } from "@/services/trades.service"; import { + IAdManagerOrderParams, ICreateTradeRequest, IGetTradesParams, - IUnlockFundsRequest, + IOrderPortalOrderParams, } from "@/types/trades"; import { config } from "@/utils/wagmi-config"; import { useMutation, useQuery } from "@tanstack/react-query"; @@ -19,29 +20,101 @@ import { waitForTransactionReceipt } from "wagmi/actions"; import { useAccount, useWriteContract, useSignTypedData } from "wagmi"; import { toast } from "sonner"; import { ERC20_ABI } from "@/abis/ERC20.abi"; -import { getSingleToken, getTokens } from "@/services/tokens.service"; +import { getSingleToken } from "@/services/tokens.service"; import { AD_MANAGER_ABI } from "@/abis/AdManager.abi"; -import { formatUnits, parseEther, parseUnits } from "viem"; +import { formatUnits, parseEther } from "viem"; +import { useStellarAdapter } from "@/lib/stellar-adapter"; +import { + createOrderSoroban, + lockForOrderSoroban, + unlockOrderPortalSoroban, + unlockSoroban, +} from "@/utils/stellar/actions"; +import { + establishTrustline, + hasTrustline, +} from "@/utils/stellar/trustline"; +import type { TrustlineCtx } from "@/utils/stellar/trustline"; +import type { IToken } from "@/types/tokens"; + +async function ensureSacTrustline( + token: IToken, + ctx: TrustlineCtx, +): Promise { + if (token.kind !== "SAC") return; + if (!token.assetIssuer) { + throw new Error( + `Token ${token.symbol} is marked SAC but has no assetIssuer configured`, + ); + } + const ok = await hasTrustline( + ctx.signerPublicKey, + token.symbol, + token.assetIssuer, + ctx.horizonUrl, + ); + if (ok) return; + toast.info(`Establishing trustline for ${token.symbol}…`); + await establishTrustline(ctx, token.symbol, token.assetIssuer); +} export const useCreateTrade = () => { - const account = useAccount(); const { writeContractAsync } = useWriteContract(); + const { buildCtx: buildStellarCtx, buildTrustlineCtx } = useStellarAdapter(); return useMutation({ mutationKey: ["create-trade"], - mutationFn: async (data: ICreateTradeRequest) => { - const response = await createTrade(data); + mutationFn: async (data: { + payload: ICreateTradeRequest; + orderTokenId: string; + }) => { + const response = await createTrade(data.payload); + const rc = response.reqContractDetails; + + if (rc.chainKind === "STELLAR") { + const orderToken = await getSingleToken(data.orderTokenId); + await ensureSacTrustline(orderToken, buildTrustlineCtx()); + const txHash = await createOrderSoroban( + buildStellarCtx(), + { + signatureHex: rc.signature, + signerPublicKeyHex: rc.signerPublicKey!, + authTokenHex: rc.authToken, + timeToExpire: rc.timeToExpire, + }, + { + orderParams: { + orderChainToken: rc.orderParams.orderChainToken, + adChainToken: rc.orderParams.adChainToken, + amount: rc.orderParams.amount, + bridger: rc.orderParams.bridger, + orderRecipient: rc.orderParams.orderRecipient, + adChainId: rc.orderParams.adChainId, + adManager: rc.orderParams.adManager, + adId: rc.orderParams.adId, + adCreator: rc.orderParams.adCreator, + adRecipient: rc.orderParams.adRecipient, + salt: rc.orderParams.salt, + }, + orderPortalHex: rc.contractAddress, + }, + ); + await confirmTradeTx({ + txHash, + signature: rc.signature, + tradeId: response.tradeId, + }); + return response; + } + const token = await getSingleToken(data.orderTokenId); if (token.kind === "ERC20") { const approveHash = await writeContractAsync({ - address: response.reqContractDetails.orderParams.orderChainToken, + address: rc.orderParams.orderChainToken, abi: ERC20_ABI, chainId: Number(token.chain.chainId), functionName: "approve", - args: [ - response.reqContractDetails.contractAddress, - BigInt(response.reqContractDetails.orderParams.amount), - ], + args: [rc.contractAddress, BigInt(rc.orderParams.amount)], }); const approveReceipt = await waitForTransactionReceipt(config, { @@ -50,32 +123,26 @@ export const useCreateTrade = () => { if (approveReceipt.status === "success") { const txHash = await writeContractAsync({ - address: response.reqContractDetails.contractAddress, - chainId: Number(response.reqContractDetails.chainId), + address: rc.contractAddress, + chainId: Number(rc.chainId), abi: ORDER_PORTAL_ABI, functionName: "createOrder", args: [ - response.reqContractDetails.signature, - response.reqContractDetails.authToken, - BigInt(response.reqContractDetails.timeToExpire), + rc.signature, + rc.authToken, + BigInt(rc.timeToExpire), { - orderChainToken: - response.reqContractDetails.orderParams.orderChainToken, - adChainToken: - response.reqContractDetails.orderParams.adChainToken, - amount: BigInt(response.reqContractDetails.orderParams.amount), - bridger: response.reqContractDetails.orderParams.bridger, - orderRecipient: - response.reqContractDetails.orderParams.orderRecipient, - adChainId: BigInt( - response.reqContractDetails.orderParams.adChainId - ), - adManager: response.reqContractDetails.orderParams.adManager, - adId: response.reqContractDetails.orderParams.adId, - adCreator: response.reqContractDetails.orderParams.adCreator, - adRecipient: - response.reqContractDetails.orderParams.adRecipient, - salt: BigInt(response.reqContractDetails.orderParams.salt), + orderChainToken: rc.orderParams.orderChainToken, + adChainToken: rc.orderParams.adChainToken, + amount: BigInt(rc.orderParams.amount), + bridger: rc.orderParams.bridger, + orderRecipient: rc.orderParams.orderRecipient, + adChainId: BigInt(rc.orderParams.adChainId), + adManager: rc.orderParams.adManager, + adId: rc.orderParams.adId, + adCreator: rc.orderParams.adCreator, + adRecipient: rc.orderParams.adRecipient, + salt: BigInt(rc.orderParams.salt), }, ], }); @@ -86,7 +153,7 @@ export const useCreateTrade = () => { if (receipt.status === "success") { await confirmTradeTx({ txHash: receipt.transactionHash, - signature: response.reqContractDetails.signature, + signature: rc.signature, tradeId: response.tradeId, }); } @@ -100,33 +167,28 @@ export const useCreateTrade = () => { throw Error("Transaction failed, Retry"); } } else if (token.kind === "NATIVE") { - const amount = formatUnits(BigInt(data.amount), token.decimals); + const amount = formatUnits(BigInt(data.payload.amount), token.decimals); const txHash = await writeContractAsync({ - address: response.reqContractDetails.contractAddress, - chainId: Number(response.reqContractDetails.chainId), + address: rc.contractAddress, + chainId: Number(rc.chainId), abi: ORDER_PORTAL_ABI, functionName: "createOrder", args: [ - response.reqContractDetails.signature, - response.reqContractDetails.authToken, - BigInt(response.reqContractDetails.timeToExpire), + rc.signature, + rc.authToken, + BigInt(rc.timeToExpire), { - orderChainToken: - response.reqContractDetails.orderParams.orderChainToken, - adChainToken: - response.reqContractDetails.orderParams.adChainToken, - amount: BigInt(response.reqContractDetails.orderParams.amount), - bridger: response.reqContractDetails.orderParams.bridger, - orderRecipient: - response.reqContractDetails.orderParams.orderRecipient, - adChainId: BigInt( - response.reqContractDetails.orderParams.adChainId - ), - adManager: response.reqContractDetails.orderParams.adManager, - adId: response.reqContractDetails.orderParams.adId, - adCreator: response.reqContractDetails.orderParams.adCreator, - adRecipient: response.reqContractDetails.orderParams.adRecipient, - salt: BigInt(response.reqContractDetails.orderParams.salt), + orderChainToken: rc.orderParams.orderChainToken, + adChainToken: rc.orderParams.adChainToken, + amount: BigInt(rc.orderParams.amount), + bridger: rc.orderParams.bridger, + orderRecipient: rc.orderParams.orderRecipient, + adChainId: BigInt(rc.orderParams.adChainId), + adManager: rc.orderParams.adManager, + adId: rc.orderParams.adId, + adCreator: rc.orderParams.adCreator, + adRecipient: rc.orderParams.adRecipient, + salt: BigInt(rc.orderParams.salt), }, ], value: parseEther(amount), @@ -138,7 +200,7 @@ export const useCreateTrade = () => { if (receipt.status === "success") { await confirmTradeTx({ txHash: receipt.transactionHash, - signature: response.reqContractDetails.signature, + signature: rc.signature, tradeId: response.tradeId, }); } @@ -154,14 +216,11 @@ export const useCreateTrade = () => { onSuccess: () => { toast.success("Trade creation was successful"); }, - onError: function (error: any, variables, result, ctx) { + onError: function (error: any) { toast.error( error?.response?.data?.message || error?.message || "Unable to open trade", - { - description: "", - } ); }, }); @@ -169,11 +228,46 @@ export const useCreateTrade = () => { export const useLockFunds = () => { const { writeContractAsync } = useWriteContract(); + const { buildCtx: buildStellarCtx } = useStellarAdapter(); return useMutation({ mutationKey: ["lock-fund"], mutationFn: async (id: string) => { const response = await lockFunds(id); + if (response.chainKind === "STELLAR") { + const txHash = await lockForOrderSoroban( + buildStellarCtx(), + { + signatureHex: response.signature, + signerPublicKeyHex: response.signerPublicKey!, + authTokenHex: response.authToken, + timeToExpire: response.timeToExpire, + }, + { + orderParams: { + orderChainToken: response.orderParams.orderChainToken, + adChainToken: response.orderParams.adChainToken, + amount: response.orderParams.amount, + bridger: response.orderParams.bridger, + orderChainId: response.orderParams.orderChainId, + srcOrderPortal: response.orderParams.srcOrderPortal, + orderRecipient: response.orderParams.orderRecipient, + adId: response.orderParams.adId, + adCreator: response.orderParams.adCreator, + adRecipient: response.orderParams.adRecipient, + salt: response.orderParams.salt, + }, + adManagerHex: response.contractAddress, + }, + ); + await confirmTradeTx({ + txHash, + signature: response.signature, + tradeId: id, + }); + return response; + } + const txHash = await writeContractAsync({ address: response.contractAddress, chainId: Number(response.chainId), @@ -220,14 +314,11 @@ export const useLockFunds = () => { onSuccess: () => { toast.success("Funds lock was successful"); }, - onError: function (error: any, variables, result, ctx) { + onError: function (error: any) { toast.error( error?.response?.data?.message || error?.message || "Unable to lock funds", - { - description: "", - } ); }, }); @@ -237,6 +328,7 @@ export const useUnLockFunds = () => { const { writeContractAsync } = useWriteContract(); const { signTypedDataAsync } = useSignTypedData(); const account = useAccount(); + const { buildCtx: buildStellarCtx } = useStellarAdapter(); return useMutation({ mutationKey: ["unlock-fund"], mutationFn: async (id: string) => { @@ -284,33 +376,102 @@ export const useUnLockFunds = () => { const isAdCreator = account.address === params?.adCreator; - const txHash = await writeContractAsync({ - address: response.contractAddress, - chainId: Number(response.chainId), - abi: isAdCreator ? ORDER_PORTAL_ABI : AD_MANAGER_ABI, - functionName: "unlock", - args: [ - response.signature, - response.authToken, - BigInt(response.timeToExpire), - isAdCreator - ? { - ...response.orderParams, - amount: BigInt(response.orderParams.amount), - adChainId: BigInt(response.orderParams.adChainId), - salt: BigInt(response.orderParams.salt), - } - : { - ...response.orderParams, - amount: BigInt(response.orderParams.amount), - orderChainId: BigInt(response.orderParams.orderChainId), - salt: BigInt(response.orderParams.salt), + if (response.chainKind === "STELLAR") { + // Relayer still emits the proof payload as hex strings; actions layer + // converts buffer→ScVal bytes. Proof is already 0x-prefixed hex. + const proofBuffer = Buffer.from(response.proof.replace(/^0x/, ""), "hex"); + const txHash = isAdCreator + ? await unlockOrderPortalSoroban( + buildStellarCtx(), + { + signatureHex: response.signature, + signerPublicKeyHex: response.signerPublicKey!, + authTokenHex: response.authToken, + timeToExpire: response.timeToExpire, }, - response.nullifierHash, - response.targetRoot, - response.proof, - ], - }); + { + orderParams: response.orderParams as IOrderPortalOrderParams, + nullifierHashHex: response.nullifierHash, + targetRootHex: response.targetRoot, + proof: proofBuffer, + orderPortalHex: response.contractAddress, + }, + ) + : await unlockSoroban( + buildStellarCtx(), + { + signatureHex: response.signature, + signerPublicKeyHex: response.signerPublicKey!, + authTokenHex: response.authToken, + timeToExpire: response.timeToExpire, + }, + { + orderParams: response.orderParams as IAdManagerOrderParams, + nullifierHashHex: response.nullifierHash, + targetRootHex: response.targetRoot, + proof: proofBuffer, + adManagerHex: response.contractAddress, + }, + ); + await confirmUnlockFunds({ + txHash, + signature: response.signature, + id, + }); + return response; + } + + // adCreator unlocks on the order chain (OrderPortal ABI; adChainId + + // adManager). Bridger unlocks on the ad chain (AdManager ABI; + // orderChainId + srcOrderPortal). Split the wagmi call per branch so the + // ABI narrows the args tuple correctly. + const txHash = isAdCreator + ? await writeContractAsync({ + address: response.contractAddress, + chainId: Number(response.chainId), + abi: ORDER_PORTAL_ABI, + functionName: "unlock", + args: [ + response.signature, + response.authToken, + BigInt(response.timeToExpire), + (() => { + const p = response.orderParams as IOrderPortalOrderParams; + return { + ...p, + amount: BigInt(p.amount), + adChainId: BigInt(p.adChainId), + salt: BigInt(p.salt), + }; + })(), + response.nullifierHash, + response.targetRoot, + response.proof, + ], + }) + : await writeContractAsync({ + address: response.contractAddress, + chainId: Number(response.chainId), + abi: AD_MANAGER_ABI, + functionName: "unlock", + args: [ + response.signature, + response.authToken, + BigInt(response.timeToExpire), + (() => { + const p = response.orderParams as IAdManagerOrderParams; + return { + ...p, + amount: BigInt(p.amount), + orderChainId: BigInt(p.orderChainId), + salt: BigInt(p.salt), + }; + })(), + response.nullifierHash, + response.targetRoot, + response.proof, + ], + }); const receipt = await waitForTransactionReceipt(config, { hash: txHash, @@ -333,14 +494,11 @@ export const useUnLockFunds = () => { onSuccess: () => { toast.success("Funds released successfully"); }, - onError: function (error: any, variables, result, ctx) { + onError: function (error: any) { toast.error( error?.response?.data?.message || error?.message || "Unable to release funds", - { - description: "", - } ); }, }); diff --git a/apps/frontend/lib/chain-icons.ts b/apps/frontend/lib/chain-icons.ts index 0ca8161..2a8dae9 100644 --- a/apps/frontend/lib/chain-icons.ts +++ b/apps/frontend/lib/chain-icons.ts @@ -4,9 +4,11 @@ import { polygonAmoy, sepolia, } from "viem/chains" +import { STELLAR_TESTNET_CHAIN_ID } from "./chains" export const chain_icons: Record = { [sepolia.id]: "/assets/logos/eth.svg", + [STELLAR_TESTNET_CHAIN_ID]: "/assets/logos/stellar-logo.svg", [hederaTestnet.id]: "/assets/logos/hbar.png", [polygonAmoy.id]: "/assets/logos/hbar.png", [optimismSepolia.id]: "/assets/logos/hbar.png", diff --git a/apps/frontend/lib/chains.ts b/apps/frontend/lib/chains.ts index 4a4ece6..fae18d3 100644 --- a/apps/frontend/lib/chains.ts +++ b/apps/frontend/lib/chains.ts @@ -4,3 +4,17 @@ export const chains: Record = { [hederaTestnet.id]: hederaTestnet, [sepolia.id]: sepolia, } + +// Stellar is non-EVM so it has no viem `Chain`. Backend seeds this id. +export const STELLAR_TESTNET_CHAIN_ID = "1000001" + +// Chains currently surfaced in UI selectors. Other chains (Hedera, etc.) remain +// configured on the backend and in wagmi but are hidden from user-facing lists +// while this demo focuses on the Ethereum ↔ Stellar route. +export const VISIBLE_CHAIN_IDS: ReadonlySet = new Set([ + String(sepolia.id), + STELLAR_TESTNET_CHAIN_ID, +]) + +export const isVisibleChain = (chainId: string | number): boolean => + VISIBLE_CHAIN_IDS.has(String(chainId)) diff --git a/apps/frontend/lib/stellar-adapter.ts b/apps/frontend/lib/stellar-adapter.ts new file mode 100644 index 0000000..47092c6 --- /dev/null +++ b/apps/frontend/lib/stellar-adapter.ts @@ -0,0 +1,45 @@ +"use client" +import { useStellarWallet } from "@/components/providers/StellarWallet" +import type { StellarAdapterCtx } from "@/utils/stellar/actions" +import type { TrustlineCtx } from "@/utils/stellar/trustline" + +const DEFAULT_TESTNET_RPC = "https://soroban-testnet.stellar.org" +const DEFAULT_TESTNET_HORIZON = "https://horizon-testnet.stellar.org" + +export function useStellarAdapter(): { + buildCtx: () => StellarAdapterCtx + buildTrustlineCtx: () => TrustlineCtx + address: string | null +} { + const { address, networkPassphrase, signTransaction } = useStellarWallet() + + const buildCtx = (): StellarAdapterCtx => { + if (!address) { + throw new Error("Stellar wallet not connected") + } + const rpcUrl = + process.env.NEXT_PUBLIC_STELLAR_RPC_URL || DEFAULT_TESTNET_RPC + return { + rpcUrl, + networkPassphrase, + signerPublicKey: address, + signTransaction, + } + } + + const buildTrustlineCtx = (): TrustlineCtx => { + if (!address) { + throw new Error("Stellar wallet not connected") + } + const horizonUrl = + process.env.NEXT_PUBLIC_STELLAR_HORIZON_URL || DEFAULT_TESTNET_HORIZON + return { + horizonUrl, + networkPassphrase, + signerPublicKey: address, + signTransaction, + } + } + + return { buildCtx, buildTrustlineCtx, address } +} diff --git a/apps/frontend/package.json b/apps/frontend/package.json index e09af32..07726c8 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -10,9 +10,11 @@ }, "dependencies": { "@ant-design/nextjs-registry": "^1.1.0", + "@creit.tech/stellar-wallets-kit": "^2.1.0", "@gsap/react": "^2.1.2", "@rainbow-me/rainbowkit": "^2.2.8", "@rainbow-me/rainbowkit-siwe-next-auth": "^0.5.0", + "@stellar/stellar-sdk": "^15.0.1", "@tanstack/react-query": "^5.89.0", "antd": "5.27.3", "axios": "^1.12.2", diff --git a/apps/frontend/public/assets/logos/stellar-logo.svg b/apps/frontend/public/assets/logos/stellar-logo.svg new file mode 100644 index 0000000..02afb7b --- /dev/null +++ b/apps/frontend/public/assets/logos/stellar-logo.svg @@ -0,0 +1 @@ +Asset 1 \ No newline at end of file diff --git a/apps/frontend/public/assets/logos/stellar-xlm-logo.png b/apps/frontend/public/assets/logos/stellar-xlm-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..93ca9dcc8572f90b8df23cc961ff0ec88040e282 GIT binary patch literal 77118 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ⓈT(O`NHSgYz^9X2zZq0kAQmAdXX2*JFINQ5g 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 dlR { return `${urls.API_URL}/v1/ads${path}` } @@ -50,7 +48,7 @@ export const closeAd = async (data: ICloseAdRequest) => { export const updatedAd = async (data: IUpdateAdRequest) => { const { adId, ...rest } = data - const response = await api.post(ads_route(`/${adId}/update`), { + const response = await api.patch(ads_route(`/${adId}/update`), { ...rest, }) return response.data as IUpdateAdResponse @@ -63,7 +61,7 @@ export const confirmAdTx = async (data: IConfirmAdTxRequest) => { } export const getAllAds = async (params: IGetAdsParams) => { - const response = await axios.get(ads_route(), { params }) + const response = await api.get(ads_route(), { params }) return response.data as { data: IAd[] nextCursor: string @@ -71,6 +69,6 @@ export const getAllAds = async (params: IGetAdsParams) => { } export const getSingleAd = async (id: string) => { - const response = await axios.get(ads_route(`/${id}`)) + const response = await api.get(ads_route(`/${id}`)) return response.data as IAd } diff --git a/apps/frontend/services/auth.service.ts b/apps/frontend/services/auth.service.ts new file mode 100644 index 0000000..8826c5b --- /dev/null +++ b/apps/frontend/services/auth.service.ts @@ -0,0 +1,60 @@ +import { urls } from "@/utils/urls" +import axios from "axios" + +export type ChainKind = "EVM" | "STELLAR" + +export interface IChallengeEvmResponse { + chainKind: "EVM" + address: string + nonce: string + domain: string + uri: string + expiresAt: string +} + +export interface IChallengeStellarResponse { + chainKind: "STELLAR" + address: string + transaction: string + networkPassphrase: string + expiresAt: string +} + +export type IChallengeResponse = + | IChallengeEvmResponse + | IChallengeStellarResponse + +export interface IEvmLoginInput { + chainKind: "EVM" + message: string + signature: string +} + +export interface IStellarLoginInput { + chainKind: "STELLAR" + transaction: string +} + +export type ILoginInput = IEvmLoginInput | IStellarLoginInput + +export interface ILoginResponse { + user: { id: string; username: string } + tokens: { access: string; refresh: string } +} + +const auth_route = (path = "") => `${urls.API_URL}/v1/auth${path}` + +export const requestChallenge = async ( + chainKind: ChainKind, + address: string, +): Promise => { + const res = await axios.post(auth_route("/challenge"), { chainKind, address }) + return res.data as IChallengeResponse +} + +export const submitLogin = async ( + input: ILoginInput, +): Promise => { + const res = await axios.post(auth_route("/login"), input) + return res.data as ILoginResponse +} diff --git a/apps/frontend/types/ads.ts b/apps/frontend/types/ads.ts index 5da36e6..88cc850 100644 --- a/apps/frontend/types/ads.ts +++ b/apps/frontend/types/ads.ts @@ -1,4 +1,6 @@ import { Address } from "viem" +import type { ChainKind } from "./chains" +import type { TokenKind } from "./tokens" export interface ICreateAdRequest { routeId: string @@ -15,6 +17,7 @@ export interface ICreateAdRequest { export interface ICreateAdResponse { contractAddress: Address signature: Address + signerPublicKey?: Address authToken: Address timeToExpire: number adId: string @@ -23,11 +26,13 @@ export interface ICreateAdResponse { adRecipient: Address reqHash: Address chainId: number + chainKind: ChainKind } export interface IFundAdResponse { contractAddress: Address signature: Address + signerPublicKey?: Address authToken: Address timeToExpire: number adId: string @@ -37,53 +42,58 @@ export interface IFundAdResponse { reqHash: Address chainId: number amount: number + chainKind: ChainKind } export interface ITopUpAdRequest { adId: string poolAmountTopUp: string - amountBigInt: BigInt + amountBigInt: bigint tokenId: string } export interface IWithdrawFromAdRequest { adId: string poolAmountWithdraw: string - amountBigInt: BigInt - to: Address + amountBigInt: bigint + to: string } export interface IWithdrawFromAdResponse { chainId: string contractAddress: Address signature: Address + signerPublicKey?: Address authToken: Address timeToExpire: number adId: string amount: string to: Address reqHash: Address + chainKind: ChainKind } export interface ICloseAdRequest { adId: string - to: Address + to: string } export interface ICloseAdResponse { chainId: string contractAddress: Address signature: Address + signerPublicKey?: Address authToken: Address timeToExpire: number adId: string amount: string to: Address reqHash: Address + chainKind: ChainKind } export interface IUpdateAdRequest { - status?: "ACTIVE" | "INACTIVE" + status?: "ACTIVE" | "PAUSED" minAmount?: string maxAmount?: string metadata?: { @@ -103,7 +113,7 @@ export interface IUpdateAdResponse { export interface IConfirmAdTxRequest { adId: string - txHash: Address + txHash: string signature: Address } @@ -121,20 +131,18 @@ export interface IAd { metadata: { title?: string; description?: string } createdAt: string updatedAt: string - adToken: { - name: string - symbol: string - address: Address - decimals: number - chainId: string - } - orderToken: { - name: string - symbol: string - address: Address - decimals: number - chainId: string - } + adToken: IAdToken + orderToken: IAdToken +} + +export interface IAdToken { + name: string + symbol: string + address: Address + decimals: number + chainId: string + chainKind: ChainKind + kind: TokenKind } export interface IGetAdsParams { @@ -150,10 +158,10 @@ export interface IGetAdsParams { } export type AdStatusT = + | "INACTIVE" | "ACTIVE" | "PAUSED" - | "INACTIVE" | "EXHAUSTED" | "CLOSED" - | "LOCKED" - | "COMPLETED" + +export type TradeStatusT = "INACTIVE" | "ACTIVE" | "LOCKED" | "COMPLETED" diff --git a/apps/frontend/types/chains.ts b/apps/frontend/types/chains.ts index 9cb737c..d7ae0aa 100644 --- a/apps/frontend/types/chains.ts +++ b/apps/frontend/types/chains.ts @@ -1,8 +1,11 @@ import { Address } from "viem" +export type ChainKind = "EVM" | "STELLAR" + export interface IChain { name: string chainId: string + kind: ChainKind adManagerAddress: Address orderPortalAddress: Address createdAt: string diff --git a/apps/frontend/types/tokens.ts b/apps/frontend/types/tokens.ts index 03b1d6e..e9db959 100644 --- a/apps/frontend/types/tokens.ts +++ b/apps/frontend/types/tokens.ts @@ -1,4 +1,7 @@ import { Address } from "viem" +import type { ChainKind } from "./chains" + +export type TokenKind = "NATIVE" | "ERC20" | "SAC" | "SEP41" export interface IGetTokensParams { limit?: string @@ -13,12 +16,15 @@ export interface IToken { name: string address: Address decimals: number - kind: "NATIVE" | "ERC20" + kind: TokenKind + /** Stellar classic-asset issuer (G-strkey). Populated only for SAC tokens. */ + assetIssuer?: string | null createdAt: string updatedAt: string chain: { id: string name: string chainId: string + kind: ChainKind } } diff --git a/apps/frontend/types/trades.ts b/apps/frontend/types/trades.ts index 0aa80cf..dc0e3a9 100644 --- a/apps/frontend/types/trades.ts +++ b/apps/frontend/types/trades.ts @@ -1,5 +1,6 @@ import { Address } from "viem" -import { AdStatusT } from "./ads" +import { TradeStatusT } from "./ads" +import type { ChainKind } from "./chains" import { IToken } from "./tokens" export interface ICreateTradeRequest { @@ -7,7 +8,6 @@ export interface ICreateTradeRequest { routeId: string amount: string bridgerDstAddress: Address - orderTokenId: string } export interface ICreateTradeResponse { @@ -16,6 +16,7 @@ export interface ICreateTradeResponse { chainId: string contractAddress: Address signature: Address + signerPublicKey?: Address authToken: Address timeToExpire: number orderParams: { @@ -33,57 +34,67 @@ export interface ICreateTradeResponse { } orderHash: string reqHash: string + chainKind: ChainKind } } +export interface IAdManagerOrderParams { + orderChainToken: Address + adChainToken: Address + amount: string + bridger: Address + orderChainId: string + srcOrderPortal: Address + orderRecipient: Address + adId: string + adCreator: Address + adRecipient: Address + salt: string +} + +export interface IOrderPortalOrderParams { + orderChainToken: Address + adChainToken: Address + amount: string + bridger: Address + adChainId: string + adManager: Address + orderRecipient: Address + adId: string + adCreator: Address + adRecipient: Address + salt: string +} + export interface ILockFundsReponse { chainId: string contractAddress: Address signature: Address + signerPublicKey?: Address authToken: Address timeToExpire: number - orderParams: { - orderChainToken: string - adChainToken: string - amount: string - bridger: string - orderChainId: string - srcOrderPortal: string - orderRecipient: string - adId: string - adCreator: string - adRecipient: string - salt: string - } - orderHash: string - reqHash: string + orderParams: IAdManagerOrderParams + orderHash: Address + reqHash: Address + chainKind: ChainKind } export interface IUnlockFundsResponse { chainId: string contractAddress: Address signature: Address - authToken: string + signerPublicKey?: Address + authToken: Address timeToExpire: number - orderParams: { - orderChainToken: Address - adChainToken: Address - amount: string - bridger: Address - orderChainId: string - orderPortal: Address - orderRecipient: Address - adId: string - adCreator: Address - adRecipient: Address - salt: string - adChainId: string - } + // Discriminate on the presence of `adManager` (OrderPortal side, adCreator + // unlocking) vs `srcOrderPortal` (AdManager side, bridger unlocking). + orderParams: IOrderPortalOrderParams | IAdManagerOrderParams nullifierHash: Address targetRoot: Address proof: Address orderHash: Address reqHash: Address + chainKind: ChainKind } export interface IUnlockFundsRequest { @@ -94,12 +105,12 @@ export interface IUnlockFundsRequest { export interface IConfirmUnlockFundsRequest { id: string signature: Address - txHash: Address + txHash: string } export interface IConfirmTradeTxRequest { tradeId: string - txHash: Address + txHash: string signature: Address } @@ -114,7 +125,7 @@ export interface IGetTradesParams { routeId?: string cursor?: string limit?: number - AdId?: string + adId?: string minAmount?: string maxAmount?: string orderTokenId?: string @@ -128,7 +139,7 @@ export interface ITrade { adCreatorAddress: Address bridgerAddress: Address amount: string - status: AdStatusT + status: TradeStatusT createdAt: string updatedAt: string ad: { diff --git a/apps/frontend/utils/amount.ts b/apps/frontend/utils/amount.ts new file mode 100644 index 0000000..9156786 --- /dev/null +++ b/apps/frontend/utils/amount.ts @@ -0,0 +1,15 @@ +import { parseUnits } from "viem" +import type { ChainKind } from "@/types/chains" + +export const DEFAULT_DECIMALS: Record = { + EVM: 18, + STELLAR: 7, +} + +export function toBaseUnits( + amount: string, + chainKind: ChainKind, + decimals: number = DEFAULT_DECIMALS[chainKind], +): string { + return parseUnits(amount, decimals).toString() +} diff --git a/apps/frontend/utils/evm/address.ts b/apps/frontend/utils/evm/address.ts new file mode 100644 index 0000000..0db07f8 --- /dev/null +++ b/apps/frontend/utils/evm/address.ts @@ -0,0 +1,19 @@ +import { getAddress } from "viem" + +// Cross-chain wire format uses bytes32. For EVM tokens/addresses this is the +// 20-byte address left-padded with 12 zero bytes. This peels it back out. +export function hex32ToAddress20(hex: string): `0x${string}` { + const clean = hex.replace(/^0x/, "") + if (clean.length !== 64) { + throw new Error(`hex32ToAddress20: expected 32-byte hex, got ${hex}`) + } + return getAddress(`0x${clean.slice(-40)}`) +} + +// Left-pad a 20-byte EVM address to 32 bytes. Passes 32-byte input through. +export function toBytes32(value: string): `0x${string}` { + const hex = value.replace(/^0x/i, "").toLowerCase() + if (hex.length === 64) return `0x${hex}` + if (hex.length === 40) return `0x${"0".repeat(24)}${hex}` + throw new Error(`toBytes32: expected 20- or 32-byte hex, got ${value}`) +} diff --git a/apps/frontend/utils/evm/index.ts b/apps/frontend/utils/evm/index.ts new file mode 100644 index 0000000..825c36f --- /dev/null +++ b/apps/frontend/utils/evm/index.ts @@ -0,0 +1,2 @@ +export * from "./address" +export * from "./typedData" diff --git a/apps/frontend/utils/evm/typedData.ts b/apps/frontend/utils/evm/typedData.ts new file mode 100644 index 0000000..d8bb391 --- /dev/null +++ b/apps/frontend/utils/evm/typedData.ts @@ -0,0 +1,122 @@ +import { hashTypedData } from "viem" + +export const ORDER_DOMAIN = { + name: "Proofbridge", + version: "1", +} as const + +// Cross-chain (bytes32) Order type — matches backend-relayer's canonical +// EIP-712 definition in providers/viem/ethers/typedData.ts and the Stellar +// bridger-side hash we sign with Ed25519. +export const ORDER_TYPES_BYTES32 = { + Order: [ + { name: "orderChainToken", type: "bytes32" }, + { name: "adChainToken", type: "bytes32" }, + { name: "amount", type: "uint256" }, + { name: "bridger", type: "bytes32" }, + { name: "orderChainId", type: "uint256" }, + { name: "orderPortal", type: "bytes32" }, + { name: "orderRecipient", type: "bytes32" }, + { name: "adChainId", type: "uint256" }, + { name: "adManager", type: "bytes32" }, + { name: "adId", type: "string" }, + { name: "adCreator", type: "bytes32" }, + { name: "adRecipient", type: "bytes32" }, + { name: "salt", type: "uint256" }, + ], +} as const + +// EVM-native (address) Order type — the frontend used this shape pre-Stellar. +// Kept for the EVM-on-both-sides path where addresses are already 20 bytes. +export const ORDER_TYPES_ADDRESS = { + Order: [ + { name: "orderChainToken", type: "address" }, + { name: "adChainToken", type: "address" }, + { name: "amount", type: "uint256" }, + { name: "bridger", type: "address" }, + { name: "orderChainId", type: "uint256" }, + { name: "orderPortal", type: "address" }, + { name: "orderRecipient", type: "address" }, + { name: "adChainId", type: "uint256" }, + { name: "adManager", type: "address" }, + { name: "adId", type: "string" }, + { name: "adCreator", type: "address" }, + { name: "adRecipient", type: "address" }, + { name: "salt", type: "uint256" }, + ], +} as const + +export interface OrderTypedMessage { + orderChainToken: `0x${string}` + adChainToken: `0x${string}` + amount: bigint + bridger: `0x${string}` + orderChainId: bigint + orderPortal: `0x${string}` + orderRecipient: `0x${string}` + adChainId: bigint + adManager: `0x${string}` + adId: string + adCreator: `0x${string}` + adRecipient: `0x${string}` + salt: bigint +} + +export function uuidToBigInt(uuid: string): bigint { + const hex = uuid.replace(/-/g, "") + return BigInt("0x" + hex) +} + +// Inputs come off the wire as strings (uint256 fields are stringified so they +// survive JSON). Convert to bigint and normalize `salt` — which may be a UUID +// — before hashing or signing. +export function buildOrderMessage(params: { + orderChainToken: string + adChainToken: string + amount: string | bigint + bridger: string + orderChainId: string | bigint + orderPortal: string + orderRecipient: string + adChainId: string | bigint + adManager: string + adId: string + adCreator: string + adRecipient: string + salt: string | bigint +}): OrderTypedMessage { + const toBig = (v: string | bigint) => + typeof v === "bigint" ? v : BigInt(v) + const toBigSalt = (v: string | bigint) => { + if (typeof v === "bigint") return v + if (v.includes("-")) return uuidToBigInt(v) + return BigInt(v) + } + return { + orderChainToken: params.orderChainToken as `0x${string}`, + adChainToken: params.adChainToken as `0x${string}`, + amount: toBig(params.amount), + bridger: params.bridger as `0x${string}`, + orderChainId: toBig(params.orderChainId), + orderPortal: params.orderPortal as `0x${string}`, + orderRecipient: params.orderRecipient as `0x${string}`, + adChainId: toBig(params.adChainId), + adManager: params.adManager as `0x${string}`, + adId: params.adId, + adCreator: params.adCreator as `0x${string}`, + adRecipient: params.adRecipient as `0x${string}`, + salt: toBigSalt(params.salt), + } +} + +// EIP-712 digest — matches ethers' TypedDataEncoder.hash output and the +// on-chain ORDER_TYPEHASH. Used for the Stellar bridger flow where we +// co-sign the digest with Ed25519 rather than ECDSA. +export function hashOrder(message: OrderTypedMessage): `0x${string}` { + return hashTypedData({ + domain: ORDER_DOMAIN, + types: ORDER_TYPES_BYTES32, + primaryType: "Order", + message, + }) +} diff --git a/apps/frontend/utils/format-address.ts b/apps/frontend/utils/format-address.ts new file mode 100644 index 0000000..3af231d --- /dev/null +++ b/apps/frontend/utils/format-address.ts @@ -0,0 +1,42 @@ +import type { ChainKind } from "@/types/chains" +import { hex32ToAccountId, isStellarAccountId } from "./stellar/address" +import { truncateString } from "./truncate-string" + +// Addresses come off the backend in canonical storage form: +// EVM — 20-byte 0x hex (EIP-55 / lowercased). +// STELLAR — 32-byte 0x hex payload of the ed25519 public key. +// Render them as the user expects: EVM stays as 0x… ; Stellar becomes G…. +export function formatChainAddress( + value: string | null | undefined, + chainKind?: ChainKind, +): string { + if (!value) return "" + if (chainKind === "STELLAR") { + try { + return hex32ToAccountId(value) + } catch { + return value + } + } + if (chainKind === "EVM") return value + // Infer from shape when chainKind isn't known at the call site. + if (isStellarAccountId(value)) return value + const hex = value.replace(/^0x/i, "") + if (hex.length === 64) { + try { + return hex32ToAccountId(value) + } catch { + return value + } + } + return value +} + +export function formatChainAddressShort( + value: string | null | undefined, + chainKind?: ChainKind, + head = 4, + tail = 4, +): string { + return truncateString(formatChainAddress(value, chainKind), head, tail) +} diff --git a/apps/frontend/utils/stellar/actions.ts b/apps/frontend/utils/stellar/actions.ts new file mode 100644 index 0000000..9c07df4 --- /dev/null +++ b/apps/frontend/utils/stellar/actions.ts @@ -0,0 +1,246 @@ +import { Address } from "@stellar/stellar-sdk" +import { invokeSoroban, type StellarSignFn } from "./invoke" +import { + StellarOrderParams, + StellarOrderPortalParams, + authArgs, + bytes, + bytesN, + orderParamsScVal, + orderPortalParamsScVal, + strVal, + u128, +} from "./scval" + +export interface StellarAdapterCtx { + rpcUrl: string + networkPassphrase?: string + signerPublicKey: string + signTransaction: StellarSignFn +} + +interface AuthQuad { + signatureHex: string + signerPublicKeyHex: string + authTokenHex: string + timeToExpire: number +} + +export async function createAdSoroban( + ctx: StellarAdapterCtx, + auth: AuthQuad, + params: { + creatorPublicKey: string // G-strkey + adId: string + adTokenHex: string + initialAmount: string + orderChainId: string + adRecipientHex: string + adManagerHex: string + }, +): Promise { + const args = [ + ...authArgs( + auth.signatureHex, + auth.signerPublicKeyHex, + auth.authTokenHex, + auth.timeToExpire, + ), + new Address(params.creatorPublicKey).toScVal(), + strVal(params.adId), + bytesN(params.adTokenHex), + u128(params.initialAmount), + u128(params.orderChainId), + bytesN(params.adRecipientHex), + ] + return invokeSoroban({ + ...ctx, + contractHex: params.adManagerHex, + method: "create_ad", + args, + }) +} + +export async function fundAdSoroban( + ctx: StellarAdapterCtx, + auth: AuthQuad, + params: { adId: string; amount: string; adManagerHex: string }, +): Promise { + const args = [ + ...authArgs( + auth.signatureHex, + auth.signerPublicKeyHex, + auth.authTokenHex, + auth.timeToExpire, + ), + strVal(params.adId), + u128(params.amount), + ] + return invokeSoroban({ + ...ctx, + contractHex: params.adManagerHex, + method: "fund_ad", + args, + }) +} + +export async function withdrawFromAdSoroban( + ctx: StellarAdapterCtx, + auth: AuthQuad, + params: { + adId: string + amount: string + toPublicKey: string // G-strkey + adManagerHex: string + }, +): Promise { + const args = [ + ...authArgs( + auth.signatureHex, + auth.signerPublicKeyHex, + auth.authTokenHex, + auth.timeToExpire, + ), + strVal(params.adId), + u128(params.amount), + new Address(params.toPublicKey).toScVal(), + ] + return invokeSoroban({ + ...ctx, + contractHex: params.adManagerHex, + method: "withdraw_from_ad", + args, + }) +} + +export async function closeAdSoroban( + ctx: StellarAdapterCtx, + auth: AuthQuad, + params: { adId: string; toPublicKey: string; adManagerHex: string }, +): Promise { + const args = [ + ...authArgs( + auth.signatureHex, + auth.signerPublicKeyHex, + auth.authTokenHex, + auth.timeToExpire, + ), + strVal(params.adId), + new Address(params.toPublicKey).toScVal(), + ] + return invokeSoroban({ + ...ctx, + contractHex: params.adManagerHex, + method: "close_ad", + args, + }) +} + +export async function lockForOrderSoroban( + ctx: StellarAdapterCtx, + auth: AuthQuad, + params: { orderParams: StellarOrderParams; adManagerHex: string }, +): Promise { + const args = [ + ...authArgs( + auth.signatureHex, + auth.signerPublicKeyHex, + auth.authTokenHex, + auth.timeToExpire, + ), + orderParamsScVal(params.orderParams), + ] + return invokeSoroban({ + ...ctx, + contractHex: params.adManagerHex, + method: "lock_for_order", + args, + }) +} + +export async function unlockSoroban( + ctx: StellarAdapterCtx, + auth: AuthQuad, + params: { + orderParams: StellarOrderParams + nullifierHashHex: string + targetRootHex: string + proof: Buffer + adManagerHex: string + }, +): Promise { + const args = [ + ...authArgs( + auth.signatureHex, + auth.signerPublicKeyHex, + auth.authTokenHex, + auth.timeToExpire, + ), + orderParamsScVal(params.orderParams), + bytesN(params.nullifierHashHex), + bytesN(params.targetRootHex), + bytes(params.proof), + ] + return invokeSoroban({ + ...ctx, + contractHex: params.adManagerHex, + method: "unlock", + args, + }) +} + +export async function createOrderSoroban( + ctx: StellarAdapterCtx, + auth: AuthQuad, + params: { + orderParams: StellarOrderPortalParams + orderPortalHex: string + }, +): Promise { + const args = [ + ...authArgs( + auth.signatureHex, + auth.signerPublicKeyHex, + auth.authTokenHex, + auth.timeToExpire, + ), + orderPortalParamsScVal(params.orderParams), + ] + return invokeSoroban({ + ...ctx, + contractHex: params.orderPortalHex, + method: "create_order", + args, + }) +} + +export async function unlockOrderPortalSoroban( + ctx: StellarAdapterCtx, + auth: AuthQuad, + params: { + orderParams: StellarOrderPortalParams + nullifierHashHex: string + targetRootHex: string + proof: Buffer + orderPortalHex: string + }, +): Promise { + const args = [ + ...authArgs( + auth.signatureHex, + auth.signerPublicKeyHex, + auth.authTokenHex, + auth.timeToExpire, + ), + orderPortalParamsScVal(params.orderParams), + bytesN(params.nullifierHashHex), + bytesN(params.targetRootHex), + bytes(params.proof), + ] + return invokeSoroban({ + ...ctx, + contractHex: params.orderPortalHex, + method: "unlock", + args, + }) +} diff --git a/apps/frontend/utils/stellar/address.ts b/apps/frontend/utils/stellar/address.ts new file mode 100644 index 0000000..21246f9 --- /dev/null +++ b/apps/frontend/utils/stellar/address.ts @@ -0,0 +1,44 @@ +import { StrKey } from "@stellar/stellar-sdk" + +const HEX32_RE = /^0x[a-fA-F0-9]{64}$/ +const HEX20_RE = /^0x[a-fA-F0-9]{40}$/ + +export function hex32ToBuffer(hex: string): Buffer { + if (HEX32_RE.test(hex)) return Buffer.from(hex.slice(2), "hex") + if (HEX20_RE.test(hex)) { + const clean = hex.slice(2).toLowerCase() + return Buffer.from("00".repeat(12) + clean, "hex") + } + throw new Error( + `invalid bytes32-or-evm hex address: ${hex} (want 0x + 40 or 64 hex chars)`, + ) +} + +export function bufferToHex32(buf: Buffer): `0x${string}` { + if (buf.length !== 32) throw new Error("bufferToHex32: expected 32 bytes") + return `0x${buf.toString("hex")}` +} + +export function hex32ToContractId(hex: string): string { + return StrKey.encodeContract(hex32ToBuffer(hex)) +} + +export function hex32ToAccountId(hex: string): string { + return StrKey.encodeEd25519PublicKey(hex32ToBuffer(hex)) +} + +export function contractIdToHex32(strkey: string): `0x${string}` { + return bufferToHex32(Buffer.from(StrKey.decodeContract(strkey))) +} + +export function accountIdToHex32(strkey: string): `0x${string}` { + return bufferToHex32(Buffer.from(StrKey.decodeEd25519PublicKey(strkey))) +} + +export function isStellarAccountId(value: string): boolean { + return StrKey.isValidEd25519PublicKey(value) +} + +export function isStellarContractId(value: string): boolean { + return StrKey.isValidContract(value) +} diff --git a/apps/frontend/utils/stellar/index.ts b/apps/frontend/utils/stellar/index.ts new file mode 100644 index 0000000..a0c9ade --- /dev/null +++ b/apps/frontend/utils/stellar/index.ts @@ -0,0 +1,4 @@ +export * from "./address" +export * from "./scval" +export * from "./invoke" +export * from "./actions" diff --git a/apps/frontend/utils/stellar/invoke.ts b/apps/frontend/utils/stellar/invoke.ts new file mode 100644 index 0000000..f87d22c --- /dev/null +++ b/apps/frontend/utils/stellar/invoke.ts @@ -0,0 +1,74 @@ +import { + Contract, + Networks, + TransactionBuilder, + rpc, + xdr, +} from "@stellar/stellar-sdk" +import { hex32ToContractId } from "./address" + +const BASE_FEE = "1000" + +export type StellarSignFn = ( + xdr: string, + networkPassphrase?: string, +) => Promise + +export interface InvokeSorobanOpts { + rpcUrl: string + networkPassphrase?: string + signerPublicKey: string // G-strkey of the wallet account paying the fee + contractHex: string // 0x + 64 hex (stored contract address) + method: string + args: xdr.ScVal[] + signTransaction: StellarSignFn + pollIntervalMs?: number + pollAttempts?: number +} + +export async function invokeSoroban({ + rpcUrl, + networkPassphrase, + signerPublicKey, + contractHex, + method, + args, + signTransaction, + pollIntervalMs = 1000, + pollAttempts = 30, +}: InvokeSorobanOpts): Promise { + const passphrase = networkPassphrase ?? Networks.TESTNET + const server = new rpc.Server(rpcUrl, { + allowHttp: rpcUrl.startsWith("http://"), + }) + const contract = new Contract(hex32ToContractId(contractHex)) + const source = await server.getAccount(signerPublicKey) + const tx = new TransactionBuilder(source, { + fee: BASE_FEE, + networkPassphrase: passphrase, + }) + .addOperation(contract.call(method, ...args)) + .setTimeout(60) + .build() + + const prepared = await server.prepareTransaction(tx) + const signedXdr = await signTransaction(prepared.toXDR(), passphrase) + const signedTx = TransactionBuilder.fromXDR(signedXdr, passphrase) + + const sent = await server.sendTransaction(signedTx) + if (sent.status === "ERROR") { + throw new Error( + `Stellar send failed [${method}]: ${JSON.stringify(sent.errorResult)}`, + ) + } + + for (let i = 0; i < pollAttempts; i++) { + const got = await server.getTransaction(sent.hash) + if (got.status === rpc.Api.GetTransactionStatus.SUCCESS) return sent.hash + if (got.status === rpc.Api.GetTransactionStatus.FAILED) { + throw new Error(`Stellar tx [${method}] FAILED hash=${sent.hash}`) + } + await new Promise((r) => setTimeout(r, pollIntervalMs)) + } + throw new Error(`Stellar tx [${method}] timed out hash=${sent.hash}`) +} diff --git a/apps/frontend/utils/stellar/scval.ts b/apps/frontend/utils/stellar/scval.ts new file mode 100644 index 0000000..f364dff --- /dev/null +++ b/apps/frontend/utils/stellar/scval.ts @@ -0,0 +1,112 @@ +import { nativeToScVal, xdr } from "@stellar/stellar-sdk" +import { hex32ToBuffer } from "./address" + +export function bytesN(hex: string): xdr.ScVal { + return nativeToScVal(hex32ToBuffer(hex), { type: "bytes" }) +} + +export function bytes(buf: Buffer): xdr.ScVal { + return nativeToScVal(buf, { type: "bytes" }) +} + +export function u64(n: number | bigint): xdr.ScVal { + return nativeToScVal(BigInt(n), { type: "u64" }) +} + +export function u128(n: string | bigint | number): xdr.ScVal { + return nativeToScVal(BigInt(n), { type: "u128" }) +} + +export function strVal(s: string): xdr.ScVal { + return nativeToScVal(s, { type: "string" }) +} + +// Shared auth quadruple (signature, public_key, auth_token, time_to_expire). +export function authArgs( + signatureHex: string, + publicKeyHex: string, + authTokenHex: string, + timeToExpire: number, +): xdr.ScVal[] { + return [ + bytes(Buffer.from(signatureHex.replace(/^0x/, ""), "hex")), + bytesN(publicKeyHex), + bytesN(authTokenHex), + u64(timeToExpire), + ] +} + +// Matches contracts/stellar/contracts/ad-manager/src/types.rs::OrderParams. +export interface StellarOrderParams { + orderChainToken: string + adChainToken: string + amount: string + bridger: string + orderChainId: string + srcOrderPortal: string + orderRecipient: string + adId: string + adCreator: string + adRecipient: string + salt: string +} + +// Soroban struct is an ScMap with entries sorted alphabetically by key. +export function orderParamsScVal(p: StellarOrderParams): xdr.ScVal { + const entries: Array<[string, xdr.ScVal]> = [ + ["ad_chain_token", bytesN(p.adChainToken)], + ["ad_creator", bytesN(p.adCreator)], + ["ad_id", strVal(p.adId)], + ["ad_recipient", bytesN(p.adRecipient)], + ["amount", u128(p.amount)], + ["bridger", bytesN(p.bridger)], + ["order_chain_id", u128(p.orderChainId)], + ["order_chain_token", bytesN(p.orderChainToken)], + ["order_recipient", bytesN(p.orderRecipient)], + ["salt", u128(p.salt)], + ["src_order_portal", bytesN(p.srcOrderPortal)], + ] + return xdr.ScVal.scvMap( + entries.map( + ([k, v]) => new xdr.ScMapEntry({ key: xdr.ScVal.scvSymbol(k), val: v }), + ), + ) +} + +// Matches contracts/stellar/contracts/order-portal/src/types.rs::OrderParams. +export interface StellarOrderPortalParams { + orderChainToken: string + adChainToken: string + amount: string + bridger: string + orderRecipient: string + adChainId: string + adManager: string + adId: string + adCreator: string + adRecipient: string + salt: string +} + +export function orderPortalParamsScVal( + p: StellarOrderPortalParams, +): xdr.ScVal { + const entries: Array<[string, xdr.ScVal]> = [ + ["ad_chain_id", u128(p.adChainId)], + ["ad_chain_token", bytesN(p.adChainToken)], + ["ad_creator", bytesN(p.adCreator)], + ["ad_id", strVal(p.adId)], + ["ad_manager", bytesN(p.adManager)], + ["ad_recipient", bytesN(p.adRecipient)], + ["amount", u128(p.amount)], + ["bridger", bytesN(p.bridger)], + ["order_chain_token", bytesN(p.orderChainToken)], + ["order_recipient", bytesN(p.orderRecipient)], + ["salt", u128(p.salt)], + ] + return xdr.ScVal.scvMap( + entries.map( + ([k, v]) => new xdr.ScMapEntry({ key: xdr.ScVal.scvSymbol(k), val: v }), + ), + ) +} diff --git a/apps/frontend/utils/stellar/trustline.ts b/apps/frontend/utils/stellar/trustline.ts new file mode 100644 index 0000000..887cc61 --- /dev/null +++ b/apps/frontend/utils/stellar/trustline.ts @@ -0,0 +1,91 @@ +import { + Asset, + BASE_FEE, + Horizon, + Networks, + Operation, + TransactionBuilder, +} from "@stellar/stellar-sdk" +import type { StellarSignFn } from "./invoke" + +const DEFAULT_TESTNET_HORIZON = "https://horizon-testnet.stellar.org" + +export function defaultHorizonUrl(): string { + return ( + process.env.NEXT_PUBLIC_STELLAR_HORIZON_URL || DEFAULT_TESTNET_HORIZON + ) +} + +export interface TrustlineCtx { + horizonUrl?: string + networkPassphrase?: string + signerPublicKey: string + signTransaction: StellarSignFn +} + +/** + * Returns true when the account holds a trustline for the classic asset + * identified by (code, issuer). Native XLM is always "trusted". A missing + * account (unfunded) is treated as no trustline. + */ +export async function hasTrustline( + publicKey: string, + code: string, + issuer: string, + horizonUrl: string = defaultHorizonUrl(), +): Promise { + if (code.toUpperCase() === "XLM" && !issuer) return true + const server = new Horizon.Server(horizonUrl) + try { + const account = await server.loadAccount(publicKey) + return account.balances.some( + (b: { asset_type: string; asset_code?: string; asset_issuer?: string }) => + (b.asset_type === "credit_alphanum4" || + b.asset_type === "credit_alphanum12") && + b.asset_code === code && + b.asset_issuer === issuer, + ) + } catch (e: unknown) { + // Horizon returns 404 for unfunded accounts — treat as no trustline. + if ( + typeof e === "object" && + e !== null && + "response" in e && + (e as { response?: { status?: number } }).response?.status === 404 + ) { + return false + } + throw e + } +} + +/** + * Builds + submits a ChangeTrust op that adds a trustline for (code, issuer) + * on the signer's account. Returns the Horizon tx hash. No-op fast-path: call + * `hasTrustline` first — this function will *also* succeed if the trustline + * already exists (Stellar treats it as a limit update). + */ +export async function establishTrustline( + ctx: TrustlineCtx, + code: string, + issuer: string, +): Promise { + const horizonUrl = ctx.horizonUrl ?? defaultHorizonUrl() + const passphrase = ctx.networkPassphrase ?? Networks.TESTNET + const server = new Horizon.Server(horizonUrl) + const source = await server.loadAccount(ctx.signerPublicKey) + + const asset = new Asset(code, issuer) + const tx = new TransactionBuilder(source, { + fee: BASE_FEE, + networkPassphrase: passphrase, + }) + .addOperation(Operation.changeTrust({ asset })) + .setTimeout(180) + .build() + + const signedXdr = await ctx.signTransaction(tx.toXDR(), passphrase) + const signedTx = TransactionBuilder.fromXDR(signedXdr, passphrase) + const result = await server.submitTransaction(signedTx) + return result.hash +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8a40e00..9029306 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,7 +36,7 @@ importers: version: 0.87.0 '@biconomy/account': specifier: ^4.5.7 - version: 4.5.7(typescript@5.9.3)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)) + version: 4.5.7(typescript@5.9.3)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.3.6)) '@nestjs/cache-manager': specifier: ^3.0.1 version: 3.1.0(@nestjs/common@11.1.18(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.18)(cache-manager@7.2.8)(keyv@5.6.0)(rxjs@7.8.2) @@ -108,7 +108,7 @@ importers: version: 17.4.1 ethers: specifier: ^6.15.0 - version: 6.16.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + version: 6.16.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) express: specifier: ^5.1.0 version: 5.2.1 @@ -126,7 +126,7 @@ importers: version: 6.16.1(typescript@5.9.3) proofbridge-mmr: specifier: 1.0.8 - version: 1.0.8(bufferutil@4.1.0)(utf-8-validate@5.0.10) + version: 1.0.8(bufferutil@4.1.0)(utf-8-validate@6.0.6) rave-level: specifier: ^1.0.0 version: 1.0.0 @@ -138,7 +138,7 @@ importers: version: 7.8.2 siwe: specifier: ^3.0.0 - version: 3.0.0(ethers@6.16.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + version: 3.0.0(ethers@6.16.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) unique-names-generator: specifier: ^4.7.1 version: 4.7.1 @@ -147,7 +147,7 @@ importers: version: 13.0.0 viem: specifier: ^2.37.7 - version: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + version: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.3.6) winston: specifier: ^3.17.0 version: 3.19.0 @@ -233,15 +233,21 @@ importers: '@ant-design/nextjs-registry': specifier: ^1.1.0 version: 1.3.0(@ant-design/cssinjs@1.24.0(react-dom@19.2.5(react@19.1.0))(react@19.1.0))(antd@5.27.3(date-fns@4.1.0)(moment@2.30.1)(react-dom@19.2.5(react@19.1.0))(react@19.1.0))(next@15.5.15(@babel/core@7.29.0)(react-dom@19.2.5(react@19.1.0))(react@19.1.0))(react-dom@19.2.5(react@19.1.0))(react@19.1.0) + '@creit.tech/stellar-wallets-kit': + specifier: ^2.1.0 + version: 2.1.0(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(@stellar/stellar-sdk@15.0.1)(@trezor/connect@9.7.2(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(near-api-js@5.1.1)(react@19.1.0)(tslib@2.8.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@3.25.76) '@gsap/react': specifier: ^2.1.2 version: 2.1.2(gsap@3.14.2)(react@19.1.0) '@rainbow-me/rainbowkit': specifier: ^2.2.8 - version: 2.2.10(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(react-dom@19.2.5(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6)) + version: 2.2.10(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(react-dom@19.2.5(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76)) '@rainbow-me/rainbowkit-siwe-next-auth': specifier: ^0.5.0 - version: 0.5.0(@rainbow-me/rainbowkit@2.2.10(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(react-dom@19.2.5(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6)))(next-auth@4.24.11(next@15.5.15(@babel/core@7.29.0)(react-dom@19.2.5(react@19.1.0))(react@19.1.0))(react-dom@19.2.5(react@19.1.0))(react@19.1.0))(react@19.1.0) + version: 0.5.0(@rainbow-me/rainbowkit@2.2.10(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(react-dom@19.2.5(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76)))(next-auth@4.24.11(next@15.5.15(@babel/core@7.29.0)(react-dom@19.2.5(react@19.1.0))(react@19.1.0))(react-dom@19.2.5(react@19.1.0))(react@19.1.0))(react@19.1.0) + '@stellar/stellar-sdk': + specifier: ^15.0.1 + version: 15.0.1 '@tanstack/react-query': specifier: ^5.89.0 version: 5.98.0(react@19.1.0) @@ -295,7 +301,7 @@ importers: version: 5.6.0(react@19.1.0) siwe: specifier: ^3.0.0 - version: 3.0.0(ethers@6.16.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + version: 3.0.0(ethers@6.16.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) sonner: specifier: ^2.0.7 version: 2.0.7(react-dom@19.2.5(react@19.1.0))(react@19.1.0) @@ -307,10 +313,10 @@ importers: version: 4.0.0(tailwindcss@4.2.2) viem: specifier: ^2.37.7 - version: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + version: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) wagmi: specifier: ^2.17.1 - version: 2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6) + version: 2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76) devDependencies: '@eslint/eslintrc': specifier: ^3 @@ -362,13 +368,13 @@ importers: version: 3.2.0 ethers: specifier: ^6.15.0 - version: 6.16.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + version: 6.16.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) hex: specifier: ^0.1.0 version: 0.1.0 proofbridge-mmr: specifier: 1.0.8 - version: 1.0.8(bufferutil@4.1.0)(utf-8-validate@5.0.10) + version: 1.0.8(bufferutil@4.1.0)(utf-8-validate@6.0.6) devDependencies: '@types/node': specifier: ^20.0.0 @@ -396,10 +402,10 @@ importers: version: 0.6.2 ethers: specifier: ^6.15.0 - version: 6.16.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + version: 6.16.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) proofbridge-mmr: specifier: 1.0.8 - version: 1.0.8(bufferutil@4.1.0)(utf-8-validate@5.0.10) + version: 1.0.8(bufferutil@4.1.0)(utf-8-validate@6.0.6) devDependencies: '@types/node': specifier: ^22.0.0 @@ -427,7 +433,7 @@ importers: version: 4.2.0 ethers: specifier: ^6.15.0 - version: 6.16.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + version: 6.16.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) level: specifier: ^10.0.0 version: 10.0.0 @@ -473,10 +479,10 @@ importers: version: 0.6.2 ethers: specifier: ^6.15.0 - version: 6.16.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + version: 6.16.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) proofbridge-mmr: specifier: 1.0.8 - version: 1.0.8(bufferutil@4.1.0)(utf-8-validate@5.0.10) + version: 1.0.8(bufferutil@4.1.0)(utf-8-validate@6.0.6) devDependencies: '@types/node': specifier: ^20.0.0 @@ -504,13 +510,13 @@ importers: version: link:../cross-chain-e2e ethers: specifier: ^6.15.0 - version: 6.16.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + version: 6.16.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) siwe: specifier: ^3.0.0 - version: 3.0.0(ethers@6.16.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + version: 3.0.0(ethers@6.16.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) viem: specifier: ^2.37.7 - version: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + version: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.3.6) devDependencies: '@types/node': specifier: ^22.10.7 @@ -530,6 +536,9 @@ packages: '@adraffy/ens-normalize@1.11.1': resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==} + '@albedo-link/intent@0.12.0': + resolution: {integrity: sha512-UlGBhi0qASDYOjLrOL4484vQ26Ee3zTK2oAgvPMClOs+1XNk3zbs3dECKZv+wqeSI8SkHow8mXLTa16eVh+dQA==} + '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -828,6 +837,13 @@ packages: resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} + '@creit.tech/stellar-wallets-kit@2.1.0': + resolution: {integrity: sha512-DYOJXoH/SAE74prb4DqVvxzGfSBHaRdFa9Dz9BpnXQJPB63CJejcAcgyILurQcBwitRmFQd1bPg/9h+WiRgb/w==} + + '@creit.tech/xbull-wallet-connect@0.4.0': + resolution: {integrity: sha512-LrCUIqUz50SkZ4mv2hTqSmwews8CNRYVoZ9+VjLsK/1U8PByzXTxv1vZyenj6avRTG86ifpoeihz7D3D5YIDrQ==} + engines: {node: '>=16'} + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -862,6 +878,12 @@ packages: '@emotion/unitless@0.7.5': resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} + '@emurgo/cardano-serialization-lib-browser@13.2.1': + resolution: {integrity: sha512-7RfX1gI16Vj2DgCp/ZoXqyLAakWo6+X95ku/rYGbVzuS/1etrlSiJmdbmdm+eYmszMlGQjrtOJQeVLXoj4L/Ag==} + + '@emurgo/cardano-serialization-lib-nodejs@13.2.0': + resolution: {integrity: sha512-Bz1zLGEqBQ0BVkqt1OgMxdBOE3BdUWUd7Ly9Ecr/aUwkA8AV1w1XzBMe4xblmJHnB1XXNlPH4SraXCvO+q0Mig==} + '@esbuild/aix-ppc64@0.27.7': resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} engines: {node: '>=18'} @@ -1066,22 +1088,41 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ethereumjs/common@10.1.1': + resolution: {integrity: sha512-NefPzPlrJ9w+NWVe06P+sHZQU98E1AEU9vhiHJEVT2wEcNBC1YX6hON9+smrfbn86C4U1pb2zbvjhkF+n/LKBw==} + '@ethereumjs/common@3.2.0': resolution: {integrity: sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==} + '@ethereumjs/rlp@10.1.1': + resolution: {integrity: sha512-jbnWTEwcpoY+gE0r+wxfDG9zgiu54DcTcwnc9sX3DsqKR4l5K7x2V8mQL3Et6hURa4DuT9g7z6ukwpBLFchszg==} + engines: {node: '>=20'} + hasBin: true + '@ethereumjs/rlp@4.0.1': resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} engines: {node: '>=14'} hasBin: true + '@ethereumjs/tx@10.1.1': + resolution: {integrity: sha512-Kz8GWIKQjEQB60ko9hsYDX3rZMHZZOTcmm6OFl855Lu3padVnf5ZactUKM6nmWPsumHED5bWDjO32novZd1zyw==} + engines: {node: '>=20'} + '@ethereumjs/tx@4.2.0': resolution: {integrity: sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==} engines: {node: '>=14'} + '@ethereumjs/util@10.1.1': + resolution: {integrity: sha512-r2EhaeEmLZXVs1dT2HJFQysAkr63ZWATu/9tgYSp1IlvjvwyC++DLg5kCDwMM49HBq3sOAhrPnXkoqf9DV2gbw==} + engines: {node: '>=20'} + '@ethereumjs/util@8.1.0': resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} engines: {node: '>=14'} + '@fivebinaries/coin-selection@3.0.0': + resolution: {integrity: sha512-h25Pn1ZA7oqQBQDodGAgIsQt66T2wDge9onBKNqE66WNWL0KJiKJbpij8YOLo5AAlEIg5IS7EB1QjBgDOIg6DQ==} + '@gemini-wallet/core@0.3.2': resolution: {integrity: sha512-Z4aHi3ECFf5oWYWM3F1rW83GJfB9OvhBYPTmb5q+VyK3uvzvS48lwo+jwh2eOoCRWEuT/crpb9Vwp2QaS5JqgQ==} peerDependencies: @@ -1107,6 +1148,9 @@ packages: gsap: ^3.12.5 react: '>=17' + '@hot-wallet/sdk@1.0.11': + resolution: {integrity: sha512-qRDH/4yqnRCnk7L/Qd0/LDOKDUKWcFgvf6eRELJkP0OgxIe65i/iXaG+u2lL0mLbTGkiWYk67uAvEerNUv2gzA==} + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -1540,12 +1584,38 @@ packages: '@kwsites/file-exists@1.1.1': resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} + '@ledgerhq/devices@8.6.1': + resolution: {integrity: sha512-PQR2fyWz7P/wMFHY9ZLz17WgFdxC/Im0RVDcWXpp24+iRQRyxhQeX2iG4mBKUzfaAW6pOIEiWt+vmJh88QP9rQ==} + + '@ledgerhq/errors@6.32.0': + resolution: {integrity: sha512-BjjvhLM6UXYUbhllqAduo9PSneLt9FXZ3TBEUFQ3MMSZOCHt0gAgDySLwul99R8fdYWkXBza4DYQjUNckpN2lg==} + + '@ledgerhq/hw-app-str@7.2.8': + resolution: {integrity: sha512-VHICY9jyZW5LM/8zc/mSbW7fS2bAC1OTVOtRwdQLEDn6Gv9UaNcCWjaHI1UKAnDUqYX7DUQuIPiTP1b4O+mtUQ==} + + '@ledgerhq/hw-transport-webusb@6.29.12': + resolution: {integrity: sha512-mMGKPYAUz9MNcURe+hSTSHwqPwCli6D0lCl15Z4hDOpcqhZ26vwoeWVKeQp53NNCetHOl0lauPkN43Gt9pIggg==} + + '@ledgerhq/hw-transport@6.31.12': + resolution: {integrity: sha512-FO5LRIXYC8ELtaohlO8qK0b3TfHUNBZ3+CXKPHiHj2jJwrxPf4s5kcgBYrmzuf1C/1vfrMOjzyty6OgrMIbU6Q==} + + '@ledgerhq/logs@6.16.0': + resolution: {integrity: sha512-v/PLfb1dq1En35kkpbfRWp8jLYgbPUXxGhmd4pmvPSIe0nRGkNTomsZASmWQAv6pRonVGqHIBVlte7j1MBbOww==} + '@lit-labs/ssr-dom-shim@1.5.1': resolution: {integrity: sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==} + '@lit/react@1.0.8': + resolution: {integrity: sha512-p2+YcF+JE67SRX3mMlJ1TKCSTsgyOVdAwd/nxp3NuV1+Cb6MWALbN6nT7Ld4tpmYofcE5kcaSY1YBB9erY+6fw==} + peerDependencies: + '@types/react': 17 || 18 || 19 + '@lit/reactive-element@2.1.2': resolution: {integrity: sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==} + '@lobstrco/signer-extension-api@2.0.0': + resolution: {integrity: sha512-jwlVyzMFF296iaNgMWn1lu+EU6BeUD4mgPurEsy8EygYNCrjA8igLpsDlXhfvXhst9tX5w4wRuTDX+FZtpfCug==} + '@lukeed/csprng@1.1.0': resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} engines: {node: '>=8'} @@ -1637,6 +1707,18 @@ packages: '@microsoft/tsdoc@0.16.0': resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==} + '@mobily/ts-belt@3.13.1': + resolution: {integrity: sha512-K5KqIhPI/EoCTbA6CGbrenM9s41OouyK8A03fGJJcla/zKucsgLbz8HNbeseoLarRPgyWJsUyCYqFhI7t3Ra9Q==} + engines: {node: '>= 10.*'} + + '@msgpack/msgpack@3.1.2': + resolution: {integrity: sha512-JEW4DEtBzfe8HvUYecLU9e6+XJnKDlUAIve8FvPzF3Kzs6Xo/KuZkZJsDH0wJXl/qEZbeeE7edxDNY3kMs39hQ==} + engines: {node: '>= 18'} + + '@msgpack/msgpack@3.1.3': + resolution: {integrity: sha512-47XIizs9XZXvuJgoaJUIE2lFoID8ugvc0jzSHP+Ptfk8nTbnR8g788wv48N03Kx0UkAv559HWRQ3yzOgzlRNUA==} + engines: {node: '>= 18'} + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==} cpu: [arm64] @@ -1670,6 +1752,44 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + '@near-js/accounts@1.4.1': + resolution: {integrity: sha512-ni3QT9H3NdrbVVKyx56yvz93r89Dvpc/vgVtiIK2OdXjkK6jcj+UKMDRQ6F7rd9qJOInLkHZbVBtcR6j1CXLjw==} + + '@near-js/crypto@1.4.2': + resolution: {integrity: sha512-GRfchsyfWvSAPA1gI9hYhw5FH94Ac1BUo+Cmp5rSJt/V0K3xVzCWgOQxvv4R3kDnWjaXJEuAmpEEnr4Bp3FWrA==} + + '@near-js/keystores-browser@0.2.2': + resolution: {integrity: sha512-Pxqm7WGtUu6zj32vGCy9JcEDpZDSB5CCaLQDTQdF3GQyL0flyRv2I/guLAgU5FLoYxU7dJAX9mslJhPW7P2Bfw==} + + '@near-js/keystores-node@0.1.2': + resolution: {integrity: sha512-MWLvTszZOVziiasqIT/LYNhUyWqOJjDGlsthOsY6dTL4ZcXjjmhmzrbFydIIeQr+CcEl5wukTo68ORI9JrHl6g==} + + '@near-js/keystores@0.2.2': + resolution: {integrity: sha512-DLhi/3a4qJUY+wgphw2Jl4S+L0AKsUYm1mtU0WxKYV5OBwjOXvbGrXNfdkheYkfh3nHwrQgtjvtszX6LrRXLLw==} + + '@near-js/providers@1.0.3': + resolution: {integrity: sha512-VJMboL14R/+MGKnlhhE3UPXCGYvMd1PpvF9OqZ9yBbulV7QVSIdTMfY4U1NnDfmUC2S3/rhAEr+3rMrIcNS7Fg==} + + '@near-js/signers@0.2.2': + resolution: {integrity: sha512-M6ib+af9zXAPRCjH2RyIS0+RhCmd9gxzCeIkQ+I2A3zjgGiEDkBZbYso9aKj8Zh2lPKKSH7h+u8JGymMOSwgyw==} + + '@near-js/transactions@1.3.3': + resolution: {integrity: sha512-1AXD+HuxlxYQmRTLQlkVmH+RAmV3HwkAT8dyZDu+I2fK/Ec9BQHXakOJUnOBws3ihF+akQhamIBS5T0EXX/Ylw==} + + '@near-js/types@0.3.1': + resolution: {integrity: sha512-8qIA7ynAEAuVFNAQc0cqz2xRbfyJH3PaAG5J2MgPPhD18lu/tCGd6pzYg45hjhtiJJRFDRjh/FUWKS+ZiIIxUw==} + + '@near-js/utils@1.1.0': + resolution: {integrity: sha512-5XWRq7xpu8Wud9pRXe2U347KXyi0mXofedUY2DQ9TaqiZUcMIaN9xj7DbCs2v6dws3pJyYrT1KWxeNp5fSaY3w==} + + '@near-js/wallet-account@1.3.3': + resolution: {integrity: sha512-GDzg/Kz0GBYF7tQfyQQQZ3vviwV8yD+8F2lYDzsWJiqIln7R1ov0zaXN4Tii86TeS21KPn2hHAsVu3Y4txa8OQ==} + + '@near-wallet-selector/core@8.10.2': + resolution: {integrity: sha512-MH8sg6XHyylq2ZXxnOjrKHMCmuRgFfpfdC816fW0R8hctZiXZ0lmfLvgG1xfA2BAxrVytiU1g3dcE97/P5cZqg==} + peerDependencies: + near-api-js: ^4.0.0 || ^5.0.0 + '@nestjs/cache-manager@3.1.0': resolution: {integrity: sha512-pEIqYZrBcE8UdkJmZRduurvoUfdU+3kRPeO1R2muiMbZnRuqlki5klFFNllO9LyYWzrx98bd1j0PSPKSJk1Wbw==} peerDependencies: @@ -1887,6 +2007,10 @@ packages: resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} engines: {node: '>= 16'} + '@noble/hashes@1.3.3': + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} + '@noble/hashes@1.4.0': resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} engines: {node: '>= 16'} @@ -2037,6 +2161,9 @@ packages: resolution: {integrity: sha512-IHnV6A+zxU7XwmKFinmYjUcwlyK9+xkG3/s9KcQhI9BjQKycrJ1JRO+FbNYPwZiPKW3je/DR0k7w8/gLa5eaxQ==} deprecated: 'The package is now available as "qr": npm install qr' + '@phosphor-icons/webcomponents@2.1.5': + resolution: {integrity: sha512-JcvQkZxvcX2jK+QCclm8+e8HXqtdFW9xV4/kk2aL9Y3dJA2oQVt+pzbv1orkumz3rfx4K9mn9fDoMr1He1yr7Q==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -2045,6 +2172,14 @@ packages: resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@preact/signals-core@1.14.1': + resolution: {integrity: sha512-vxPpfXqrwUe9lpjqfYNjAF/0RF/eFGeLgdJzdmIIZjpOnTmGmAB4BjWone562mJGMRP4frU6iZ6ei3PDsu52Ng==} + + '@preact/signals@2.9.0': + resolution: {integrity: sha512-hYrY0KyUqkDgOl1qba/JGn6y81pXnurn21PMaxfcMwdncdZ3M/oVdmpTvEnsGjh48dIwDVc7bjWHqIsngSjYug==} + peerDependencies: + preact: '>= 10.25.0 || >=11.0.0-0' + '@prisma/client@6.16.1': resolution: {integrity: sha512-QaBCOY29lLAxEFFJgBPyW3WInCW52fJeQTmWx/h6YsP5u0bwuqP51aP0uhqFvhK9DaZPwvai/M4tSDYLVE9vRg==} engines: {node: '>=18.18'} @@ -2181,32 +2316,61 @@ packages: '@reown/appkit-common@1.7.8': resolution: {integrity: sha512-ridIhc/x6JOp7KbDdwGKY4zwf8/iK8EYBl+HtWrruutSLwZyVi5P8WaZa+8iajL6LcDcDF7LoyLwMTym7SRuwQ==} + '@reown/appkit-common@1.8.19': + resolution: {integrity: sha512-z5wDrYjUGY7YbM4b14NHVo54WKZ5++PQtGkcsXhiOP39yAVijubBQD8BfHs/Pu2fSFqnqLIFoCVvIEfNWWccRw==} + '@reown/appkit-controllers@1.7.8': resolution: {integrity: sha512-IdXlJlivrlj6m63VsGLsjtPHHsTWvKGVzWIP1fXZHVqmK+rZCBDjCi9j267Rb9/nYRGHWBtlFQhO8dK35WfeDA==} + '@reown/appkit-controllers@1.8.19': + resolution: {integrity: sha512-JFNT8CfAVit9FJXh596Ye4U8A/oIapW+Y0KQqjB59DXyTCDZbxZDB32rULBQrSkZ6PufTEa239Dil4kABCQKtg==} + '@reown/appkit-pay@1.7.8': resolution: {integrity: sha512-OSGQ+QJkXx0FEEjlpQqIhT8zGJKOoHzVnyy/0QFrl3WrQTjCzg0L6+i91Ad5Iy1zb6V5JjqtfIFpRVRWN4M3pw==} + '@reown/appkit-pay@1.8.19': + resolution: {integrity: sha512-HO/tQT0TbTQO3eONxNNPJAOZAOzUiHvjM0Mty1rFFeRBH68auiqQxQi2YFNMs014gNkRN+cb84VYau7+MCC0fQ==} + '@reown/appkit-polyfills@1.7.8': resolution: {integrity: sha512-W/kq786dcHHAuJ3IV2prRLEgD/2iOey4ueMHf1sIFjhhCGMynMkhsOhQMUH0tzodPqUgAC494z4bpIDYjwWXaA==} + '@reown/appkit-polyfills@1.8.19': + resolution: {integrity: sha512-PSoetRSuZg7f2YFPzdfs4BayQl51zcGqYr7frwOe6td0XEsspLrrVFn/zk5QFbFHZVsMdfRZ+TTunt84ozRdnQ==} + '@reown/appkit-scaffold-ui@1.7.8': resolution: {integrity: sha512-RCeHhAwOrIgcvHwYlNWMcIDibdI91waaoEYBGw71inE0kDB8uZbE7tE6DAXJmDkvl0qPh+DqlC4QbJLF1FVYdQ==} + '@reown/appkit-scaffold-ui@1.8.19': + resolution: {integrity: sha512-Ak767x0VzeDIXb0wbzkl19kx6udw7vkb1EU0SAweG3iKc9BunW87Rfcd48/YimzMZycJaYmlbtfmqQQDYs6Few==} + '@reown/appkit-ui@1.7.8': resolution: {integrity: sha512-1hjCKjf6FLMFzrulhl0Y9Vb9Fu4royE+SXCPSWh4VhZhWqlzUFc7kutnZKx8XZFVQH4pbBvY62SpRC93gqoHow==} + '@reown/appkit-ui@1.8.19': + resolution: {integrity: sha512-fCAwW8yyyC3JcgKLBPvCtYuDGC4H8anO7u4LTaAXGEzdcU5H+IrCgNFSPNK7NuTSmgXm1TnoYxPxRFKNiNwFdA==} + '@reown/appkit-utils@1.7.8': resolution: {integrity: sha512-8X7UvmE8GiaoitCwNoB86pttHgQtzy4ryHZM9kQpvjQ0ULpiER44t1qpVLXNM4X35O0v18W0Dk60DnYRMH2WRw==} peerDependencies: valtio: 1.13.2 + '@reown/appkit-utils@1.8.19': + resolution: {integrity: sha512-VQPgUMTFqoh4UD3EDZSw9wyMkyZsmIVmu8CdQ2FUxIuqYW4fLd0VIpkDeO64MMhSv8b0X8Vd6m4+eGcqSwlUAg==} + peerDependencies: + valtio: 2.1.7 + '@reown/appkit-wallet@1.7.8': resolution: {integrity: sha512-kspz32EwHIOT/eg/ZQbFPxgXq0B/olDOj3YMu7gvLEFz4xyOFd/wgzxxAXkp5LbG4Cp++s/elh79rVNmVFdB9A==} + '@reown/appkit-wallet@1.8.19': + resolution: {integrity: sha512-NVdIKceUhkXYtsG32925ctmVn0QJFNyDlr+mWheMLCEZ/IUPn+6aA53vTVaSUquhyeFxUXtrCOh3ln6v1tup5w==} + '@reown/appkit@1.7.8': resolution: {integrity: sha512-51kTleozhA618T1UvMghkhKfaPcc9JlKwLJ5uV+riHyvSoWPKPRIa5A6M1Wano5puNyW0s3fwywhyqTHSilkaA==} + '@reown/appkit@1.8.19': + resolution: {integrity: sha512-wB+xatkRbOy0AY1cZxxtcKzzPk3l3CTFulDbaISLVmZI6ZnQrOFuLnYc285zGsC6DB4d6bmwYUh89zcMLa4PvQ==} + '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} @@ -2250,6 +2414,9 @@ packages: '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + '@sinclair/typebox@0.33.22': + resolution: {integrity: sha512-auUj4k+f4pyrIVf4GW5UKquSZFHJWri06QgARy9C0t9ZTjJLIuNIrr1yl9bWcJWJ1Gz1vOvYN1D+QPaIlNMVkQ==} + '@sinclair/typebox@0.34.41': resolution: {integrity: sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==} @@ -2269,16 +2436,48 @@ packages: '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + '@solana-program/compute-budget@0.8.0': + resolution: {integrity: sha512-qPKxdxaEsFxebZ4K5RPuy7VQIm/tfJLa1+Nlt3KNA8EYQkz9Xm8htdoEaXVrer9kpgzzp9R3I3Bh6omwCM06tQ==} + peerDependencies: + '@solana/kit': ^2.1.0 + + '@solana-program/stake@0.2.1': + resolution: {integrity: sha512-ssNPsJv9XHaA+L7ihzmWGYcm/+XYURQ8UA3wQMKf6ccEHyHOUgoglkkDU/BoA0+wul6HxZUN0tHFymC0qFw6sg==} + peerDependencies: + '@solana/kit': ^2.1.0 + '@solana-program/system@0.10.0': resolution: {integrity: sha512-Go+LOEZmqmNlfr+Gjy5ZWAdY5HbYzk2RBewD9QinEU/bBSzpFfzqDRT55JjFRBGJUvMgf3C2vfXEGT4i8DSI4g==} peerDependencies: '@solana/kit': ^5.0 + '@solana-program/system@0.7.0': + resolution: {integrity: sha512-FKTBsKHpvHHNc1ATRm7SlC5nF/VdJtOSjldhcyfMN9R7xo712Mo2jHIzvBgn8zQO5Kg0DcWuKB7268Kv1ocicw==} + peerDependencies: + '@solana/kit': ^2.1.0 + + '@solana-program/token-2022@0.4.2': + resolution: {integrity: sha512-zIpR5t4s9qEU3hZKupzIBxJ6nUV5/UVyIT400tu9vT1HMs5JHxaTTsb5GUhYjiiTvNwU0MQavbwc4Dl29L0Xvw==} + peerDependencies: + '@solana/kit': ^2.1.0 + '@solana/sysvars': ^2.1.0 + + '@solana-program/token@0.5.1': + resolution: {integrity: sha512-bJvynW5q9SFuVOZ5vqGVkmaPGA0MCC+m9jgJj1nk5m20I389/ms69ASnhWGoOPNcie7S9OwBX0gTj2fiyWpfag==} + peerDependencies: + '@solana/kit': ^2.1.0 + '@solana-program/token@0.9.0': resolution: {integrity: sha512-vnZxndd4ED4Fc56sw93cWZ2djEeeOFxtaPS8SPf5+a+JZjKA/EnKqzbE1y04FuMhIVrLERQ8uR8H2h72eZzlsA==} peerDependencies: '@solana/kit': ^5.0 + '@solana/accounts@2.3.0': + resolution: {integrity: sha512-QgQTj404Z6PXNOyzaOpSzjgMOuGwG8vC66jSDB+3zHaRcEPRVRd2sVSrd1U6sHtnV3aiaS6YyDuPQMheg4K2jw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/accounts@5.5.1': resolution: {integrity: sha512-TfOY9xixg5rizABuLVuZ9XI2x2tmWUC/OoN556xwfDlhBHBjKfszicYYOyD6nbFmwTGYarCmyGIdteXxTXIdhQ==} engines: {node: '>=20.18.0'} @@ -2288,6 +2487,12 @@ packages: typescript: optional: true + '@solana/addresses@2.3.0': + resolution: {integrity: sha512-ypTNkY2ZaRFpHLnHAgaW8a83N0/WoqdFvCqf4CQmnMdFsZSdC7qOwcbd7YzdaQn9dy+P2hybewzB+KP7LutxGA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/addresses@5.5.1': resolution: {integrity: sha512-5xoah3Q9G30HQghu/9BiHLb5pzlPKRC3zydQDmE3O9H//WfayxTFppsUDCL6FjYUHqj/wzK6CWHySglc2RkpdA==} engines: {node: '>=20.18.0'} @@ -2297,6 +2502,12 @@ packages: typescript: optional: true + '@solana/assertions@2.3.0': + resolution: {integrity: sha512-Ekoet3khNg3XFLN7MIz8W31wPQISpKUGDGTylLptI+JjCDWx3PIa88xjEMqFo02WJ8sBj2NLV64Xg1sBcsHjZQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/assertions@5.5.1': resolution: {integrity: sha512-YTCSWAlGwSlVPnWtWLm3ukz81wH4j2YaCveK+TjpvUU88hTy6fmUqxi0+hvAMAe4zKXpJyj3Az7BrLJRxbIm4Q==} engines: {node: '>=20.18.0'} @@ -2306,6 +2517,16 @@ packages: typescript: optional: true + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.3.0': + resolution: {integrity: sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/codecs-core@5.5.1': resolution: {integrity: sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw==} engines: {node: '>=20.18.0'} @@ -2315,6 +2536,12 @@ packages: typescript: optional: true + '@solana/codecs-data-structures@2.3.0': + resolution: {integrity: sha512-qvU5LE5DqEdYMYgELRHv+HMOx73sSoV1ZZkwIrclwUmwTbTaH8QAJURBj0RhQ/zCne7VuLLOZFFGv6jGigWhSw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/codecs-data-structures@5.5.1': resolution: {integrity: sha512-97bJWGyUY9WvBz3mX1UV3YPWGDTez6btCfD0ip3UVEXJbItVuUiOkzcO5iFDUtQT5riKT6xC+Mzl+0nO76gd0w==} engines: {node: '>=20.18.0'} @@ -2324,6 +2551,12 @@ packages: typescript: optional: true + '@solana/codecs-numbers@2.3.0': + resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/codecs-numbers@5.5.1': resolution: {integrity: sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw==} engines: {node: '>=20.18.0'} @@ -2333,6 +2566,13 @@ packages: typescript: optional: true + '@solana/codecs-strings@2.3.0': + resolution: {integrity: sha512-y5pSBYwzVziXu521hh+VxqUtp0hYGTl1eWGoc1W+8mdvBdC1kTqm/X7aYQw33J42hw03JjryvYOvmGgk3Qz/Ug==} + engines: {node: '>=20.18.0'} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5.3.3' + '@solana/codecs-strings@5.5.1': resolution: {integrity: sha512-7klX4AhfHYA+uKKC/nxRGP2MntbYQCR3N6+v7bk1W/rSxYuhNmt+FN8aoThSZtWIKwN6BEyR1167ka8Co1+E7A==} engines: {node: '>=20.18.0'} @@ -2345,6 +2585,12 @@ packages: typescript: optional: true + '@solana/codecs@2.3.0': + resolution: {integrity: sha512-JVqGPkzoeyU262hJGdH64kNLH0M+Oew2CIPOa/9tR3++q2pEd4jU2Rxdfye9sd0Ce3XJrR5AIa8ZfbyQXzjh+g==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/codecs@5.5.1': resolution: {integrity: sha512-Vea29nJub/bXjfzEV7ZZQ/PWr1pYLZo3z0qW0LQL37uKKVzVFRQlwetd7INk3YtTD3xm9WUYr7bCvYUk3uKy2g==} engines: {node: '>=20.18.0'} @@ -2354,6 +2600,13 @@ packages: typescript: optional: true + '@solana/errors@2.3.0': + resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: '>=5.3.3' + '@solana/errors@5.5.1': resolution: {integrity: sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg==} engines: {node: '>=20.18.0'} @@ -2364,6 +2617,12 @@ packages: typescript: optional: true + '@solana/fast-stable-stringify@2.3.0': + resolution: {integrity: sha512-KfJPrMEieUg6D3hfQACoPy0ukrAV8Kio883llt/8chPEG3FVTX9z/Zuf4O01a15xZmBbmQ7toil2Dp0sxMJSxw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/fast-stable-stringify@5.5.1': resolution: {integrity: sha512-Ni7s2FN33zTzhTFgRjEbOVFO+UAmK8qi3Iu0/GRFYK4jN696OjKHnboSQH/EacQ+yGqS54bfxf409wU5dsLLCw==} engines: {node: '>=20.18.0'} @@ -2373,6 +2632,12 @@ packages: typescript: optional: true + '@solana/functional@2.3.0': + resolution: {integrity: sha512-AgsPh3W3tE+nK3eEw/W9qiSfTGwLYEvl0rWaxHht/lRcuDVwfKRzeSa5G79eioWFFqr+pTtoCr3D3OLkwKz02Q==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/functional@5.5.1': resolution: {integrity: sha512-tTHoJcEQq3gQx5qsdsDJ0LEJeFzwNpXD80xApW9o/PPoCNimI3SALkZl+zNW8VnxRrV3l3yYvfHWBKe/X3WG3w==} engines: {node: '>=20.18.0'} @@ -2391,6 +2656,12 @@ packages: typescript: optional: true + '@solana/instructions@2.3.0': + resolution: {integrity: sha512-PLMsmaIKu7hEAzyElrk2T7JJx4D+9eRwebhFZpy2PXziNSmFF929eRHKUsKqBFM3cYR1Yy3m6roBZfA+bGE/oQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/instructions@5.5.1': resolution: {integrity: sha512-h0G1CG6S+gUUSt0eo6rOtsaXRBwCq1+Js2a+Ps9Bzk9q7YHNFA75/X0NWugWLgC92waRp66hrjMTiYYnLBoWOQ==} engines: {node: '>=20.18.0'} @@ -2400,6 +2671,12 @@ packages: typescript: optional: true + '@solana/keys@2.3.0': + resolution: {integrity: sha512-ZVVdga79pNH+2pVcm6fr2sWz9HTwfopDVhYb0Lh3dh+WBmJjwkabXEIHey2rUES7NjFa/G7sV8lrUn/v8LDCCQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/keys@5.5.1': resolution: {integrity: sha512-KRD61cL7CRL+b4r/eB9dEoVxIf/2EJ1Pm1DmRYhtSUAJD2dJ5Xw8QFuehobOGm9URqQ7gaQl+Fkc1qvDlsWqKg==} engines: {node: '>=20.18.0'} @@ -2409,6 +2686,12 @@ packages: typescript: optional: true + '@solana/kit@2.3.0': + resolution: {integrity: sha512-sb6PgwoW2LjE5oTFu4lhlS/cGt/NB3YrShEyx7JgWFWysfgLdJnhwWThgwy/4HjNsmtMrQGWVls0yVBHcMvlMQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/kit@5.5.1': resolution: {integrity: sha512-irKUGiV2yRoyf+4eGQ/ZeCRxa43yjFEL1DUI5B0DkcfZw3cr0VJtVJnrG8OtVF01vT0OUfYOcUn6zJW5TROHvQ==} engines: {node: '>=20.18.0'} @@ -2418,6 +2701,12 @@ packages: typescript: optional: true + '@solana/nominal-types@2.3.0': + resolution: {integrity: sha512-uKlMnlP4PWW5UTXlhKM8lcgIaNj8dvd8xO4Y9l+FVvh9RvW2TO0GwUO6JCo7JBzCB0PSqRJdWWaQ8pu1Ti/OkA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/nominal-types@5.5.1': resolution: {integrity: sha512-I1ImR+kfrLFxN5z22UDiTWLdRZeKtU0J/pkWkO8qm/8WxveiwdIv4hooi8pb6JnlR4mSrWhq0pCIOxDYrL9GIQ==} engines: {node: '>=20.18.0'} @@ -2436,6 +2725,12 @@ packages: typescript: optional: true + '@solana/options@2.3.0': + resolution: {integrity: sha512-PPnnZBRCWWoZQ11exPxf//DRzN2C6AoFsDI/u2AsQfYih434/7Kp4XLpfOMT/XESi+gdBMFNNfbES5zg3wAIkw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/options@5.5.1': resolution: {integrity: sha512-eo971c9iLNLmk+yOFyo7yKIJzJ/zou6uKpy6mBuyb/thKtS/haiKIc3VLhyTXty3OH2PW8yOlORJnv4DexJB8A==} engines: {node: '>=20.18.0'} @@ -2454,6 +2749,12 @@ packages: typescript: optional: true + '@solana/programs@2.3.0': + resolution: {integrity: sha512-UXKujV71VCI5uPs+cFdwxybtHZAIZyQkqDiDnmK+DawtOO9mBn4Nimdb/6RjR2CXT78mzO9ZCZ3qfyX+ydcB7w==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/programs@5.5.1': resolution: {integrity: sha512-7U9kn0Jsx1NuBLn5HRTFYh78MV4XN145Yc3WP/q5BlqAVNlMoU9coG5IUTJIG847TUqC1lRto3Dnpwm6T4YRpA==} engines: {node: '>=20.18.0'} @@ -2463,6 +2764,12 @@ packages: typescript: optional: true + '@solana/promises@2.3.0': + resolution: {integrity: sha512-GjVgutZKXVuojd9rWy1PuLnfcRfqsaCm7InCiZc8bqmJpoghlyluweNc7ml9Y5yQn1P2IOyzh9+p/77vIyNybQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/promises@5.5.1': resolution: {integrity: sha512-T9lfuUYkGykJmppEcssNiCf6yiYQxJkhiLPP+pyAc2z84/7r3UVIb2tNJk4A9sucS66pzJnVHZKcZVGUUp6wzA==} engines: {node: '>=20.18.0'} @@ -2472,6 +2779,12 @@ packages: typescript: optional: true + '@solana/rpc-api@2.3.0': + resolution: {integrity: sha512-UUdiRfWoyYhJL9PPvFeJr4aJ554ob2jXcpn4vKmRVn9ire0sCbpQKYx6K8eEKHZWXKrDW8IDspgTl0gT/aJWVg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/rpc-api@5.5.1': resolution: {integrity: sha512-XWOQQPhKl06Vj0xi3RYHAc6oEQd8B82okYJ04K7N0Vvy3J4PN2cxeK7klwkjgavdcN9EVkYCChm2ADAtnztKnA==} engines: {node: '>=20.18.0'} @@ -2481,6 +2794,12 @@ packages: typescript: optional: true + '@solana/rpc-parsed-types@2.3.0': + resolution: {integrity: sha512-B5pHzyEIbBJf9KHej+zdr5ZNAdSvu7WLU2lOUPh81KHdHQs6dEb310LGxcpCc7HVE8IEdO20AbckewDiAN6OCg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/rpc-parsed-types@5.5.1': resolution: {integrity: sha512-HEi3G2nZqGEsa3vX6U0FrXLaqnUCg4SKIUrOe8CezD+cSFbRTOn3rCLrUmJrhVyXlHoQVaRO9mmeovk31jWxJg==} engines: {node: '>=20.18.0'} @@ -2490,6 +2809,12 @@ packages: typescript: optional: true + '@solana/rpc-spec-types@2.3.0': + resolution: {integrity: sha512-xQsb65lahjr8Wc9dMtP7xa0ZmDS8dOE2ncYjlvfyw/h4mpdXTUdrSMi6RtFwX33/rGuztQ7Hwaid5xLNSLvsFQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/rpc-spec-types@5.5.1': resolution: {integrity: sha512-6OFKtRpIEJQs8Jb2C4OO8KyP2h2Hy1MFhatMAoXA+0Ik8S3H+CicIuMZvGZ91mIu/tXicuOOsNNLu3HAkrakrw==} engines: {node: '>=20.18.0'} @@ -2499,6 +2824,12 @@ packages: typescript: optional: true + '@solana/rpc-spec@2.3.0': + resolution: {integrity: sha512-fA2LMX4BMixCrNB2n6T83AvjZ3oUQTu7qyPLyt8gHQaoEAXs8k6GZmu6iYcr+FboQCjUmRPgMaABbcr9j2J9Sw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/rpc-spec@5.5.1': resolution: {integrity: sha512-m3LX2bChm3E3by4mQrH4YwCAFY57QBzuUSWqlUw7ChuZ+oLLOq7b2czi4i6L4Vna67j3eCmB3e+4tqy1j5wy7Q==} engines: {node: '>=20.18.0'} @@ -2508,6 +2839,12 @@ packages: typescript: optional: true + '@solana/rpc-subscriptions-api@2.3.0': + resolution: {integrity: sha512-9mCjVbum2Hg9KGX3LKsrI5Xs0KX390lS+Z8qB80bxhar6MJPugqIPH8uRgLhCW9GN3JprAfjRNl7our8CPvsPQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/rpc-subscriptions-api@5.5.1': resolution: {integrity: sha512-5Oi7k+GdeS8xR2ly1iuSFkAv6CZqwG0Z6b1QZKbEgxadE1XGSDrhM2cn59l+bqCozUWCqh4c/A2znU/qQjROlw==} engines: {node: '>=20.18.0'} @@ -2517,6 +2854,13 @@ packages: typescript: optional: true + '@solana/rpc-subscriptions-channel-websocket@2.3.0': + resolution: {integrity: sha512-2oL6ceFwejIgeWzbNiUHI2tZZnaOxNTSerszcin7wYQwijxtpVgUHiuItM/Y70DQmH9sKhmikQp+dqeGalaJxw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + ws: ^8.18.0 + '@solana/rpc-subscriptions-channel-websocket@5.5.1': resolution: {integrity: sha512-7tGfBBrYY8TrngOyxSHoCU5shy86iA9SRMRrPSyBhEaZRAk6dnbdpmUTez7gtdVo0BCvh9nzQtUycKWSS7PnFQ==} engines: {node: '>=20.18.0'} @@ -2526,6 +2870,12 @@ packages: typescript: optional: true + '@solana/rpc-subscriptions-spec@2.3.0': + resolution: {integrity: sha512-rdmVcl4PvNKQeA2l8DorIeALCgJEMSu7U8AXJS1PICeb2lQuMeaR+6cs/iowjvIB0lMVjYN2sFf6Q3dJPu6wWg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/rpc-subscriptions-spec@5.5.1': resolution: {integrity: sha512-iq+rGq5fMKP3/mKHPNB6MC8IbVW41KGZg83Us/+LE3AWOTWV1WT20KT2iH1F1ik9roi42COv/TpoZZvhKj45XQ==} engines: {node: '>=20.18.0'} @@ -2535,6 +2885,12 @@ packages: typescript: optional: true + '@solana/rpc-subscriptions@2.3.0': + resolution: {integrity: sha512-Uyr10nZKGVzvCOqwCZgwYrzuoDyUdwtgQRefh13pXIrdo4wYjVmoLykH49Omt6abwStB0a4UL5gX9V4mFdDJZg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/rpc-subscriptions@5.5.1': resolution: {integrity: sha512-CTMy5bt/6mDh4tc6vUJms9EcuZj3xvK0/xq8IQ90rhkpYvate91RjBP+egvjgSayUg9yucU9vNuUpEjz4spM7w==} engines: {node: '>=20.18.0'} @@ -2544,6 +2900,12 @@ packages: typescript: optional: true + '@solana/rpc-transformers@2.3.0': + resolution: {integrity: sha512-UuHYK3XEpo9nMXdjyGKkPCOr7WsZsxs7zLYDO1A5ELH3P3JoehvrDegYRAGzBS2VKsfApZ86ZpJToP0K3PhmMA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/rpc-transformers@5.5.1': resolution: {integrity: sha512-OsWqLCQdcrRJKvHiMmwFhp9noNZ4FARuMkHT5us3ustDLXaxOjF0gfqZLnMkulSLcKt7TGXqMhBV+HCo7z5M8Q==} engines: {node: '>=20.18.0'} @@ -2553,6 +2915,12 @@ packages: typescript: optional: true + '@solana/rpc-transport-http@2.3.0': + resolution: {integrity: sha512-HFKydmxGw8nAF5N+S0NLnPBDCe5oMDtI2RAmW8DMqP4U3Zxt2XWhvV1SNkAldT5tF0U1vP+is6fHxyhk4xqEvg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/rpc-transport-http@5.5.1': resolution: {integrity: sha512-yv8GoVSHqEV0kUJEIhkdOVkR2SvJ6yoWC51cJn2rSV7plr6huLGe0JgujCmB7uZhhaLbcbP3zxXxu9sOjsi7Fg==} engines: {node: '>=20.18.0'} @@ -2562,6 +2930,12 @@ packages: typescript: optional: true + '@solana/rpc-types@2.3.0': + resolution: {integrity: sha512-O09YX2hED2QUyGxrMOxQ9GzH1LlEwwZWu69QbL4oYmIf6P5dzEEHcqRY6L1LsDVqc/dzAdEs/E1FaPrcIaIIPw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/rpc-types@5.5.1': resolution: {integrity: sha512-bibTFQ7PbHJJjGJPmfYC2I+/5CRFS4O2p9WwbFraX1Keeel+nRrt/NBXIy8veP5AEn2sVJIyJPpWBRpCx1oATA==} engines: {node: '>=20.18.0'} @@ -2571,6 +2945,12 @@ packages: typescript: optional: true + '@solana/rpc@2.3.0': + resolution: {integrity: sha512-ZWN76iNQAOCpYC7yKfb3UNLIMZf603JckLKOOLTHuy9MZnTN8XV6uwvDFhf42XvhglgUjGCEnbUqWtxQ9pa/pQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/rpc@5.5.1': resolution: {integrity: sha512-ku8zTUMrkCWci66PRIBC+1mXepEnZH/q1f3ck0kJZ95a06bOTl5KU7HeXWtskkyefzARJ5zvCs54AD5nxjQJ+A==} engines: {node: '>=20.18.0'} @@ -2580,6 +2960,12 @@ packages: typescript: optional: true + '@solana/signers@2.3.0': + resolution: {integrity: sha512-OSv6fGr/MFRx6J+ZChQMRqKNPGGmdjkqarKkRzkwmv7v8quWsIRnJT5EV8tBy3LI4DLO/A8vKiNSPzvm1TdaiQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/signers@5.5.1': resolution: {integrity: sha512-FY0IVaBT2kCAze55vEieR6hag4coqcuJ31Aw3hqRH7mv6sV8oqwuJmUrx+uFwOp1gwd5OEAzlv6N4hOOple4sQ==} engines: {node: '>=20.18.0'} @@ -2589,6 +2975,12 @@ packages: typescript: optional: true + '@solana/subscribable@2.3.0': + resolution: {integrity: sha512-DkgohEDbMkdTWiKAoatY02Njr56WXx9e/dKKfmne8/Ad6/2llUIrax78nCdlvZW9quXMaXPTxZvdQqo9N669Og==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/subscribable@5.5.1': resolution: {integrity: sha512-9K0PsynFq0CsmK1CDi5Y2vUIJpCqkgSS5yfDN0eKPgHqEptLEaia09Kaxc90cSZDZU5mKY/zv1NBmB6Aro9zQQ==} engines: {node: '>=20.18.0'} @@ -2598,6 +2990,12 @@ packages: typescript: optional: true + '@solana/sysvars@2.3.0': + resolution: {integrity: sha512-LvjADZrpZ+CnhlHqfI5cmsRzX9Rpyb1Ox2dMHnbsRNzeKAMhu9w4ZBIaeTdO322zsTr509G1B+k2ABD3whvUBA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/sysvars@5.5.1': resolution: {integrity: sha512-k3Quq87Mm+geGUu1GWv6knPk0ALsfY6EKSJGw9xUJDHzY/RkYSBnh0RiOrUhtFm2TDNjOailg8/m0VHmi3reFA==} engines: {node: '>=20.18.0'} @@ -2607,6 +3005,12 @@ packages: typescript: optional: true + '@solana/transaction-confirmation@2.3.0': + resolution: {integrity: sha512-UiEuiHCfAAZEKdfne/XljFNJbsKAe701UQHKXEInYzIgBjRbvaeYZlBmkkqtxwcasgBTOmEaEKT44J14N9VZDw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/transaction-confirmation@5.5.1': resolution: {integrity: sha512-j4mKlYPHEyu+OD7MBt3jRoX4ScFgkhZC6H65on4Fux6LMScgivPJlwnKoZMnsgxFgWds0pl+BYzSiALDsXlYtw==} engines: {node: '>=20.18.0'} @@ -2616,6 +3020,12 @@ packages: typescript: optional: true + '@solana/transaction-messages@2.3.0': + resolution: {integrity: sha512-bgqvWuy3MqKS5JdNLH649q+ngiyOu5rGS3DizSnWwYUd76RxZl1kN6CoqHSrrMzFMvis6sck/yPGG3wqrMlAww==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/transaction-messages@5.5.1': resolution: {integrity: sha512-aXyhMCEaAp3M/4fP0akwBBQkFPr4pfwoC5CLDq999r/FUwDax2RE/h4Ic7h2Xk+JdcUwsb+rLq85Y52hq84XvQ==} engines: {node: '>=20.18.0'} @@ -2625,6 +3035,12 @@ packages: typescript: optional: true + '@solana/transactions@2.3.0': + resolution: {integrity: sha512-LnTvdi8QnrQtuEZor5Msje61sDpPstTVwKg4y81tNxDhiyomjuvnSNLAq6QsB9gIxUqbNzPZgOG9IU4I4/Uaug==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/transactions@5.5.1': resolution: {integrity: sha512-8hHtDxtqalZ157pnx6p8k10D7J/KY/biLzfgh9R09VNLLY3Fqi7kJvJCr7M2ik3oRll56pxhraAGCC9yIT6eOA==} engines: {node: '>=20.18.0'} @@ -2634,6 +3050,19 @@ packages: typescript: optional: true + '@solana/wallet-adapter-base@0.9.27': + resolution: {integrity: sha512-kXjeNfNFVs/NE9GPmysBRKQ/nf+foSaq3kfVSeMcO/iVgigyRmB551OjU3WyAolLG/1jeEfKLqF9fKwMCRkUqg==} + engines: {node: '>=20'} + peerDependencies: + '@solana/web3.js': ^1.98.0 + + '@solana/wallet-standard-features@1.3.0': + resolution: {integrity: sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg==} + engines: {node: '>=16'} + + '@solana/web3.js@1.98.4': + resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==} + '@spruceid/siwe-parser@3.0.0': resolution: {integrity: sha512-Y92k63ilw/8jH9Ry4G2e7lQd0jZAvb0d/Q7ssSD0D9mp/Zt2aCXIc3g0ny9yhplpAx1QXHsMz/JJptHK/zDGdw==} @@ -2652,14 +3081,28 @@ packages: '@standard-schema/spec@1.0.0': resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@stellar/freighter-api@6.0.0': + resolution: {integrity: sha512-8CTQcKQmTq/wL715ZUzn1x1POpR0eYhYPKEiaeA7AT0WYBOauOGTxfWPFtSidX3ohAlJZP5HFXy1kG29cVjqxw==} + + '@stellar/js-xdr@3.1.2': + resolution: {integrity: sha512-VVolPL5goVEIsvuGqDc5uiKxV03lzfWdvYg1KikvwheDmTBO68CKDji3bAZ/kppZrx5iTA8z3Ld5yuytcvhvOQ==} + '@stellar/js-xdr@4.0.0': resolution: {integrity: sha512-+NmNa7Tk5BI5XFdy/6xGTqAN4J9a9KgCrCGhj2uEUTCBhLkch0M+QbKzNH8zEnejWe0p8w+0q5hUVX6L3OzoVA==} engines: {node: '>=20.0.0', pnpm: '>=9.0.0'} + '@stellar/stellar-base@14.0.1': + resolution: {integrity: sha512-mI6Kjh9hGWDA1APawQTtCbR7702dNT/8Te1uuRFPqqdoAKBk3WpXOQI3ZSZO+5olW7BSHpmVG5KBPZpIpQxIvw==} + engines: {node: '>=20.0.0'} + '@stellar/stellar-base@15.0.0': resolution: {integrity: sha512-XQhxUr9BYiEcFcgc4oWcCMR9QJCny/GmmGsuwPKf/ieIcOeb5149KLHYx9mJCA0ea8QbucR2/GzV58QbXOTxQA==} engines: {node: '>=20.0.0'} + '@stellar/stellar-sdk@14.2.0': + resolution: {integrity: sha512-7nh2ogzLRMhfkIC0fGjn1LHUzk3jqVw8tjAuTt5ADWfL9CSGBL18ILucE9igz2L/RU2AZgeAvhujAnW91Ut/oQ==} + engines: {node: '>=20.0.0'} + '@stellar/stellar-sdk@15.0.1': resolution: {integrity: sha512-iZjWKXtfohsPh+CX9wRyQNIlXLeA9VyuQB6UMC7AFBD9XnR92eOjnlfeONzk/Bsrkk6+UPlpzSy2MuF+ydHP1A==} engines: {node: '>=20.0.0'} @@ -2774,62 +3217,217 @@ packages: '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + '@trezor/analytics@1.5.0': + resolution: {integrity: sha512-evILW5XJEmfPlf0TY1duOLtGJ47pdGeSKVE3P75ODEUsRNxtPVqlkOUBPmYpCxPnzS8XDmkatT8lf9/DF0G6nA==} + peerDependencies: + tslib: ^2.6.2 - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + '@trezor/blockchain-link-types@1.5.0': + resolution: {integrity: sha512-wD6FKKxNr89MTWYL+NikRkBcWXhiWNFR0AuDHW6GHmlCEHhKu/hAvQtcER8X5jt/Wd0hSKNZqtHBXJ1ZkpJ6rg==} + peerDependencies: + tslib: ^2.6.2 - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + '@trezor/blockchain-link-types@1.5.1': + resolution: {integrity: sha512-Idavz6LwLBW8sXc69fh5AJEnl666EDl2Nt3io7updvBgOR0/P12I900DgjNhCKtiWuv66A33/5RE7zLcj3lfnw==} + peerDependencies: + tslib: ^2.6.2 - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@trezor/blockchain-link-utils@1.5.1': + resolution: {integrity: sha512-2tDGLEj5jzydjsJQONGTWVmCDDy6FTZ4ytr1/2gE6anyYEJU8MbaR+liTt3UvcP5jwZTNutwYLvZixRfrb8JpA==} + peerDependencies: + tslib: ^2.6.2 - '@tybys/wasm-util@0.10.0': - resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} + '@trezor/blockchain-link-utils@1.5.2': + resolution: {integrity: sha512-OSS5OEE98FMnYfjoEALPjBt7ebjC/FKnq3HOolHdEWXBpVlXZNN2+Vo1R9J6WbZUU087sHuUTJJy/GJYWY13Tg==} + peerDependencies: + tslib: ^2.6.2 - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + '@trezor/blockchain-link@2.6.1': + resolution: {integrity: sha512-SPwxkihOMI0o79BOy0RkfgVL2meuJhIe1yWHCeR8uoqf5KGblUyeXxvNCy6w8ckJ9LRpM1+bZhsUODuNs3083Q==} + peerDependencies: + tslib: ^2.6.2 - '@types/babel__generator@7.27.0': - resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + '@trezor/connect-analytics@1.4.0': + resolution: {integrity: sha512-hy2J2oeIhRC/e1bOWXo5dsVMVnDwO2UKnxhR6FD8PINR3jgM6PWAXc6k33WJsBcyiTzwMP7/xPysLcgNJH5o4w==} + peerDependencies: + tslib: ^2.6.2 - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + '@trezor/connect-common@0.5.1': + resolution: {integrity: sha512-wdpVCwdylBh4SBO5Ys40tB/d59UlfjmxgBHDkkLgaR+JcqkthCfiw5VlUrV9wu65lquejAZhA5KQL4mUUUhCow==} + peerDependencies: + tslib: ^2.6.2 - '@types/babel__traverse@7.28.0': - resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + '@trezor/connect-plugin-stellar@9.2.6': + resolution: {integrity: sha512-RA0Q4GHaf1mFxgSX183yyH+5tWEgS1j+sfe9KiUyIn/VnpXeUnaCpQuKMomAjGXQ5oNuvikTOdHYOqsvuEdOyw==} + peerDependencies: + '@stellar/stellar-sdk': ^13.3.0 + '@trezor/connect': 9.x.x + tslib: ^2.6.2 - '@types/body-parser@1.19.6': - resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} + '@trezor/connect-web@9.7.2': + resolution: {integrity: sha512-r4wMnQ51KO1EaMpO8HLB95E+4s+aaZE9Vjx1dHYaD+Xj40LR7OJmR6DyDKuF0Ioji3Jxx1MwZCaFfvA+0JW+Sg==} + peerDependencies: + tslib: ^2.6.2 - '@types/connect@3.4.38': - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@trezor/connect@9.7.2': + resolution: {integrity: sha512-Sn6F4mNH+yi2vAHy29kwhs50bRLn92drg3znm3pkY+8yEBxI4MmuP8sKYjdgUEJnQflWh80KlcvEDeVa4olVRA==} + peerDependencies: + tslib: ^2.6.2 - '@types/cookiejar@2.1.5': - resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==} + '@trezor/crypto-utils@1.2.0': + resolution: {integrity: sha512-9i1NrfW1IE6JO910ut7xrx4u5LxE++GETbpJhWLj4P5xpuGDDSDLEn/MXaYisls2DpE897aOrGPaa1qyt8V6tw==} + peerDependencies: + tslib: ^2.6.2 - '@types/crypto-js@4.2.2': - resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==} + '@trezor/device-authenticity@1.1.2': + resolution: {integrity: sha512-313uSXYR4XKDv3CjtCpgHA+yEe9xxqN7EFl/D68FEn70SPsuWI0+2zUvjPPh6TIOh/EcLv7hCO/QTHUAGd7ZWQ==} - '@types/debug@4.1.13': - resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} + '@trezor/device-utils@1.2.0': + resolution: {integrity: sha512-Aqp7pIooFTx21zRUtTI6i1AS4d9Lrx7cclvksh2nJQF9WJvbzuCXshEGkLoOsHwhQrCl3IXfbGuMdA12yDenPA==} - '@types/docker-modem@3.0.6': - resolution: {integrity: sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==} + '@trezor/env-utils@1.5.0': + resolution: {integrity: sha512-u1TN7dMQ5Qhpbae08Z4JJmI9fQrbbJ4yj8eIAsuzMQn6vb+Sg9vbntl+IDsZ1G9WeI73uHTLu1wWMmAgiujH8w==} + peerDependencies: + expo-constants: '*' + expo-localization: '*' + react-native: '*' + tslib: ^2.6.2 + peerDependenciesMeta: + expo-constants: + optional: true + expo-localization: + optional: true + react-native: + optional: true - '@types/dockerode@4.0.1': - resolution: {integrity: sha512-cmUpB+dPN955PxBEuXE3f6lKO1hHiIGYJA46IVF3BJpNsZGvtBDcRnlrHYHtOH/B6vtDOyl2kZ2ShAu3mgc27Q==} + '@trezor/protobuf@1.5.1': + resolution: {integrity: sha512-nAkaCCAqLpErBd+IuKeG5MpbyLR/2RMgCw18TWc80m1Ws/XgQirhHY9Jbk6gLImTXb9GTrxP0+MDSahzd94rSA==} + peerDependencies: + tslib: ^2.6.2 - '@types/eslint-scope@3.7.7': - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + '@trezor/protobuf@1.5.2': + resolution: {integrity: sha512-zViaL1jKue8DUTVEDg0C/lMipqNMd/Z3kr29/+MeZOoupjaXIQ2Lqp3WAMe8hvNTKKX8aNQH9JrbapJ6w9FMXw==} + peerDependencies: + tslib: ^2.6.2 - '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@trezor/protocol@1.3.0': + resolution: {integrity: sha512-rmrxbDrdgxTouBPbZcSeqU7ba/e5WVT1dxvxxEntHqRdTiDl7d3VK+BErCrlyol8EH5YCqEF3/rXt0crSOfoFw==} + peerDependencies: + tslib: ^2.6.2 - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@trezor/schema-utils@1.4.0': + resolution: {integrity: sha512-K7upSeh7VDrORaIC4KAxYVW93XNlohmUnH5if/5GKYmTdQSRp1nBkO6Jm+Z4hzIthdnz/1aLgnbeN3bDxWLRxA==} + peerDependencies: + tslib: ^2.6.2 + + '@trezor/transport@1.6.2': + resolution: {integrity: sha512-w0HlD1fU+qTGO3tefBGHF/YS/ts/TWFja9FGIJ4+7+Z9NphvIG06HGvy2HzcD9AhJy9pvDeIsyoM2TTZTiyjkQ==} + peerDependencies: + tslib: ^2.6.2 + + '@trezor/type-utils@1.2.0': + resolution: {integrity: sha512-+E2QntxkyQuYfQQyl8RvT01tq2i5Dp/LFUOXuizF+KVOqsZBjBY43j5hewcCO3+MokD7deDiPyekbUEN5/iVlw==} + + '@trezor/utils@9.5.0': + resolution: {integrity: sha512-kdyMyDbxzvOZmwBNvTjAK+C/kzyOz8T4oUbFvq+KaXn5mBFf1uf8rq5X2HkxgdYRPArtHS3PxLKsfkNCdhCYtQ==} + peerDependencies: + tslib: ^2.6.2 + + '@trezor/utxo-lib@2.5.0': + resolution: {integrity: sha512-Fa2cZh0037oX6AHNLfpFIj65UR/OoX0ZJTocFuQASe77/1PjZHysf6BvvGfmzuFToKfrAQ+DM/1Sx+P/vnyNmA==} + peerDependencies: + tslib: ^2.6.2 + + '@trezor/websocket-client@1.3.0': + resolution: {integrity: sha512-9KQSaVc3NtmM6rFFj1e+9bM0C5mVKVidbnxlfzuBJu7G2YMRdIdLPcAXhvmRZjs40uzDuBeApK+p547kODz2ug==} + peerDependencies: + tslib: ^2.6.2 + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@twind/core@1.1.3': + resolution: {integrity: sha512-/B/aNFerMb2IeyjSJy3SJxqVxhrT77gBDknLMiZqXIRr4vNJqiuhx7KqUSRzDCwUmyGuogkamz+aOLzN6MeSLw==} + engines: {node: '>=14.15.0'} + peerDependencies: + typescript: ^4.8.4 + peerDependenciesMeta: + typescript: + optional: true + + '@twind/preset-autoprefix@1.0.7': + resolution: {integrity: sha512-3wmHO0pG/CVxYBNZUV0tWcL7CP0wD5KpyWAQE/KOalWmOVBj+nH6j3v6Y3I3pRuMFaG5DC78qbYbhA1O11uG3w==} + engines: {node: '>=14.15.0'} + peerDependencies: + '@twind/core': ^1.1.0 + typescript: ^4.8.4 + peerDependenciesMeta: + typescript: + optional: true + + '@twind/preset-tailwind@1.1.4': + resolution: {integrity: sha512-zv85wrP/DW4AxgWrLfH7kyGn/KJF3K04FMLVl2AjoxZGYdCaoZDkL8ma3hzaKQ+WGgBFRubuB/Ku2Rtv/wjzVw==} + engines: {node: '>=14.15.0'} + peerDependencies: + '@twind/core': ^1.1.0 + typescript: ^4.8.4 + peerDependenciesMeta: + typescript: + optional: true + + '@tybys/wasm-util@0.10.0': + resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + + '@types/body-parser@1.19.6': + resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/cookiejar@2.1.5': + resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==} + + '@types/crypto-js@4.2.2': + resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==} + + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} + + '@types/docker-modem@3.0.6': + resolution: {integrity: sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==} + + '@types/dockerode@4.0.1': + resolution: {integrity: sha512-cmUpB+dPN955PxBEuXE3f6lKO1hHiIGYJA46IVF3BJpNsZGvtBDcRnlrHYHtOH/B6vtDOyl2kZ2ShAu3mgc27Q==} + + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/express-serve-static-core@5.0.7': resolution: {integrity: sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==} @@ -2879,6 +3477,9 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + '@types/node@18.19.130': resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} @@ -2938,9 +3539,24 @@ packages: '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/uuid@10.0.0': + resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} + '@types/validator@13.15.3': resolution: {integrity: sha512-7bcUmDyS6PN3EuD9SlGGOxM77F8WLVsrwkxyWxKnxzmXoequ6c7741QBrANq6htVRGOITJ7z72mTP6Z4XyuG+Q==} + '@types/w3c-web-usb@1.0.14': + resolution: {integrity: sha512-Qu3Nn6JFuF4+sHKYl+IcX9vYiI40ogleXzFFSxoE1W94rG98o/kXs8uJ0QSfFzuwBCZWlGfUGpPkgwuuX4PchA==} + + '@types/web@0.0.197': + resolution: {integrity: sha512-V4sOroWDADFx9dLodWpKm298NOJ1VJ6zoDVgaP+WBb/utWxqQ6gnMzd9lvVDAr/F3ibiKaxH9i45eS0gQPSTaQ==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -3140,6 +3756,18 @@ packages: typescript: optional: true + '@wallet-standard/base@1.1.0': + resolution: {integrity: sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ==} + engines: {node: '>=16'} + + '@wallet-standard/features@1.1.0': + resolution: {integrity: sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg==} + engines: {node: '>=16'} + + '@wallet-standard/wallet@1.1.0': + resolution: {integrity: sha512-Gt8TnSlDZpAl+RWOOAB/kuvC7RpcdWAlFbHNoi4gsXsfaWa1QCT6LBcfIYTPdOZC9OVZUDwqGuGAcqZejDmHjg==} + engines: {node: '>=16'} + '@walletconnect/core@2.21.0': resolution: {integrity: sha512-o6R7Ua4myxR8aRUAJ1z3gT9nM+jd2B2mfamu6arzy1Cc6vi10fIwFWb6vg3bC8xJ6o9H3n/cN5TOW3aA9Y1XVw==} engines: {node: '>=18'} @@ -3148,6 +3776,14 @@ packages: resolution: {integrity: sha512-Tp4MHJYcdWD846PH//2r+Mu4wz1/ZU/fr9av1UWFiaYQ2t2TPLDiZxjLw54AAEpMqlEHemwCgiRiAmjR1NDdTQ==} engines: {node: '>=18'} + '@walletconnect/core@2.23.0': + resolution: {integrity: sha512-W++xuXf+AsMPrBWn1It8GheIbCTp1ynTQP+aoFB86eUwyCtSiK7UQsn/+vJZdwElrn+Ptp2A0RqQx2onTMVHjQ==} + engines: {node: '>=18.20.8'} + + '@walletconnect/core@2.23.7': + resolution: {integrity: sha512-yTyymn9mFaDZkUfLfZ3E9VyaSDPeHAXlrPxQRmNx2zFsEt/25GmTU2A848aomimLxZnAG2jNLhxbJ8I0gyNV+w==} + engines: {node: '>=18.20.8'} + '@walletconnect/environment@1.0.1': resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} @@ -3187,6 +3823,12 @@ packages: '@walletconnect/logger@2.1.2': resolution: {integrity: sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw==} + '@walletconnect/logger@3.0.0': + resolution: {integrity: sha512-DDktPBFdmt5d7U3sbp4e3fQHNS1b6amsR8FmtOnt6L2SnV7VfcZr8VmAGL12zetAR+4fndegbREmX0P8Mw6eDg==} + + '@walletconnect/logger@3.0.2': + resolution: {integrity: sha512-7wR3wAwJTOmX4gbcUZcFMov8fjftY05+5cO/d4cpDD8wDzJ+cIlKdYOXaXfxHLSYeDazMXIsxMYjHYVDfkx+nA==} + '@walletconnect/relay-api@1.0.11': resolution: {integrity: sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q==} @@ -3204,6 +3846,12 @@ packages: resolution: {integrity: sha512-QaXzmPsMnKGV6tc4UcdnQVNOz4zyXgarvdIQibJ4L3EmLat73r5ZVl4c0cCOcoaV7rgM9Wbphgu5E/7jNcd3Zg==} deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' + '@walletconnect/sign-client@2.23.0': + resolution: {integrity: sha512-Nzf5x/LnQgC0Yjk0NmkT8kdrIMcScpALiFm9gP0n3CulL+dkf3HumqWzdoTmQSqGPxwHu/TNhGOaRKZLGQXSqw==} + + '@walletconnect/sign-client@2.23.7': + resolution: {integrity: sha512-SX61lzb1bTl/LijlcHQttnoHPBzzoY5mW9ArR6qhFtDNDTS7yr2rcH7rCngxHlYeb4rAYcWLHgbiGSrdKxl/mg==} + '@walletconnect/time@1.0.2': resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} @@ -3213,6 +3861,15 @@ packages: '@walletconnect/types@2.21.1': resolution: {integrity: sha512-UeefNadqP6IyfwWC1Yi7ux+ljbP2R66PLfDrDm8izmvlPmYlqRerJWJvYO4t0Vvr9wrG4Ko7E0c4M7FaPKT/sQ==} + '@walletconnect/types@2.23.0': + resolution: {integrity: sha512-9ZEOJyx/kNVCRncDHh3Qr9eH7Ih1dXBFB4k1J8iEudkv3t4GhYpXhqIt2kNdQWluPb1BBB4wEuckAT96yKuA8g==} + + '@walletconnect/types@2.23.7': + resolution: {integrity: sha512-6PAKK+iR2IntmlkCFLMAHjYeIaerCJJYRDmdRimhon0u+aNmQT+HyGM6zxDAth0rdpBD7qEvKP5IXZTE7KFUhw==} + + '@walletconnect/types@2.23.9': + resolution: {integrity: sha512-IUl1PpD/Dig8IE2OZ9XtjbPohEyOZJ73xs92EDUzoIyzRtfm36g2D340pY3iu3AAdLv1yFiaZafB8Hf8RFze8A==} + '@walletconnect/universal-provider@2.21.0': resolution: {integrity: sha512-mtUQvewt+X0VBQay/xOJBvxsB3Xsm1lTwFjZ6WUwSOTR1X+FNb71hSApnV5kbsdDIpYPXeQUbGt2se1n5E5UBg==} deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' @@ -3221,12 +3878,21 @@ packages: resolution: {integrity: sha512-Wjx9G8gUHVMnYfxtasC9poGm8QMiPCpXpbbLFT+iPoQskDDly8BwueWnqKs4Mx2SdIAWAwuXeZ5ojk5qQOxJJg==} deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' + '@walletconnect/universal-provider@2.23.7': + resolution: {integrity: sha512-6UicU/Mhr/1bh7MNoajypz7BhigORbHpP1LFTf8FYLQGDqzmqHMqmMH2GDAImtaY2sFTi2jBvc22tLl8VMze/A==} + '@walletconnect/utils@2.21.0': resolution: {integrity: sha512-zfHLiUoBrQ8rP57HTPXW7rQMnYxYI4gT9yTACxVW6LhIFROTF6/ytm5SKNoIvi4a5nX5dfXG4D9XwQUCu8Ilig==} '@walletconnect/utils@2.21.1': resolution: {integrity: sha512-VPZvTcrNQCkbGOjFRbC24mm/pzbRMUq2DSQoiHlhh0X1U7ZhuIrzVtAoKsrzu6rqjz0EEtGxCr3K1TGRqDG4NA==} + '@walletconnect/utils@2.23.0': + resolution: {integrity: sha512-bVyv4Hl+/wVGueZ6rEO0eYgDy5deSBA4JjpJHAMOdaNoYs05NTE1HymV2lfPQQHuqc7suYexo9jwuW7i3JLuAA==} + + '@walletconnect/utils@2.23.7': + resolution: {integrity: sha512-3p38gNrkVcIiQixVrlsWSa66Gjs5PqHOug2TxDgYUVBW5NcKjwQA08GkC6CKBQUfr5iaCtbfy6uZJW1LKSIvWQ==} + '@walletconnect/window-getters@1.0.1': resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==} @@ -3278,6 +3944,13 @@ packages: '@webassemblyjs/wast-printer@1.14.1': resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + '@xrplf/isomorphic@1.0.1': + resolution: {integrity: sha512-0bIpgx8PDjYdrLFeC3csF305QQ1L7sxaWnL5y71mCvhenZzJgku9QsA+9QCXBC1eNYtxWO/xR91zrXJy2T/ixg==} + engines: {node: '>=16.0.0'} + + '@xrplf/secret-numbers@2.0.0': + resolution: {integrity: sha512-z3AOibRTE9E8MbjgzxqMpG1RNaBhQ1jnfhNCa1cGf2reZUJzPMYs4TggQTc7j8+0WyV3cr7y/U8Oz99SXIkN5Q==} + '@xtuc/ieee754@1.2.0': resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -3364,6 +4037,14 @@ packages: aes-js@4.0.0-beta.5: resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -3503,6 +4184,9 @@ packages: asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + asn1.js@4.10.1: + resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} + asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} @@ -3641,6 +4325,9 @@ packages: bare-url@2.4.0: resolution: {integrity: sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA==} + base-x@3.0.11: + resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} + base-x@5.0.1: resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} @@ -3663,6 +4350,13 @@ packages: bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + bech32@2.0.0: + resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} + + big-integer@1.6.36: + resolution: {integrity: sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg==} + engines: {node: '>=0.6'} + big.js@6.2.2: resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} @@ -3672,9 +4366,31 @@ packages: bignumber.js@9.3.1: resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bip32-path@0.4.2: + resolution: {integrity: sha512-ZBMCELjJfcNMkz5bDuJ1WrYvjlhEF5k6mQ8vUr4N7MbVRsXei7ZOg8VhhwMfNiW68NWmLkgkc6WvTickrLGprQ==} + + bip66@2.0.0: + resolution: {integrity: sha512-kBG+hSpgvZBrkIm9dt5T1Hd/7xGCPEX2npoxAWZfsK1FvjgaxySEh2WizjyIstWXriKo9K9uJ4u0OnsyLDUPXQ==} + + bitcoin-ops@1.4.1: + resolution: {integrity: sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==} + bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + blake-hash@2.0.0: + resolution: {integrity: sha512-Igj8YowDu1PRkRsxZA7NVkdFNxH5rKv5cpLxQ0CVXSIA77pVYwCPRQJ2sMew/oneUpfuYRyjG6r8SmmmnbZb1w==} + engines: {node: '>= 10'} + + blakejs@1.2.1: + resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} + + bn.js@4.12.3: + resolution: {integrity: sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==} + bn.js@5.2.3: resolution: {integrity: sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==} @@ -3682,6 +4398,15 @@ packages: resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} engines: {node: '>=18'} + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + borsh@1.0.0: + resolution: {integrity: sha512-fSVWzzemnyfF89EPwlUNsrS5swF5CrtiN4e+h0/lLf4dz2he4L3ndM20PS9wj7ICSkXJe/TQUHdaPTq15b1mNQ==} + + borsh@2.0.0: + resolution: {integrity: sha512-kc9+BgR3zz9+cjbwM8ODoUB4fs3X3I5A/HtX7LZKxCLaMrEeDFoBpnhZY//DTS1VZBSs6S5v46RZRbZjRFspEg==} + bowser@2.14.1: resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} @@ -3699,9 +4424,29 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + browser-level@3.0.0: resolution: {integrity: sha512-kGXtLh29jMwqKaskz5xeDLtCtN1KBz/DbQSqmvH7QdJiyGRC7RAM8PPg6gvUiNMa+wVnaxS9eSmEtP/f5ajOVw==} + browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + + browserify-cipher@1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + + browserify-des@1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + + browserify-rsa@4.1.1: + resolution: {integrity: sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==} + engines: {node: '>= 0.10'} + + browserify-sign@4.2.5: + resolution: {integrity: sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==} + engines: {node: '>= 0.10'} + browserslist@4.28.2: resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -3711,9 +4456,15 @@ packages: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + bs58@6.0.0: resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + bs58check@4.0.0: + resolution: {integrity: sha512-FsGDOnFg9aVI9erdriULkd/JjEWONV/lQE5aYziB5PoBsXRind56lh8doIZIc9X4HoxT5x4bLjMWN1/NB8Zp5g==} + bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -3730,6 +4481,9 @@ packages: buffer-reverse@1.0.1: resolution: {integrity: sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==} + buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} @@ -3794,10 +4548,17 @@ packages: caniuse-lite@1.0.30001787: resolution: {integrity: sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg==} + cashaddrjs@0.4.4: + resolution: {integrity: sha512-xZkuWdNOh0uq/mxJIng6vYWfTowZLd9F4GMAlp2DwFHlcCqCm91NtuAc47RuV4L7r4PYcY5p6Cr2OKNb4hnkWA==} + catering@2.1.1: resolution: {integrity: sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==} engines: {node: '>=6'} + cbor@10.0.12: + resolution: {integrity: sha512-exQDevYd7ZQLP4moMQcZkKCVZsXLAtUSflObr3xTh4xzFIv/xBCdvCd6L259kQOUP2kcTC0jvC6PpZIf/WmRXA==} + engines: {node: '>=20'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -3839,6 +4600,10 @@ packages: resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} engines: {node: '>=8'} + cipher-base@1.0.7: + resolution: {integrity: sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==} + engines: {node: '>= 0.10'} + citty@0.1.6: resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} @@ -4044,6 +4809,15 @@ packages: resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} engines: {node: '>= 14'} + create-ecdh@4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + + create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + + create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} @@ -4063,6 +4837,9 @@ packages: crypt@0.0.2: resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + crypto-browserify@3.12.0: + resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} + crypto-js@4.2.0: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} @@ -4214,10 +4991,18 @@ packages: defu@6.1.7: resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -4227,12 +5012,18 @@ packages: peerDependencies: valtio: '*' + des.js@1.1.0: + resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} + destr@2.0.5: resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} detect-browser@5.3.0: resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} + detect-europe-js@0.1.2: + resolution: {integrity: sha512-lgdERlL3u0aUdHocoouzT10d9I89VVhk0qNRmll7mXdGfJT1/wqZ2ZLA4oJAjeACPY5fT1wsbq2AT+GkuInsow==} + detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -4251,6 +5042,9 @@ packages: resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} engines: {node: '>=0.3.1'} + diffie-hellman@5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + dijkstrajs@1.0.3: resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} @@ -4308,6 +5102,9 @@ packages: electron-to-chromium@1.5.335: resolution: {integrity: sha512-q9n5T4BR4Xwa2cwbrwcsDJtHD/enpQ5S1xF1IAtdqf5AAgqDFmR/aakqH3ChFdqd/QXJhS3rnnXFtexU7rax6Q==} + elliptic@6.6.1: + resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} + emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} @@ -4391,6 +5188,18 @@ packages: es-toolkit@1.33.0: resolution: {integrity: sha512-X13Q/ZSc+vsO1q600bvNK4bxgXMkHcf//RxCmYDaRY5DAcT+eoXjY5hoAPGMdRnWQjvyLEcyauG3b6hz76LNqg==} + es-toolkit@1.39.3: + resolution: {integrity: sha512-Qb/TCFCldgOy8lZ5uC7nLGdqJwSabkQiYQShmw4jyiPk1pZzaYWTwaYKYP7EgLccWYgZocMrtItrwh683voaww==} + + es-toolkit@1.44.0: + resolution: {integrity: sha512-6penXeZalaV88MM3cGkFZZfOoLGWshWWfdy0tWw/RlVVyhvMaWSBTOvXNeiW3e5FwdS5ePW0LGEu17zT139ktg==} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + esbuild@0.27.7: resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} engines: {node: '>=18'} @@ -4617,6 +5426,9 @@ packages: resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==} engines: {node: '>=12.0.0'} + evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -4637,6 +5449,9 @@ packages: resolution: {integrity: sha512-1zQrciTiQfRdo7qJM1uG4navm8DayFa2TgCSRlzUyNkhcJ6XUZF3hjnpkyr3VhAqPH7i/9GkG7Tv5abz6fqz0Q==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + exponential-backoff@3.1.3: + resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} + express@5.2.1: resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} @@ -4648,6 +5463,10 @@ packages: resolution: {integrity: sha512-an2S5quJMiy5bnZKEf6AkfH/7r8CzHvhchU40gxN+OM6HPhe7Z9T1FUychcf2M9PpPOO0Hf7BAEfJkw2TDIBDw==} engines: {node: '>=12.0.0'} + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + fast-check@3.23.2: resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} engines: {node: '>=8.0.0'} @@ -4678,9 +5497,15 @@ packages: fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -4717,6 +5542,9 @@ packages: resolution: {integrity: sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==} engines: {node: '>=20'} + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -4819,6 +5647,12 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + generate-function@2.3.1: + resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} + + generate-object-property@1.2.0: + resolution: {integrity: sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==} + generator-function@2.0.1: resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} engines: {node: '>= 0.4'} @@ -4951,6 +5785,13 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} + hash-base@3.1.2: + resolution: {integrity: sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==} + engines: {node: '>= 0.8'} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + hashery@1.5.1: resolution: {integrity: sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==} engines: {node: '>=20'} @@ -4969,6 +5810,9 @@ packages: resolution: {integrity: sha512-B2q2b6P/tZsKJXgbCHvgcsYlsHBTNvfoAiNJ+XzsS0fudEbOU7f3sig924IBfDHqdLrObsiXWfHzuHW1x+MxQQ==} engines: {node: '>=0.10'} + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + hono@4.12.12: resolution: {integrity: sha512-p1JfQMKaceuCbpJKAPKVqyqviZdS0eUxH9v82oWo1kb9xjQ5wA6iP3FNVAPDFlz5/p7d45lO+BpSk1tuSZMF4Q==} engines: {node: '>=16.9.0'} @@ -4976,9 +5820,16 @@ packages: hookified@1.15.1: resolution: {integrity: sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==} + htm@3.1.1: + resolution: {integrity: sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + http-errors@1.7.2: + resolution: {integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==} + engines: {node: '>= 0.6'} + http-errors@2.0.1: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} @@ -4991,6 +5842,9 @@ packages: resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} engines: {node: '>=18.18.0'} + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + iconv-lite@0.7.2: resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} @@ -5029,13 +5883,23 @@ packages: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + int64-buffer@1.1.0: + resolution: {integrity: sha512-94smTCQOvigN4d/2R/YDjz8YVG0Sufvv2aAh8P5m42gwhCsDAJqnbNOrxJsrADuAFAA69Q/ptGzxvNcNuIJcvw==} + internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} + ip-address@10.1.0: + resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} + engines: {node: '>= 12'} + ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -5124,6 +5988,12 @@ packages: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} + is-my-ip-valid@1.0.1: + resolution: {integrity: sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==} + + is-my-json-valid@2.20.6: + resolution: {integrity: sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==} + is-negative-zero@2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} @@ -5143,6 +6013,9 @@ packages: is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-property@1.0.2: + resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -5163,6 +6036,9 @@ packages: resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} + is-standalone-pwa@0.1.1: + resolution: {integrity: sha512-9Cbovsa52vNQCjdXOzeQq5CnCbAcRk05aU62K20WO372NrTv0NxibLFCK6lQ4/iZEFdEA3p3t2VNOn8AJ53F5g==} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -5212,6 +6088,11 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + isows@1.0.6: resolution: {integrity: sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw==} peerDependencies: @@ -5253,6 +6134,11 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jayson@4.3.0: + resolution: {integrity: sha512-AauzHcUcqs8OBnCHOkJY280VaTiCm57AbuO7lqzcw7JapGj50BisE3xhksye4zlTSR1+1tAz67wLTl8tEH1obQ==} + engines: {node: '>=8'} + hasBin: true + jest-changed-files@30.3.0: resolution: {integrity: sha512-B/7Cny6cV5At6M25EWDgf9S617lHivamL8vl6KEpJqkStauzcG4e+WPfDgMMF+H4FVH4A2PLRyvgDJan4441QA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -5419,6 +6305,12 @@ packages: resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} engines: {node: '>=14'} + js-sha256@0.11.1: + resolution: {integrity: sha512-o6WSo/LUvY2uC4j7mO50a2ms7E/EAdbP0swigLV+nzHKTTaYnaLIWJ02VdXrsJX0vGedDESQnLsOekr94ryfjg==} + + js-sha256@0.9.0: + resolution: {integrity: sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==} + js-sha3@0.9.3: resolution: {integrity: sha512-BcJPCQeLg6WjEx3FE591wVAevlli8lxsxm9/FzV4HXkV49TmBH38Yvrpce6fjbADGMKFrBMGTqrVz3qPIZ88Gg==} @@ -5460,6 +6352,9 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + json2mq@0.2.0: resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==} @@ -5478,6 +6373,10 @@ packages: jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + jsonwebtoken@9.0.3: resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} engines: {node: '>=12', npm: '>=6'} @@ -5702,6 +6601,9 @@ packages: resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} engines: {node: '>= 12.0.0'} + long@5.2.5: + resolution: {integrity: sha512-e0r9YBBgNCq1D1o5Dp8FMH0N5hsFtXDBiVa0qoJPHpakvZkmDKPRoGffZJII/XsHvj9An9blm+cRJ01yQqU+Dw==} + long@5.3.2: resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} @@ -5723,6 +6625,9 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} + lru_map@0.4.1: + resolution: {integrity: sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg==} + lucide-react@1.8.0: resolution: {integrity: sha512-WuvlsjngSk7TnTBJ1hsCy3ql9V9VOdcPkd3PKcSmM34vJD8KG6molxz7m7zbYFgICwsanQWmJ13JlYs4Zp7Arw==} peerDependencies: @@ -5756,6 +6661,9 @@ packages: resolution: {integrity: sha512-eefp6IduNPT6fVdwPp+1NgD0PML1NU5P6j1Mj5nz1nidX8/sWY7119WL8vTAHgqfsY74TzW0w1XPgdYEKkGZ5A==} engines: {node: '>=10'} + md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + md5@2.3.0: resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} @@ -5800,6 +6708,10 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + miller-rabin@4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -5825,6 +6737,12 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} @@ -5900,6 +6818,11 @@ packages: multiformats@9.9.0: resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} + mustache@4.0.0: + resolution: {integrity: sha512-FJgjyX/IVkbXBXYUwH+OYwQKqWpFPLaLVESd70yHjSDunwzV2hZOoTBvPf4KLoxesUzzyfTH6F784Uqd7Wm5yA==} + engines: {npm: '>=1.4.0'} + hasBin: true + mute-stream@2.0.0: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} @@ -5923,6 +6846,12 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + near-abi@0.2.0: + resolution: {integrity: sha512-kCwSf/3fraPU2zENK18sh+kKG4uKbEUEQdyWQkmW8ZofmLarObIz2+zAYjA1teDZLeMvEQew3UysnPDXgjneaA==} + + near-api-js@5.1.1: + resolution: {integrity: sha512-h23BGSKxNv8ph+zU6snicstsVK1/CTXsQz4LuGGwoRE24Hj424nSe4+/1tzoiC285Ljf60kPAqRCmsfv9etF2g==} + negotiator@1.0.0: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} @@ -5983,6 +6912,16 @@ packages: node-addon-api@2.0.2: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + node-addon-api@3.2.1: + resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} + + node-addon-api@5.1.0: + resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} + + node-addon-api@8.7.0: + resolution: {integrity: sha512-9MdFxmkKaOYVTV+XVRG8ArDwwQ77XIgIPyKASB1k3JPq3M8fGQQQE3YpMOrKm6g//Ktx8ivZr8xo1Qmtqub+GA==} + engines: {node: ^18 || ^20 || >= 21} + node-emoji@1.11.0: resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} @@ -5993,6 +6932,15 @@ packages: node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -6019,6 +6967,10 @@ packages: node-releases@2.0.37: resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} + nofilter@3.1.0: + resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==} + engines: {node: '>=12.19'} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -6091,6 +7043,10 @@ packages: on-exit-leak-free@0.2.0: resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + on-finished@2.3.0: resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} engines: {node: '>= 0.8'} @@ -6166,6 +7122,14 @@ packages: typescript: optional: true + ox@0.9.3: + resolution: {integrity: sha512-KzyJP+fPV4uhuuqrTZyok4DC7vFzi7HLUFiUNEmpbyh59htKWkOC98IONC1zgXJPbHAhQgqs6B0Z6StCGhmQvg==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -6196,6 +7160,10 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-asn1@5.1.9: + resolution: {integrity: sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==} + engines: {node: '>= 0.10'} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -6245,6 +7213,10 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pbkdf2@3.1.5: + resolution: {integrity: sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==} + engines: {node: '>= 0.10'} + perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} @@ -6266,9 +7238,19 @@ packages: pino-abstract-transport@0.5.0: resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} + pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + pino-std-serializers@4.0.0: resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} + pino-std-serializers@7.1.0: + resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==} + + pino@10.0.0: + resolution: {integrity: sha512-eI9pKwWEix40kfvSzqEP6ldqOoBIN7dwD/o91TY5z8vQI12sAffpR/pOqAD1IVVwIVHDpHjkq0joBPdJD0rafA==} + hasBin: true + pino@7.11.0: resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} hasBin: true @@ -6395,6 +7377,9 @@ packages: process-warning@1.0.0: resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} + process-warning@5.0.0: + resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} + process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -6412,6 +7397,10 @@ packages: resolution: {integrity: sha512-WPn+h9RGEExOKdu4bsF4HksG/uzd3cFq3MFtq8PsFeExPse5Ha/VOjQNyHhjboBFwGXGev6muJYTSPAOkROq2g==} engines: {node: '>=18'} + protobufjs@7.4.0: + resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} + engines: {node: '>=12.0.0'} + protobufjs@7.5.4: resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} engines: {node: '>=12.0.0'} @@ -6426,10 +7415,16 @@ packages: proxy-compare@2.6.0: resolution: {integrity: sha512-8xuCeM3l8yqdmbPoYeLbrAXCBWu19XEYc5/F28f5qOaoAIMyfmBUkl5axiK+x9olUvRlcekvnm98AP9RDngOIw==} + proxy-compare@3.0.1: + resolution: {integrity: sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q==} + proxy-from-env@2.1.0: resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} engines: {node: '>=10'} + public-encrypt@4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + pump@3.0.4: resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} @@ -6443,6 +7438,9 @@ packages: pure-rand@7.0.1: resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==} + pushdata-bitcoin@1.0.1: + resolution: {integrity: sha512-hw7rcYTJRAl4olM8Owe8x0fBuJJ+WGbMhQuLWOXEMN3PxPCKQHRkhfL+XG0+iXUmSHjkMmb3Ba55Mt21cZc9kQ==} + qr@0.5.5: resolution: {integrity: sha512-iQBvKj7MRKO+co+MY0IZpyLO+ezvttxsmV86WywrgPuAmgBkv0pytyi03wourniSoPgzffeBW6cBgIkpqcvjTg==} engines: {node: '>= 20.19.0'} @@ -6472,6 +7470,9 @@ packages: randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + randomfill@1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -6791,6 +7792,10 @@ packages: resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} engines: {node: '>= 12.13.0'} + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + reflect-metadata@0.2.2: resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} @@ -6848,10 +7853,29 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + ripemd160@2.0.3: + resolution: {integrity: sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==} + engines: {node: '>= 0.8'} + + ripple-address-codec@5.0.0: + resolution: {integrity: sha512-de7osLRH/pt5HX2xw2TRJtbdLLWHu0RXirpQaEeCnWKY5DYHykh3ETSkofvm0aX0LJiV7kwkegJxQkmbO94gWw==} + engines: {node: '>= 16'} + + ripple-binary-codec@2.7.0: + resolution: {integrity: sha512-gEBqan5muVp+q7jgZ6aUniSyN+e4FKRzn9uFAeFSIW7IgvkezP1cUolNtpahQ+jvaSK/33hxZA7wNmn1mc330g==} + engines: {node: '>= 18'} + + ripple-keypairs@2.0.0: + resolution: {integrity: sha512-b5rfL2EZiffmklqZk1W+dvSy97v3V/C7936WxCCgDynaGPp7GE6R2XO7EU9O2LlM/z95rj870IylYnOQs+1Rag==} + engines: {node: '>= 16'} + router@2.2.0: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} + rpc-websockets@9.3.8: + resolution: {integrity: sha512-7r+fm4tSJmLf9GvZfL1DJ1SJwpagpp6AazqM0FUaeV7CA+7+NYINSk1syWa4tU/6OF2CyBicLtzENGmXRJH6wQ==} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -6900,10 +7924,19 @@ packages: scroll-into-view-if-needed@3.1.0: resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + secp256k1@5.0.1: + resolution: {integrity: sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA==} + engines: {node: '>=18.0.0'} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + semver@7.7.2: resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} @@ -6937,6 +7970,9 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} + setprototypeof@1.1.1: + resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==} + setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -6945,6 +7981,9 @@ packages: engines: {node: '>= 0.10'} hasBin: true + sha1@1.1.1: + resolution: {integrity: sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==} + sharp@0.34.5: resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -6992,6 +8031,13 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + slow-redact@0.3.2: + resolution: {integrity: sha512-MseHyi2+E/hBRqdOi5COy6wZ7j7DxXRz9NkseavNYSvvWC06D8a5cidVZX3tcG5eCW3NIyVU4zT63hw0Q486jw==} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + socket.io-client@4.8.3: resolution: {integrity: sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==} engines: {node: '>=10.0.0'} @@ -7000,9 +8046,20 @@ packages: resolution: {integrity: sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==} engines: {node: '>=10.0.0'} + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} + engines: {node: '>= 14'} + + socks@2.8.7: + resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + sonic-boom@2.8.0: resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} + sonic-boom@4.2.1: + resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} + sonner@2.0.7: resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} peerDependencies: @@ -7062,6 +8119,10 @@ packages: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + statuses@2.0.2: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} @@ -7070,6 +8131,15 @@ packages: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} + stream-browserify@3.0.0: + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + + stream-chain@2.2.5: + resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} + + stream-json@1.9.1: + resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==} + stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} @@ -7160,6 +8230,9 @@ packages: resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} engines: {node: '>=18'} + style-vendorizer@2.2.3: + resolution: {integrity: sha512-/VDRsWvQAgspVy9eATN3z6itKTuyg+jW1q6UoTCQCFRqPDw8bi3E1hXIKnGw5LvXS2AQPuJ7Af4auTLYeBOLEg==} + styled-jsx@5.1.6: resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} engines: {node: '>= 12.0.0'} @@ -7184,6 +8257,10 @@ packages: resolution: {integrity: sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==} engines: {node: '>=14.0.0'} + superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + supertest@7.2.2: resolution: {integrity: sha512-oK8WG9diS3DlhdUkcFn4tkNIiIbBx9lI2ClF8K+b2/m8Eyv47LSawxUzZQSNKUrVb2KsqeTDCcjAAVPYaSLVTA==} engines: {node: '>=14.18.0'} @@ -7277,16 +8354,26 @@ packages: text-decoder@1.2.7: resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} thread-stream@0.15.2: resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} + thread-stream@3.1.0: + resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + throttle-debounce@5.0.2: resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} engines: {node: '>=12.22'} + tiny-secp256k1@1.1.7: + resolution: {integrity: sha512-eb+F6NabSnjbLwNoC+2o5ItbmP1kg7HliWue71JgLegQt6A5mTN8YbvTLCazdlg6e5SV6A+r8OGvZYskdlmhqQ==} + engines: {node: '>=6.0.0'} + tinyexec@1.0.1: resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} @@ -7312,6 +8399,10 @@ packages: toggle-selection@1.0.6: resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + toidentifier@1.0.0: + resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==} + engines: {node: '>=0.6'} + toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} @@ -7374,6 +8465,9 @@ packages: typescript: '*' webpack: ^5.0.0 + ts-mixer@6.0.4: + resolution: {integrity: sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==} + ts-node@10.9.2: resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true @@ -7416,9 +8510,15 @@ packages: tw-animate-css@1.4.0: resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} + tweetnacl-util@0.15.1: + resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} + tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -7462,6 +8562,9 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + typeforce@1.18.0: + resolution: {integrity: sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==} + typescript-eslint@8.58.1: resolution: {integrity: sha512-gf6/oHChByg9HJvhMO1iBexJh12AqqTfnuxscMDOVqfJW3htsdRJI/GfPpHTTcyeB8cSTUY2JcZmVgoyPqcrDg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -7474,10 +8577,17 @@ packages: engines: {node: '>=14.17'} hasBin: true + ua-is-frozen@0.1.2: + resolution: {integrity: sha512-RwKDW2p3iyWn4UbaxpP2+VxwqXh0jpvdxsYpZ5j/MLLiQOfbsV5shpgQiw93+KMYQPcteeMQ289MaAFzs3G9pw==} + ua-parser-js@1.0.41: resolution: {integrity: sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==} hasBin: true + ua-parser-js@2.0.9: + resolution: {integrity: sha512-OsqGhxyo/wGdLSXMSJxuMGN6H4gDnKz6Fb3IBm4bxZFMnyy0sdf6MN96Ie8tC6z/btdO+Bsy8guxlvLdwT076w==} + hasBin: true + ufo@1.6.3: resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} @@ -7494,9 +8604,16 @@ packages: resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} engines: {node: '>=18'} + uint8array-tools@0.0.8: + resolution: {integrity: sha512-xS6+s8e0Xbx++5/0L+yyexukU7pz//Yg6IHg3BKhXotg1JcYtgxVcUctQ0HxLByiJzpAkNFawz1Nz5Xadzo82g==} + engines: {node: '>=14.0.0'} + uint8arrays@3.1.0: resolution: {integrity: sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==} + uint8arrays@3.1.1: + resolution: {integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==} + unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} @@ -7616,6 +8733,10 @@ packages: urijs@1.19.11: resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==} + usb@2.17.0: + resolution: {integrity: sha512-UuFgrlglgDn5ll6d5l7kl3nDb2Yx43qLUGcDq+7UNLZLtbNug0HZBb2Xodhgx2JZB1LqvU+dOGqLEeYUeZqsHg==} + engines: {node: '>=12.22.0 <13.0 || >=14.17.0'} + use-callback-ref@1.3.3: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} @@ -7650,16 +8771,27 @@ packages: resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} engines: {node: '>=6.14.2'} + utf-8-validate@6.0.6: + resolution: {integrity: sha512-q3l3P9UtEEiAHcsgsqTgf9PPjctrDWoIXW3NpOHFdRDbLvu4DLIcxHangJ4RLrWkBcKjmcs/6NkerI8T/rE4LA==} + engines: {node: '>=6.14.2'} + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} util@0.12.5: resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + uuid4@2.0.3: + resolution: {integrity: sha512-CTpAkEVXMNJl2ojgtpLXHgz23dh8z81u6/HEPiQFOvBc/c2pde6TVHmH4uwY0d/GLF3tb7+VDAj4+2eJaQSdZQ==} + uuid@10.0.0: resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} hasBin: true + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + uuid@13.0.0: resolution: {integrity: sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==} hasBin: true @@ -7695,12 +8827,27 @@ packages: react: optional: true + valtio@2.1.7: + resolution: {integrity: sha512-DwJhCDpujuQuKdJ2H84VbTjEJJteaSmqsuUltsfbfdbotVfNeTE4K/qc/Wi57I9x8/2ed4JNdjEna7O6PfavRg==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=18.0.0' + react: '>=18.0.0' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + varint@5.0.0: resolution: {integrity: sha512-gC13b/bWrqQoKY2EmROCZ+AR0jitc6DnDGaQ6Ls9QpKmuSgJB1eQ7H3KETtQm7qSdMWMKCmsshyCmUwMLh3OAA==} varint@5.0.2: resolution: {integrity: sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==} + varuint-bitcoin@2.0.0: + resolution: {integrity: sha512-6QZbU/rHO2ZQYpWFDALCDSRsXbAs1VOEmXAxtbtjLtKuMJ/FQ8YbhfxlaiKv5nklci0M6lZtlZyxo9Q+qNnyog==} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -7793,6 +8940,9 @@ packages: engines: {node: '>= 8'} hasBin: true + wif@5.0.0: + resolution: {integrity: sha512-iFzrC/9ne740qFbNjTZ2FciSRJlHIXoxqk/Y5EnE08QOXu1WjJyCCswwDTYbohAOEnlCtLaAAQBhyaLRFh2hMA==} + winston-transport@4.9.0: resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} engines: {node: '>= 12.0.0'} @@ -7891,6 +9041,10 @@ packages: resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==} engines: {node: '>=0.4.0'} + xrpl@4.4.3: + resolution: {integrity: sha512-vi2OjuNkiaP8nv1j+nqHp8GZwwEjO6Y8+j/OuVMg6M4LwXEwyHdIj33dlg7cyY1Lw5+jb9HqFOQvABhaywVbTQ==} + engines: {node: '>=18.0.0'} + xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -8024,6 +9178,8 @@ snapshots: '@adraffy/ens-normalize@1.11.1': {} + '@albedo-link/intent@0.12.0': {} + '@alloc/quick-lru@5.2.0': {} '@angular-devkit/core@19.2.23(chokidar@4.0.3)': @@ -8350,16 +9506,16 @@ snapshots: '@balena/dockerignore@1.0.2': {} - '@base-org/account@2.4.0(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@4.3.6)': + '@base-org/account@2.4.0(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(zod@3.25.76)': dependencies: - '@coinbase/cdp-sdk': 1.47.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@coinbase/cdp-sdk': 1.47.0(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@6.0.6) '@noble/hashes': 1.4.0 clsx: 1.2.1 eventemitter3: 5.0.1 idb-keyval: 6.2.1 - ox: 0.6.9(typescript@5.9.3)(zod@4.3.6) + ox: 0.6.9(typescript@5.9.3)(zod@3.25.76) preact: 10.24.2 - viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) zustand: 5.0.3(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) transitivePeerDependencies: - '@types/react' @@ -8375,11 +9531,11 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@biconomy/account@4.5.7(typescript@5.9.3)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))': + '@biconomy/account@4.5.7(typescript@5.9.3)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.3.6))': dependencies: merkletreejs: 0.4.1 typescript: 5.9.3 - viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.3.6) '@borewit/text-codec@0.2.2': {} @@ -8388,18 +9544,18 @@ snapshots: hashery: 1.5.1 keyv: 5.6.0 - '@coinbase/cdp-sdk@1.47.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + '@coinbase/cdp-sdk@1.47.0(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@6.0.6)': dependencies: - '@solana-program/system': 0.10.0(@solana/kit@5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) - '@solana-program/token': 0.9.0(@solana/kit@5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) - '@solana/kit': 5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana-program/system': 0.10.0(@solana/kit@5.5.1(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@6.0.6)) + '@solana-program/token': 0.9.0(@solana/kit@5.5.1(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@6.0.6)) + '@solana/kit': 5.5.1(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@6.0.6) abitype: 1.0.6(typescript@5.9.3)(zod@3.25.76) axios: 1.15.0 axios-retry: 4.5.0(axios@1.15.0) jose: 6.2.2 md5: 2.3.0 uncrypto: 0.1.3 - viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) zod: 3.25.76 transitivePeerDependencies: - bufferutil @@ -8422,15 +9578,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@coinbase/wallet-sdk@4.3.6(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@4.3.6)': + '@coinbase/wallet-sdk@4.3.6(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(zod@3.25.76)': dependencies: '@noble/hashes': 1.4.0 clsx: 1.2.1 eventemitter3: 5.0.1 idb-keyval: 6.2.1 - ox: 0.6.9(typescript@5.9.3)(zod@4.3.6) + ox: 0.6.9(typescript@5.9.3)(zod@3.25.76) preact: 10.24.2 - viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) zustand: 5.0.3(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) transitivePeerDependencies: - '@types/react' @@ -8447,6 +9603,76 @@ snapshots: '@colors/colors@1.6.0': {} + '@creit.tech/stellar-wallets-kit@2.1.0(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(@stellar/stellar-sdk@15.0.1)(@trezor/connect@9.7.2(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(near-api-js@5.1.1)(react@19.1.0)(tslib@2.8.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@3.25.76)': + dependencies: + '@albedo-link/intent': 0.12.0 + '@creit.tech/xbull-wallet-connect': 0.4.0 + '@hot-wallet/sdk': 1.0.11(bufferutil@4.1.0)(near-api-js@5.1.1)(typescript@5.9.3)(utf-8-validate@6.0.6) + '@ledgerhq/hw-app-str': 7.2.8 + '@ledgerhq/hw-transport': 6.31.12 + '@ledgerhq/hw-transport-webusb': 6.29.12 + '@lobstrco/signer-extension-api': 2.0.0 + '@preact/signals': 2.9.0(preact@10.29.1) + '@reown/appkit': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(zod@3.25.76) + '@stellar/freighter-api': 6.0.0 + '@stellar/stellar-base': 14.0.1 + '@trezor/connect-plugin-stellar': 9.2.6(@stellar/stellar-sdk@15.0.1)(@trezor/connect@9.7.2(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(tslib@2.8.1) + '@trezor/connect-web': 9.7.2(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@twind/core': 1.1.3(typescript@5.9.3) + '@twind/preset-autoprefix': 1.0.7(@twind/core@1.1.3(typescript@5.9.3))(typescript@5.9.3) + '@twind/preset-tailwind': 1.1.4(@twind/core@1.1.3(typescript@5.9.3))(typescript@5.9.3) + '@walletconnect/sign-client': 2.23.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@walletconnect/types': 2.23.9 + htm: 3.1.1 + preact: 10.29.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@solana/sysvars' + - '@stellar/stellar-sdk' + - '@trezor/connect' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - debug + - encoding + - expo-constants + - expo-localization + - fastestsmallesttextencoderdecoder + - immer + - ioredis + - near-api-js + - react + - react-native + - supports-color + - tslib + - typescript + - uploadthing + - use-sync-external-store + - utf-8-validate + - ws + - zod + + '@creit.tech/xbull-wallet-connect@0.4.0': + dependencies: + rxjs: 7.8.2 + tweetnacl: 1.0.3 + tweetnacl-util: 0.15.1 + '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 @@ -8488,6 +9714,10 @@ snapshots: '@emotion/unitless@0.7.5': {} + '@emurgo/cardano-serialization-lib-browser@13.2.1': {} + + '@emurgo/cardano-serialization-lib-nodejs@13.2.0': {} + '@esbuild/aix-ppc64@0.27.7': optional: true @@ -8619,13 +9849,28 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 + '@ethereumjs/common@10.1.1': + dependencies: + '@ethereumjs/util': 10.1.1 + eventemitter3: 5.0.4 + '@ethereumjs/common@3.2.0': dependencies: '@ethereumjs/util': 8.1.0 crc-32: 1.2.2 + '@ethereumjs/rlp@10.1.1': {} + '@ethereumjs/rlp@4.0.1': {} + '@ethereumjs/tx@10.1.1': + dependencies: + '@ethereumjs/common': 10.1.1 + '@ethereumjs/rlp': 10.1.1 + '@ethereumjs/util': 10.1.1 + '@noble/curves': 2.0.1 + '@noble/hashes': 2.0.1 + '@ethereumjs/tx@4.2.0': dependencies: '@ethereumjs/common': 3.2.0 @@ -8633,17 +9878,28 @@ snapshots: '@ethereumjs/util': 8.1.0 ethereum-cryptography: 2.2.1 + '@ethereumjs/util@10.1.1': + dependencies: + '@ethereumjs/rlp': 10.1.1 + '@noble/curves': 2.0.1 + '@noble/hashes': 2.0.1 + '@ethereumjs/util@8.1.0': dependencies: '@ethereumjs/rlp': 4.0.1 ethereum-cryptography: 2.2.1 micro-ftch: 0.3.1 - '@gemini-wallet/core@0.3.2(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))': + '@fivebinaries/coin-selection@3.0.0': + dependencies: + '@emurgo/cardano-serialization-lib-browser': 13.2.1 + '@emurgo/cardano-serialization-lib-nodejs': 13.2.0 + + '@gemini-wallet/core@0.3.2(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))': dependencies: '@metamask/rpc-errors': 7.0.2 eventemitter3: 5.0.1 - viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) transitivePeerDependencies: - supports-color @@ -8671,6 +9927,24 @@ snapshots: gsap: 3.14.2 react: 19.1.0 + '@hot-wallet/sdk@1.0.11(bufferutil@4.1.0)(near-api-js@5.1.1)(typescript@5.9.3)(utf-8-validate@6.0.6)': + dependencies: + '@near-js/crypto': 1.4.2 + '@near-js/utils': 1.1.0 + '@near-wallet-selector/core': 8.10.2(near-api-js@5.1.1) + '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)) + '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) + borsh: 2.0.0 + js-sha256: 0.11.1 + sha1: 1.1.1 + uuid4: 2.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - near-api-js + - typescript + - utf-8-validate + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.7': @@ -9170,12 +10444,50 @@ snapshots: transitivePeerDependencies: - supports-color + '@ledgerhq/devices@8.6.1': + dependencies: + '@ledgerhq/errors': 6.32.0 + '@ledgerhq/logs': 6.16.0 + rxjs: 7.8.2 + semver: 7.7.4 + + '@ledgerhq/errors@6.32.0': {} + + '@ledgerhq/hw-app-str@7.2.8': + dependencies: + '@ledgerhq/errors': 6.32.0 + '@ledgerhq/hw-transport': 6.31.12 + bip32-path: 0.4.2 + + '@ledgerhq/hw-transport-webusb@6.29.12': + dependencies: + '@ledgerhq/devices': 8.6.1 + '@ledgerhq/errors': 6.32.0 + '@ledgerhq/hw-transport': 6.31.12 + '@ledgerhq/logs': 6.16.0 + + '@ledgerhq/hw-transport@6.31.12': + dependencies: + '@ledgerhq/devices': 8.6.1 + '@ledgerhq/errors': 6.32.0 + '@ledgerhq/logs': 6.16.0 + events: 3.3.0 + + '@ledgerhq/logs@6.16.0': {} + '@lit-labs/ssr-dom-shim@1.5.1': {} + '@lit/react@1.0.8(@types/react@19.2.14)': + dependencies: + '@types/react': 19.2.14 + optional: true + '@lit/reactive-element@2.1.2': dependencies: '@lit-labs/ssr-dom-shim': 1.5.1 + '@lobstrco/signer-extension-api@2.0.0': {} + '@lukeed/csprng@1.1.0': {} '@metamask/eth-json-rpc-provider@1.0.1': @@ -9259,7 +10571,7 @@ snapshots: dependencies: openapi-fetch: 0.13.8 - '@metamask/sdk-communication-layer@0.33.1(cross-fetch@4.1.0)(eciesjs@0.4.18)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))': + '@metamask/sdk-communication-layer@0.33.1(cross-fetch@4.1.0)(eciesjs@0.4.18)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))': dependencies: '@metamask/sdk-analytics': 0.0.5 bufferutil: 4.1.0 @@ -9269,7 +10581,7 @@ snapshots: eciesjs: 0.4.18 eventemitter2: 6.4.9 readable-stream: 3.6.2 - socket.io-client: 4.8.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + socket.io-client: 4.8.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) utf-8-validate: 5.0.10 uuid: 8.3.2 transitivePeerDependencies: @@ -9279,13 +10591,13 @@ snapshots: dependencies: '@paulmillr/qr': 0.2.1 - '@metamask/sdk@0.33.1(bufferutil@4.1.0)(utf-8-validate@5.0.10)': + '@metamask/sdk@0.33.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)': dependencies: '@babel/runtime': 7.29.2 '@metamask/onboarding': 1.0.1 '@metamask/providers': 16.1.0 '@metamask/sdk-analytics': 0.0.5 - '@metamask/sdk-communication-layer': 0.33.1(cross-fetch@4.1.0)(eciesjs@0.4.18)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + '@metamask/sdk-communication-layer': 0.33.1(cross-fetch@4.1.0)(eciesjs@0.4.18)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@metamask/sdk-install-modal-web': 0.32.1 '@paulmillr/qr': 0.2.1 bowser: 2.14.1 @@ -9297,7 +10609,7 @@ snapshots: obj-multiplex: 1.0.0 pump: 3.0.4 readable-stream: 3.6.2 - socket.io-client: 4.8.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + socket.io-client: 4.8.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) tslib: 2.8.1 util: 0.12.5 uuid: 8.3.2 @@ -9365,6 +10677,12 @@ snapshots: '@microsoft/tsdoc@0.16.0': {} + '@mobily/ts-belt@3.13.1': {} + + '@msgpack/msgpack@3.1.2': {} + + '@msgpack/msgpack@3.1.3': {} + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': optional: true @@ -9390,6 +10708,105 @@ snapshots: '@tybys/wasm-util': 0.10.0 optional: true + '@near-js/accounts@1.4.1': + dependencies: + '@near-js/crypto': 1.4.2 + '@near-js/providers': 1.0.3 + '@near-js/signers': 0.2.2 + '@near-js/transactions': 1.3.3 + '@near-js/types': 0.3.1 + '@near-js/utils': 1.1.0 + '@noble/hashes': 1.7.1 + borsh: 1.0.0 + depd: 2.0.0 + is-my-json-valid: 2.20.6 + lru_map: 0.4.1 + near-abi: 0.2.0 + transitivePeerDependencies: + - encoding + + '@near-js/crypto@1.4.2': + dependencies: + '@near-js/types': 0.3.1 + '@near-js/utils': 1.1.0 + '@noble/curves': 1.8.1 + borsh: 1.0.0 + randombytes: 2.1.0 + secp256k1: 5.0.1 + + '@near-js/keystores-browser@0.2.2': + dependencies: + '@near-js/crypto': 1.4.2 + '@near-js/keystores': 0.2.2 + + '@near-js/keystores-node@0.1.2': + dependencies: + '@near-js/crypto': 1.4.2 + '@near-js/keystores': 0.2.2 + + '@near-js/keystores@0.2.2': + dependencies: + '@near-js/crypto': 1.4.2 + '@near-js/types': 0.3.1 + + '@near-js/providers@1.0.3': + dependencies: + '@near-js/transactions': 1.3.3 + '@near-js/types': 0.3.1 + '@near-js/utils': 1.1.0 + borsh: 1.0.0 + exponential-backoff: 3.1.3 + optionalDependencies: + node-fetch: 2.6.7 + transitivePeerDependencies: + - encoding + + '@near-js/signers@0.2.2': + dependencies: + '@near-js/crypto': 1.4.2 + '@near-js/keystores': 0.2.2 + '@noble/hashes': 1.3.3 + + '@near-js/transactions@1.3.3': + dependencies: + '@near-js/crypto': 1.4.2 + '@near-js/signers': 0.2.2 + '@near-js/types': 0.3.1 + '@near-js/utils': 1.1.0 + '@noble/hashes': 1.7.1 + borsh: 1.0.0 + + '@near-js/types@0.3.1': {} + + '@near-js/utils@1.1.0': + dependencies: + '@near-js/types': 0.3.1 + '@scure/base': 1.2.6 + depd: 2.0.0 + mustache: 4.0.0 + + '@near-js/wallet-account@1.3.3': + dependencies: + '@near-js/accounts': 1.4.1 + '@near-js/crypto': 1.4.2 + '@near-js/keystores': 0.2.2 + '@near-js/providers': 1.0.3 + '@near-js/signers': 0.2.2 + '@near-js/transactions': 1.3.3 + '@near-js/types': 0.3.1 + '@near-js/utils': 1.1.0 + borsh: 1.0.0 + transitivePeerDependencies: + - encoding + + '@near-wallet-selector/core@8.10.2(near-api-js@5.1.1)': + dependencies: + borsh: 1.0.0 + events: 3.3.0 + js-sha256: 0.9.0 + near-api-js: 5.1.1 + rxjs: 7.8.1 + '@nestjs/cache-manager@3.1.0(@nestjs/common@11.1.18(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.18)(cache-manager@7.2.8)(keyv@5.6.0)(rxjs@7.8.2)': dependencies: '@nestjs/common': 11.1.18(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2) @@ -9591,6 +11008,8 @@ snapshots: '@noble/hashes@1.3.2': {} + '@noble/hashes@1.3.3': {} + '@noble/hashes@1.4.0': {} '@noble/hashes@1.7.0': {} @@ -9703,11 +11122,22 @@ snapshots: '@paulmillr/qr@0.2.1': {} + '@phosphor-icons/webcomponents@2.1.5': + dependencies: + lit: 3.3.0 + '@pkgjs/parseargs@0.11.0': optional: true '@pkgr/core@0.2.9': {} + '@preact/signals-core@1.14.1': {} + + '@preact/signals@2.9.0(preact@10.29.1)': + dependencies: + '@preact/signals-core': 1.14.1 + preact: 10.29.1 + '@prisma/client@6.16.1(prisma@6.16.1(typescript@5.9.3))(typescript@5.9.3)': optionalDependencies: prisma: 6.16.1(typescript@5.9.3) @@ -9766,13 +11196,13 @@ snapshots: '@protobufjs/utf8@1.1.0': {} - '@rainbow-me/rainbowkit-siwe-next-auth@0.5.0(@rainbow-me/rainbowkit@2.2.10(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(react-dom@19.2.5(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6)))(next-auth@4.24.11(next@15.5.15(@babel/core@7.29.0)(react-dom@19.2.5(react@19.1.0))(react@19.1.0))(react-dom@19.2.5(react@19.1.0))(react@19.1.0))(react@19.1.0)': + '@rainbow-me/rainbowkit-siwe-next-auth@0.5.0(@rainbow-me/rainbowkit@2.2.10(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(react-dom@19.2.5(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76)))(next-auth@4.24.11(next@15.5.15(@babel/core@7.29.0)(react-dom@19.2.5(react@19.1.0))(react@19.1.0))(react-dom@19.2.5(react@19.1.0))(react@19.1.0))(react@19.1.0)': dependencies: - '@rainbow-me/rainbowkit': 2.2.10(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(react-dom@19.2.5(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6)) + '@rainbow-me/rainbowkit': 2.2.10(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(react-dom@19.2.5(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76)) next-auth: 4.24.11(next@15.5.15(@babel/core@7.29.0)(react-dom@19.2.5(react@19.1.0))(react@19.1.0))(react-dom@19.2.5(react@19.1.0))(react@19.1.0) react: 19.1.0 - '@rainbow-me/rainbowkit@2.2.10(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(react-dom@19.2.5(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6))': + '@rainbow-me/rainbowkit@2.2.10(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(react-dom@19.2.5(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76))': dependencies: '@tanstack/react-query': 5.98.0(react@19.1.0) '@vanilla-extract/css': 1.17.3 @@ -9784,8 +11214,8 @@ snapshots: react-dom: 19.2.5(react@19.1.0) react-remove-scroll: 2.6.2(@types/react@19.2.14)(react@19.1.0) ua-parser-js: 1.0.41 - viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - wagmi: 2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6) + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + wagmi: 2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76) transitivePeerDependencies: - '@types/react' - babel-plugin-macros @@ -9859,35 +11289,57 @@ snapshots: react: 19.1.0 react-dom: 19.2.5(react@19.1.0) - '@reown/appkit-common@1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@reown/appkit-common@1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)': + dependencies: + big.js: 6.2.2 + dayjs: 1.11.13 + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + + '@reown/appkit-common@1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': + dependencies: + big.js: 6.2.2 + dayjs: 1.11.13 + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + + '@reown/appkit-common@1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)': dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4) transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - zod - '@reown/appkit-common@1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)': + '@reown/appkit-common@1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - zod - '@reown/appkit-controllers@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)': + '@reown/appkit-controllers@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) valtio: 1.13.2(@types/react@19.2.14)(react@19.1.0) - viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -9916,14 +11368,13 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-pay@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)': + '@reown/appkit-controllers@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@reown/appkit-ui': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@reown/appkit-utils': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0))(zod@4.3.6) - lit: 3.3.0 - valtio: 1.13.2(@types/react@19.2.14)(react@19.1.0) + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) + '@walletconnect/universal-provider': 2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + valtio: 2.1.7(@types/react@19.2.14)(react@19.1.0) + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -9952,18 +11403,14 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-polyfills@1.7.8': - dependencies: - buffer: 6.0.3 - - '@reown/appkit-scaffold-ui@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0))(zod@4.3.6)': + '@reown/appkit-pay@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@reown/appkit-ui': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@reown/appkit-utils': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0))(zod@4.3.6) - '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) lit: 3.3.0 + valtio: 1.13.2(@types/react@19.2.14)(react@19.1.0) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -9990,16 +11437,16 @@ snapshots: - typescript - uploadthing - utf-8-validate - - valtio - zod - '@reown/appkit-ui@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)': + '@reown/appkit-pay@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(zod@3.25.76)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-ui': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-utils': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) lit: 3.3.0 - qrcode: 1.5.3 + valtio: 2.1.7(@types/react@19.2.14)(react@19.1.0) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -10020,24 +11467,34 @@ snapshots: - aws4fetch - bufferutil - db0 + - debug - encoding + - fastestsmallesttextencoderdecoder + - immer - ioredis - react - typescript - uploadthing + - use-sync-external-store - utf-8-validate - zod - '@reown/appkit-utils@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0))(zod@4.3.6)': + '@reown/appkit-polyfills@1.7.8': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@reown/appkit-polyfills': 1.7.8 - '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@walletconnect/logger': 2.1.2 - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - valtio: 1.13.2(@types/react@19.2.14)(react@19.1.0) - viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + buffer: 6.0.3 + + '@reown/appkit-polyfills@1.8.19': + dependencies: + buffer: 6.0.3 + + '@reown/appkit-scaffold-ui@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) + lit: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -10064,34 +11521,18 @@ snapshots: - typescript - uploadthing - utf-8-validate + - valtio - zod - '@reown/appkit-wallet@1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': - dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4) - '@reown/appkit-polyfills': 1.7.8 - '@walletconnect/logger': 2.1.2 - zod: 3.22.4 - transitivePeerDependencies: - - bufferutil - - typescript - - utf-8-validate - - '@reown/appkit@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)': + '@reown/appkit-scaffold-ui@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@reown/appkit-pay': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@reown/appkit-polyfills': 1.7.8 - '@reown/appkit-scaffold-ui': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0))(zod@4.3.6) - '@reown/appkit-ui': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@reown/appkit-utils': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0))(zod@4.3.6) - '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@walletconnect/types': 2.21.0 - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - bs58: 6.0.0 - valtio: 1.13.2(@types/react@19.2.14)(react@19.1.0) - viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-pay': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-ui': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-utils': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) + '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) + lit: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -10112,35 +11553,310 @@ snapshots: - aws4fetch - bufferutil - db0 + - debug - encoding + - fastestsmallesttextencoderdecoder + - immer - ioredis - react - typescript - uploadthing + - use-sync-external-store - utf-8-validate + - valtio - zod - '@rtsao/scc@1.1.0': {} - - '@safe-global/safe-apps-provider@0.18.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)': - dependencies: - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - events: 3.3.0 - transitivePeerDependencies: - - bufferutil - - typescript - - utf-8-validate - - zod - - '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)': + '@reown/appkit-ui@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': dependencies: - '@safe-global/safe-gateway-typescript-sdk': 3.23.1 - viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) + lit: 3.3.0 + qrcode: 1.5.3 transitivePeerDependencies: - - bufferutil - - typescript - - utf-8-validate - - zod + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@reown/appkit-ui@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': + dependencies: + '@phosphor-icons/webcomponents': 2.1.5 + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) + lit: 3.3.0 + qrcode: 1.5.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@reown/appkit-utils@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-polyfills': 1.7.8 + '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) + '@walletconnect/logger': 2.1.2 + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + valtio: 1.13.2(@types/react@19.2.14)(react@19.1.0) + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@reown/appkit-utils@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76)': + dependencies: + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-polyfills': 1.8.19 + '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) + '@wallet-standard/wallet': 1.1.0 + '@walletconnect/logger': 3.0.2 + '@walletconnect/universal-provider': 2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + valtio: 2.1.7(@types/react@19.2.14)(react@19.1.0) + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + optionalDependencies: + '@base-org/account': 2.4.0(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(zod@3.25.76) + '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - debug + - encoding + - fastestsmallesttextencoderdecoder + - immer + - ioredis + - react + - typescript + - uploadthing + - use-sync-external-store + - utf-8-validate + - zod + + '@reown/appkit-wallet@1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4) + '@reown/appkit-polyfills': 1.7.8 + '@walletconnect/logger': 2.1.2 + zod: 3.22.4 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + + '@reown/appkit-wallet@1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)': + dependencies: + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4) + '@reown/appkit-polyfills': 1.8.19 + '@walletconnect/logger': 3.0.2 + zod: 3.22.4 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + + '@reown/appkit@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-pay': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-polyfills': 1.7.8 + '@reown/appkit-scaffold-ui': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) + '@walletconnect/types': 2.21.0 + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + bs58: 6.0.0 + valtio: 1.13.2(@types/react@19.2.14)(react@19.1.0) + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@reown/appkit@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(zod@3.25.76)': + dependencies: + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-pay': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-polyfills': 1.8.19 + '@reown/appkit-scaffold-ui': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) + '@reown/appkit-ui': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@reown/appkit-utils': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) + '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) + '@walletconnect/universal-provider': 2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + bs58: 6.0.0 + semver: 7.7.2 + valtio: 2.1.7(@types/react@19.2.14)(react@19.1.0) + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + optionalDependencies: + '@lit/react': 1.0.8(@types/react@19.2.14) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - debug + - encoding + - fastestsmallesttextencoderdecoder + - immer + - ioredis + - react + - typescript + - uploadthing + - use-sync-external-store + - utf-8-validate + - zod + + '@rtsao/scc@1.1.0': {} + + '@safe-global/safe-apps-provider@0.18.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': + dependencies: + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + events: 3.3.0 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + + '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': + dependencies: + '@safe-global/safe-gateway-typescript-sdk': 3.23.1 + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod '@safe-global/safe-gateway-typescript-sdk@3.23.1': {} @@ -10185,6 +11901,8 @@ snapshots: '@sec-ant/readable-stream@0.4.1': {} + '@sinclair/typebox@0.33.22': {} + '@sinclair/typebox@0.34.41': {} '@sindresorhus/merge-streams@4.0.0': {} @@ -10204,32 +11922,76 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} - '@solana-program/system@0.10.0(@solana/kit@5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))': + '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))': + dependencies: + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + + '@solana-program/stake@0.2.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))': + dependencies: + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + + '@solana-program/system@0.10.0(@solana/kit@5.5.1(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@6.0.6))': + dependencies: + '@solana/kit': 5.5.1(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@6.0.6) + + '@solana-program/system@0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))': + dependencies: + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + + '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))': dependencies: - '@solana/kit': 5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@solana/sysvars': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana-program/token@0.9.0(@solana/kit@5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))': + '@solana-program/token@0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))': dependencies: - '@solana/kit': 5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) - '@solana/accounts@5.5.1(typescript@5.9.3)': + '@solana-program/token@0.9.0(@solana/kit@5.5.1(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@6.0.6))': dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) + '@solana/kit': 5.5.1(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@6.0.6) + + '@solana/accounts@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec': 2.3.0(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/accounts@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/codecs-core': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/errors': 5.5.1(typescript@5.9.3) '@solana/rpc-spec': 5.5.1(typescript@5.9.3) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/addresses@5.5.1(typescript@5.9.3)': + '@solana/addresses@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/assertions': 2.3.0(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/addresses@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/assertions': 5.5.1(typescript@5.9.3) '@solana/codecs-core': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/errors': 5.5.1(typescript@5.9.3) '@solana/nominal-types': 5.5.1(typescript@5.9.3) optionalDependencies: @@ -10237,18 +11999,39 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/assertions@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + '@solana/assertions@5.5.1(typescript@5.9.3)': dependencies: '@solana/errors': 5.5.1(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/codecs-core@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + '@solana/codecs-core@5.5.1(typescript@5.9.3)': dependencies: '@solana/errors': 5.5.1(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 + '@solana/codecs-data-structures@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + '@solana/codecs-data-structures@5.5.1(typescript@5.9.3)': dependencies: '@solana/codecs-core': 5.5.1(typescript@5.9.3) @@ -10257,6 +12040,12 @@ snapshots: optionalDependencies: typescript: 5.9.3 + '@solana/codecs-numbers@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + '@solana/codecs-numbers@5.5.1(typescript@5.9.3)': dependencies: '@solana/codecs-core': 5.5.1(typescript@5.9.3) @@ -10264,26 +12053,52 @@ snapshots: optionalDependencies: typescript: 5.9.3 - '@solana/codecs-strings@5.5.1(typescript@5.9.3)': + '@solana/codecs-strings@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 5.9.3 + + '@solana/codecs-strings@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/codecs-core': 5.5.1(typescript@5.9.3) '@solana/codecs-numbers': 5.5.1(typescript@5.9.3) '@solana/errors': 5.5.1(typescript@5.9.3) optionalDependencies: + fastestsmallesttextencoderdecoder: 1.0.22 typescript: 5.9.3 - '@solana/codecs@5.5.1(typescript@5.9.3)': + '@solana/codecs@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/options': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/codecs@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/codecs-core': 5.5.1(typescript@5.9.3) '@solana/codecs-data-structures': 5.5.1(typescript@5.9.3) '@solana/codecs-numbers': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) - '@solana/options': 5.5.1(typescript@5.9.3) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/options': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/errors@2.3.0(typescript@5.9.3)': + dependencies: + chalk: 5.6.2 + commander: 14.0.3 + typescript: 5.9.3 + '@solana/errors@5.5.1(typescript@5.9.3)': dependencies: chalk: 5.6.2 @@ -10291,27 +12106,41 @@ snapshots: optionalDependencies: typescript: 5.9.3 + '@solana/fast-stable-stringify@2.3.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + '@solana/fast-stable-stringify@5.5.1(typescript@5.9.3)': optionalDependencies: typescript: 5.9.3 + '@solana/functional@2.3.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + '@solana/functional@5.5.1(typescript@5.9.3)': optionalDependencies: typescript: 5.9.3 - '@solana/instruction-plans@5.5.1(typescript@5.9.3)': + '@solana/instruction-plans@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/errors': 5.5.1(typescript@5.9.3) '@solana/instructions': 5.5.1(typescript@5.9.3) - '@solana/keys': 5.5.1(typescript@5.9.3) + '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/promises': 5.5.1(typescript@5.9.3) - '@solana/transaction-messages': 5.5.1(typescript@5.9.3) - '@solana/transactions': 5.5.1(typescript@5.9.3) + '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/instructions@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + '@solana/instructions@5.5.1(typescript@5.9.3)': dependencies: '@solana/codecs-core': 5.5.1(typescript@5.9.3) @@ -10319,11 +12148,22 @@ snapshots: optionalDependencies: typescript: 5.9.3 - '@solana/keys@5.5.1(typescript@5.9.3)': + '@solana/keys@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/assertions': 2.3.0(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/keys@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/assertions': 5.5.1(typescript@5.9.3) '@solana/codecs-core': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/errors': 5.5.1(typescript@5.9.3) '@solana/nominal-types': 5.5.1(typescript@5.9.3) optionalDependencies: @@ -10331,30 +12171,55 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/kit@5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + '@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': + dependencies: + '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/instructions': 2.3.0(typescript@5.9.3) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/programs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-parsed-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/signers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/sysvars': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/kit@5.5.1(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@6.0.6)': dependencies: - '@solana/accounts': 5.5.1(typescript@5.9.3) - '@solana/addresses': 5.5.1(typescript@5.9.3) - '@solana/codecs': 5.5.1(typescript@5.9.3) + '@solana/accounts': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/errors': 5.5.1(typescript@5.9.3) '@solana/functional': 5.5.1(typescript@5.9.3) - '@solana/instruction-plans': 5.5.1(typescript@5.9.3) + '@solana/instruction-plans': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/instructions': 5.5.1(typescript@5.9.3) - '@solana/keys': 5.5.1(typescript@5.9.3) - '@solana/offchain-messages': 5.5.1(typescript@5.9.3) + '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/offchain-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/plugin-core': 5.5.1(typescript@5.9.3) - '@solana/programs': 5.5.1(typescript@5.9.3) - '@solana/rpc': 5.5.1(typescript@5.9.3) - '@solana/rpc-api': 5.5.1(typescript@5.9.3) + '@solana/programs': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-api': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/rpc-parsed-types': 5.5.1(typescript@5.9.3) '@solana/rpc-spec-types': 5.5.1(typescript@5.9.3) - '@solana/rpc-subscriptions': 5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) - '@solana/signers': 5.5.1(typescript@5.9.3) - '@solana/sysvars': 5.5.1(typescript@5.9.3) - '@solana/transaction-confirmation': 5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@solana/transaction-messages': 5.5.1(typescript@5.9.3) - '@solana/transactions': 5.5.1(typescript@5.9.3) + '@solana/rpc-subscriptions': 5.5.1(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@6.0.6) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/signers': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/sysvars': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-confirmation': 5.5.1(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@6.0.6) + '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -10362,31 +12227,46 @@ snapshots: - fastestsmallesttextencoderdecoder - utf-8-validate + '@solana/nominal-types@2.3.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + '@solana/nominal-types@5.5.1(typescript@5.9.3)': optionalDependencies: typescript: 5.9.3 - '@solana/offchain-messages@5.5.1(typescript@5.9.3)': + '@solana/offchain-messages@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/codecs-core': 5.5.1(typescript@5.9.3) '@solana/codecs-data-structures': 5.5.1(typescript@5.9.3) '@solana/codecs-numbers': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/keys': 5.5.1(typescript@5.9.3) + '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/nominal-types': 5.5.1(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/options@5.5.1(typescript@5.9.3)': + '@solana/options@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/options@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/codecs-core': 5.5.1(typescript@5.9.3) '@solana/codecs-data-structures': 5.5.1(typescript@5.9.3) '@solana/codecs-numbers': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/errors': 5.5.1(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 @@ -10397,45 +12277,88 @@ snapshots: optionalDependencies: typescript: 5.9.3 - '@solana/programs@5.5.1(typescript@5.9.3)': + '@solana/programs@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/programs@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/errors': 5.5.1(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/promises@2.3.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + '@solana/promises@5.5.1(typescript@5.9.3)': optionalDependencies: typescript: 5.9.3 - '@solana/rpc-api@5.5.1(typescript@5.9.3)': + '@solana/rpc-api@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-parsed-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec': 2.3.0(typescript@5.9.3) + '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-api@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/codecs-core': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/keys': 5.5.1(typescript@5.9.3) + '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/rpc-parsed-types': 5.5.1(typescript@5.9.3) '@solana/rpc-spec': 5.5.1(typescript@5.9.3) - '@solana/rpc-transformers': 5.5.1(typescript@5.9.3) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) - '@solana/transaction-messages': 5.5.1(typescript@5.9.3) - '@solana/transactions': 5.5.1(typescript@5.9.3) + '@solana/rpc-transformers': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/rpc-parsed-types@2.3.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + '@solana/rpc-parsed-types@5.5.1(typescript@5.9.3)': optionalDependencies: typescript: 5.9.3 + '@solana/rpc-spec-types@2.3.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + '@solana/rpc-spec-types@5.5.1(typescript@5.9.3)': optionalDependencies: typescript: 5.9.3 + '@solana/rpc-spec@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + '@solana/rpc-spec@5.5.1(typescript@5.9.3)': dependencies: '@solana/errors': 5.5.1(typescript@5.9.3) @@ -10443,33 +12366,63 @@ snapshots: optionalDependencies: typescript: 5.9.3 - '@solana/rpc-subscriptions-api@5.5.1(typescript@5.9.3)': + '@solana/rpc-subscriptions-api@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.3) + '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-subscriptions-api@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) - '@solana/keys': 5.5.1(typescript@5.9.3) + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/rpc-subscriptions-spec': 5.5.1(typescript@5.9.3) - '@solana/rpc-transformers': 5.5.1(typescript@5.9.3) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) - '@solana/transaction-messages': 5.5.1(typescript@5.9.3) - '@solana/transactions': 5.5.1(typescript@5.9.3) + '@solana/rpc-transformers': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/rpc-subscriptions-channel-websocket@5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + '@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.3) + '@solana/subscribable': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + ws: 8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + + '@solana/rpc-subscriptions-channel-websocket@5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)': dependencies: '@solana/errors': 5.5.1(typescript@5.9.3) '@solana/functional': 5.5.1(typescript@5.9.3) '@solana/rpc-subscriptions-spec': 5.5.1(typescript@5.9.3) '@solana/subscribable': 5.5.1(typescript@5.9.3) - ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - bufferutil - utf-8-validate + '@solana/rpc-subscriptions-spec@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/promises': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + '@solana/subscribable': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + '@solana/rpc-subscriptions-spec@5.5.1(typescript@5.9.3)': dependencies: '@solana/errors': 5.5.1(typescript@5.9.3) @@ -10479,18 +12432,36 @@ snapshots: optionalDependencies: typescript: 5.9.3 - '@solana/rpc-subscriptions@5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + '@solana/rpc-subscriptions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/fast-stable-stringify': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/promises': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-subscriptions-api': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions-channel-websocket': 2.3.0(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.3) + '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/subscribable': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/rpc-subscriptions@5.5.1(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@6.0.6)': dependencies: '@solana/errors': 5.5.1(typescript@5.9.3) '@solana/fast-stable-stringify': 5.5.1(typescript@5.9.3) '@solana/functional': 5.5.1(typescript@5.9.3) '@solana/promises': 5.5.1(typescript@5.9.3) '@solana/rpc-spec-types': 5.5.1(typescript@5.9.3) - '@solana/rpc-subscriptions-api': 5.5.1(typescript@5.9.3) - '@solana/rpc-subscriptions-channel-websocket': 5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/rpc-subscriptions-api': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions-channel-websocket': 5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) '@solana/rpc-subscriptions-spec': 5.5.1(typescript@5.9.3) - '@solana/rpc-transformers': 5.5.1(typescript@5.9.3) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) + '@solana/rpc-transformers': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/subscribable': 5.5.1(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 @@ -10499,18 +12470,37 @@ snapshots: - fastestsmallesttextencoderdecoder - utf-8-validate - '@solana/rpc-transformers@5.5.1(typescript@5.9.3)': + '@solana/rpc-transformers@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-transformers@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/errors': 5.5.1(typescript@5.9.3) '@solana/functional': 5.5.1(typescript@5.9.3) '@solana/nominal-types': 5.5.1(typescript@5.9.3) '@solana/rpc-spec-types': 5.5.1(typescript@5.9.3) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/rpc-transport-http@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + undici-types: 7.24.7 + '@solana/rpc-transport-http@5.5.1(typescript@5.9.3)': dependencies: '@solana/errors': 5.5.1(typescript@5.9.3) @@ -10520,12 +12510,24 @@ snapshots: optionalDependencies: typescript: 5.9.3 - '@solana/rpc-types@5.5.1(typescript@5.9.3)': + '@solana/rpc-types@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-types@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/codecs-core': 5.5.1(typescript@5.9.3) '@solana/codecs-numbers': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/errors': 5.5.1(typescript@5.9.3) '@solana/nominal-types': 5.5.1(typescript@5.9.3) optionalDependencies: @@ -10533,67 +12535,128 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/rpc@5.5.1(typescript@5.9.3)': + '@solana/rpc@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/fast-stable-stringify': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/rpc-api': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-spec': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-transport-http': 2.3.0(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/errors': 5.5.1(typescript@5.9.3) '@solana/fast-stable-stringify': 5.5.1(typescript@5.9.3) '@solana/functional': 5.5.1(typescript@5.9.3) - '@solana/rpc-api': 5.5.1(typescript@5.9.3) + '@solana/rpc-api': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/rpc-spec': 5.5.1(typescript@5.9.3) '@solana/rpc-spec-types': 5.5.1(typescript@5.9.3) - '@solana/rpc-transformers': 5.5.1(typescript@5.9.3) + '@solana/rpc-transformers': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/rpc-transport-http': 5.5.1(typescript@5.9.3) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/signers@5.5.1(typescript@5.9.3)': + '@solana/signers@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/instructions': 2.3.0(typescript@5.9.3) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/signers@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/codecs-core': 5.5.1(typescript@5.9.3) '@solana/errors': 5.5.1(typescript@5.9.3) '@solana/instructions': 5.5.1(typescript@5.9.3) - '@solana/keys': 5.5.1(typescript@5.9.3) + '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/nominal-types': 5.5.1(typescript@5.9.3) - '@solana/offchain-messages': 5.5.1(typescript@5.9.3) - '@solana/transaction-messages': 5.5.1(typescript@5.9.3) - '@solana/transactions': 5.5.1(typescript@5.9.3) + '@solana/offchain-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/subscribable@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + '@solana/subscribable@5.5.1(typescript@5.9.3)': dependencies: '@solana/errors': 5.5.1(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 - '@solana/sysvars@5.5.1(typescript@5.9.3)': + '@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/accounts': 5.5.1(typescript@5.9.3) - '@solana/codecs': 5.5.1(typescript@5.9.3) + '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/accounts': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/transaction-confirmation@5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + '@solana/transaction-confirmation@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/promises': 2.3.0(typescript@5.9.3) + '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/transaction-confirmation@5.5.1(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@6.0.6)': dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/keys': 5.5.1(typescript@5.9.3) + '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/promises': 5.5.1(typescript@5.9.3) - '@solana/rpc': 5.5.1(typescript@5.9.3) - '@solana/rpc-subscriptions': 5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) - '@solana/transaction-messages': 5.5.1(typescript@5.9.3) - '@solana/transactions': 5.5.1(typescript@5.9.3) + '@solana/rpc': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions': 5.5.1(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@6.0.6) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -10601,9 +12664,24 @@ snapshots: - fastestsmallesttextencoderdecoder - utf-8-validate - '@solana/transaction-messages@5.5.1(typescript@5.9.3)': + '@solana/transaction-messages@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/instructions': 2.3.0(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/transaction-messages@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/codecs-core': 5.5.1(typescript@5.9.3) '@solana/codecs-data-structures': 5.5.1(typescript@5.9.3) '@solana/codecs-numbers': 5.5.1(typescript@5.9.3) @@ -10611,31 +12689,85 @@ snapshots: '@solana/functional': 5.5.1(typescript@5.9.3) '@solana/instructions': 5.5.1(typescript@5.9.3) '@solana/nominal-types': 5.5.1(typescript@5.9.3) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/transactions@5.5.1(typescript@5.9.3)': + '@solana/transactions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/instructions': 2.3.0(typescript@5.9.3) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/transactions@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/codecs-core': 5.5.1(typescript@5.9.3) '@solana/codecs-data-structures': 5.5.1(typescript@5.9.3) '@solana/codecs-numbers': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/errors': 5.5.1(typescript@5.9.3) '@solana/functional': 5.5.1(typescript@5.9.3) '@solana/instructions': 5.5.1(typescript@5.9.3) - '@solana/keys': 5.5.1(typescript@5.9.3) + '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/nominal-types': 5.5.1(typescript@5.9.3) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) - '@solana/transaction-messages': 5.5.1(typescript@5.9.3) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))': + dependencies: + '@solana/wallet-standard-features': 1.3.0 + '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) + '@wallet-standard/base': 1.1.0 + '@wallet-standard/features': 1.1.0 + eventemitter3: 5.0.4 + + '@solana/wallet-standard-features@1.3.0': + dependencies: + '@wallet-standard/base': 1.1.0 + '@wallet-standard/features': 1.1.0 + + '@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)': + dependencies: + '@babel/runtime': 7.29.2 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@solana/buffer-layout': 4.0.1 + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + agentkeepalive: 4.6.0 + bn.js: 5.2.3 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.3.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + node-fetch: 2.7.0 + rpc-websockets: 9.3.8 + superstruct: 2.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + '@spruceid/siwe-parser@3.0.0': dependencies: '@noble/hashes': 1.8.0 @@ -10656,8 +12788,24 @@ snapshots: '@standard-schema/spec@1.0.0': {} + '@stellar/freighter-api@6.0.0': + dependencies: + buffer: 6.0.3 + semver: 7.7.1 + + '@stellar/js-xdr@3.1.2': {} + '@stellar/js-xdr@4.0.0': {} + '@stellar/stellar-base@14.0.1': + dependencies: + '@noble/curves': 1.9.7 + '@stellar/js-xdr': 3.1.2 + base32.js: 0.1.0 + bignumber.js: 9.3.1 + buffer: 6.0.3 + sha.js: 2.4.12 + '@stellar/stellar-base@15.0.0': dependencies: '@noble/curves': 1.9.7 @@ -10667,6 +12815,19 @@ snapshots: buffer: 6.0.3 sha.js: 2.4.12 + '@stellar/stellar-sdk@14.2.0': + dependencies: + '@stellar/stellar-base': 14.0.1 + axios: 1.15.0 + bignumber.js: 9.3.1 + eventsource: 2.0.2 + feaxios: 0.0.23 + randombytes: 2.1.0 + toml: 3.0.0 + urijs: 1.19.11 + transitivePeerDependencies: + - debug + '@stellar/stellar-sdk@15.0.1': dependencies: '@stellar/stellar-base': 15.0.0 @@ -10779,6 +12940,288 @@ snapshots: '@tokenizer/token@0.3.0': {} + '@trezor/analytics@1.5.0(tslib@2.8.1)': + dependencies: + '@trezor/env-utils': 1.5.0(tslib@2.8.1) + '@trezor/utils': 9.5.0(tslib@2.8.1) + tslib: 2.8.1 + transitivePeerDependencies: + - expo-constants + - expo-localization + - react-native + + '@trezor/blockchain-link-types@1.5.0(tslib@2.8.1)': + dependencies: + '@trezor/utils': 9.5.0(tslib@2.8.1) + '@trezor/utxo-lib': 2.5.0(tslib@2.8.1) + tslib: 2.8.1 + + '@trezor/blockchain-link-types@1.5.1(tslib@2.8.1)': + dependencies: + '@trezor/utils': 9.5.0(tslib@2.8.1) + '@trezor/utxo-lib': 2.5.0(tslib@2.8.1) + tslib: 2.8.1 + + '@trezor/blockchain-link-utils@1.5.1(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)': + dependencies: + '@mobily/ts-belt': 3.13.1 + '@stellar/stellar-sdk': 14.2.0 + '@trezor/env-utils': 1.5.0(tslib@2.8.1) + '@trezor/protobuf': 1.5.1(tslib@2.8.1) + '@trezor/utils': 9.5.0(tslib@2.8.1) + tslib: 2.8.1 + xrpl: 4.4.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) + transitivePeerDependencies: + - bufferutil + - debug + - expo-constants + - expo-localization + - react-native + - utf-8-validate + + '@trezor/blockchain-link-utils@1.5.2(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)': + dependencies: + '@mobily/ts-belt': 3.13.1 + '@stellar/stellar-sdk': 14.2.0 + '@trezor/env-utils': 1.5.0(tslib@2.8.1) + '@trezor/protobuf': 1.5.2(tslib@2.8.1) + '@trezor/utils': 9.5.0(tslib@2.8.1) + tslib: 2.8.1 + xrpl: 4.4.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) + transitivePeerDependencies: + - bufferutil + - debug + - expo-constants + - expo-localization + - react-native + - utf-8-validate + + '@trezor/blockchain-link@2.6.1(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': + dependencies: + '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) + '@solana-program/stake': 0.2.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) + '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) + '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@stellar/stellar-sdk': 14.2.0 + '@trezor/blockchain-link-types': 1.5.0(tslib@2.8.1) + '@trezor/blockchain-link-utils': 1.5.1(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6) + '@trezor/env-utils': 1.5.0(tslib@2.8.1) + '@trezor/utils': 9.5.0(tslib@2.8.1) + '@trezor/utxo-lib': 2.5.0(tslib@2.8.1) + '@trezor/websocket-client': 1.3.0(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6) + '@types/web': 0.0.197 + crypto-browserify: 3.12.0 + socks-proxy-agent: 8.0.5 + stream-browserify: 3.0.0 + tslib: 2.8.1 + xrpl: 4.4.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) + transitivePeerDependencies: + - '@solana/sysvars' + - bufferutil + - debug + - expo-constants + - expo-localization + - fastestsmallesttextencoderdecoder + - react-native + - supports-color + - typescript + - utf-8-validate + - ws + + '@trezor/connect-analytics@1.4.0(tslib@2.8.1)': + dependencies: + '@trezor/analytics': 1.5.0(tslib@2.8.1) + tslib: 2.8.1 + transitivePeerDependencies: + - expo-constants + - expo-localization + - react-native + + '@trezor/connect-common@0.5.1(tslib@2.8.1)': + dependencies: + '@trezor/env-utils': 1.5.0(tslib@2.8.1) + '@trezor/type-utils': 1.2.0 + '@trezor/utils': 9.5.0(tslib@2.8.1) + tslib: 2.8.1 + transitivePeerDependencies: + - expo-constants + - expo-localization + - react-native + + '@trezor/connect-plugin-stellar@9.2.6(@stellar/stellar-sdk@15.0.1)(@trezor/connect@9.7.2(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(tslib@2.8.1)': + dependencies: + '@stellar/stellar-sdk': 15.0.1 + '@trezor/connect': 9.7.2(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@trezor/utils': 9.5.0(tslib@2.8.1) + tslib: 2.8.1 + + '@trezor/connect-web@9.7.2(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': + dependencies: + '@trezor/connect': 9.7.2(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@trezor/connect-common': 0.5.1(tslib@2.8.1) + '@trezor/utils': 9.5.0(tslib@2.8.1) + '@trezor/websocket-client': 1.3.0(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6) + tslib: 2.8.1 + transitivePeerDependencies: + - '@solana/sysvars' + - bufferutil + - debug + - encoding + - expo-constants + - expo-localization + - fastestsmallesttextencoderdecoder + - react-native + - supports-color + - typescript + - utf-8-validate + - ws + + '@trezor/connect@9.7.2(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': + dependencies: + '@ethereumjs/common': 10.1.1 + '@ethereumjs/tx': 10.1.1 + '@fivebinaries/coin-selection': 3.0.0 + '@mobily/ts-belt': 3.13.1 + '@noble/hashes': 1.8.0 + '@scure/bip39': 1.6.0 + '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) + '@solana-program/system': 0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) + '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) + '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@trezor/blockchain-link': 2.6.1(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@trezor/blockchain-link-types': 1.5.1(tslib@2.8.1) + '@trezor/blockchain-link-utils': 1.5.2(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6) + '@trezor/connect-analytics': 1.4.0(tslib@2.8.1) + '@trezor/connect-common': 0.5.1(tslib@2.8.1) + '@trezor/crypto-utils': 1.2.0(tslib@2.8.1) + '@trezor/device-authenticity': 1.1.2(tslib@2.8.1) + '@trezor/device-utils': 1.2.0 + '@trezor/env-utils': 1.5.0(tslib@2.8.1) + '@trezor/protobuf': 1.5.2(tslib@2.8.1) + '@trezor/protocol': 1.3.0(tslib@2.8.1) + '@trezor/schema-utils': 1.4.0(tslib@2.8.1) + '@trezor/transport': 1.6.2(tslib@2.8.1) + '@trezor/type-utils': 1.2.0 + '@trezor/utils': 9.5.0(tslib@2.8.1) + '@trezor/utxo-lib': 2.5.0(tslib@2.8.1) + blakejs: 1.2.1 + bs58: 6.0.0 + bs58check: 4.0.0 + cbor: 10.0.12 + cross-fetch: 4.1.0 + jws: 4.0.1 + tslib: 2.8.1 + transitivePeerDependencies: + - '@solana/sysvars' + - bufferutil + - debug + - encoding + - expo-constants + - expo-localization + - fastestsmallesttextencoderdecoder + - react-native + - supports-color + - typescript + - utf-8-validate + - ws + + '@trezor/crypto-utils@1.2.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@trezor/device-authenticity@1.1.2(tslib@2.8.1)': + dependencies: + '@noble/curves': 2.0.1 + '@trezor/crypto-utils': 1.2.0(tslib@2.8.1) + '@trezor/protobuf': 1.5.2(tslib@2.8.1) + '@trezor/schema-utils': 1.4.0(tslib@2.8.1) + '@trezor/utils': 9.5.0(tslib@2.8.1) + transitivePeerDependencies: + - tslib + + '@trezor/device-utils@1.2.0': {} + + '@trezor/env-utils@1.5.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + ua-parser-js: 2.0.9 + + '@trezor/protobuf@1.5.1(tslib@2.8.1)': + dependencies: + '@trezor/schema-utils': 1.4.0(tslib@2.8.1) + long: 5.2.5 + protobufjs: 7.4.0 + tslib: 2.8.1 + + '@trezor/protobuf@1.5.2(tslib@2.8.1)': + dependencies: + '@trezor/schema-utils': 1.4.0(tslib@2.8.1) + long: 5.2.5 + protobufjs: 7.4.0 + tslib: 2.8.1 + + '@trezor/protocol@1.3.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@trezor/schema-utils@1.4.0(tslib@2.8.1)': + dependencies: + '@sinclair/typebox': 0.33.22 + ts-mixer: 6.0.4 + tslib: 2.8.1 + + '@trezor/transport@1.6.2(tslib@2.8.1)': + dependencies: + '@trezor/protobuf': 1.5.2(tslib@2.8.1) + '@trezor/protocol': 1.3.0(tslib@2.8.1) + '@trezor/type-utils': 1.2.0 + '@trezor/utils': 9.5.0(tslib@2.8.1) + cross-fetch: 4.1.0 + tslib: 2.8.1 + usb: 2.17.0 + transitivePeerDependencies: + - encoding + + '@trezor/type-utils@1.2.0': {} + + '@trezor/utils@9.5.0(tslib@2.8.1)': + dependencies: + bignumber.js: 9.3.1 + tslib: 2.8.1 + + '@trezor/utxo-lib@2.5.0(tslib@2.8.1)': + dependencies: + '@trezor/utils': 9.5.0(tslib@2.8.1) + bech32: 2.0.0 + bip66: 2.0.0 + bitcoin-ops: 1.4.1 + blake-hash: 2.0.0 + blakejs: 1.2.1 + bn.js: 5.2.3 + bs58: 6.0.0 + bs58check: 4.0.0 + cashaddrjs: 0.4.4 + create-hmac: 1.1.7 + int64-buffer: 1.1.0 + pushdata-bitcoin: 1.0.1 + tiny-secp256k1: 1.1.7 + tslib: 2.8.1 + typeforce: 1.18.0 + varuint-bitcoin: 2.0.0 + wif: 5.0.0 + + '@trezor/websocket-client@1.3.0(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)': + dependencies: + '@trezor/utils': 9.5.0(tslib@2.8.1) + tslib: 2.8.1 + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + '@tsconfig/node10@1.0.11': {} '@tsconfig/node12@1.0.11': {} @@ -10787,6 +13230,25 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@twind/core@1.1.3(typescript@5.9.3)': + dependencies: + csstype: 3.2.3 + optionalDependencies: + typescript: 5.9.3 + + '@twind/preset-autoprefix@1.0.7(@twind/core@1.1.3(typescript@5.9.3))(typescript@5.9.3)': + dependencies: + '@twind/core': 1.1.3(typescript@5.9.3) + style-vendorizer: 2.2.3 + optionalDependencies: + typescript: 5.9.3 + + '@twind/preset-tailwind@1.1.4(@twind/core@1.1.3(typescript@5.9.3))(typescript@5.9.3)': + dependencies: + '@twind/core': 1.1.3(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + '@tybys/wasm-util@0.10.0': dependencies: tslib: 2.8.1 @@ -10906,6 +13368,8 @@ snapshots: '@types/ms@2.1.0': {} + '@types/node@12.20.55': {} + '@types/node@18.19.130': dependencies: undici-types: 5.26.5 @@ -10979,8 +13443,22 @@ snapshots: '@types/trusted-types@2.0.7': {} + '@types/uuid@10.0.0': {} + '@types/validator@13.15.3': {} + '@types/w3c-web-usb@1.0.14': {} + + '@types/web@0.0.197': {} + + '@types/ws@7.4.7': + dependencies: + '@types/node': 22.19.17 + + '@types/ws@8.18.1': + dependencies: + '@types/node': 22.19.17 + '@types/yargs-parser@21.0.3': {} '@types/yargs@17.0.35': @@ -11166,21 +13644,147 @@ snapshots: dependencies: '@vanilla-extract/css': 1.17.3 - '@wagmi/connectors@6.2.0(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.98.0)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)))(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6))(zod@4.3.6)': + '@wagmi/connectors@6.2.0(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.98.0)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76))(zod@3.25.76)': dependencies: - '@base-org/account': 2.4.0(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@4.3.6) - '@coinbase/wallet-sdk': 4.3.6(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@4.3.6) - '@gemini-wallet/core': 0.3.2(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)) - '@metamask/sdk': 0.33.1(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@wagmi/core': 2.22.1(@tanstack/query-core@5.98.0)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)) - '@walletconnect/ethereum-provider': 2.21.1(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + '@base-org/account': 2.4.0(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(zod@3.25.76) + '@coinbase/wallet-sdk': 4.3.6(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(zod@3.25.76) + '@gemini-wallet/core': 0.3.2(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)) + '@metamask/sdk': 0.33.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@wagmi/core': 2.22.1(@tanstack/query-core@5.98.0)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)) + '@walletconnect/ethereum-provider': 2.21.1(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - porto: 0.2.35(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.98.0)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6)) - viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + porto: 0.2.35(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.98.0)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76)) + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@tanstack/react-query' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - debug + - encoding + - expo-auth-session + - expo-crypto + - expo-web-browser + - fastestsmallesttextencoderdecoder + - immer + - ioredis + - react + - react-native + - supports-color + - uploadthing + - use-sync-external-store + - utf-8-validate + - wagmi + - zod + + '@wagmi/core@2.22.1(@tanstack/query-core@5.98.0)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))': + dependencies: + eventemitter3: 5.0.1 + mipd: 0.0.7(typescript@5.9.3) + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + zustand: 5.0.0(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) optionalDependencies: + '@tanstack/query-core': 5.98.0 typescript: 5.9.3 + transitivePeerDependencies: + - '@types/react' + - immer + - react + - use-sync-external-store + + '@wallet-standard/base@1.1.0': {} + + '@wallet-standard/features@1.1.0': + dependencies: + '@wallet-standard/base': 1.1.0 + + '@wallet-standard/wallet@1.1.0': + dependencies: + '@wallet-standard/base': 1.1.0 + + '@walletconnect/core@2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': + dependencies: + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.21.0 + '@walletconnect/utils': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@walletconnect/window-getters': 1.0.1 + es-toolkit: 1.33.0 + events: 3.3.0 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/core@2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': + dependencies: + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.21.1 + '@walletconnect/utils': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@walletconnect/window-getters': 1.0.1 + es-toolkit: 1.33.0 + events: 3.3.0 + uint8arrays: 3.1.0 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11193,8 +13797,6 @@ snapshots: - '@netlify/blobs' - '@planetscale/database' - '@react-native-async-storage/async-storage' - - '@tanstack/react-query' - - '@types/react' - '@upstash/redis' - '@vercel/blob' - '@vercel/functions' @@ -11202,57 +13804,31 @@ snapshots: - aws4fetch - bufferutil - db0 - - debug - - encoding - - expo-auth-session - - expo-crypto - - expo-web-browser - - fastestsmallesttextencoderdecoder - - immer - ioredis - - react - - react-native - - supports-color + - typescript - uploadthing - - use-sync-external-store - utf-8-validate - - wagmi - zod - '@wagmi/core@2.22.1(@tanstack/query-core@5.98.0)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))': - dependencies: - eventemitter3: 5.0.1 - mipd: 0.0.7(typescript@5.9.3) - viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - zustand: 5.0.0(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) - optionalDependencies: - '@tanstack/query-core': 5.98.0 - typescript: 5.9.3 - transitivePeerDependencies: - - '@types/react' - - immer - - react - - use-sync-external-store - - '@walletconnect/core@2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)': + '@walletconnect/core@2.23.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.1.0)(utf-8-validate@6.0.6) '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/logger': 2.1.2 + '@walletconnect/logger': 3.0.0 '@walletconnect/relay-api': 1.0.11 '@walletconnect/relay-auth': 1.1.0 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.21.0 - '@walletconnect/utils': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + '@walletconnect/types': 2.23.0 + '@walletconnect/utils': 2.23.0(typescript@5.9.3)(zod@3.25.76) '@walletconnect/window-getters': 1.0.1 - es-toolkit: 1.33.0 + es-toolkit: 1.39.3 events: 3.3.0 - uint8arrays: 3.1.0 + uint8arrays: 3.1.1 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11278,25 +13854,25 @@ snapshots: - utf-8-validate - zod - '@walletconnect/core@2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)': + '@walletconnect/core@2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.1.0)(utf-8-validate@6.0.6) '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/logger': 2.1.2 + '@walletconnect/logger': 3.0.2 '@walletconnect/relay-api': 1.0.11 '@walletconnect/relay-auth': 1.1.0 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.21.1 - '@walletconnect/utils': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + '@walletconnect/types': 2.23.7 + '@walletconnect/utils': 2.23.7(typescript@5.9.3)(zod@3.25.76) '@walletconnect/window-getters': 1.0.1 - es-toolkit: 1.33.0 + es-toolkit: 1.44.0 events: 3.3.0 - uint8arrays: 3.1.0 + uint8arrays: 3.1.1 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11326,18 +13902,18 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/ethereum-provider@2.21.1(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)': + '@walletconnect/ethereum-provider@2.21.1(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': dependencies: - '@reown/appkit': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) '@walletconnect/jsonrpc-http-connection': 1.0.8 '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/sign-client': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + '@walletconnect/sign-client': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) '@walletconnect/types': 2.21.1 - '@walletconnect/universal-provider': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@walletconnect/utils': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + '@walletconnect/universal-provider': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@walletconnect/utils': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -11404,21 +13980,257 @@ snapshots: '@walletconnect/jsonrpc-types': 1.0.4 tslib: 1.14.1 - '@walletconnect/jsonrpc-ws-connection@1.0.16(bufferutil@4.1.0)(utf-8-validate@5.0.10)': + '@walletconnect/jsonrpc-ws-connection@1.0.16(bufferutil@4.1.0)(utf-8-validate@6.0.6)': dependencies: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/safe-json': 1.0.2 events: 3.3.0 - ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6) transitivePeerDependencies: - bufferutil - utf-8-validate '@walletconnect/keyvaluestorage@1.1.1': dependencies: - '@walletconnect/safe-json': 1.0.2 - idb-keyval: 6.2.2 - unstorage: 1.17.5(idb-keyval@6.2.2) + '@walletconnect/safe-json': 1.0.2 + idb-keyval: 6.2.2 + unstorage: 1.17.5(idb-keyval@6.2.2) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing + + '@walletconnect/logger@2.1.2': + dependencies: + '@walletconnect/safe-json': 1.0.2 + pino: 7.11.0 + + '@walletconnect/logger@3.0.0': + dependencies: + '@walletconnect/safe-json': 1.0.2 + pino: 10.0.0 + + '@walletconnect/logger@3.0.2': + dependencies: + '@walletconnect/safe-json': 1.0.2 + pino: 10.0.0 + + '@walletconnect/relay-api@1.0.11': + dependencies: + '@walletconnect/jsonrpc-types': 1.0.4 + + '@walletconnect/relay-auth@1.1.0': + dependencies: + '@noble/curves': 1.8.0 + '@noble/hashes': 1.7.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + uint8arrays: 3.1.1 + + '@walletconnect/safe-json@1.0.2': + dependencies: + tslib: 1.14.1 + + '@walletconnect/sign-client@2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': + dependencies: + '@walletconnect/core': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.21.0 + '@walletconnect/utils': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/sign-client@2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': + dependencies: + '@walletconnect/core': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.21.1 + '@walletconnect/utils': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/sign-client@2.23.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': + dependencies: + '@walletconnect/core': 2.23.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 3.0.0 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.23.0 + '@walletconnect/utils': 2.23.0(typescript@5.9.3)(zod@3.25.76) + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/sign-client@2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': + dependencies: + '@walletconnect/core': 2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 3.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.23.7 + '@walletconnect/utils': 2.23.7(typescript@5.9.3)(zod@3.25.76) + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/time@1.0.2': + dependencies: + tslib: 1.14.1 + + '@walletconnect/types@2.21.0': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing + + '@walletconnect/types@2.21.1': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11430,6 +14242,7 @@ snapshots: - '@deno/kv' - '@netlify/blobs' - '@planetscale/database' + - '@react-native-async-storage/async-storage' - '@upstash/redis' - '@vercel/blob' - '@vercel/functions' @@ -11439,37 +14252,13 @@ snapshots: - ioredis - uploadthing - '@walletconnect/logger@2.1.2': - dependencies: - '@walletconnect/safe-json': 1.0.2 - pino: 7.11.0 - - '@walletconnect/relay-api@1.0.11': - dependencies: - '@walletconnect/jsonrpc-types': 1.0.4 - - '@walletconnect/relay-auth@1.1.0': - dependencies: - '@noble/curves': 1.8.0 - '@noble/hashes': 1.7.0 - '@walletconnect/safe-json': 1.0.2 - '@walletconnect/time': 1.0.2 - uint8arrays: 3.1.0 - - '@walletconnect/safe-json@1.0.2': - dependencies: - tslib: 1.14.1 - - '@walletconnect/sign-client@2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)': + '@walletconnect/types@2.23.0': dependencies: - '@walletconnect/core': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/logger': 2.1.2 - '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.21.0 - '@walletconnect/utils': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 3.0.0 events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -11488,24 +14277,17 @@ snapshots: - '@vercel/functions' - '@vercel/kv' - aws4fetch - - bufferutil - db0 - ioredis - - typescript - uploadthing - - utf-8-validate - - zod - '@walletconnect/sign-client@2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)': + '@walletconnect/types@2.23.7': dependencies: - '@walletconnect/core': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/logger': 2.1.2 - '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.21.1 - '@walletconnect/utils': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 3.0.2 events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -11524,25 +14306,17 @@ snapshots: - '@vercel/functions' - '@vercel/kv' - aws4fetch - - bufferutil - db0 - ioredis - - typescript - uploadthing - - utf-8-validate - - zod - - '@walletconnect/time@1.0.2': - dependencies: - tslib: 1.14.1 - '@walletconnect/types@2.21.0': + '@walletconnect/types@2.23.9': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/logger': 2.1.2 + '@walletconnect/logger': 3.0.2 events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -11565,13 +14339,19 @@ snapshots: - ioredis - uploadthing - '@walletconnect/types@2.21.1': + '@walletconnect/universal-provider@2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': dependencies: '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 2.1.2 + '@walletconnect/sign-client': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@walletconnect/types': 2.21.0 + '@walletconnect/utils': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + es-toolkit: 1.33.0 events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -11590,11 +14370,16 @@ snapshots: - '@vercel/functions' - '@vercel/kv' - aws4fetch + - bufferutil - db0 + - encoding - ioredis + - typescript - uploadthing + - utf-8-validate + - zod - '@walletconnect/universal-provider@2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)': + '@walletconnect/universal-provider@2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/jsonrpc-http-connection': 1.0.8 @@ -11603,9 +14388,9 @@ snapshots: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@walletconnect/types': 2.21.0 - '@walletconnect/utils': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + '@walletconnect/sign-client': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@walletconnect/types': 2.21.1 + '@walletconnect/utils': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) es-toolkit: 1.33.0 events: 3.3.0 transitivePeerDependencies: @@ -11634,7 +14419,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/universal-provider@2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)': + '@walletconnect/universal-provider@2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/jsonrpc-http-connection': 1.0.8 @@ -11642,11 +14427,11 @@ snapshots: '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - '@walletconnect/types': 2.21.1 - '@walletconnect/utils': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) - es-toolkit: 1.33.0 + '@walletconnect/logger': 3.0.2 + '@walletconnect/sign-client': 2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) + '@walletconnect/types': 2.23.7 + '@walletconnect/utils': 2.23.7(typescript@5.9.3)(zod@3.25.76) + es-toolkit: 1.44.0 events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -11674,7 +14459,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)': + '@walletconnect/utils@2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': dependencies: '@noble/ciphers': 1.2.1 '@noble/curves': 1.8.1 @@ -11692,7 +14477,7 @@ snapshots: detect-browser: 5.3.0 query-string: 7.1.3 uint8arrays: 3.1.0 - viem: 2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + viem: 2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11718,7 +14503,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)': + '@walletconnect/utils@2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)': dependencies: '@noble/ciphers': 1.2.1 '@noble/curves': 1.8.1 @@ -11736,7 +14521,7 @@ snapshots: detect-browser: 5.3.0 query-string: 7.1.3 uint8arrays: 3.1.0 - viem: 2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + viem: 2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11762,6 +14547,95 @@ snapshots: - utf-8-validate - zod + '@walletconnect/utils@2.23.0(typescript@5.9.3)(zod@3.25.76)': + dependencies: + '@msgpack/msgpack': 3.1.2 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 3.0.0 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.23.0 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + blakejs: 1.2.1 + bs58: 6.0.0 + detect-browser: 5.3.0 + ox: 0.9.3(typescript@5.9.3)(zod@3.25.76) + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - typescript + - uploadthing + - zod + + '@walletconnect/utils@2.23.7(typescript@5.9.3)(zod@3.25.76)': + dependencies: + '@msgpack/msgpack': 3.1.3 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 3.0.2 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.23.7 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + blakejs: 1.2.1 + detect-browser: 5.3.0 + ox: 0.9.3(typescript@5.9.3)(zod@3.25.76) + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - typescript + - uploadthing + - zod + '@walletconnect/window-getters@1.0.1': dependencies: tslib: 1.14.1 @@ -11847,6 +14721,23 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 + '@xrplf/isomorphic@1.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)': + dependencies: + '@noble/hashes': 1.8.0 + eventemitter3: 5.0.1 + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@xrplf/secret-numbers@2.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)': + dependencies: + '@xrplf/isomorphic': 1.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ripple-keypairs: 2.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + '@xtuc/ieee754@1.2.0': {} '@xtuc/long@4.2.2': {} @@ -11858,10 +14749,10 @@ snapshots: typescript: 5.9.3 zod: 3.25.76 - abitype@1.0.8(typescript@5.9.3)(zod@4.3.6): + abitype@1.0.8(typescript@5.9.3)(zod@3.25.76): optionalDependencies: typescript: 5.9.3 - zod: 4.3.6 + zod: 3.25.76 abitype@1.2.3(typescript@5.9.3)(zod@3.22.4): optionalDependencies: @@ -11924,6 +14815,12 @@ snapshots: aes-js@4.0.0-beta.5: {} + agent-base@7.1.4: {} + + agentkeepalive@4.6.0: + dependencies: + humanize-ms: 1.2.1 + ajv-formats@2.1.1(ajv@8.18.0): optionalDependencies: ajv: 8.18.0 @@ -12147,6 +15044,12 @@ snapshots: asap@2.0.6: {} + asn1.js@4.10.1: + dependencies: + bn.js: 4.12.3 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + asn1@0.2.6: dependencies: safer-buffer: 2.1.2 @@ -12284,6 +15187,10 @@ snapshots: dependencies: bare-path: 3.0.0 + base-x@3.0.11: + dependencies: + safe-buffer: 5.2.1 + base-x@5.0.1: {} base32.js@0.1.0: {} @@ -12300,18 +15207,42 @@ snapshots: dependencies: tweetnacl: 0.14.5 + bech32@2.0.0: {} + + big-integer@1.6.36: {} + big.js@6.2.2: {} bignumber.js@10.0.2: {} bignumber.js@9.3.1: {} + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + bip32-path@0.4.2: {} + + bip66@2.0.0: {} + + bitcoin-ops@1.4.1: {} + bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 + blake-hash@2.0.0: + dependencies: + node-addon-api: 3.2.1 + node-gyp-build: 4.8.4 + readable-stream: 3.6.2 + + blakejs@1.2.1: {} + + bn.js@4.12.3: {} + bn.js@5.2.3: {} body-parser@2.2.2: @@ -12328,6 +15259,16 @@ snapshots: transitivePeerDependencies: - supports-color + borsh@0.7.0: + dependencies: + bn.js: 5.2.3 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + borsh@1.0.0: {} + + borsh@2.0.0: {} + bowser@2.14.1: {} brace-expansion@1.1.14: @@ -12347,10 +15288,52 @@ snapshots: dependencies: fill-range: 7.1.1 + brorand@1.1.0: {} + browser-level@3.0.0: dependencies: abstract-level: 3.1.1 + browserify-aes@1.2.0: + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.7 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + browserify-cipher@1.0.1: + dependencies: + browserify-aes: 1.2.0 + browserify-des: 1.0.2 + evp_bytestokey: 1.0.3 + + browserify-des@1.0.2: + dependencies: + cipher-base: 1.0.7 + des.js: 1.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + browserify-rsa@4.1.1: + dependencies: + bn.js: 5.2.3 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + + browserify-sign@4.2.5: + dependencies: + bn.js: 5.2.3 + browserify-rsa: 4.1.1 + create-hash: 1.2.0 + create-hmac: 1.1.7 + elliptic: 6.6.1 + inherits: 2.0.4 + parse-asn1: 5.1.9 + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + browserslist@4.28.2: dependencies: baseline-browser-mapping: 2.10.18 @@ -12363,10 +15346,19 @@ snapshots: dependencies: fast-json-stable-stringify: 2.1.0 + bs58@4.0.1: + dependencies: + base-x: 3.0.11 + bs58@6.0.0: dependencies: base-x: 5.0.1 + bs58check@4.0.0: + dependencies: + '@noble/hashes': 1.8.0 + bs58: 6.0.0 + bser@2.1.1: dependencies: node-int64: 0.4.0 @@ -12379,6 +15371,8 @@ snapshots: buffer-reverse@1.0.1: {} + buffer-xor@1.0.3: {} + buffer@5.7.1: dependencies: base64-js: 1.5.1 @@ -12449,8 +15443,16 @@ snapshots: caniuse-lite@1.0.30001787: {} + cashaddrjs@0.4.4: + dependencies: + big-integer: 1.6.36 + catering@2.1.1: {} + cbor@10.0.12: + dependencies: + nofilter: 3.1.0 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -12480,6 +15482,12 @@ snapshots: ci-info@4.4.0: {} + cipher-base@1.0.7: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + to-buffer: 1.2.2 + citty@0.1.6: dependencies: consola: 3.4.2 @@ -12667,6 +15675,28 @@ snapshots: crc-32: 1.2.2 readable-stream: 4.7.0 + create-ecdh@4.0.4: + dependencies: + bn.js: 4.12.3 + elliptic: 6.6.1 + + create-hash@1.2.0: + dependencies: + cipher-base: 1.0.7 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.3 + sha.js: 2.4.12 + + create-hmac@1.1.7: + dependencies: + cipher-base: 1.0.7 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.3 + safe-buffer: 5.2.1 + sha.js: 2.4.12 + create-require@1.1.1: {} cross-fetch@3.2.0: @@ -12693,6 +15723,20 @@ snapshots: crypt@0.0.2: {} + crypto-browserify@3.12.0: + dependencies: + browserify-cipher: 1.0.1 + browserify-sign: 4.2.5 + create-ecdh: 4.0.4 + create-hash: 1.2.0 + create-hmac: 1.1.7 + diffie-hellman: 5.0.3 + inherits: 2.0.4 + pbkdf2: 3.1.5 + public-encrypt: 4.0.3 + randombytes: 2.1.0 + randomfill: 1.0.4 + crypto-js@4.2.0: {} css-what@6.2.2: {} @@ -12795,18 +15839,29 @@ snapshots: defu@6.1.7: {} + delay@5.0.0: {} + delayed-stream@1.0.0: {} + depd@1.1.2: {} + depd@2.0.0: {} derive-valtio@0.1.0(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0)): dependencies: valtio: 1.13.2(@types/react@19.2.14)(react@19.1.0) + des.js@1.1.0: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + destr@2.0.5: {} detect-browser@5.3.0: {} + detect-europe-js@0.1.2: {} + detect-libc@2.1.2: {} detect-newline@3.1.0: {} @@ -12820,6 +15875,12 @@ snapshots: diff@8.0.4: {} + diffie-hellman@5.0.3: + dependencies: + bn.js: 4.12.3 + miller-rabin: 4.0.1 + randombytes: 2.1.0 + dijkstrajs@1.0.3: {} docker-compose@1.4.2: @@ -12894,6 +15955,16 @@ snapshots: electron-to-chromium@1.5.335: {} + elliptic@6.6.1: + dependencies: + bn.js: 4.12.3 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + emittery@0.13.1: {} emoji-regex@8.0.0: {} @@ -12912,12 +15983,12 @@ snapshots: dependencies: once: 1.4.0 - engine.io-client@6.6.4(bufferutil@4.1.0)(utf-8-validate@5.0.10): + engine.io-client@6.6.4(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@socket.io/component-emitter': 3.1.2 debug: 4.4.3 engine.io-parser: 5.2.3 - ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) xmlhttprequest-ssl: 2.1.2 transitivePeerDependencies: - bufferutil @@ -13045,6 +16116,16 @@ snapshots: es-toolkit@1.33.0: {} + es-toolkit@1.39.3: {} + + es-toolkit@1.44.0: {} + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + esbuild@0.27.7: optionalDependencies: '@esbuild/aix-ppc64': 0.27.7 @@ -13351,7 +16432,7 @@ snapshots: '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - ethers@6.16.0(bufferutil@4.1.0)(utf-8-validate@5.0.10): + ethers@6.16.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@adraffy/ens-normalize': 1.10.1 '@noble/curves': 1.2.0 @@ -13359,7 +16440,7 @@ snapshots: '@types/node': 22.7.5 aes-js: 4.0.0-beta.5 tslib: 2.7.0 - ws: 8.17.1(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ws: 8.17.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -13382,6 +16463,11 @@ snapshots: eventsource@2.0.2: {} + evp_bytestokey@1.0.3: + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -13429,6 +16515,8 @@ snapshots: jest-mock: 30.3.0 jest-util: 30.3.0 + exponential-backoff@3.1.3: {} + express@5.2.1: dependencies: accepts: 2.0.0 @@ -13469,6 +16557,8 @@ snapshots: readable-stream: 4.7.0 webextension-polyfill: 0.10.0 + eyes@0.1.8: {} + fast-check@3.23.2: dependencies: pure-rand: 6.1.0 @@ -13495,8 +16585,12 @@ snapshots: fast-safe-stringify@2.1.1: {} + fast-stable-stringify@1.0.0: {} + fast-uri@3.1.0: {} + fastestsmallesttextencoderdecoder@1.0.22: {} + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -13534,6 +16628,8 @@ snapshots: transitivePeerDependencies: - supports-color + file-uri-to-path@1.0.0: {} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -13652,6 +16748,14 @@ snapshots: functions-have-names@1.2.3: {} + generate-function@2.3.1: + dependencies: + is-property: 1.0.2 + + generate-object-property@1.2.0: + dependencies: + is-property: 1.0.2 + generator-function@2.0.1: {} gensync@1.0.0-beta.2: {} @@ -13798,6 +16902,18 @@ snapshots: dependencies: has-symbols: 1.1.0 + hash-base@3.1.2: + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + to-buffer: 1.2.2 + + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + hashery@1.5.1: dependencies: hookified: 1.15.1 @@ -13814,12 +16930,28 @@ snapshots: hex@0.1.0: {} + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + hono@4.12.12: {} hookified@1.15.1: {} + htm@3.1.1: {} + html-escaper@2.0.2: {} + http-errors@1.7.2: + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.1 + statuses: 1.5.0 + toidentifier: 1.0.0 + http-errors@2.0.1: dependencies: depd: 2.0.0 @@ -13832,6 +16964,10 @@ snapshots: human-signals@8.0.1: {} + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + iconv-lite@0.7.2: dependencies: safer-buffer: 2.1.2 @@ -13863,14 +16999,20 @@ snapshots: once: 1.4.0 wrappy: 1.0.2 + inherits@2.0.3: {} + inherits@2.0.4: {} + int64-buffer@1.1.0: {} + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.1.0 + ip-address@10.1.0: {} + ipaddr.js@1.9.1: {} iron-webcrypto@1.2.1: {} @@ -13956,6 +17098,16 @@ snapshots: is-map@2.0.3: {} + is-my-ip-valid@1.0.1: {} + + is-my-json-valid@2.20.6: + dependencies: + generate-function: 2.3.1 + generate-object-property: 1.2.0 + is-my-ip-valid: 1.0.1 + jsonpointer: 5.0.1 + xtend: 4.0.2 + is-negative-zero@2.0.3: {} is-number-object@1.1.1: @@ -13969,6 +17121,8 @@ snapshots: is-promise@4.0.0: {} + is-property@1.0.2: {} + is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -13986,6 +17140,8 @@ snapshots: dependencies: call-bound: 1.0.4 + is-standalone-pwa@0.1.1: {} + is-stream@2.0.1: {} is-stream@4.0.1: {} @@ -14026,13 +17182,17 @@ snapshots: isexe@2.0.0: {} - isows@1.0.6(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): + isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6)): + dependencies: + ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6) + + isows@1.0.6(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)): dependencies: - ws: 8.18.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ws: 8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) - isows@1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)): + isows@1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)): dependencies: - ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) istanbul-lib-coverage@3.2.2: {} @@ -14082,6 +17242,24 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jayson@4.3.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + json-stringify-safe: 5.0.1 + stream-json: 1.9.1 + uuid: 8.3.2 + ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + jest-changed-files@30.3.0: dependencies: execa: 5.1.1 @@ -14448,6 +17626,10 @@ snapshots: js-cookie@3.0.5: {} + js-sha256@0.11.1: {} + + js-sha256@0.9.0: {} + js-sha3@0.9.3: {} js-tokens@4.0.0: {} @@ -14480,6 +17662,8 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} + json-stringify-safe@5.0.1: {} + json2mq@0.2.0: dependencies: string-convert: 0.2.1 @@ -14498,6 +17682,8 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonpointer@5.0.1: {} + jsonwebtoken@9.0.3: dependencies: jws: 4.0.1 @@ -14706,6 +17892,8 @@ snapshots: safe-stable-stringify: 2.5.0 triple-beam: 1.4.1 + long@5.2.5: {} + long@5.3.2: {} loose-envify@1.4.0: @@ -14724,6 +17912,8 @@ snapshots: dependencies: yallist: 4.0.0 + lru_map@0.4.1: {} + lucide-react@1.8.0(react@19.1.0): dependencies: react: 19.1.0 @@ -14761,6 +17951,12 @@ snapshots: maybe-combine-errors@1.0.0: {} + md5.js@1.3.5: + dependencies: + hash-base: 3.1.2 + inherits: 2.0.4 + safe-buffer: 5.2.1 + md5@2.3.0: dependencies: charenc: 0.0.2 @@ -14800,6 +17996,11 @@ snapshots: braces: 3.0.3 picomatch: 4.0.4 + miller-rabin@4.0.1: + dependencies: + bn.js: 4.12.3 + brorand: 1.1.0 + mime-db@1.52.0: {} mime-db@1.54.0: {} @@ -14816,6 +18017,10 @@ snapshots: mimic-fn@2.1.0: {} + minimalistic-assert@1.0.1: {} + + minimalistic-crypto-utils@1.0.1: {} + minimatch@10.2.5: dependencies: brace-expansion: 5.0.5 @@ -14891,10 +18096,11 @@ snapshots: multiformats@9.9.0: {} + mustache@4.0.0: {} + mute-stream@2.0.0: {} - nan@2.26.2: - optional: true + nan@2.26.2: {} nanoid@3.3.11: {} @@ -14904,6 +18110,32 @@ snapshots: natural-compare@1.4.0: {} + near-abi@0.2.0: + dependencies: + '@types/json-schema': 7.0.15 + + near-api-js@5.1.1: + dependencies: + '@near-js/accounts': 1.4.1 + '@near-js/crypto': 1.4.2 + '@near-js/keystores': 0.2.2 + '@near-js/keystores-browser': 0.2.2 + '@near-js/keystores-node': 0.1.2 + '@near-js/providers': 1.0.3 + '@near-js/signers': 0.2.2 + '@near-js/transactions': 1.3.3 + '@near-js/types': 0.3.1 + '@near-js/utils': 1.1.0 + '@near-js/wallet-account': 1.3.3 + '@noble/curves': 1.8.1 + borsh: 1.0.0 + depd: 2.0.0 + http-errors: 1.7.2 + near-abi: 0.2.0 + node-fetch: 2.6.7 + transitivePeerDependencies: + - encoding + negotiator@1.0.0: {} neo-async@2.6.2: {} @@ -14961,6 +18193,12 @@ snapshots: node-addon-api@2.0.2: {} + node-addon-api@3.2.1: {} + + node-addon-api@5.1.0: {} + + node-addon-api@8.7.0: {} + node-emoji@1.11.0: dependencies: lodash: 4.18.1 @@ -14974,6 +18212,10 @@ snapshots: node-fetch-native@1.6.7: {} + node-fetch@2.6.7: + dependencies: + whatwg-url: 5.0.0 + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 @@ -14991,6 +18233,8 @@ snapshots: node-releases@2.0.37: {} + nofilter@3.1.0: {} + normalize-path@3.0.0: {} npm-run-path@4.0.1: @@ -15074,6 +18318,8 @@ snapshots: on-exit-leak-free@0.2.0: {} + on-exit-leak-free@2.1.2: {} + on-finished@2.3.0: dependencies: ee-first: 1.1.1 @@ -15181,28 +18427,28 @@ snapshots: transitivePeerDependencies: - zod - ox@0.6.7(typescript@5.9.3)(zod@4.3.6): + ox@0.6.7(typescript@5.9.3)(zod@3.25.76): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/curves': 1.9.7 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.0.8(typescript@5.9.3)(zod@4.3.6) + abitype: 1.0.8(typescript@5.9.3)(zod@3.25.76) eventemitter3: 5.0.1 optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - zod - ox@0.6.9(typescript@5.9.3)(zod@4.3.6): + ox@0.6.9(typescript@5.9.3)(zod@3.25.76): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/curves': 1.9.7 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@5.9.3)(zod@4.3.6) + abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76) eventemitter3: 5.0.1 optionalDependencies: typescript: 5.9.3 @@ -15224,6 +18470,21 @@ snapshots: transitivePeerDependencies: - zod + ox@0.9.3(typescript@5.9.3)(zod@3.25.76): + dependencies: + '@adraffy/ens-normalize': 1.11.1 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - zod + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -15250,6 +18511,14 @@ snapshots: dependencies: callsites: 3.1.0 + parse-asn1@5.1.9: + dependencies: + asn1.js: 4.10.1 + browserify-aes: 1.2.0 + evp_bytestokey: 1.0.3 + pbkdf2: 3.1.5 + safe-buffer: 5.2.1 + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.27.1 @@ -15287,6 +18556,15 @@ snapshots: pathe@2.0.3: {} + pbkdf2@3.1.5: + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.3 + safe-buffer: 5.2.1 + sha.js: 2.4.12 + to-buffer: 1.2.2 + perfect-debounce@1.0.0: {} picocolors@1.1.1: {} @@ -15302,8 +18580,28 @@ snapshots: duplexify: 4.1.3 split2: 4.2.0 + pino-abstract-transport@2.0.0: + dependencies: + split2: 4.2.0 + pino-std-serializers@4.0.0: {} + pino-std-serializers@7.1.0: {} + + pino@10.0.0: + dependencies: + atomic-sleep: 1.0.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pino-std-serializers: 7.1.0 + process-warning: 5.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + slow-redact: 0.3.2 + sonic-boom: 4.2.1 + thread-stream: 3.1.0 + pino@7.11.0: dependencies: atomic-sleep: 1.0.0 @@ -15336,21 +18634,21 @@ snapshots: pony-cause@2.1.11: {} - porto@0.2.35(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.98.0)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6)): + porto@0.2.35(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.98.0)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76)): dependencies: - '@wagmi/core': 2.22.1(@tanstack/query-core@5.98.0)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)) + '@wagmi/core': 2.22.1(@tanstack/query-core@5.98.0)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)) hono: 4.12.12 idb-keyval: 6.2.2 mipd: 0.0.7(typescript@5.9.3) ox: 0.9.17(typescript@5.9.3)(zod@4.3.6) - viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) zod: 4.3.6 zustand: 5.0.12(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) optionalDependencies: '@tanstack/react-query': 5.98.0(react@19.1.0) react: 19.1.0 typescript: 5.9.3 - wagmi: 2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6) + wagmi: 2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76) transitivePeerDependencies: - '@types/react' - immer @@ -15418,15 +18716,17 @@ snapshots: process-warning@1.0.0: {} + process-warning@5.0.0: {} + process@0.11.10: {} - proofbridge-mmr@1.0.8(bufferutil@4.1.0)(utf-8-validate@5.0.10): + proofbridge-mmr@1.0.8(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@zkpassport/poseidon2': 0.6.2 abstract-level: 3.1.1 buffer-reverse: 1.0.1 crypto-js: 4.2.0 - ethers: 6.16.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ethers: 6.16.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) level: 10.0.0 rave-level: 1.0.0 transitivePeerDependencies: @@ -15453,6 +18753,21 @@ snapshots: transitivePeerDependencies: - supports-color + protobufjs@7.4.0: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 22.19.17 + long: 5.3.2 + protobufjs@7.5.4: dependencies: '@protobufjs/aspromise': 1.1.2 @@ -15483,8 +18798,19 @@ snapshots: proxy-compare@2.6.0: {} + proxy-compare@3.0.1: {} + proxy-from-env@2.1.0: {} + public-encrypt@4.0.3: + dependencies: + bn.js: 4.12.3 + browserify-rsa: 4.1.1 + create-hash: 1.2.0 + parse-asn1: 5.1.9 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + pump@3.0.4: dependencies: end-of-stream: 1.4.5 @@ -15496,6 +18822,10 @@ snapshots: pure-rand@7.0.1: {} + pushdata-bitcoin@1.0.1: + dependencies: + bitcoin-ops: 1.4.1 + qr@0.5.5: {} qrcode@1.5.3: @@ -15526,6 +18856,11 @@ snapshots: dependencies: safe-buffer: 5.2.1 + randomfill@1.0.4: + dependencies: + randombytes: 2.1.0 + safe-buffer: 5.2.1 + range-parser@1.2.1: {} rave-level@1.0.0: @@ -15946,6 +19281,8 @@ snapshots: real-require@0.1.0: {} + real-require@0.2.0: {} + reflect-metadata@0.2.2: {} reflect.getprototypeof@1.0.10: @@ -16004,6 +19341,37 @@ snapshots: reusify@1.1.0: {} + ripemd160@2.0.3: + dependencies: + hash-base: 3.1.2 + inherits: 2.0.4 + + ripple-address-codec@5.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): + dependencies: + '@scure/base': 1.2.6 + '@xrplf/isomorphic': 1.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + ripple-binary-codec@2.7.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): + dependencies: + '@xrplf/isomorphic': 1.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) + bignumber.js: 9.3.1 + ripple-address-codec: 5.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + ripple-keypairs@2.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): + dependencies: + '@noble/curves': 1.9.7 + '@xrplf/isomorphic': 1.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ripple-address-codec: 5.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + router@2.2.0: dependencies: debug: 4.4.3 @@ -16014,6 +19382,19 @@ snapshots: transitivePeerDependencies: - supports-color + rpc-websockets@9.3.8: + dependencies: + '@swc/helpers': 0.5.15 + '@types/uuid': 10.0.0 + '@types/ws': 8.18.1 + buffer: 6.0.3 + eventemitter3: 5.0.4 + uuid: 11.1.0 + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + optionalDependencies: + bufferutil: 4.1.0 + utf-8-validate: 6.0.6 + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -16072,8 +19453,16 @@ snapshots: dependencies: compute-scroll-into-view: 3.1.1 + secp256k1@5.0.1: + dependencies: + elliptic: 6.6.1 + node-addon-api: 5.1.0 + node-gyp-build: 4.8.4 + semver@6.3.1: {} + semver@7.7.1: {} + semver@7.7.2: {} semver@7.7.4: {} @@ -16127,6 +19516,8 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 + setprototypeof@1.1.1: {} + setprototypeof@1.2.0: {} sha.js@2.4.12: @@ -16135,6 +19526,11 @@ snapshots: safe-buffer: 5.2.1 to-buffer: 1.2.2 + sha1@1.1.1: + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + sharp@0.34.5: dependencies: '@img/colour': 1.1.0 @@ -16209,19 +19605,23 @@ snapshots: dependencies: varint: 5.0.0 - siwe@3.0.0(ethers@6.16.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): + siwe@3.0.0(ethers@6.16.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)): dependencies: '@spruceid/siwe-parser': 3.0.0 '@stablelib/random': 1.0.2 - ethers: 6.16.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ethers: 6.16.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) slash@3.0.0: {} - socket.io-client@4.8.3(bufferutil@4.1.0)(utf-8-validate@5.0.10): + slow-redact@0.3.2: {} + + smart-buffer@4.2.0: {} + + socket.io-client@4.8.3(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@socket.io/component-emitter': 3.1.2 debug: 4.4.3 - engine.io-client: 6.6.4(bufferutil@4.1.0)(utf-8-validate@5.0.10) + engine.io-client: 6.6.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) socket.io-parser: 4.2.6 transitivePeerDependencies: - bufferutil @@ -16235,10 +19635,27 @@ snapshots: transitivePeerDependencies: - supports-color + socks-proxy-agent@8.0.5: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + socks: 2.8.7 + transitivePeerDependencies: + - supports-color + + socks@2.8.7: + dependencies: + ip-address: 10.1.0 + smart-buffer: 4.2.0 + sonic-boom@2.8.0: dependencies: atomic-sleep: 1.0.0 + sonic-boom@4.2.1: + dependencies: + atomic-sleep: 1.0.0 + sonner@2.0.7(react-dom@19.2.5(react@19.1.0))(react@19.1.0): dependencies: react: 19.1.0 @@ -16291,6 +19708,8 @@ snapshots: dependencies: escape-string-regexp: 2.0.0 + statuses@1.5.0: {} + statuses@2.0.2: {} stop-iteration-iterator@1.1.0: @@ -16298,6 +19717,17 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 + stream-browserify@3.0.0: + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + + stream-chain@2.2.5: {} + + stream-json@1.9.1: + dependencies: + stream-chain: 2.2.5 + stream-shift@1.0.3: {} streamsearch@1.1.0: {} @@ -16412,6 +19842,8 @@ snapshots: dependencies: '@tokenizer/token': 0.3.0 + style-vendorizer@2.2.3: {} + styled-jsx@5.1.6(@babel/core@7.29.0)(react@19.1.0): dependencies: client-only: 0.0.1 @@ -16437,6 +19869,8 @@ snapshots: superstruct@1.0.4: {} + superstruct@2.0.2: {} + supertest@7.2.2: dependencies: cookie-signature: 1.2.2 @@ -16572,14 +20006,28 @@ snapshots: transitivePeerDependencies: - react-native-b4a + text-encoding-utf-8@1.0.2: {} + text-hex@1.0.0: {} thread-stream@0.15.2: dependencies: real-require: 0.1.0 + thread-stream@3.1.0: + dependencies: + real-require: 0.2.0 + throttle-debounce@5.0.2: {} + tiny-secp256k1@1.1.7: + dependencies: + bindings: 1.5.0 + bn.js: 4.12.3 + create-hmac: 1.1.7 + elliptic: 6.6.1 + nan: 2.26.2 + tinyexec@1.0.1: {} tinyglobby@0.2.16: @@ -16603,6 +20051,8 @@ snapshots: toggle-selection@1.0.6: {} + toidentifier@1.0.0: {} + toidentifier@1.0.1: {} token-types@6.1.2: @@ -16653,6 +20103,8 @@ snapshots: typescript: 5.9.3 webpack: 5.106.0 + ts-mixer@6.0.4: {} + ts-node@10.9.2(@types/node@20.19.39)(typescript@5.9.3): dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -16724,8 +20176,12 @@ snapshots: tw-animate-css@1.4.0: {} + tweetnacl-util@0.15.1: {} + tweetnacl@0.14.5: {} + tweetnacl@1.0.3: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -16782,6 +20238,8 @@ snapshots: typedarray@0.0.6: {} + typeforce@1.18.0: {} + typescript-eslint@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): dependencies: '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) @@ -16795,8 +20253,16 @@ snapshots: typescript@5.9.3: {} + ua-is-frozen@0.1.2: {} + ua-parser-js@1.0.41: {} + ua-parser-js@2.0.9: + dependencies: + detect-europe-js: 0.1.2 + is-standalone-pwa: 0.1.1 + ua-is-frozen: 0.1.2 + ufo@1.6.3: {} uglify-js@3.19.3: @@ -16808,10 +20274,16 @@ snapshots: uint8array-extras@1.5.0: {} + uint8array-tools@0.0.8: {} + uint8arrays@3.1.0: dependencies: multiformats: 9.9.0 + uint8arrays@3.1.1: + dependencies: + multiformats: 9.9.0 + unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 @@ -16890,6 +20362,12 @@ snapshots: urijs@1.19.11: {} + usb@2.17.0: + dependencies: + '@types/w3c-web-usb': 1.0.14 + node-addon-api: 8.7.0 + node-gyp-build: 4.8.4 + use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.1.0): dependencies: react: 19.1.0 @@ -16917,6 +20395,11 @@ snapshots: dependencies: node-gyp-build: 4.8.4 + utf-8-validate@6.0.6: + dependencies: + node-gyp-build: 4.8.4 + optional: true + util-deprecate@1.0.2: {} util@0.12.5: @@ -16927,8 +20410,12 @@ snapshots: is-typed-array: 1.1.15 which-typed-array: 1.1.20 + uuid4@2.0.3: {} + uuid@10.0.0: {} + uuid@11.1.0: {} + uuid@13.0.0: {} uuid@8.3.2: {} @@ -16954,22 +20441,33 @@ snapshots: '@types/react': 19.2.14 react: 19.1.0 + valtio@2.1.7(@types/react@19.2.14)(react@19.1.0): + dependencies: + proxy-compare: 3.0.1 + optionalDependencies: + '@types/react': 19.2.14 + react: 19.1.0 + varint@5.0.0: {} varint@5.0.2: {} + varuint-bitcoin@2.0.0: + dependencies: + uint8array-tools: 0.0.8 + vary@1.1.2: {} - viem@2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6): + viem@2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76): dependencies: '@noble/curves': 1.8.1 '@noble/hashes': 1.7.1 '@scure/bip32': 1.6.2 '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@5.9.3)(zod@4.3.6) - isows: 1.0.6(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - ox: 0.6.7(typescript@5.9.3)(zod@4.3.6) - ws: 8.18.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + abitype: 1.0.8(typescript@5.9.3)(zod@3.25.76) + isows: 1.0.6(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + ox: 0.6.7(typescript@5.9.3)(zod@3.25.76) + ws: 8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -16977,16 +20475,16 @@ snapshots: - utf-8-validate - zod - viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4): + viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 abitype: 1.2.3(typescript@5.9.3)(zod@3.22.4) - isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)) ox: 0.14.13(typescript@5.9.3)(zod@3.22.4) - ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -16994,16 +20492,16 @@ snapshots: - utf-8-validate - zod - viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76): + viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76) - isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)) ox: 0.14.13(typescript@5.9.3)(zod@3.25.76) - ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -17011,16 +20509,16 @@ snapshots: - utf-8-validate - zod - viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6): + viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.3.6): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 abitype: 1.2.3(typescript@5.9.3)(zod@4.3.6) - isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)) ox: 0.14.13(typescript@5.9.3)(zod@4.3.6) - ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -17028,14 +20526,14 @@ snapshots: - utf-8-validate - zod - wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6): + wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76): dependencies: '@tanstack/react-query': 5.98.0(react@19.1.0) - '@wagmi/connectors': 6.2.0(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.98.0)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)))(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6))(zod@4.3.6) - '@wagmi/core': 2.22.1(@tanstack/query-core@5.98.0)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6)) + '@wagmi/connectors': 6.2.0(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.98.0)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@6.0.6)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.98.0)(@tanstack/react-query@5.98.0(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76))(zod@3.25.76) + '@wagmi/core': 2.22.1(@tanstack/query-core@5.98.0)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)) react: 19.1.0 use-sync-external-store: 1.4.0(react@19.1.0) - viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + viem: 2.47.12(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -17178,6 +20676,10 @@ snapshots: dependencies: isexe: 2.0.0 + wif@5.0.0: + dependencies: + bs58check: 4.0.0 + winston-transport@4.9.0: dependencies: logform: 2.7.0 @@ -17227,33 +20729,49 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 4.1.0 - ws@7.5.10(bufferutil@4.1.0)(utf-8-validate@5.0.10): + ws@7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6): optionalDependencies: bufferutil: 4.1.0 - utf-8-validate: 5.0.10 + utf-8-validate: 6.0.6 - ws@8.17.1(bufferutil@4.1.0)(utf-8-validate@5.0.10): + ws@8.17.1(bufferutil@4.1.0)(utf-8-validate@6.0.6): optionalDependencies: bufferutil: 4.1.0 - utf-8-validate: 5.0.10 + utf-8-validate: 6.0.6 - ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@5.0.10): + ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): optionalDependencies: bufferutil: 4.1.0 - utf-8-validate: 5.0.10 + utf-8-validate: 6.0.6 - ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10): + ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6): optionalDependencies: bufferutil: 4.1.0 - utf-8-validate: 5.0.10 + utf-8-validate: 6.0.6 - ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10): + ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): optionalDependencies: bufferutil: 4.1.0 - utf-8-validate: 5.0.10 + utf-8-validate: 6.0.6 xmlhttprequest-ssl@2.1.2: {} + xrpl@4.4.3(bufferutil@4.1.0)(utf-8-validate@6.0.6): + dependencies: + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + '@xrplf/isomorphic': 1.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@xrplf/secret-numbers': 2.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + bignumber.js: 9.3.1 + eventemitter3: 5.0.4 + fast-json-stable-stringify: 2.1.0 + ripple-address-codec: 5.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ripple-binary-codec: 2.7.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ripple-keypairs: 2.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + xtend@4.0.2: {} y18n@4.0.3: {} From 6f9249028b4ebc86744acf069eb953105b42a3ca Mon Sep 17 00:00:00 2001 From: JoE11-y Date: Tue, 14 Apr 2026 00:19:39 +0100 Subject: [PATCH 2/6] feat: fix issues with application --- .../adapters/chain-adapter.abstract.ts | 4 +- .../adapters/evm-chain-adapter.ts | 4 +- .../adapters/stellar-chain-adapter.ts | 2 +- apps/backend-relayer/src/main.ts | 10 +- .../src/modules/ads/ad.service.ts | 8 + .../modules/chains/chain.controller.spec.ts | 2 +- .../src/modules/chains/chain.service.ts | 6 +- .../src/modules/chains/dto/chain.dto.ts | 2 +- .../src/modules/trades/trade.service.ts | 18 +- .../src/providers/stellar/stellar.service.ts | 37 +- .../test/e2e/chain.e2e-spec.ts | 2 +- .../(app)/(auth-protected)/faucet/page.tsx | 2 +- .../ad-management-ui/AddLiquidity.tsx | 33 +- .../components/bridge-ui/BridgeTab.tsx | 9 +- .../frontend/components/bridge-ui/SellAdd.tsx | 318 ------------------ .../frontend/components/bridge-ui/TradeAd.tsx | 119 +++++-- .../components/providers/StellarWallet.tsx | 26 +- apps/frontend/hooks/useAds.ts | 33 ++ apps/frontend/hooks/useTrades.ts | 104 +++--- apps/frontend/services/chains.service.ts | 2 +- apps/frontend/types/ads.ts | 21 +- apps/frontend/types/trades.ts | 29 +- apps/frontend/utils/stellar/balance.ts | 75 +++++ 23 files changed, 421 insertions(+), 445 deletions(-) delete mode 100644 apps/frontend/components/bridge-ui/SellAdd.tsx create mode 100644 apps/frontend/utils/stellar/balance.ts diff --git a/apps/backend-relayer/src/chain-adapters/adapters/chain-adapter.abstract.ts b/apps/backend-relayer/src/chain-adapters/adapters/chain-adapter.abstract.ts index 4368be1..9709a58 100644 --- a/apps/backend-relayer/src/chain-adapters/adapters/chain-adapter.abstract.ts +++ b/apps/backend-relayer/src/chain-adapters/adapters/chain-adapter.abstract.ts @@ -95,9 +95,11 @@ export abstract class ChainAdapter { abstract orderTypeHash(orderParams: T_OrderParams): string; + // Signature is a `0x`-hex blob on EVM (EIP-712) and a base64 (or `0x`-hex) + // SEP-43-style signature on Stellar. Narrow per-adapter as needed. abstract verifyOrderSignature( address: ChainAddress, orderHash: `0x${string}`, - signature: `0x${string}`, + signature: string, ): boolean; } diff --git a/apps/backend-relayer/src/chain-adapters/adapters/evm-chain-adapter.ts b/apps/backend-relayer/src/chain-adapters/adapters/evm-chain-adapter.ts index f43e495..5ef9b2e 100644 --- a/apps/backend-relayer/src/chain-adapters/adapters/evm-chain-adapter.ts +++ b/apps/backend-relayer/src/chain-adapters/adapters/evm-chain-adapter.ts @@ -183,13 +183,13 @@ export class EvmChainAdapter extends ChainAdapter { verifyOrderSignature( address: ChainAddress, orderHash: `0x${string}`, - signature: `0x${string}`, + signature: string, ): boolean { this.assertLocalAddress(address, 'address'); return this.viem.verifyOrderSignature( address as `0x${string}`, orderHash, - signature, + signature as `0x${string}`, ); } } diff --git a/apps/backend-relayer/src/chain-adapters/adapters/stellar-chain-adapter.ts b/apps/backend-relayer/src/chain-adapters/adapters/stellar-chain-adapter.ts index 283cf1c..a394e26 100644 --- a/apps/backend-relayer/src/chain-adapters/adapters/stellar-chain-adapter.ts +++ b/apps/backend-relayer/src/chain-adapters/adapters/stellar-chain-adapter.ts @@ -184,7 +184,7 @@ export class StellarChainAdapter extends ChainAdapter { verifyOrderSignature( address: ChainAddress, orderHash: `0x${string}`, - signature: `0x${string}`, + signature: string, ): boolean { this.assertLocalAddress(address, 'address'); return this.stellar.verifyOrderSignature( diff --git a/apps/backend-relayer/src/main.ts b/apps/backend-relayer/src/main.ts index da7c039..c55010f 100644 --- a/apps/backend-relayer/src/main.ts +++ b/apps/backend-relayer/src/main.ts @@ -26,7 +26,15 @@ async function bootstrap() { app.use(morgan('tiny')); app.use(express.json({ limit: 5 << 20 })); - app.useGlobalPipes(new ValidationPipe({ transform: true })); + // whitelist drops unknown fields; forbidNonWhitelisted turns them into 400s + // so clients get loud feedback on typos instead of silent data loss. + app.useGlobalPipes( + new ValidationPipe({ + transform: true, + whitelist: true, + forbidNonWhitelisted: true, + }), + ); app.useGlobalFilters(new GlobalExceptionFilter()); const swaggerOptions = new DocumentBuilder() diff --git a/apps/backend-relayer/src/modules/ads/ad.service.ts b/apps/backend-relayer/src/modules/ads/ad.service.ts index d8f0873..f12e8da 100644 --- a/apps/backend-relayer/src/modules/ads/ad.service.ts +++ b/apps/backend-relayer/src/modules/ads/ad.service.ts @@ -122,6 +122,7 @@ export class AdsService { name: true, decimals: true, kind: true, + assetIssuer: true, }, }, orderToken: { @@ -132,6 +133,7 @@ export class AdsService { name: true, decimals: true, kind: true, + assetIssuer: true, }, }, status: true, @@ -199,6 +201,7 @@ export class AdsService { chainId: i.adToken.chain.chainId.toString(), chainKind: i.adToken.chain.kind as string, kind: i.adToken.kind as string, + assetIssuer: i.adToken.assetIssuer, }, orderToken: { name: i.orderToken.name, @@ -208,6 +211,7 @@ export class AdsService { chainId: i.orderToken.chain.chainId.toString(), chainKind: i.orderToken.chain.kind as string, kind: i.orderToken.kind as string, + assetIssuer: i.orderToken.assetIssuer, }, }; }); @@ -252,6 +256,7 @@ export class AdsService { name: true, decimals: true, kind: true, + assetIssuer: true, }, }, orderToken: { @@ -262,6 +267,7 @@ export class AdsService { name: true, decimals: true, kind: true, + assetIssuer: true, }, }, createdAt: true, @@ -305,6 +311,7 @@ export class AdsService { chainId: ad.adToken.chain.chainId.toString(), chainKind: ad.adToken.chain.kind as string, kind: ad.adToken.kind as string, + assetIssuer: ad.adToken.assetIssuer, }, orderToken: { name: ad.orderToken.name, @@ -314,6 +321,7 @@ export class AdsService { chainId: ad.orderToken.chain.chainId.toString(), chainKind: ad.orderToken.chain.kind as string, kind: ad.orderToken.kind as string, + assetIssuer: ad.orderToken.assetIssuer, }, metadata: ad.metadata ?? null, createdAt: ad.createdAt.toISOString(), diff --git a/apps/backend-relayer/src/modules/chains/chain.controller.spec.ts b/apps/backend-relayer/src/modules/chains/chain.controller.spec.ts index ca5380a..4f6558f 100644 --- a/apps/backend-relayer/src/modules/chains/chain.controller.spec.ts +++ b/apps/backend-relayer/src/modules/chains/chain.controller.spec.ts @@ -30,7 +30,7 @@ describe('ChainController (unit)', () => { afterEach(() => jest.resetAllMocks()); it('list -> delegates to service', async () => { - const mock = { rows: [], nextCursor: null }; + const mock = { data: [], nextCursor: null }; const spy = jest .spyOn(service, 'listChainsPublic') .mockResolvedValueOnce(mock); diff --git a/apps/backend-relayer/src/modules/chains/chain.service.ts b/apps/backend-relayer/src/modules/chains/chain.service.ts index 727010d..33bf15e 100644 --- a/apps/backend-relayer/src/modules/chains/chain.service.ts +++ b/apps/backend-relayer/src/modules/chains/chain.service.ts @@ -20,9 +20,9 @@ export class ChainService { async listChainsPublic(query: QueryChainsDto) { try { - const data = await this.listChains(query); - const rows = data.rows.map((c) => this.toPublic(c)); - return { rows, nextCursor: data.nextCursor }; + const listed = await this.listChains(query); + const data = listed.rows.map((c) => this.toPublic(c)); + return { data, nextCursor: listed.nextCursor }; } catch (e) { if (e instanceof Error) { const status = e.message.toLowerCase().includes('forbidden') diff --git a/apps/backend-relayer/src/modules/chains/dto/chain.dto.ts b/apps/backend-relayer/src/modules/chains/dto/chain.dto.ts index ecbe74b..0815916 100644 --- a/apps/backend-relayer/src/modules/chains/dto/chain.dto.ts +++ b/apps/backend-relayer/src/modules/chains/dto/chain.dto.ts @@ -180,7 +180,7 @@ export class ChainResponseDto { export class ListChainsResponseDto { @ApiProperty({ type: [ChainResponseDto] }) - rows!: ChainResponseDto[]; + data!: ChainResponseDto[]; @ApiProperty({ description: 'Next pagination cursor', diff --git a/apps/backend-relayer/src/modules/trades/trade.service.ts b/apps/backend-relayer/src/modules/trades/trade.service.ts index b44e0c0..0df841c 100644 --- a/apps/backend-relayer/src/modules/trades/trade.service.ts +++ b/apps/backend-relayer/src/modules/trades/trade.service.ts @@ -511,6 +511,7 @@ export class TradesService { adLock: true, status: true, tradeUpdateLog: true, + orderHash: true, bridgerAddress: true, bridgerDstAddress: true, adCreatorDstAddress: true, @@ -525,6 +526,7 @@ export class TradesService { chainId: true, adManagerAddress: true, mmrId: true, + kind: true, }, }, }, @@ -536,6 +538,7 @@ export class TradesService { select: { chainId: true, orderPortalAddress: true, + kind: true, }, }, }, @@ -556,6 +559,17 @@ export class TradesService { throw new ForbiddenException('Unauthorized'); } + // Derive which chain this caller will unlock on. adCreator unlocks on + // the order chain (they're claiming bridger-provided funds there); + // bridger unlocks on the ad chain. The frontend uses this to pick the + // right signing flow (EIP-712 vs SEP-43 Stellar signMessage). + const isAdCreator = + normalizeChainAddress(trade.adCreatorAddress) === + normalizeChainAddress(user.walletAddress); + const unlockChainKind = isAdCreator + ? trade.route.orderToken.chain.kind + : trade.route.adToken.chain.kind; + // All address-like fields are declared bytes32 in the cross-chain // Order typed-data (EVM addresses left-padded; Stellar accounts already // 32 bytes), so return the padded wire form here. @@ -573,6 +587,8 @@ export class TradesService { adCreator: toBytes32(trade.adCreatorAddress), adRecipient: toBytes32(trade.adCreatorDstAddress), salt: uuidToBigInt(trade.id).toString(), + orderHash: trade.orderHash, + unlockChainKind, }; } catch (e) { if (e instanceof Error) { @@ -840,7 +856,7 @@ export class TradesService { .verifyOrderSignature( unlockSigner as `0x${string}`, trade.orderHash as `0x${string}`, - dto.signature as `0x${string}`, + dto.signature, ); if (!isAuthorized) { diff --git a/apps/backend-relayer/src/providers/stellar/stellar.service.ts b/apps/backend-relayer/src/providers/stellar/stellar.service.ts index 64f2f47..4d489e3 100644 --- a/apps/backend-relayer/src/providers/stellar/stellar.service.ts +++ b/apps/backend-relayer/src/providers/stellar/stellar.service.ts @@ -580,20 +580,39 @@ export class StellarService { return computeOrderHash(orderParams); } - // Verify an ed25519 signature over `orderHash` (32-byte hex). On Stellar the - // "address" passed in is the G-strkey or its 32-byte hex — we take the - // 32-byte payload as the ed25519 public key. + // Verify a Stellar-wallet signature over `orderHash`. Off-chain only — this + // authorizes the unlock request on the relayer and never goes on-chain. + // + // Wallets don't sign raw bytes; stellar-wallets-kit's `signMessage` applies + // SEP-43-style domain separation and sha256 before ed25519. We reconstruct + // the same preimage here. Frontend sends the orderHash hex string (with + // `0x` prefix) as the message; signature arrives base64-encoded (kit + // normalizes) — we also accept `0x`-hex for direct-bytes callers. + // + // "address" is the G-strkey or its 32-byte hex; the 32-byte payload is the + // ed25519 public key. verifyOrderSignature( address: `0x${string}`, orderHash: `0x${string}`, - signature: `0x${string}`, + signature: string, ): boolean { - const publicKey = hex32ToBuffer(address); - const msg = hex32ToBuffer(orderHash); - const sigBytes = Buffer.from(signature.replace(/^0x/, ''), 'hex'); - if (sigBytes.length !== 64) return false; try { - return verifyEd25519(msg, sigBytes, publicKey); + const publicKey = hex32ToBuffer(address); + const sigBytes = signature.startsWith('0x') + ? Buffer.from(signature.slice(2), 'hex') + : Buffer.from(signature, 'base64'); + if (sigBytes.length !== 64) return false; + + const messageStr = orderHash.startsWith('0x') + ? orderHash + : `0x${orderHash}`; + const preimage = Buffer.concat([ + Buffer.from('Stellar Signed Message:\n', 'utf8'), + Buffer.from(messageStr, 'utf8'), + ]); + // Ed25519 hashes the message internally (sha512); domain separation is + // just prepended bytes, not a pre-hash. + return verifyEd25519(preimage, sigBytes, publicKey); } catch { return false; } diff --git a/apps/backend-relayer/test/e2e/chain.e2e-spec.ts b/apps/backend-relayer/test/e2e/chain.e2e-spec.ts index a8649c1..b722860 100644 --- a/apps/backend-relayer/test/e2e/chain.e2e-spec.ts +++ b/apps/backend-relayer/test/e2e/chain.e2e-spec.ts @@ -83,7 +83,7 @@ describe('Chains E2E', () => { .get('/v1/chains') .query({ chainId: '10000' }) .expect(200); - expect(res.body.rows).toEqual( + expect(res.body.data).toEqual( expect.arrayContaining([expect.objectContaining({ chainId: chainId })]), ); }); diff --git a/apps/frontend/app/(app)/(auth-protected)/faucet/page.tsx b/apps/frontend/app/(app)/(auth-protected)/faucet/page.tsx index 927514e..20072c1 100644 --- a/apps/frontend/app/(app)/(auth-protected)/faucet/page.tsx +++ b/apps/frontend/app/(app)/(auth-protected)/faucet/page.tsx @@ -101,7 +101,7 @@ const TokenList: React.FC<{ chainId: string; chainName?: string }> = ({ const FaucetPage: React.FC = () => { const { data: chainsData, isLoading } = useGetAllChains({ limit: 20 }) - const chains = chainsData?.rows || [] + const chains = chainsData?.data || [] const firstTwo = chains.slice(0, 2) return ( diff --git a/apps/frontend/components/ad-management-ui/AddLiquidity.tsx b/apps/frontend/components/ad-management-ui/AddLiquidity.tsx index f5910bd..6000f74 100644 --- a/apps/frontend/components/ad-management-ui/AddLiquidity.tsx +++ b/apps/frontend/components/ad-management-ui/AddLiquidity.tsx @@ -19,6 +19,7 @@ import { } from "viem/chains" import { CiWarning } from "react-icons/ci" import { useGetAllTokens } from "@/hooks/useTokens" +import { useStellarWallet } from "@/components/providers/StellarWallet" const supported_chains: Record = { [hederaTestnet.id]: hederaTestnet, @@ -29,11 +30,16 @@ const supported_chains: Record = { export const AddLiquidity = () => { const account = useAccount() + const { address: stellarAddress } = useStellarWallet() const { data: chains, isLoading: loadingChains } = useGetAllChains({ limit: 10, }) const [base_chain, setBase_chain] = useState() const [order_chain, setOrder_chain] = useState() + const [orderChainId, setOrderChainId] = useState("") + const orderChainKind = chains?.data?.find( + (c) => c.chainId === orderChainId, + )?.kind const is_base_chain = base_chain?.id === account.chainId const { openChainModal } = useChainModal() const { mutateAsync: createAd, isPending } = useCreateAd() @@ -51,18 +57,31 @@ export const AddLiquidity = () => { }) const { data: routes, isLoading: loadingRoutes } = useGetBridgeRoutes({ adChainId: String(base_chain?.id), - orderChainId: String(order_chain?.id), + orderChainId: orderChainId || String(order_chain?.id), adTokenId: selectedTokenId, }) + // Creator's receive address lives on the *order chain* (destination). Pick + // the wallet matching that chain's kind so we don't submit a 0x EVM address + // as a Stellar G-strkey or vice versa. + const creatorDstAddress = + orderChainKind === "STELLAR" ? stellarAddress : account.address + const handleCreateAd = async () => { try { const token = tokens?.data?.find((value) => value.id === selectedTokenId); + if (!creatorDstAddress) { + throw new Error( + orderChainKind === "STELLAR" + ? "Connect a Stellar wallet to receive on the destination chain" + : "Connect an EVM wallet to receive on the destination chain", + ) + } const response = await createAd({ payload: { routeId: routes?.data[0]?.id!, - creatorDstAddress: account.address!, + creatorDstAddress, maxAmount: parseUnits( max, @@ -106,7 +125,7 @@ export const AddLiquidity = () => { isVisibleChain(chain.chainId) && @@ -153,8 +172,12 @@ export const AddLiquidity = () => { }} onChange={(value: number) => { setOrder_chain(supported_chains[value]) + setOrderChainId(String(value)) + }} + onClear={() => { + setOrder_chain(undefined) + setOrderChainId("") }} - onClear={() => setOrder_chain(undefined)} />
diff --git a/apps/frontend/components/bridge-ui/BridgeTab.tsx b/apps/frontend/components/bridge-ui/BridgeTab.tsx index 6848b02..f5ffbb9 100644 --- a/apps/frontend/components/bridge-ui/BridgeTab.tsx +++ b/apps/frontend/components/bridge-ui/BridgeTab.tsx @@ -11,7 +11,6 @@ import { import { ArrowRight, Bot, Clock, Rabbit, Verified } from "lucide-react" import Image from "next/image" import { TradeAd } from "./TradeAd" -import { SellAd } from "./SellAdd" import { useGetAllChains } from "@/hooks/useChains" import { IChain } from "@/types/chains" import { useGetAllTokens } from "@/hooks/useTokens" @@ -47,7 +46,7 @@ export const BridgeTab = () => { orderTokenId: selectedTokenId, }) // useEffect(() => { - // if (chains?.rows.length) { + // if (chains?.data.length) { // setSelectedBaseChainId(chains.rows[0].chainId) // } // }, [chains]) @@ -84,7 +83,7 @@ export const BridgeTab = () => { className="min-w-[200px] !h-[40px]" value={selectedBaseChainId} > - {chains?.rows + {chains?.data ?.filter((chain) => isVisibleChain(chain.chainId)) .map((chain) => { return ( @@ -110,7 +109,7 @@ export const BridgeTab = () => { className="min-w-[200px] !h-[40px]" value={selectedDstChainId} > - {chains?.rows + {chains?.data ?.filter((chain) => isVisibleChain(chain.chainId)) .map((chain) => { return ( @@ -186,7 +185,7 @@ export const BridgeTab = () => {

{ - chains?.rows?.find((chain) => chain.chainId === selectedBaseChainId) + chains?.data?.find((chain) => chain.chainId === selectedBaseChainId) ?.name }{" "} ADs diff --git a/apps/frontend/components/bridge-ui/SellAdd.tsx b/apps/frontend/components/bridge-ui/SellAdd.tsx deleted file mode 100644 index 06e4ee6..0000000 --- a/apps/frontend/components/bridge-ui/SellAdd.tsx +++ /dev/null @@ -1,318 +0,0 @@ -"use client" -import React, { useState } from "react" -import { Avatar, Button, Modal } from "antd" -import { Clock, Info, ThumbsUp, Verified } from "lucide-react" -import Link from "next/link" -import Image from "next/image" - -interface propsI { - ad_id: string - full_name: string - total_orders: number - orders_completion_rate: string - avg_order_completion_time: string - token: string - price: string - available_tokens: string - limit: string - date_posted: { date: string; time: string } - advertiser_terms: string -} - -export const SellAd = ({ ...props }: propsI) => { - const { - ad_id, - token, - price, - available_tokens, - limit, - date_posted, - advertiser_terms, - } = props - const [openModal, setOpenModal] = useState(false) - const toggleModal = () => setOpenModal(!openModal) - return ( -

- -
-
-
- -
-
- -

Email

-
-
- -

Positive feedbacks

-
-
- -

Verified

-
-
-
- -
-
-
-

- Quantity -

-

{available_tokens}

-
-
-

- Limits -

-

{limit}

-
-
-

- Posted -

-
-
- -

{date_posted.date}

-
-

{date_posted.time}

-
-
-
-
-
-

Advertiser Terms

-
- -
-

- Merchants may impose additional terms in the Advertiser - Terms. Kindly read carefully before placing an order. In the - event of any conflict, the Platform's{" "} - - Terms - {" "} - shall prevail. Violations will not be covered by platform - protection. -

-
-

{advertiser_terms}

-
-
-
-
-
-
-
-

Price

-

- {price} - {token} -

-
- -
-
-

I will get

-
- - -

- {token} |{" "} - - All - -

-
-
-
-

I will deposit

-
- - -

- {token} |{" "} - - All - -

-
-
-
- -
- - -
-

- If there is risk, the withdrawal may be delayed by up to 24 hours. -

-
-
-
-
- - -
-

{price}

-

{token}

-
- -
-

- - Quantity - - {available_tokens} -

-

- - Limits - - {limit} -

-
- -
-
- -

{date_posted.date}

-
-

{date_posted.time}

-
- -
- -
-
-
- ) -} - -interface merchantI extends propsI { - variant?: "variant_1" | "variant_2" -} - -const MerchantInfo = ({ - full_name, - avg_order_completion_time, - orders_completion_rate, - total_orders, - variant, -}: merchantI) => { - const initial = full_name ? full_name.trim()[0].toUpperCase() : "U" - - return ( - <> - {variant === "variant_2" ? ( -
-
-
- - {initial} - -
-
-

{full_name}

- -
-
- -

{avg_order_completion_time}

-
-
-

{total_orders} order(s)

-

|

-

{orders_completion_rate}

-
-
- -

{avg_order_completion_time}

-
-
-
-
-
- ) : ( -
-
-
- - {initial} - -
-
-

{full_name}

- -
-
- -

{avg_order_completion_time}

-
-
-
-
-

{total_orders} order(s)

-

|

-

{orders_completion_rate}

-
-
- -
- -

{avg_order_completion_time}

-
-
- )} - - ) -} diff --git a/apps/frontend/components/bridge-ui/TradeAd.tsx b/apps/frontend/components/bridge-ui/TradeAd.tsx index ecac92f..138d6c5 100644 --- a/apps/frontend/components/bridge-ui/TradeAd.tsx +++ b/apps/frontend/components/bridge-ui/TradeAd.tsx @@ -16,6 +16,9 @@ import { chain_icons } from "@/lib/chain-icons" import { useAccount, useBalance } from "wagmi" import { useCreateTrade } from "@/hooks/useTrades" import { useChainModal } from "@rainbow-me/rainbowkit" +import { useStellarWallet } from "@/components/providers/StellarWallet" +import { useQuery } from "@tanstack/react-query" +import { getStellarTokenBalance } from "@/utils/stellar/balance" export const TradeAd = ({ ...props }: IAd) => { const [openModal, setOpenModal] = useState(false) @@ -39,43 +42,85 @@ export const TradeAd = ({ ...props }: IAd) => { const [amount, setAmount] = useState("") const txFee = Number(amount) * (txFeePercent / 100) const account = useAccount() + const { mutateAsync, isPending } = useCreateTrade() + const { openChainModal } = useChainModal() + const { address: stellarAddress } = useStellarWallet() + + // Order chain = chain the bridger pays on. Drives which wallet's balance to + // read and which connect-flow to surface. + const isStellarOrder = props.orderToken.chainKind === "STELLAR" const nativeBalance = useBalance({ chainId: Number(props.orderToken.chainId), address: account.address, + query: { enabled: !isStellarOrder }, }) const balance = useBalance({ chainId: Number(props.orderToken.chainId), token: props.orderToken.address, address: account.address, + query: { enabled: !isStellarOrder && props.orderToken.kind === "ERC20" }, + }) + const stellarBalance = useQuery({ + queryKey: [ + "stellar-balance", + stellarAddress, + props.orderToken.address, + props.orderToken.chainId, + ], + queryFn: () => + getStellarTokenBalance(stellarAddress!, { + kind: props.orderToken.kind, + symbol: props.orderToken.symbol, + decimals: props.orderToken.decimals, + assetIssuer: props.orderToken.assetIssuer, + }), + enabled: isStellarOrder && !!stellarAddress, }) - const [balance_value, setBalance_value] = useState("") + const [balance_value, setBalance_value] = useState("") useEffect(() => { + if (isStellarOrder) { + if (stellarBalance.data) { + setBalance_value( + formatUnits(stellarBalance.data.value, stellarBalance.data.decimals), + ) + } + return + } if (balance.data) { setBalance_value( - formatUnits(balance?.data?.value!, balance?.data?.decimals!) + formatUnits(balance?.data?.value!, balance?.data?.decimals!), ) } else if (nativeBalance.data) { setBalance_value( - formatUnits(nativeBalance?.data?.value!, nativeBalance?.data?.decimals!) + formatUnits( + nativeBalance?.data?.value!, + nativeBalance?.data?.decimals!, + ), ) } - }, [balance, nativeBalance, props]) + }, [balance.data, nativeBalance.data, stellarBalance.data, isStellarOrder]) - useEffect(() => { - - }, [nativeBalance, props]) - - const { mutateAsync, isPending } = useCreateTrade() - const { openChainModal } = useChainModal() + // Bridger's receive address lives on the *ad chain* (the destination). + // Pick the wallet that matches its kind so we don't send an EVM 0x address + // as a Stellar G-strkey (or vice versa). + const bridgerDstAddress = + props.adToken.chainKind === "STELLAR" ? stellarAddress : account.address const handleCreateTrade = async () => { + if (!bridgerDstAddress) { + throw new Error( + props.adToken.chainKind === "STELLAR" + ? "Connect a Stellar wallet to receive on the destination chain" + : "Connect an EVM wallet to receive on the destination chain", + ) + } await mutateAsync({ payload: { adId: props.id, routeId: props.routeId, amount: parseUnits(amount, props.orderToken.decimals).toString(), - bridgerDstAddress: account.address!, + bridgerDstAddress, }, orderTokenId: props.orderTokenId, }) @@ -185,12 +230,16 @@ export const TradeAd = ({ ...props }: IAd) => {

{chains[props.orderToken.chainId]?.name} balance

- {balance.isLoading || nativeBalance.isLoading ? ( + {(isStellarOrder + ? stellarBalance.isLoading + : balance.isLoading || nativeBalance.isLoading) ? ( ) : ( <> {Number(balance_value).toLocaleString()}{" "} - {balance?.data?.symbol || nativeBalance?.data?.symbol} + {isStellarOrder + ? props.orderToken.symbol + : balance?.data?.symbol || nativeBalance?.data?.symbol} )}

@@ -212,7 +261,11 @@ export const TradeAd = ({ ...props }: IAd) => { type="number" onChange={(e) => setAmount(e.target.value)} value={amount} - disabled={balance.isLoading || nativeBalance.isLoading} + disabled={ + isStellarOrder + ? stellarBalance.isLoading + : balance.isLoading || nativeBalance.isLoading + } />

{tokenSymbol}{" "} @@ -220,14 +273,7 @@ export const TradeAd = ({ ...props }: IAd) => { { - setAmount( - formatUnits( - balance?.data?.value!, - balance?.data?.decimals! - ) - ) - }} + onClick={() => setAmount(balance_value)} > All @@ -254,7 +300,34 @@ export const TradeAd = ({ ...props }: IAd) => {

- {String(account.chainId) !== props.orderToken.chainId ? ( + {isStellarOrder ? ( + !stellarAddress ? ( + + ) : ( + + ) + ) : String(account.chainId) !== props.orderToken.chainId ? ( - ) : ( - - ) - ) : String(account.chainId) !== props.orderToken.chainId ? ( - - ) : ( - - )} +