From 129973cc28e0dba0ac08a2bf9b640ab6f6295dbf Mon Sep 17 00:00:00 2001 From: arentant Date: Sat, 28 Feb 2026 17:34:42 +0400 Subject: [PATCH] Update dependencies in pnpm-lock.yaml and package.json for @azguardwallet packages; refactor AztecWalletProvider import and adjust UI spacing in TrainMenu and WalletsList components. --- apps/app/components/Icons/Base64/Azguard.ts | 1 + apps/app/components/TrainMenu/index.tsx | 2 +- apps/app/components/Wallet/WalletsList.tsx | 2 +- .../WalletProviders}/AztecWalletProvider.tsx | 141 +++++---- apps/app/components/WalletProviders/index.tsx | 2 +- apps/app/lib/wallets/aztec/configs.ts | 2 +- apps/app/lib/wallets/aztec/useAtomicAztec.ts | 15 +- apps/app/lib/wallets/aztec/useAztec.ts | 69 +++-- apps/app/package.json | 1 + pnpm-lock.yaml | 281 ++++++++++++++++++ 10 files changed, 408 insertions(+), 108 deletions(-) create mode 100644 apps/app/components/Icons/Base64/Azguard.ts rename apps/app/{lib/wallets/aztec => components/WalletProviders}/AztecWalletProvider.tsx (71%) diff --git a/apps/app/components/Icons/Base64/Azguard.ts b/apps/app/components/Icons/Base64/Azguard.ts new file mode 100644 index 0000000..bcf8f40 --- /dev/null +++ b/apps/app/components/Icons/Base64/Azguard.ts @@ -0,0 +1 @@ +export const azguardBase64 = 'data:image/png;base64,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' \ No newline at end of file diff --git a/apps/app/components/TrainMenu/index.tsx b/apps/app/components/TrainMenu/index.tsx index b56719c..ab42e4d 100644 --- a/apps/app/components/TrainMenu/index.tsx +++ b/apps/app/components/TrainMenu/index.tsx @@ -80,7 +80,7 @@ const Comp = () => { > {() => (
- + diff --git a/apps/app/components/Wallet/WalletsList.tsx b/apps/app/components/Wallet/WalletsList.tsx index 9219b71..364b848 100644 --- a/apps/app/components/Wallet/WalletsList.tsx +++ b/apps/app/components/Wallet/WalletsList.tsx @@ -57,7 +57,7 @@ const WalletsList: FC = (props) => { { wallets.length > 0 && -
+
{ wallets.map((wallet, index) => Promise; - confirmConnection: () => Promise; - cancelConnection: () => void; disconnect: () => Promise; startDiscovery: () => void; } @@ -29,7 +27,6 @@ const EmojiVerificationOverlay: React.FC<{ onConfirm: () => void; onCancel: () => void; }> = ({ emojis, onConfirm, onCancel }) => { - // Split emojis into a 3x3 grid (9 emojis) const emojiChars = [...emojis]; const rows = [ emojiChars.slice(0, 3), @@ -83,56 +80,83 @@ const EmojiVerificationOverlay: React.FC<{ export const AztecWalletProvider: React.FC<{ children: ReactNode }> = ({ children }) => { const [wallet, setWallet] = useState(null); - const [connected, setConnected] = useState(false); const [accountAddress, setAccountAddress] = useState(null); const [discoveredProviders, setDiscoveredProviders] = useState([]); + const [azguardDetected, setAzguardDetected] = useState(false); const [isDiscovering, setIsDiscovering] = useState(false); const [pendingConnection, setPendingConnection] = useState(null); const [verificationEmojis, setVerificationEmojis] = useState(null); const activeProviderRef = useRef(null); const discoveryRef = useRef<{ cancel: () => void } | null>(null); + const isDiscoveringRef = useRef(false); const pendingResolveRef = useRef<((wallet: AztecWallet) => void) | null>(null); const pendingRejectRef = useRef<((error: Error) => void) | null>(null); const chainInfo = useAztecChainInfo(); + const resetConnection = useCallback(() => { + setWallet(null); + setAccountAddress(null); + activeProviderRef.current = null; + }, []); + const startDiscovery = useCallback(async () => { - if (typeof window === 'undefined' || isDiscovering) return; + if (typeof window === 'undefined' || isDiscoveringRef.current) return; try { + isDiscoveringRef.current = true; setIsDiscovering(true); setDiscoveredProviders([]); + setAzguardDetected(false); - const { WalletManager } = await import("@aztec/wallet-sdk/manager"); + const sdkDiscoveryPromise = (async () => { + const { WalletManager } = await import("@aztec/wallet-sdk/manager"); - const manager = WalletManager.configure({ - extensions: { enabled: true }, - }); + const manager = WalletManager.configure({ + extensions: { enabled: true }, + }); - const discovery = manager.getAvailableWallets({ - chainInfo: await chainInfo(), - appId: AZTEC_APP_ID, - timeout: 10000, - onWalletDiscovered: (provider) => { - setDiscoveredProviders(prev => { - if (prev.some(p => p.id === provider.id)) return prev; - return [...prev, provider]; - }); - }, - }); + const discovery = manager.getAvailableWallets({ + chainInfo: await chainInfo(), + appId: AZTEC_APP_ID, + timeout: 10000, + onWalletDiscovered: (provider) => { + setDiscoveredProviders(prev => { + if (prev.some(p => p.id === provider.id)) return prev; + return [...prev, provider]; + }); + }, + }); - discoveryRef.current = discovery; + discoveryRef.current = discovery; + await discovery.done; + })(); + + const azguardDetectionPromise = (async () => { + // Poll for window.azguard since content scripts load asynchronously + const maxWait = 1000; + const interval = 100; + let elapsed = 0; + while (elapsed < maxWait) { + if ((window as any).azguard) { + setAzguardDetected(true); + return; + } + await new Promise(r => setTimeout(r, interval)); + elapsed += interval; + } + })(); - await discovery.done; + await Promise.allSettled([sdkDiscoveryPromise, azguardDetectionPromise]); } catch (error) { console.error("Error during wallet discovery:", error); } finally { + isDiscoveringRef.current = false; setIsDiscovering(false); } - }, [chainInfo, isDiscovering]); + }, [chainInfo]); - // Start discovery on mount (client-side only) useEffect(() => { if (typeof window === 'undefined') return; startDiscovery(); @@ -143,6 +167,25 @@ export const AztecWalletProvider: React.FC<{ children: ReactNode }> = ({ childre }, []); // eslint-disable-line react-hooks/exhaustive-deps const connect = useCallback(async (providerId: string): Promise => { + // Azguard path: direct connection, no emoji verification + if (providerId === AZGUARD_PROVIDER_ID) { + const { AztecWallet: AzguardAztecWallet } = await import("@azguardwallet/aztec-wallet"); + const azguardWallet = await AzguardAztecWallet.connect(); + + setWallet(azguardWallet); + + const accounts = await azguardWallet.getAccounts(); + const address = accounts[0]?.item?.toString() ?? accounts[0]?.toString(); + if (address) { + setAccountAddress(address); + } + + azguardWallet.onDisconnected.addHandler(() => resetConnection()); + + return azguardWallet; + } + + // SDK path: emoji verification flow const provider = discoveredProviders.find(p => p.id === providerId); if (!provider) { throw new Error(`Wallet provider "${providerId}" not found`); @@ -161,7 +204,7 @@ export const AztecWalletProvider: React.FC<{ children: ReactNode }> = ({ childre pendingResolveRef.current = resolve; pendingRejectRef.current = reject; }); - }, [discoveredProviders]); + }, [discoveredProviders, resetConnection]); const confirmConnection = useCallback(async () => { if (!pendingConnection) return; @@ -169,30 +212,15 @@ export const AztecWalletProvider: React.FC<{ children: ReactNode }> = ({ childre try { const connectedWallet = await pendingConnection.confirm(); setWallet(connectedWallet); - setConnected(true); const accounts = await connectedWallet.getAccounts(); - const address = accounts[0]?.toString(); + const address = accounts[0]?.item?.toString() ?? accounts[0]?.toString(); if (address) { setAccountAddress(address); } - // Register disconnect handler if (activeProviderRef.current) { - activeProviderRef.current.onDisconnect(() => { - setWallet(null); - setConnected(false); - setAccountAddress(null); - activeProviderRef.current = null; - if (typeof window !== 'undefined') { - localStorage.removeItem("aztec_wallet_connected"); - } - }); - } - - if (typeof window !== 'undefined') { - localStorage.setItem("aztec_wallet_connected", "true"); - localStorage.setItem("aztec_wallet_provider_id", activeProviderRef.current?.id ?? ""); + activeProviderRef.current.onDisconnect(() => resetConnection()); } setPendingConnection(null); @@ -209,7 +237,7 @@ export const AztecWalletProvider: React.FC<{ children: ReactNode }> = ({ childre pendingResolveRef.current = null; pendingRejectRef.current = null; } - }, [pendingConnection]); + }, [pendingConnection, resetConnection]); const cancelConnection = useCallback(() => { if (pendingConnection) { @@ -226,33 +254,24 @@ export const AztecWalletProvider: React.FC<{ children: ReactNode }> = ({ childre try { if (activeProviderRef.current) { await activeProviderRef.current.disconnect(); + } else if (wallet && typeof wallet.disconnect === 'function') { + await wallet.disconnect(); } } catch (error) { console.error("Error disconnecting:", error); } finally { - setWallet(null); - setConnected(false); - setAccountAddress(null); - activeProviderRef.current = null; - if (typeof window !== 'undefined') { - localStorage.removeItem("aztec_wallet_connected"); - localStorage.removeItem("aztec_wallet_provider_id"); - } + resetConnection(); } - }, []); + }, [wallet, resetConnection]); return ( diff --git a/apps/app/components/WalletProviders/index.tsx b/apps/app/components/WalletProviders/index.tsx index b7e4fde..43d3f20 100644 --- a/apps/app/components/WalletProviders/index.tsx +++ b/apps/app/components/WalletProviders/index.tsx @@ -7,7 +7,7 @@ import StarknetProvider from "./StarknetProvider"; import { ImtblPassportProvider } from "./ImtblPassportProvider"; import { WalletModalProvider } from "../WalletModal"; import { WalletProvidersProvider } from "../../context/walletHookProviders"; -import { AztecWalletProvider } from "../../lib/wallets/aztec/AztecWalletProvider"; +import { AztecWalletProvider } from "./AztecWalletProvider"; import { EvmConnectorsProvider } from "@/context/evmConnectorsContext"; import { SecretDerivationProvider } from "@/context/secretDerivationContext"; diff --git a/apps/app/lib/wallets/aztec/configs.ts b/apps/app/lib/wallets/aztec/configs.ts index 1d8b4c6..5aec11d 100644 --- a/apps/app/lib/wallets/aztec/configs.ts +++ b/apps/app/lib/wallets/aztec/configs.ts @@ -4,7 +4,7 @@ import { useSettingsState } from "../../../context/settings"; import KnownInternalNames from "../../knownIds"; // Default Aztec node URL -const DEFAULT_AZTEC_NODE_URL = "https://devnet.aztec-labs.com"; +const DEFAULT_AZTEC_NODE_URL = "https://v4-devnet-2.aztec-labs.com"; // Application ID for wallet SDK discovery export const AZTEC_APP_ID = "train-protocol"; diff --git a/apps/app/lib/wallets/aztec/useAtomicAztec.ts b/apps/app/lib/wallets/aztec/useAtomicAztec.ts index d1fa1df..21fb1b5 100644 --- a/apps/app/lib/wallets/aztec/useAtomicAztec.ts +++ b/apps/app/lib/wallets/aztec/useAtomicAztec.ts @@ -5,9 +5,8 @@ import { LockDetails, LockStatus } from "../../../Models/phtlc/PHTLC" import { hexToBytes, bytesToHex } from "./utils" import formatAmount from "../../formatAmount" import { TrainContract } from "./Train" -import { useSecretDerivation } from "@/context/secretDerivationContext" import { BaseAtomicFunctions } from "../utils/atomicTypes" -import { secretToHashlock } from "@train-protocol/sdk" +import { parseUnits } from "viem" export interface UseAtomicAztecParams { wallet: any @@ -18,20 +17,12 @@ export interface UseAtomicAztecParams { export default function useAtomicAztec(params: UseAtomicAztecParams): BaseAtomicFunctions { const { wallet, accountAddress, aztecNodeUrl, sponsorAddress } = params - const { deriveSecret } = useSecretDerivation() const createHTLC = async (params: CreateHTLCParams) => { + const { nonce: timestamp, hashlock } = params; if (!wallet) throw new Error("No wallet connected"); - const { secret, nonce: timestamp } = await deriveSecret({ - wallet: { metadata: { wallet }, providerName: 'aztec' } as any - }); - - const hashlock = secretToHashlock(secret); - - const parsedAmount = BigInt( - Math.round(Math.pow(10, params.sourceAsset.decimals) * Number(params.amount)) - ); + const parsedAmount = parseUnits(params.amount.toString(), params.sourceAsset.decimals); const { userLockTransactionBuilder } = await import('./transactionBuilder') diff --git a/apps/app/lib/wallets/aztec/useAztec.ts b/apps/app/lib/wallets/aztec/useAztec.ts index b4f91d5..f4099ac 100644 --- a/apps/app/lib/wallets/aztec/useAztec.ts +++ b/apps/app/lib/wallets/aztec/useAztec.ts @@ -3,35 +3,34 @@ import { useSettingsState } from "../../../context/settings"; import { InternalConnector, Wallet, WalletProvider } from "../../../Models/WalletProvider"; import { resolveWalletConnectorIcon } from "../utils/resolveWalletIcon"; import { useMemo } from "react"; -import { useAztecNodeUrl, useAztecSponsorAddress } from "./configs"; -import { useAztecWalletContext } from "./AztecWalletProvider"; +import { useAztecWalletContext, AZGUARD_PROVIDER_ID } from "../../../components/WalletProviders/AztecWalletProvider"; +import { azguardBase64 } from "@/components/Icons/Base64/Azguard"; -export default function useAztec(): WalletProvider { - const commonSupportedNetworks = [ - KnownInternalNames.Networks.AztecTestnet, - ] +const commonSupportedNetworks = [ + KnownInternalNames.Networks.AztecTestnet, +] +export default function useAztec(): WalletProvider { const { networks } = useSettingsState() - const aztecNodeUrl = useAztecNodeUrl(); - const sponsorAddress = useAztecSponsorAddress(); - const name = 'Aztec' const id = 'aztec' const { wallet, - connected, accountAddress, discoveredProviders, + azguardDetected, connect, disconnect, } = useAztecWalletContext(); const aztecWallet = useMemo(() => { - if (!wallet || !connected || !accountAddress) return undefined; + if (!wallet || !accountAddress) return undefined; - const providerName = discoveredProviders.find(p => !p.isDisconnected())?.name ?? 'Aztec Wallet'; + const providerName = azguardDetected && discoveredProviders.length === 0 + ? 'Azguard' + : discoveredProviders.find(p => !p.isDisconnected())?.name ?? 'Aztec Wallet'; return { id: providerName, @@ -40,13 +39,13 @@ export default function useAztec(): WalletProvider { address: accountAddress, providerName: id, isActive: true, - icon: resolveWalletConnectorIcon({ connector: name, address: accountAddress }), + icon: resolveWalletConnectorIcon({ connector: name, address: accountAddress, iconUrl: providerName === 'Azguard' ? azguardBase64 : undefined }), disconnect: () => disconnectWallets(), withdrawalSupportedNetworks: commonSupportedNetworks, asSourceSupportedNetworks: commonSupportedNetworks, networkIcon: networks.find(n => commonSupportedNetworks.some(name => name === n.caip2Id))?.logoUrl } - }, [wallet, connected, accountAddress, networks, discoveredProviders]) + }, [wallet, accountAddress, networks, discoveredProviders, azguardDetected]) const connectWallet = async (params?: { connector?: InternalConnector }) => { try { @@ -58,11 +57,13 @@ export default function useAztec(): WalletProvider { const connectedWallet = await connect(providerId); const accounts = await connectedWallet.getAccounts(); - const connectedAddress = accounts[0]?.toString(); + const connectedAddress = accounts[0]?.item?.toString() ?? accounts[0]?.toString(); if (connectedAddress) { + const walletName = providerId === AZGUARD_PROVIDER_ID + ? 'Azguard' + : discoveredProviders.find(p => p.id === providerId)?.name ?? 'Aztec Wallet'; const activeProvider = discoveredProviders.find(p => p.id === providerId); - const walletName = activeProvider?.name ?? 'Aztec Wallet'; const newWallet: Wallet = { id: walletName, @@ -91,19 +92,7 @@ export default function useAztec(): WalletProvider { } const availableWalletsForConnect: InternalConnector[] = useMemo(() => { - if (discoveredProviders.length === 0) { - // No wallets discovered — show a generic "install" prompt - return [{ - id: 'aztec-no-wallet', - name: 'Aztec Wallet', - providerName: name, - extensionNotFound: true, - hasBrowserExtension: true, - installUrl: "https://aztec.network/ecosystem", - }] - } - - return discoveredProviders.map(provider => ({ + const sdkWallets: InternalConnector[] = discoveredProviders.map(provider => ({ id: provider.id, name: provider.name, icon: provider.icon, @@ -111,7 +100,25 @@ export default function useAztec(): WalletProvider { extensionNotFound: false, hasBrowserExtension: true, })); - }, [discoveredProviders]) + + // Append Azguard if detected and not already in the SDK-discovered list + if (azguardDetected && !sdkWallets.some(w => w.id === AZGUARD_PROVIDER_ID)) { + sdkWallets.push({ + id: AZGUARD_PROVIDER_ID, + name: 'Azguard', + icon: azguardBase64, + providerName: name, + extensionNotFound: false, + hasBrowserExtension: true, + }); + } + + if (sdkWallets.length === 0) { + return []; + } + + return sdkWallets; + }, [discoveredProviders, azguardDetected]) const provider = { connectWallet, @@ -128,4 +135,4 @@ export default function useAztec(): WalletProvider { } return provider -} +} \ No newline at end of file diff --git a/apps/app/package.json b/apps/app/package.json index 1a109d5..b67b924 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -12,6 +12,7 @@ "build:workers": "tsc -p tsconfig.worker.json" }, "dependencies": { + "@azguardwallet/aztec-wallet": "4.0.0-devnet.2-patch.2", "@aztec/accounts": "^4.0.0-devnet.2-patch.0", "@aztec/aztec.js": "4.0.0-devnet.2-patch.0", "@aztec/constants": "^4.0.0-devnet.2-patch.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 07a2bec..df6c8db 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,6 +27,9 @@ importers: apps/app: dependencies: + '@azguardwallet/aztec-wallet': + specifier: 4.0.0-devnet.2-patch.2 + version: 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) '@aztec/accounts': specifier: ^4.0.0-devnet.2-patch.0 version: 4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) @@ -586,6 +589,15 @@ packages: resolution: {integrity: sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw==} engines: {node: '>=18.0.0'} + '@azguardwallet/aztec-wallet@4.0.0-devnet.2-patch.2': + resolution: {integrity: sha512-heOBBTkkMP+mevYVCDkU0LeuZtwjrtZNrOgPaBPOmgpUcCausaeNXvX/d/GzJtB+ypJyOFNd6Wtg0Jh9rhcqRg==} + + '@azguardwallet/client@0.8.0': + resolution: {integrity: sha512-uOZoLdSO1PpjWmnWEEBKra3lrKvu9dl0utLds70LwpCw+zjf41fv/THhNSF+wa/4r2doGrKBI5macyz2mGWd4Q==} + + '@azguardwallet/types@0.8.0': + resolution: {integrity: sha512-owAHzqwZJIUyCcdVTj8KCuYQ8vBa7HpzBOJuK6ohuQPUadltvIa23Y1H150nztPyWZkUvdWVtIpM6tgQwIrmFA==} + '@aztec/accounts@4.0.0-spartan.20260218': resolution: {integrity: sha512-vDqeBJKuupSQwGIClvDdgbLR0xgpHpIjZ7g2M1VGgG7UNtFcZWA7QOtbqdZUqzgMht8u7+ZWCpvuJAgMLoNk9w==} engines: {node: '>=20.10'} @@ -594,6 +606,10 @@ packages: resolution: {integrity: sha512-46pHwZRix4XPfuvkul52wCFhEX+wHt/8VpZzquZ0dhTcZaP+YFD+TeSMCpwW/32xoYXdayWJrD+YbqZmx6IkOA==} engines: {node: '>=20.10'} + '@aztec/aztec.js@4.0.0-devnet.2-patch.2': + resolution: {integrity: sha512-wA97ZxtHMoRCSKjplELSqYq3opG9NUWeD7J0ZCJzjijAcHL/qF9xOQ3Zz7pBxB2pZHHCaMOitxPMLGxPU+9cCQ==} + engines: {node: '>=20.10'} + '@aztec/aztec.js@4.0.0-spartan.20260218': resolution: {integrity: sha512-XMSKVPaXUMnna1ZuTADxgu7Z6GJd9/EMilvSDWEUgGMC/wCqydctGU3bommlKKXKvrq9MQE+fveQQwN8hDq2HA==} engines: {node: '>=20.10'} @@ -611,6 +627,10 @@ packages: resolution: {integrity: sha512-2koYcKyPwVhkf15cSRpoizcVNSRUeNCD6RWYmtGm//N+vjVunchBKZbPme/TANJLSjo0Mq5k4yfuFrIsCh4OSQ==} hasBin: true + '@aztec/bb.js@4.0.0-devnet.2-patch.2': + resolution: {integrity: sha512-jVoayCuXNAvLc1kkZB4RurGiwzCA2PjqPornFJ7KSCWVxZiQz0YS8JpoF+DfIVJsutvEmdZ1mZOCU8w/wbeQeQ==} + hasBin: true + '@aztec/bb.js@4.0.0-spartan.20260218': resolution: {integrity: sha512-e7zjp8KHWIEqecnPTlyEjE8NglGoWGmaRWc/M1/1Nop5eSwKvTCpx5kljBD2xeKHDyIaAuEgITFO35jpx8qtAg==} hasBin: true @@ -623,6 +643,10 @@ packages: resolution: {integrity: sha512-uJQHMEn3wPvSpAh+BPJ3QIBu09byElwFTdisoAP8QVk1i3+SyvGsWTPmtmaPO+lt1XyC/0GKNMb2gd4prZFhlg==} engines: {node: '>=20.10'} + '@aztec/blob-lib@4.0.0-devnet.2-patch.2': + resolution: {integrity: sha512-pxFvLgh4U/ZYhuZZjKtK0OPs+9n7wL02UbdSr8fyxOqZLM/F/ViR2WGJndfRN0bUnxQNxropdVpjYHGz9Bqseg==} + engines: {node: '>=20.10'} + '@aztec/blob-lib@4.0.0-spartan.20260218': resolution: {integrity: sha512-GFFyYyHnlRAyp2bCkaeHJ6xu+Zr7GmEeodaYXdHzWbEk6kKtEwkR6febnnOYBcOSAIiUXcKLdDqwFE25QaZODQ==} engines: {node: '>=20.10'} @@ -639,6 +663,10 @@ packages: resolution: {integrity: sha512-044VJtMH/gE4km5YMMyYpVoz+mk6CjIBnUhtPYrmAkhqGB2LLrOWXdnRdtWdBah1l2httJdGPpPBzFf+tJxdJw==} engines: {node: '>=20.10'} + '@aztec/constants@4.0.0-devnet.2-patch.2': + resolution: {integrity: sha512-R1G3KTHM+EeP6GDxyeq3p30/vOm33Q+/nWalq/p1MI7zDXB+niUtEf0JvfTS5m/c7NzCWdKkwsjpM+TkVsA30g==} + engines: {node: '>=20.10'} + '@aztec/constants@4.0.0-spartan.20260218': resolution: {integrity: sha512-EKJ2/QC5xJzaaPjqrKQD3oqBs5qdcdKNF7QAeX45JlGy5/Hoh1q5s5sMoJdj7nLWsyiEFhD4i3CxXWTfy715Qw==} engines: {node: '>=20.10'} @@ -651,6 +679,10 @@ packages: resolution: {integrity: sha512-zB/mSR71DkcprdXBqXGrk6XTZF2XDW2A3taQVRp3otFkoVWOAoRFHbfqnpXwFza7864XdfeSPVYP9wwXqjnKVw==} engines: {node: '>=20.10'} + '@aztec/entrypoints@4.0.0-devnet.2-patch.2': + resolution: {integrity: sha512-cbDo/e58jE8dFgTC1R7+rDnpVCohmLeclnl/S/U6AygIOVZy8QDnPKex1KckDxmF9+u0Ra9wsUbolqAcaVZdxA==} + engines: {node: '>=20.10'} + '@aztec/entrypoints@4.0.0-spartan.20260218': resolution: {integrity: sha512-fVgk8j6mOiqfWE5mbvZLIr2trDgtrL5+ACNKquiGGwAHrlI9PDSfWRx/t9VK8X0iJpPOVe9BMGHGAzD2sq3F8Q==} engines: {node: '>=20.10'} @@ -663,6 +695,10 @@ packages: resolution: {integrity: sha512-xLCfN82uROCqHIaQoXlXopozvnvCoxU1Q4TdkuFpiXkcNF1/kQr4z9LDnDC/1T85DSf67K/IJfdFa5lNxSQAjg==} engines: {node: '>=20.10'} + '@aztec/ethereum@4.0.0-devnet.2-patch.2': + resolution: {integrity: sha512-orcV0IR8kIoIQrSeXMb9PXcH06nAX7zubvUlKu9Qvt16WEqp/wUApPc5euZLzIZLiCcHB0O0VTzt6FbAQwr64A==} + engines: {node: '>=20.10'} + '@aztec/ethereum@4.0.0-spartan.20260218': resolution: {integrity: sha512-bg2wepv3SSIuzVXHrVSGJwlDaWEusxOXyU4jTZ50PGodZuA208d3g8tcKaQHsu1W7A3XFqkMZa065DsgLDAbUg==} engines: {node: '>=20.10'} @@ -675,6 +711,10 @@ packages: resolution: {integrity: sha512-4qrM+zkiRcYkITgXivjDtUgU0zXv6v+qA3CUMpikjNvj4nAa28JAe5G18/QoGUS0bguouOCs4/+hxEq9+mVQbw==} engines: {node: '>=20.10'} + '@aztec/foundation@4.0.0-devnet.2-patch.2': + resolution: {integrity: sha512-fxM2hNLHF0HE64IxrHky1o8E5ug6uvu0BSyOdcZ+nYK+4w7wj7aVk/IrVvLAKxtwY1OPiQPk04DB76LALWaEHQ==} + engines: {node: '>=20.10'} + '@aztec/foundation@4.0.0-spartan.20260218': resolution: {integrity: sha512-ZDv7UfSl32JZ7t7q2myJk7++dQQxvsOcvtmapsUpVBkc18lOc03suGOKPV8BWmVHQ7tUoqIVsTGpfCids4jLCg==} engines: {node: '>=20.10'} @@ -694,6 +734,9 @@ packages: '@aztec/l1-artifacts@4.0.0-devnet.2-patch.0': resolution: {integrity: sha512-/COU5YrSdIZKDh1deUK4tlVPU9EOoF4Bj6oKv50jKdloPCAjBL7VFXU34cms3PUmJBT7s124CmmGi3iWTOFQDg==} + '@aztec/l1-artifacts@4.0.0-devnet.2-patch.2': + resolution: {integrity: sha512-b57dBQMRDYfGp5Amm8UhLktpOEKPiQyQ59M81UstJGlow59g3wayywMulFAYRUtm9BMeEsy8NMOl9npJxY5PaQ==} + '@aztec/l1-artifacts@4.0.0-spartan.20260218': resolution: {integrity: sha512-qrtsfOP6gnAISRBeQPUk6KEGDPRwxTL+nhSC2uW8I+oAxS6+KRthpRsuYpv0Q41XW024V5BCPIFfp8hYLmMJFA==} @@ -729,6 +772,9 @@ packages: '@aztec/noir-noirc_abi@4.0.0-devnet.2-patch.0': resolution: {integrity: sha512-DVBSwzgsd89oaF8pO6X/HngkYJK9ZXkbrCQdlMlZR1L/7SOMacoZGD35ZJQwrGYocQTR5Qj9LvtGezeFWqUiEg==} + '@aztec/noir-noirc_abi@4.0.0-devnet.2-patch.2': + resolution: {integrity: sha512-Y+W3lGxgujuKQ4jus1TjRcNZW7UWGzAJW1HUbAA5jOjzGEO6dB89y8UYL0tZyoqj63xtgyiX/wp0OKXfRTq2Kw==} + '@aztec/noir-noirc_abi@4.0.0-spartan.20260218': resolution: {integrity: sha512-BmsUeBg6g3HnpDWrQPqjAfjiCcYnEtpFNMUa88RUIiRAgcjAQF4w+lStFRm3iz74EjS1BFS/uj9YjNvdyMVOFQ==} @@ -746,6 +792,9 @@ packages: '@aztec/noir-types@4.0.0-devnet.2-patch.0': resolution: {integrity: sha512-chCQlpDIP6gxUWpgSRpgRHWcAGmf9CRIhBkvdCWPKaSfr4plhLFG5pjDb7tYxaDzdgbuWwDQhjKLH8IVjOOGag==} + '@aztec/noir-types@4.0.0-devnet.2-patch.2': + resolution: {integrity: sha512-oAAi9YCiKmTF2ww3JUoyWF+i6d1ML5rvmByEijGGhuFuuQp06BT8tgOKlRCmNHZ8n9lTeMDr/HFf2jPu/FMfuw==} + '@aztec/noir-types@4.0.0-spartan.20260218': resolution: {integrity: sha512-rGgShQx1sD2Hc8lxEL0PfYF6bE59Gl+QEXgPMugNeiv0mD3UjoTl5Hosg5UIoIh1/OapELetF2FAgvGmRqQXzA==} @@ -756,6 +805,10 @@ packages: resolution: {integrity: sha512-7p9lWwidnysEi49jVSxD9RniCv1y1PtNJt1bcU4Dqd+j2gt3AY9EVMEgYI+yzhRrW0iqgXT9QtmfNAoY5ELjuA==} engines: {node: '>=20.10'} + '@aztec/protocol-contracts@4.0.0-devnet.2-patch.2': + resolution: {integrity: sha512-KGMo6N1Te9pZn76JE6aH0pM+lwBWIdQl/AhYfaq/h2aKDpbaLChvJKLPLuX3eWxlOCVMP9igdXJa7gQTCDDDfA==} + engines: {node: '>=20.10'} + '@aztec/protocol-contracts@4.0.0-spartan.20260218': resolution: {integrity: sha512-0kxgsPSHnJTlQJqgJGalOuvbf4wddwW1qqOb5sw/4UeAaLuvOb1/r9CcsrnYs8VSKOEjHc39bkZmaq0ftmXfMA==} engines: {node: '>=20.10'} @@ -777,6 +830,10 @@ packages: resolution: {integrity: sha512-WlHLQuaEgen2ILAodb4+aXimN4xntvOHCYsJhVECgIxQ+cGZCAcFBrkcbzzkAYZYd6lOoavteaDdrxFWJcQv/A==} engines: {node: '>=20.10'} + '@aztec/stdlib@4.0.0-devnet.2-patch.2': + resolution: {integrity: sha512-L0yjyed3WYxRD7FfDymZv1MjcEf4VDuM0Snl9gFY3pMqjRaIjQE628WPz2Q6xef9dDuzmufVkpQuyIQg36UPGg==} + engines: {node: '>=20.10'} + '@aztec/stdlib@4.0.0-spartan.20260218': resolution: {integrity: sha512-0+6mwTG3DKdhrc52lQWeIISLFa4wf8nqfcvEGMpaxEJtYp0p9VO7luyL+Gfhw0BnX7jYyP528/twstYX0GauhQ==} engines: {node: '>=20.10'} @@ -793,6 +850,10 @@ packages: resolution: {integrity: sha512-K3KZcAdgbaySMAOcCsAw9QexO0h9hlQhtY1Psjdp8tqjtMF5hPRcpGNeGn+NFkTzkp1QoPHzvJymUlv5HcYddg==} engines: {node: '>=20.10'} + '@aztec/validator-ha-signer@4.0.0-devnet.2-patch.2': + resolution: {integrity: sha512-yEKmqMQUTZxbxBPWgTaI0HSSPXPcp3WKgm2Q59X4GeuKm+j8vHJxwYXumJzb7GoUCdp7mEBINgP+SKp6KBiD/A==} + engines: {node: '>=20.10'} + '@aztec/validator-ha-signer@4.0.0-spartan.20260218': resolution: {integrity: sha512-IoMf1K1wf8gtHE5ZaH+kVfGp4Kccmo5XpJN0LKAJvGS3CgwL657ASTDwPTbORGADYBFESkV2gyhsUeb7jrrevQ==} engines: {node: '>=20.10'} @@ -1780,6 +1841,7 @@ packages: '@magic-ext/oidc@4.2.0': resolution: {integrity: sha512-e9v0IV38o6O98zKsNAeCMBmxKiHByeCv6/o3RuxWRmrZaxBkxZbB83133hHx02d6YmjJrwB+lpmACG+CtFtTHQ==} + deprecated: 'Deprecation Notice: The OIDC extension will be deprecated soon. Please migrate to API Wallet, which offers improved performance and faster response times. Learn more: https://docs.magic.link/api-wallets/introduction' '@magic-sdk/commons@17.5.0': resolution: {integrity: sha512-2KdLT6KTNnToOuTb92a/Ur/zGfV8/M89W+wqrcumcSmdOOyD65C80q2Gd70OF2+HZEOPEfBp8vBTfOGyRSb8fg==} @@ -10849,6 +10911,30 @@ snapshots: '@aws/lambda-invoke-store@0.2.3': {} + '@azguardwallet/aztec-wallet@4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@azguardwallet/client': 0.8.0 + '@azguardwallet/types': 0.8.0 + '@aztec/aztec.js': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@aztec/entrypoints': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@aztec/foundation': 4.0.0-devnet.2-patch.2 + '@aztec/stdlib': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + zod: 3.25.76 + transitivePeerDependencies: + - '@types/pg' + - aws-crt + - bufferutil + - debug + - encoding + - pg-native + - supports-color + - typescript + - utf-8-validate + + '@azguardwallet/client@0.8.0': {} + + '@azguardwallet/types@0.8.0': {} + '@aztec/accounts@4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: '@aztec/aztec.js': 4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) @@ -10892,6 +10978,30 @@ snapshots: - typescript - utf-8-validate + '@aztec/aztec.js@4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@aztec/constants': 4.0.0-devnet.2-patch.2 + '@aztec/entrypoints': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@aztec/ethereum': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@aztec/foundation': 4.0.0-devnet.2-patch.2 + '@aztec/l1-artifacts': 4.0.0-devnet.2-patch.2 + '@aztec/protocol-contracts': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@aztec/stdlib': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + axios: 1.13.5 + tslib: 2.8.1 + viem: '@aztec/viem@2.38.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)' + zod: 3.25.76 + transitivePeerDependencies: + - '@types/pg' + - aws-crt + - bufferutil + - debug + - encoding + - pg-native + - supports-color + - typescript + - utf-8-validate + '@aztec/aztec.js@4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: '@aztec/constants': 4.0.0-spartan.20260218 @@ -10977,6 +11087,15 @@ snapshots: pako: 2.1.0 tslib: 2.8.1 + '@aztec/bb.js@4.0.0-devnet.2-patch.2': + dependencies: + comlink: 4.4.2 + commander: 12.1.0 + idb-keyval: 6.2.2 + msgpackr: 1.11.8 + pako: 2.1.0 + tslib: 2.8.1 + '@aztec/bb.js@4.0.0-spartan.20260218': dependencies: comlink: 4.4.2 @@ -11004,6 +11123,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@aztec/blob-lib@4.0.0-devnet.2-patch.2': + dependencies: + '@aztec/constants': 4.0.0-devnet.2-patch.2 + '@aztec/foundation': 4.0.0-devnet.2-patch.2 + '@crate-crypto/node-eth-kzg': 0.10.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + '@aztec/blob-lib@4.0.0-spartan.20260218': dependencies: '@aztec/constants': 4.0.0-spartan.20260218 @@ -11045,6 +11173,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@aztec/constants@4.0.0-devnet.2-patch.2': + dependencies: + '@aztec/foundation': 4.0.0-devnet.2-patch.2 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + '@aztec/constants@4.0.0-spartan.20260218': dependencies: '@aztec/foundation': 4.0.0-spartan.20260218 @@ -11078,6 +11213,25 @@ snapshots: - typescript - utf-8-validate + '@aztec/entrypoints@4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@aztec/constants': 4.0.0-devnet.2-patch.2 + '@aztec/foundation': 4.0.0-devnet.2-patch.2 + '@aztec/protocol-contracts': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@aztec/stdlib': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + tslib: 2.8.1 + zod: 3.25.76 + transitivePeerDependencies: + - '@types/pg' + - aws-crt + - bufferutil + - debug + - encoding + - pg-native + - supports-color + - typescript + - utf-8-validate + '@aztec/entrypoints@4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: '@aztec/constants': 4.0.0-spartan.20260218 @@ -11136,6 +11290,26 @@ snapshots: - typescript - utf-8-validate + '@aztec/ethereum@4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@aztec/blob-lib': 4.0.0-devnet.2-patch.2 + '@aztec/constants': 4.0.0-devnet.2-patch.2 + '@aztec/foundation': 4.0.0-devnet.2-patch.2 + '@aztec/l1-artifacts': 4.0.0-devnet.2-patch.2 + '@viem/anvil': 0.0.10(bufferutil@4.1.0)(utf-8-validate@5.0.10) + dotenv: 16.6.1 + lodash.chunk: 4.2.0 + lodash.pickby: 4.6.0 + tslib: 2.8.1 + viem: '@aztec/viem@2.38.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)' + zod: 3.25.76 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - typescript + - utf-8-validate + '@aztec/ethereum@4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: '@aztec/blob-lib': 4.0.0-spartan.20260218 @@ -11203,6 +11377,33 @@ snapshots: transitivePeerDependencies: - supports-color + '@aztec/foundation@4.0.0-devnet.2-patch.2': + dependencies: + '@aztec/bb.js': 4.0.0-devnet.2-patch.2 + '@koa/cors': 5.0.0 + '@noble/curves': 1.7.0 + '@noble/hashes': 1.8.0 + '@scure/bip39': 2.0.1 + bn.js: 5.2.3 + colorette: 2.0.20 + detect-node: 2.1.0 + hash.js: 1.1.7 + koa: 2.16.4 + koa-bodyparser: 4.4.1 + koa-compress: 5.2.0 + koa-router: 13.1.1 + leveldown: 6.1.1 + lodash.chunk: 4.2.0 + lodash.clonedeepwith: 4.5.0 + pako: 2.1.0 + pino: 9.14.0 + pino-pretty: 13.1.3 + sha3: 2.1.4 + undici: 5.29.0 + zod: 3.25.76 + transitivePeerDependencies: + - supports-color + '@aztec/foundation@4.0.0-spartan.20260218': dependencies: '@aztec/bb.js': 4.0.0-spartan.20260218 @@ -11302,6 +11503,10 @@ snapshots: dependencies: tslib: 2.8.1 + '@aztec/l1-artifacts@4.0.0-devnet.2-patch.2': + dependencies: + tslib: 2.8.1 + '@aztec/l1-artifacts@4.0.0-spartan.20260218': dependencies: tslib: 2.8.1 @@ -11371,6 +11576,10 @@ snapshots: dependencies: '@aztec/noir-types': 4.0.0-devnet.2-patch.0 + '@aztec/noir-noirc_abi@4.0.0-devnet.2-patch.2': + dependencies: + '@aztec/noir-types': 4.0.0-devnet.2-patch.2 + '@aztec/noir-noirc_abi@4.0.0-spartan.20260218': dependencies: '@aztec/noir-types': 4.0.0-spartan.20260218 @@ -11427,6 +11636,8 @@ snapshots: '@aztec/noir-types@4.0.0-devnet.2-patch.0': {} + '@aztec/noir-types@4.0.0-devnet.2-patch.2': {} + '@aztec/noir-types@4.0.0-spartan.20260218': {} '@aztec/noir-types@4.0.2': {} @@ -11450,6 +11661,25 @@ snapshots: - typescript - utf-8-validate + '@aztec/protocol-contracts@4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@aztec/constants': 4.0.0-devnet.2-patch.2 + '@aztec/foundation': 4.0.0-devnet.2-patch.2 + '@aztec/stdlib': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + lodash.chunk: 4.2.0 + lodash.omit: 4.5.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@types/pg' + - aws-crt + - bufferutil + - debug + - encoding + - pg-native + - supports-color + - typescript + - utf-8-validate + '@aztec/protocol-contracts@4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: '@aztec/constants': 4.0.0-spartan.20260218 @@ -11583,6 +11813,40 @@ snapshots: - typescript - utf-8-validate + '@aztec/stdlib@4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@aws-sdk/client-s3': 3.998.0 + '@aztec/bb.js': 4.0.0-devnet.2-patch.2 + '@aztec/blob-lib': 4.0.0-devnet.2-patch.2 + '@aztec/constants': 4.0.0-devnet.2-patch.2 + '@aztec/ethereum': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@aztec/foundation': 4.0.0-devnet.2-patch.2 + '@aztec/l1-artifacts': 4.0.0-devnet.2-patch.2 + '@aztec/noir-noirc_abi': 4.0.0-devnet.2-patch.2 + '@aztec/validator-ha-signer': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@google-cloud/storage': 7.19.0 + axios: 1.13.5 + json-stringify-deterministic: 1.0.12 + lodash.chunk: 4.2.0 + lodash.isequal: 4.5.0 + lodash.omit: 4.5.0 + lodash.times: 4.3.2 + msgpackr: 1.11.8 + pako: 2.1.0 + tslib: 2.8.1 + viem: '@aztec/viem@2.38.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)' + zod: 3.25.76 + transitivePeerDependencies: + - '@types/pg' + - aws-crt + - bufferutil + - debug + - encoding + - pg-native + - supports-color + - typescript + - utf-8-validate + '@aztec/stdlib@4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: '@aws-sdk/client-s3': 3.998.0 @@ -11700,6 +11964,23 @@ snapshots: - typescript - utf-8-validate + '@aztec/validator-ha-signer@4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@aztec/ethereum': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@aztec/foundation': 4.0.0-devnet.2-patch.2 + node-pg-migrate: 8.0.4(pg@8.19.0) + pg: 8.19.0 + tslib: 2.8.1 + zod: 3.25.76 + transitivePeerDependencies: + - '@types/pg' + - bufferutil + - debug + - pg-native + - supports-color + - typescript + - utf-8-validate + '@aztec/validator-ha-signer@4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: '@aztec/ethereum': 4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)