From 1f43379491bfefc81eb32554090ef30ded5a4e8b Mon Sep 17 00:00:00 2001 From: https-shubhamsahu Date: Sat, 10 Oct 2026 17:22:18 +0530 Subject: [PATCH 1/7] feat(canary): Solana devnet receipts; Monad optional and hidden Every note seal and reader open is now one SPL Memo transaction on Solana devnet (hashes only), sent by the edge function's relayer, so readers still need no wallet. Monad becomes optional (off when CANARY_CONTRACT_ADDRESS is unset) and its UI is behind --dart-define=CANARY_MONAD (default off). - edge function: solana.ts (kit 8.4 + memo 0.15, HTTP polling confirm), gating.ts + offline tests, Buffer shim for the Supabase runtime - migration: seal_solana_sig / open_solana_sig, canary_assign_copy - app: Solana proof chips, Solana-only copy, null seal_tx_hash support - docs: STATUS + VERIFICATION evidence, Solana-first README, devnet spike Co-Authored-By: Claude Opus 5.5 --- README.md | 41 ++-- app/analysis_options.yaml | 9 + app/lib/config/app_mode.dart | 14 +- app/lib/features/canary/data/canary_api.dart | 23 +- .../features/canary/data/canary_crypto.dart | 2 +- .../canary/data/canary_repository.dart | 11 +- .../features/canary/domain/canary_link.dart | 25 +- .../features/canary/domain/canary_models.dart | 85 +++++-- .../presentation/canary_composer_screen.dart | 14 +- .../presentation/canary_created_screen.dart | 10 +- .../presentation/canary_home_screen.dart | 61 +++-- .../presentation/canary_note_screen.dart | 70 ++++-- .../presentation/canary_reader_screen.dart | 37 ++- .../canary/presentation/canary_ui.dart | 4 +- .../presentation/ui/canary_envelope.dart | 7 +- .../presentation/ui/canary_nav_bar.dart | 47 ++-- .../canary/presentation/ui/canary_reveal.dart | 11 +- .../canary/presentation/ui/canary_strip.dart | 3 +- .../canary/presentation/ui/chain_chip.dart | 123 ++++++++-- .../canary/presentation/ui/proof_chips.dart | 75 ++++++ app/supabase/functions/canary/gating.ts | 61 +++++ app/supabase/functions/canary/gating_test.ts | 83 +++++++ app/supabase/functions/canary/index.ts | 195 ++++++++++++--- app/supabase/functions/canary/solana.ts | 194 +++++++++++++++ .../20261010090000_nosus_canary_solana.sql | 80 ++++++ app/test/unit/canary_link_test.dart | 27 ++ app/test/unit/canary_models_test.dart | 151 ++++++++++++ app/test/widget/canary_app_test.dart | 15 ++ app/test/widget/proof_chips_test.dart | 232 ++++++++++++++++++ assets/readme/banner.svg | 2 +- assets/readme/story.svg | 6 +- docs/STATUS.md | 36 +++ docs/canary/VERIFICATION.md | 30 +++ readme.config.json | 6 +- supabase/README.md | 19 ++ tool/build-readme.mjs | 61 +++-- tool/solana-spike/.gitignore | 2 + tool/solana-spike/README.md | 39 +++ tool/solana-spike/send_memo.ts | 164 +++++++++++++ 39 files changed, 1855 insertions(+), 220 deletions(-) create mode 100644 app/lib/features/canary/presentation/ui/proof_chips.dart create mode 100644 app/supabase/functions/canary/gating.ts create mode 100644 app/supabase/functions/canary/gating_test.ts create mode 100644 app/supabase/functions/canary/solana.ts create mode 100644 app/supabase/migrations/20261010090000_nosus_canary_solana.sql create mode 100644 app/test/unit/canary_models_test.dart create mode 100644 app/test/widget/proof_chips_test.dart create mode 100644 tool/solana-spike/.gitignore create mode 100644 tool/solana-spike/README.md create mode 100644 tool/solana-spike/send_memo.ts diff --git a/README.md b/README.md index 2231a94..db2e906 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ ## Step 1: Watch -

Animation: the sender seals a note on Monad, five readers each receive a different copy, Priya's copy leaks, NO SUS scans it and the canary sings: copy 03 is Priya's.

+

Animation: the sender seals a note on Solana, five readers each receive a different copy, Priya's copy leaks, NO SUS scans it and the canary sings: copy 03 is Priya's.

## Step 2: Try it @@ -26,25 +26,26 @@

Battle text: A wild LEAK appeared! Canary used FINGERPRINT! It's super effective! It was Priya's copy, number 03.

-## Step 3: Why Monad +## Step 3: Why Solana -- **One transaction per reader.** Every **Open my copy** is recorded on-chain. -- **Final in under a second.** About **0.015 MON** each. -- **Parallel execution.** A whole room can open the link at once. +- **One memo per seal and per open.** Sealing a note and every **Open my copy** each write one Memo-program transaction on Solana devnet. +- **Hashes only.** A memo carries a hashed note id, one hash of all copies and an anonymous reader tag. Never the text, the key or a name. +- **A link on every chip.** Each record has its own Solana Explorer link in the app. +- **No wallet for readers.** A relayer pays the fee, about **0.000005 SOL** per memo. ## Judge checklist | | What | Where | |---|---|---| | **Done** | Live app | [shubham-sahu.me/nosus-canary/](http://shubham-sahu.me/nosus-canary/) | -| **Done** | Contract on Monad testnet | [`0xb1a1858866122c84cf97861ca815fb070e010e68`](https://testnet.monadscan.com/address/0xb1a1858866122c84cf97861ca815fb070e010e68) | -| **Done** | Verified source code | [View verified source](https://sourcify.dev/server/repo-ui/10143/0xb1a1858866122c84cf97861ca815fb070e010e68) | -| **Done** | Live transaction in the demo | Every **Open my copy** tap | +| **Done** | Solana devnet memo log | [View on Solana Explorer](https://explorer.solana.com/tx/2BHqnuCxYyemfegHkncgTsQyMPjpyB9boD1XqYfD1Wtbcf51Fpy3y264UwGhnvRKtcxFKCaSAzHxLrDwFRk512bQ?cluster=devnet) | +| **Done** | Live transaction in the demo | Every seal and every **Open my copy** tap | | **Done** | Public repo you can run | [Run it yourself](#more) | | Soon | Build in public | _soon_ · _soon_ · _soon_ | -| Soon | Bonus: Monad mainnet | _soon_ | | **Done** | Bonus: custom domain | [shubham-sahu.me](http://shubham-sahu.me/nosus-canary/) | +Earlier prototype: the same flow on Monad testnet ([contract](https://testnet.monadscan.com/address/0xb1a1858866122c84cf97861ca815fb070e010e68), [verified source](https://sourcify.dev/server/repo-ui/10143/0xb1a1858866122c84cf97861ca815fb070e010e68)), still in the repo behind the `CANARY_MONAD` build flag. + > **Honest limits:** it names *whose copy* leaked, not *who shared it*. It doesn't stop screenshots. It makes them traceable. ## More @@ -53,8 +54,8 @@ How the fingerprint works - **Write once.** NO SUS swaps safe word twins (`don't` / `do not`, `five` / `5`) to make up to **100 copies**. Each looks normal, each is unique. -- **Seal it.** Copies are encrypted in your browser. The key lives only in the link's `#fragment`. `sealNote` puts one hash of all copies on Monad before anyone reads. -- **Share it.** Each reader gets the next unused copy. `openCopy` records it on Monad with an anonymous tag, never the name. +- **Seal it.** Copies are encrypted in your browser. The key lives only in the link's `#fragment`. A seal memo puts one hash of all copies on Solana devnet before anyone reads. +- **Share it.** Each reader gets the next unused copy. An open memo records it on Solana with an anonymous tag, never the name. - **Catch it.** Paste a leak into **Check a leak**. Matching runs on your device. If too little text survived, it names nobody. @@ -72,13 +73,13 @@ cd app flutter pub get flutter run -d chrome -# Contract -cd ../contracts -npm ci -npx hardhat test +# Edge function checks (offline) +cd .. +npx -y deno@2 check app/supabase/functions/canary/index.ts +npx -y deno@2 test app/supabase/functions/canary/gating_test.ts ``` -Own backend and contract: see [`docs/canary/NOSUS_CANARY_BUILD_PLAN.md`](docs/canary/NOSUS_CANARY_BUILD_PLAN.md). +Own backend: see [`docs/canary/NOSUS_CANARY_BUILD_PLAN.md`](docs/canary/NOSUS_CANARY_BUILD_PLAN.md).
@@ -88,9 +89,9 @@ Own backend and contract: see [`docs/canary/NOSUS_CANARY_BUILD_PLAN.md`](docs/ca %%{init: {'theme':'base','themeVariables':{'primaryColor':'#FAF6EC','primaryTextColor':'#141414','primaryBorderColor':'#141414','lineColor':'#F28C28','fontFamily':'monospace'}}}%% flowchart LR S["Sender app"] -- "encrypted copies" --> F["canary function"] - F -- "sealNote" --> M[("NoSusCanary on Monad")] + F -- "seal memo" --> M[("Memo program on Solana devnet")] R["Reader"] -- "open + name" --> F - F -- "openCopy" --> M + F -- "open memo" --> M F -- "their copy" --> R ``` @@ -112,10 +113,10 @@ Fingerprint test harness, 15-slot demo note: | Partial excerpts (30–70%) | named only when sure | 0 / 600 |
-Full technical write-up (setup, deployment, contract and relayers): [`docs/TECHNICAL_README.md`](docs/TECHNICAL_README.md) +Full technical write-up (setup, deployment and relayers): [`docs/TECHNICAL_README.md`](docs/TECHNICAL_README.md) --- -**Team:** Shubham Sahu · Built at **Monad Blitz Mumbai V4** · part of **NO SUS** +**Team:** Shubham Sahu · Part of **NO SUS**

Game over? Play again at the live app.

diff --git a/app/analysis_options.yaml b/app/analysis_options.yaml index f5306fb..ec9fbef 100644 --- a/app/analysis_options.yaml +++ b/app/analysis_options.yaml @@ -7,6 +7,15 @@ # The following line activates a set of recommended lints for Flutter apps, # packages, and plugins designed to encourage good coding practices. +analyzer: + exclude: + - build/** + - android/** + - ios/** + - web/** + - windows/** + - macos/** + - linux/** include: package:flutter_lints/flutter.yaml linter: diff --git a/app/lib/config/app_mode.dart b/app/lib/config/app_mode.dart index fabeeae..23551cf 100644 --- a/app/lib/config/app_mode.dart +++ b/app/lib/config/app_mode.dart @@ -3,7 +3,17 @@ /// The full NO SUS app (APK, main web app) never sets it. const bool kCanaryOnly = bool.fromEnvironment('NOSUS_CANARY_ONLY'); -/// Optional deployed contract address to show on the Canary landing page. +/// Shows the Monad testnet prototype in NO SUS Canary: the wallet button, +/// Monad proof chips, "Verify on Monad" and all Monad wording. Off by +/// default: Solana devnet is the only receipt the product shows. Build with +/// --dart-define=CANARY_MONAD=true to reproduce the earlier Monad build. +const bool kCanaryMonad = bool.fromEnvironment( + 'CANARY_MONAD', + defaultValue: false, +); + +/// Optional deployed contract address to show on the Canary landing page +/// (Monad testnet; only shown when [kCanaryMonad] is true). const String kCanaryContract = String.fromEnvironment( 'CANARY_CONTRACT', defaultValue: '0xb1a1858866122c84cf97861ca815fb070e010e68', @@ -12,5 +22,5 @@ const String kCanaryContract = String.fromEnvironment( /// Optional repo URL for the open-source link in the hero/footer. const String kCanaryRepoUrl = String.fromEnvironment( 'CANARY_REPO_URL', - defaultValue: 'https://github.com/https-shubhamsahu/nosus-monad', + defaultValue: 'https://github.com/https-shubhamsahu/nosus-canary', ); diff --git a/app/lib/features/canary/data/canary_api.dart b/app/lib/features/canary/data/canary_api.dart index eb04638..10ca767 100644 --- a/app/lib/features/canary/data/canary_api.dart +++ b/app/lib/features/canary/data/canary_api.dart @@ -68,8 +68,12 @@ class CanaryApi { return decoded; } - /// Uploads every encrypted copy and seals the note on Monad. - Future<({String sealTxHash, DateTime expiresAt})> create({ + /// Uploads every encrypted copy and seals the note: one memo on Solana + /// devnet ([sealSolanaSig]) and, only while the server has the Monad + /// prototype switched on, one Monad testnet transaction ([sealTxHash]). + /// The server answers 200 only once at least one of them exists. + Future<({String? sealTxHash, String? sealSolanaSig, DateTime expiresAt})> + create({ required String noteId, required String ownerHash, required int copyCount, @@ -89,8 +93,17 @@ class CanaryApi { {'index': c.index, 'ciphertext': c.ciphertext, 'iv': c.iv}, ], }, timeout: const Duration(seconds: 60)); + final sealTxHash = result['seal_tx_hash'] as String?; + final sealSolanaSig = result['seal_solana_sig'] as String?; + if (sealTxHash == null && sealSolanaSig == null) { + throw const CanaryApiException( + 'The note was not sealed. Try again.', + retryable: true, + ); + } return ( - sealTxHash: result['seal_tx_hash'] as String, + sealTxHash: sealTxHash, + sealSolanaSig: sealSolanaSig, expiresAt: DateTime.parse(result['expires_at'] as String), ); } @@ -103,6 +116,7 @@ class CanaryApi { String ciphertext, String iv, String? openTxHash, + String? openSolanaSig, DateTime openedAt, }) > @@ -123,6 +137,7 @@ class CanaryApi { ciphertext: r['ciphertext'] as String, iv: r['iv'] as String, openTxHash: r['open_tx_hash'] as String?, + openSolanaSig: r['open_solana_sig'] as String?, openedAt: DateTime.parse(r['opened_at'] as String), ); } @@ -140,6 +155,7 @@ class CanaryApi { return CanaryNoteStatus( copyCount: r['copy_count'] as int, sealTxHash: r['seal_tx_hash'] as String?, + sealSolanaSig: r['seal_solana_sig'] as String?, expiresAt: DateTime.parse(r['expires_at'] as String), copies: [ for (final c in r['copies'] as List) @@ -148,6 +164,7 @@ class CanaryApi { readerName: c['reader_name'] as String, openedAt: DateTime.parse(c['opened_at'] as String), openTxHash: c['open_tx_hash'] as String?, + openSolanaSig: c['open_solana_sig'] as String?, ), ], ); diff --git a/app/lib/features/canary/data/canary_crypto.dart b/app/lib/features/canary/data/canary_crypto.dart index a8364e9..83eb68b 100644 --- a/app/lib/features/canary/data/canary_crypto.dart +++ b/app/lib/features/canary/data/canary_crypto.dart @@ -46,7 +46,7 @@ class CanaryCrypto { static String copyDigest(String saltHex, int index, String copyText) => sha256Hex('$saltHex:$index:$copyText'); - /// Commitment to every copy, written to Monad: sha256 of the digests + /// Commitment to every copy, written on chain: sha256 of the digests /// concatenated in copy order, as 0x-prefixed hex. static String copiesHash(List copyDigests) => '0x${sha256Hex(copyDigests.join())}'; diff --git a/app/lib/features/canary/data/canary_repository.dart b/app/lib/features/canary/data/canary_repository.dart index 6cab315..698c597 100644 --- a/app/lib/features/canary/data/canary_repository.dart +++ b/app/lib/features/canary/data/canary_repository.dart @@ -1,5 +1,6 @@ import 'package:uuid/uuid.dart'; +import '../../../config/app_mode.dart'; import '../../../core/utils/web_links.dart'; import '../domain/canary_fingerprint.dart'; import '../domain/canary_link.dart'; @@ -33,7 +34,9 @@ class CanaryRepository { CanaryOwnerRecord? findNote(String noteId) => _store.findNote(noteId); /// Sender: builds every copy on this device, uploads only ciphertext, and - /// seals the note on Monad. [onStage] receives short progress messages. + /// seals the note on Solana devnet (plus Monad testnet when the server has + /// the prototype on). + /// [onStage] receives short progress messages. Future createNote({ required String text, required int copyCount, @@ -118,7 +121,9 @@ class CanaryRepository { // the codewords. Removed again below if the upload fails. await _store.saveNote(draft); - onStage?.call('Sealing on Monad…'); + onStage?.call( + kCanaryMonad ? 'Sealing on Monad + Solana…' : 'Sealing on Solana devnet…', + ); try { final result = await _api.create( noteId: noteId, @@ -130,6 +135,7 @@ class CanaryRepository { ); final sealed = draft.copyWith( sealTxHash: result.sealTxHash, + sealSolanaSig: result.sealSolanaSig, expiresAt: result.expiresAt, ); await _store.saveNote(sealed); @@ -177,6 +183,7 @@ class CanaryRepository { readerName: name, openedAt: result.openedAt, openTxHash: result.openTxHash, + openSolanaSig: result.openSolanaSig, ); } diff --git a/app/lib/features/canary/domain/canary_link.dart b/app/lib/features/canary/domain/canary_link.dart index a889830..8b6067b 100644 --- a/app/lib/features/canary/domain/canary_link.dart +++ b/app/lib/features/canary/domain/canary_link.dart @@ -50,7 +50,8 @@ CanaryLinkToken? parseCanaryReaderLink(String fullUrl) { return CanaryLinkToken(noteId: noteId, keyHex: key); } -/// The bytes32 note id used on Monad: sha256("nosus-canary:" + noteId). +/// The bytes32 note id used on chain (Solana memo, Monad contract): +/// sha256("nosus-canary:" + noteId). /// The edge function computes the same value; keep them identical. String canaryChainNoteId(String noteId) => '0x${sha256.convert(utf8.encode('nosus-canary:$noteId'))}'; @@ -58,3 +59,25 @@ String canaryChainNoteId(String noteId) => /// Public block explorer page for a Monad testnet transaction. String canaryExplorerTxUrl(String txHash) => 'https://testnet.monadscan.com/tx/$txHash'; + +/// Public block explorer page for a Solana devnet transaction signature. +String canarySolanaExplorerTxUrl(String signature) => + 'https://explorer.solana.com/tx/$signature?cluster=devnet'; + +/// Which public chain a Canary proof lives on. +enum CanaryChain { + monad, + solana; + + /// Short brand name for chips: 'Monad' / 'Solana'. + String get label => this == CanaryChain.monad ? 'Monad' : 'Solana'; + + /// Network name for sentences: 'Monad testnet' / 'Solana devnet'. + String get network => + this == CanaryChain.monad ? 'Monad testnet' : 'Solana devnet'; + + /// Public explorer page for a transaction on this chain. + String txUrl(String hash) => this == CanaryChain.monad + ? canaryExplorerTxUrl(hash) + : canarySolanaExplorerTxUrl(hash); +} diff --git a/app/lib/features/canary/domain/canary_models.dart b/app/lib/features/canary/domain/canary_models.dart index 1693625..f7300a5 100644 --- a/app/lib/features/canary/domain/canary_models.dart +++ b/app/lib/features/canary/domain/canary_models.dart @@ -27,6 +27,7 @@ class CanaryOwnerRecord { required this.plan, required this.codewords, this.sealTxHash, + this.sealSolanaSig, }); final String noteId; @@ -49,26 +50,37 @@ class CanaryOwnerRecord { /// codewords[i] is the 0/1 choice per slot for copy i. final List> codewords; - /// Monad transaction that sealed the note. Null until sealing succeeded. + /// Monad testnet transaction that sealed the note (earlier prototype). + /// Null while the server has Monad off, and for unsealed drafts. final String? sealTxHash; - bool get isSealed => sealTxHash != null; - - CanaryOwnerRecord copyWith({String? sealTxHash, DateTime? expiresAt}) => - CanaryOwnerRecord( - noteId: noteId, - keyHex: keyHex, - ownerSecret: ownerSecret, - saltHex: saltHex, - copyCount: copyCount, - createdAt: createdAt, - expiresAt: expiresAt ?? this.expiresAt, - readerLink: readerLink, - preview: preview, - plan: plan, - codewords: codewords, - sealTxHash: sealTxHash ?? this.sealTxHash, - ); + /// Solana devnet memo signature that sealed the note: the product's + /// receipt. Null for unsealed drafts and for records saved before Solana + /// proofs existed. + final String? sealSolanaSig; + + /// Sealed once either chain holds the seal. + bool get isSealed => sealTxHash != null || sealSolanaSig != null; + + CanaryOwnerRecord copyWith({ + String? sealTxHash, + String? sealSolanaSig, + DateTime? expiresAt, + }) => CanaryOwnerRecord( + noteId: noteId, + keyHex: keyHex, + ownerSecret: ownerSecret, + saltHex: saltHex, + copyCount: copyCount, + createdAt: createdAt, + expiresAt: expiresAt ?? this.expiresAt, + readerLink: readerLink, + preview: preview, + plan: plan, + codewords: codewords, + sealTxHash: sealTxHash ?? this.sealTxHash, + sealSolanaSig: sealSolanaSig ?? this.sealSolanaSig, + ); Map toJson() => { 'v': 1, @@ -84,6 +96,7 @@ class CanaryOwnerRecord { 'plan': plan.toJson(), 'codewords': [for (final c in codewords) c.join()], 'sealTxHash': sealTxHash, + 'sealSolanaSig': sealSolanaSig, }; factory CanaryOwnerRecord.fromJson(Map json) { @@ -104,6 +117,8 @@ class CanaryOwnerRecord { [for (final ch in (c as String).split('')) ch == '1' ? 1 : 0], ], sealTxHash: json['sealTxHash'] as String?, + // Records saved before Solana proofs existed have no key here. + sealSolanaSig: json['sealSolanaSig'] as String?, ); } } @@ -115,36 +130,52 @@ class CanaryCopyStatus { required this.readerName, required this.openedAt, required this.openTxHash, + required this.openSolanaSig, }); final int copyIndex; final String readerName; final DateTime openedAt; - /// Null while the Monad record is still being written. + /// Monad testnet transaction for this open. Null while it is being + /// written, and always null while the server has Monad off. final String? openTxHash; + + /// Solana devnet memo signature for this open. Null while it is being + /// written (a failed memo is sent again on the reader's next open). + final String? openSolanaSig; + + /// The open has a public receipt on at least one chain. + bool get isRecorded => openTxHash != null || openSolanaSig != null; } class CanaryNoteStatus { const CanaryNoteStatus({ required this.copyCount, required this.sealTxHash, + required this.sealSolanaSig, required this.expiresAt, required this.copies, }); final int copyCount; + + /// Monad testnet transaction that sealed the note. Null while the server + /// has Monad off. final String? sealTxHash; + + /// Solana devnet memo signature that sealed the note. + final String? sealSolanaSig; final DateTime expiresAt; /// Only copies that have been opened, ordered by copy index. final List copies; - /// Nothing more can change: every copy is opened and on Monad, or the - /// link has expired. Screens stop polling at this point. + /// Nothing more can change: every copy is opened and recorded on chain, + /// or the link has expired. Screens stop polling at this point. bool get isSettled => !expiresAt.isAfter(DateTime.now()) || - (copies.length >= copyCount && copies.every((c) => c.openTxHash != null)); + (copies.length >= copyCount && copies.every((c) => c.isRecorded)); CanaryCopyStatus? copy(int index) { for (final c in copies) { @@ -163,6 +194,7 @@ class CanaryOpenedCopy { required this.readerName, required this.openedAt, required this.openTxHash, + required this.openSolanaSig, }); /// The copy text, including its invisible marker. @@ -172,7 +204,12 @@ class CanaryOpenedCopy { final String readerName; final DateTime openedAt; - /// Null only in the rare case the Monad write succeeded but its hash was - /// not stored; the UI then shows the time without a proof link. + /// Monad testnet transaction for this open (earlier prototype). Null + /// while the server has Monad off. final String? openTxHash; + + /// Solana devnet memo signature for this open. Null when the memo has not + /// landed yet (it is sent again on the next open of this copy); the UI + /// then shows the time without a proof link. + final String? openSolanaSig; } diff --git a/app/lib/features/canary/presentation/canary_composer_screen.dart b/app/lib/features/canary/presentation/canary_composer_screen.dart index 227e0f2..5ea9154 100644 --- a/app/lib/features/canary/presentation/canary_composer_screen.dart +++ b/app/lib/features/canary/presentation/canary_composer_screen.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import '../../../config/app_mode.dart'; import '../../../core/layout/app_breakpoints.dart'; import '../../../theme.dart'; import '../data/canary_api.dart'; @@ -455,10 +456,15 @@ class _CanaryComposerScreenState extends ConsumerState { ), const SizedBox(height: 16), const Text( - 'Your note is encrypted on this device. NO SUS stores only the ' - 'encrypted copies; the key travels inside the link. Monad testnet ' - 'receives only a hash of the copies and an anonymous tag per ' - 'reader, never the text or names.', + kCanaryMonad + ? 'Your note is encrypted on this device. NO SUS stores only the ' + 'encrypted copies; the key travels inside the link. Monad testnet ' + 'and Solana devnet receive only a hash of the copies and an ' + 'anonymous tag per reader, never the text or names.' + : 'Your note is encrypted on this device. NO SUS stores only the ' + 'encrypted copies; the key travels inside the link. Solana ' + 'devnet receives only a hash of the copies and an anonymous ' + 'tag per reader, never the text or names.', style: TextStyle( fontSize: 13, height: 1.55, diff --git a/app/lib/features/canary/presentation/canary_created_screen.dart b/app/lib/features/canary/presentation/canary_created_screen.dart index 8d764bf..325d9de 100644 --- a/app/lib/features/canary/presentation/canary_created_screen.dart +++ b/app/lib/features/canary/presentation/canary_created_screen.dart @@ -13,8 +13,8 @@ import '../domain/canary_models.dart'; import 'canary_note_screen.dart'; import 'canary_providers.dart'; import 'canary_ui.dart'; -import 'ui/chain_chip.dart'; import 'ui/glow_card.dart'; +import 'ui/proof_chips.dart'; import 'ui/swap_word_text.dart'; /// Shown right after creating a note, and from the dashboard's "Show QR". @@ -219,9 +219,13 @@ class _CanaryCreatedScreenState extends ConsumerState { ), ], ), - if (record.sealTxHash != null) ...[ + if (record.sealTxHash != null || record.sealSolanaSig != null) ...[ const SizedBox(height: 12), - ChainChip(label: 'Sealed on Monad', txHash: record.sealTxHash), + ProofChips( + monadTxHash: record.sealTxHash, + solanaSig: record.sealSolanaSig, + labelPrefix: 'Sealed on', + ), ], ], ); diff --git a/app/lib/features/canary/presentation/canary_home_screen.dart b/app/lib/features/canary/presentation/canary_home_screen.dart index e4d2f52..b162e23 100644 --- a/app/lib/features/canary/presentation/canary_home_screen.dart +++ b/app/lib/features/canary/presentation/canary_home_screen.dart @@ -94,14 +94,23 @@ class _CanaryHomeScreenState extends ConsumerState { static const double _maxWide = 1360; - static const _tickerItems = [ - 'EVERY OPEN = 1 MONAD TRANSACTION', - '~0.015 MON PER READER', - 'FINAL IN UNDER 1 SECOND', - 'NO WALLET NEEDED TO READ', - 'LEAK MATCHING STAYS ON YOUR DEVICE', - 'IT CANNOT STOP SCREENSHOTS. IT MAKES THEM TRACEABLE.', - ]; + static const _tickerItems = kCanaryMonad + ? [ + 'EVERY OPEN = 1 TX ON MONAD + 1 ON SOLANA', + '~0.015 MON PER READER', + 'FINAL IN UNDER 1 SECOND', + 'NO WALLET NEEDED TO READ', + 'LEAK MATCHING STAYS ON YOUR DEVICE', + 'IT CANNOT STOP SCREENSHOTS. IT MAKES THEM TRACEABLE.', + ] + : [ + 'EVERY OPEN = 1 MEMO ON SOLANA DEVNET', + '~0.000005 SOL PER READER', + 'ONLY HASHES GO ON CHAIN, NEVER TEXT', + 'NO WALLET NEEDED TO READ', + 'LEAK MATCHING STAYS ON YOUR DEVICE', + 'IT CANNOT STOP SCREENSHOTS. IT MAKES THEM TRACEABLE.', + ]; Widget _sectionTitle(String title, String subtitle) => Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -456,14 +465,21 @@ class _CanaryHomeScreenState extends ConsumerState { borderRadius: BorderRadius.circular(8), border: Border.all(color: CanaryTokens.text, width: 2), ), - child: const Text( - 'NO SUS x MONAD', - style: TextStyle( + // One line on wide screens; on a phone the three names of the + // Monad build would not fit in 320 px, so Solana takes a second + // line in the stamp. + child: Text( + !kCanaryMonad + ? 'NO SUS x SOLANA' + : expanded + ? 'NO SUS x MONAD x SOLANA' + : 'NO SUS x MONAD\nx SOLANA', + style: const TextStyle( color: CanaryTokens.text, fontFamily: CanaryTokens.monoFont, fontSize: 22, letterSpacing: 2, - height: 1, + height: 1.1, ), ), ), @@ -561,14 +577,19 @@ class _CanaryHomeScreenState extends ConsumerState { runSpacing: 12, crossAxisAlignment: WrapCrossAlignment.center, children: [ - if (kCanaryContract.isNotEmpty) - const ChainChip( - label: 'Contract on Monad', - txHash: kCanaryContract, - compact: true, - ), - const Text('~0.015 MON / READER', style: stat), - const Text('FINAL < 1 S', style: stat), + if (kCanaryMonad) ...[ + if (kCanaryContract.isNotEmpty) + const ChainChip( + label: 'Contract on Monad', + txHash: kCanaryContract, + compact: true, + ), + const Text('~0.015 MON / READER', style: stat), + const Text('FINAL < 1 S', style: stat), + ] else ...[ + const Text('SOLANA DEVNET', style: stat), + const Text('~0.000005 SOL / READER', style: stat), + ], InkWell( onTap: () => _openUrl(kCanaryRepoUrl), child: const Text( diff --git a/app/lib/features/canary/presentation/canary_note_screen.dart b/app/lib/features/canary/presentation/canary_note_screen.dart index 431fc8c..6ee6431 100644 --- a/app/lib/features/canary/presentation/canary_note_screen.dart +++ b/app/lib/features/canary/presentation/canary_note_screen.dart @@ -2,17 +2,20 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:url_launcher/url_launcher.dart'; +import '../../../config/app_mode.dart'; import '../../../core/layout/app_breakpoints.dart'; import '../../../theme.dart'; import '../data/canary_api.dart'; +import '../domain/canary_link.dart'; import '../domain/canary_models.dart'; import 'canary_created_screen.dart'; import 'canary_leak_check_screen.dart'; import 'canary_providers.dart'; import 'canary_ui.dart'; -import 'ui/chain_chip.dart'; import 'ui/glow_card.dart'; +import 'ui/proof_chips.dart'; import 'ui/wallet_button.dart'; /// Owner dashboard: live "Seen by" list plus the leak check. @@ -73,6 +76,25 @@ class _CanaryNoteScreenState extends ConsumerState { } } + Future _openSolanaSeal(String signature) async { + final ok = await launchUrl( + Uri.parse(canarySolanaExplorerTxUrl(signature)), + mode: LaunchMode.externalApplication, + ); + if (!ok && mounted) { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('Could not open the explorer.')), + ); + } + } + + /// Solana is on for this note when its seal landed there; an open with no + /// signature yet is then "still being written" for a short while. + bool _solanaPending(CanaryNoteStatus status, CanaryCopyStatus copy) => + status.sealSolanaSig != null && + copy.openSolanaSig == null && + DateTime.now().difference(copy.openedAt) < const Duration(minutes: 2); + @override Widget build(BuildContext context) { final record = _record; @@ -180,10 +202,21 @@ class _CanaryNoteScreenState extends ConsumerState { ), ), ), - VerifyOnMonadButton( - noteId: record.noteId, - localOpened: status?.copies.length, - ), + if (kCanaryMonad) + VerifyOnMonadButton( + noteId: record.noteId, + localOpened: status?.copies.length, + ), + if (status?.sealSolanaSig case final sig?) + OutlinedButton.icon( + icon: const Icon(Icons.open_in_new, size: 18), + label: const Text( + 'Verify on Solana ↗', + semanticsLabel: 'Verify on Solana. Opens the seal on ' + 'Solana devnet in the explorer.', + ), + onPressed: () => _openSolanaSeal(sig), + ), OutlinedButton.icon( icon: const Icon(Icons.qr_code), label: const Text('Show link & QR'), @@ -214,6 +247,7 @@ class _CanaryNoteScreenState extends ConsumerState { margin: const EdgeInsets.only(bottom: 10), padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 10), child: Row( + crossAxisAlignment: CrossAxisAlignment.start, children: [ CircleAvatar( backgroundColor: CanaryTokens.surfaceHi, @@ -233,25 +267,19 @@ class _CanaryNoteScreenState extends ConsumerState { color: CanaryTokens.textDim, ), ), + const SizedBox(height: 8), + // Below the name, not beside it: two chips need the + // card's full width to wrap on a phone. + ProofChips( + monadTxHash: copy.openTxHash, + solanaSig: copy.openSolanaSig, + monadPending: copy.openTxHash == null, + solanaPending: _solanaPending(status, copy), + compact: true, + ), ], ), ), - if (copy.openTxHash == null) - const Tooltip( - message: 'Recording on Monad…', - child: Icon( - Icons.hourglass_empty, - color: CanaryTokens.monad, - ), - ) - else - Flexible( - child: ChainChip( - label: 'Monad', - txHash: copy.openTxHash, - compact: true, - ), - ), ], ), ), diff --git a/app/lib/features/canary/presentation/canary_reader_screen.dart b/app/lib/features/canary/presentation/canary_reader_screen.dart index 3cdcd1d..3f615a2 100644 --- a/app/lib/features/canary/presentation/canary_reader_screen.dart +++ b/app/lib/features/canary/presentation/canary_reader_screen.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import '../../../config/app_mode.dart'; import '../../../core/layout/app_breakpoints.dart'; import '../../../theme.dart'; import '../data/canary_api.dart'; @@ -8,11 +9,11 @@ import '../domain/canary_models.dart'; import 'canary_providers.dart'; import 'canary_ui.dart'; import 'ui/canary_envelope.dart'; -import 'ui/chain_chip.dart'; import 'ui/copy_badge.dart'; import 'ui/glow_card.dart'; import 'ui/liquid_carve_button.dart'; import 'ui/pixel_canary.dart'; +import 'ui/proof_chips.dart'; import 'ui/canary_strip.dart'; /// Standalone app for the web reader path (main.dart runs it directly for @@ -273,8 +274,13 @@ class _CanaryReaderScreenState extends ConsumerState { ), const SizedBox(height: 16), const Text( - 'The sender sees your name and when you opened your copy. Monad ' - 'testnet records that a copy was opened, without your name.', + kCanaryMonad + ? 'The sender sees your name and when you opened your copy. Monad ' + 'testnet and Solana devnet each record that a copy was opened, ' + 'without your name.' + : 'The sender sees your name and when you opened your copy. ' + 'Solana devnet records that a copy was opened, without ' + 'your name.', style: TextStyle( fontSize: 14, height: 1.55, @@ -316,14 +322,21 @@ class _CanaryReaderScreenState extends ConsumerState { const SizedBox(height: 12), DelayedFadeIn( delay: const Duration(milliseconds: 450), - child: copy.openTxHash == null + // No polling here, so no pending chip: show the proofs that + // exist, or the time alone when no shown proof was stored. + child: + copy.openSolanaSig == null && + (!kCanaryMonad || copy.openTxHash == null) ? Text( - 'Recorded on Monad testnet at ${CanaryUi.clock(copy.openedAt)}', + kCanaryMonad + ? 'Recorded on Monad testnet at ${CanaryUi.clock(copy.openedAt)}' + : 'Opened at ${CanaryUi.clock(copy.openedAt)}', style: const TextStyle(fontFamily: CanaryTokens.monoFont), ) - : ChainChip( - label: 'Recorded on Monad', - txHash: copy.openTxHash, + : ProofChips( + monadTxHash: copy.openTxHash, + solanaSig: copy.openSolanaSig, + labelPrefix: 'Recorded on', ), ), ], @@ -337,7 +350,9 @@ class _BrandSide extends StatelessWidget { static const _facts = [ 'YOUR COPY IS UNIQUE TO YOU', - 'OPENING IT = 1 MONAD TRANSACTION', + kCanaryMonad + ? 'OPENING IT = 1 TX ON MONAD + 1 ON SOLANA' + : 'OPENING IT = 1 MEMO ON SOLANA DEVNET', 'NO WALLET, NO APP, NO SIGN-UP', ]; @@ -363,7 +378,9 @@ class _BrandSide extends StatelessWidget { ), const SizedBox(height: 14), const Text( - ' Your own copy. Recorded on Monad. ', + kCanaryMonad + ? ' Your own copy. Recorded on Monad + Solana. ' + : ' Your own copy. Recorded on Solana. ', style: TextStyle( fontFamily: CanaryTokens.displayFont, fontSize: 26, diff --git a/app/lib/features/canary/presentation/canary_ui.dart b/app/lib/features/canary/presentation/canary_ui.dart index 20fac40..b09ab51 100644 --- a/app/lib/features/canary/presentation/canary_ui.dart +++ b/app/lib/features/canary/presentation/canary_ui.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; +import '../../../config/app_mode.dart'; import '../../../core/layout/app_breakpoints.dart'; import '../../../theme.dart'; import '../domain/canary_link.dart'; @@ -97,7 +98,8 @@ class CanaryUi { ), actions: [ ...?actions, - const WalletButton(compact: true), + if (kCanaryMonad) + const WalletButton(compact: true), const SizedBox(width: 8), ], ), diff --git a/app/lib/features/canary/presentation/ui/canary_envelope.dart b/app/lib/features/canary/presentation/ui/canary_envelope.dart index 50cb8f1..3e995b5 100644 --- a/app/lib/features/canary/presentation/ui/canary_envelope.dart +++ b/app/lib/features/canary/presentation/ui/canary_envelope.dart @@ -2,6 +2,7 @@ import 'dart:math' as math; import 'package:flutter/material.dart'; +import '../../../../config/app_mode.dart'; import '../../../../theme.dart'; import 'canary_mark.dart'; import 'glow_card.dart'; @@ -18,7 +19,7 @@ class BobbingCanaryMark extends StatelessWidget { Widget build(BuildContext context) => PixelCanary(size: size); } -/// Sealed envelope shown while the copy is assigned on Monad. +/// Sealed envelope shown while the copy is assigned and recorded on chain. class CanaryEnvelope extends StatefulWidget { const CanaryEnvelope({super.key}); @@ -67,7 +68,9 @@ class _CanaryEnvelopeState extends State const CanaryMark(size: 56), const SizedBox(height: 16), Text( - 'Making your copy… recording it on Monad', + kCanaryMonad + ? 'Making your copy… recording it on Monad' + : 'Making your copy… recording it on Solana', textAlign: TextAlign.center, style: Theme.of(context).textTheme.titleMedium, ), diff --git a/app/lib/features/canary/presentation/ui/canary_nav_bar.dart b/app/lib/features/canary/presentation/ui/canary_nav_bar.dart index 54bff8d..d9095f9 100644 --- a/app/lib/features/canary/presentation/ui/canary_nav_bar.dart +++ b/app/lib/features/canary/presentation/ui/canary_nav_bar.dart @@ -97,16 +97,19 @@ class CanaryTopBar extends StatelessWidget implements PreferredSizeWidget { ], ), - // Right side: Monad pulse pill + NO SUS app link + // Right side: network pulse pill (+ Monad wallet when the + // CANARY_MONAD build flag is on) + NO SUS app link Row( mainAxisSize: MainAxisSize.min, children: [ if (showPill) ...[ - const MonadTestnetPill(), + const NetworkPill(), const SizedBox(width: 14), ], - WalletButton(compact: !expanded), - const SizedBox(width: 12), + if (kCanaryMonad) ...[ + WalletButton(compact: !expanded), + const SizedBox(width: 12), + ], if (standalone) expanded ? ConstrainedBox( @@ -239,15 +242,23 @@ class _NavLinkState extends State<_NavLink> { } } -/// Pulsing "Monad testnet" indicator pill. -class MonadTestnetPill extends StatefulWidget { - const MonadTestnetPill({super.key}); +/// Name of the network Canary proofs land on, for pills and strips. +/// "SOLANA DEVNET", or "MONAD TESTNET" in a CANARY_MONAD build. +const String kCanaryNetworkLabel = kCanaryMonad + ? 'MONAD TESTNET' + : 'SOLANA DEVNET'; + +/// Pulsing network indicator pill ([kCanaryNetworkLabel]). +class NetworkPill extends StatefulWidget { + const NetworkPill({super.key, this.label = kCanaryNetworkLabel}); + + final String label; @override - State createState() => _MonadTestnetPillState(); + State createState() => _NetworkPillState(); } -class _MonadTestnetPillState extends State +class _NetworkPillState extends State with SingleTickerProviderStateMixin { late final AnimationController _controller; @@ -307,9 +318,9 @@ class _MonadTestnetPillState extends State }, ), const SizedBox(width: 8), - const Text( - 'MONAD TESTNET', - style: TextStyle( + Text( + widget.label, + style: const TextStyle( fontFamily: CanaryTokens.monoFont, fontSize: 21, letterSpacing: 1, @@ -443,11 +454,13 @@ class CanaryFooter extends StatelessWidget { spacing: 12, runSpacing: 8, children: [ - const Text( - 'Built at Monad Blitz Mumbai V4', - style: TextStyle(color: CanaryTokens.textDim, fontSize: 13), - ), - const Text('·', style: TextStyle(color: CanaryTokens.textDim)), + if (kCanaryMonad) ...[ + const Text( + 'Built at Monad Blitz Mumbai V4', + style: TextStyle(color: CanaryTokens.textDim, fontSize: 13), + ), + const Text('·', style: TextStyle(color: CanaryTokens.textDim)), + ], InkWell( onTap: () => _openUrl(context, 'https://nosus.foo'), child: const Text( diff --git a/app/lib/features/canary/presentation/ui/canary_reveal.dart b/app/lib/features/canary/presentation/ui/canary_reveal.dart index 48e5f2a..a2ac73d 100644 --- a/app/lib/features/canary/presentation/ui/canary_reveal.dart +++ b/app/lib/features/canary/presentation/ui/canary_reveal.dart @@ -1,7 +1,9 @@ import 'package:flutter/material.dart'; +import '../../../../config/app_mode.dart'; import '../../../../theme.dart'; import '../../domain/canary_fingerprint.dart'; +import '../../domain/canary_link.dart'; import '../../domain/canary_models.dart'; import '../canary_ui.dart'; import 'canary_mark.dart'; @@ -126,9 +128,16 @@ class _CanaryRevealState extends State 'Opened ${CanaryUi.clock(copy.openedAt)}', style: const TextStyle(fontFamily: CanaryTokens.monoFont), ), - if (copy.openTxHash != null) ...[ + if (kCanaryMonad && copy.openTxHash != null) ...[ const SizedBox(height: 8), ChainChip(label: 'Proof on Monad', txHash: copy.openTxHash), + ] else if (!kCanaryMonad && copy.openSolanaSig != null) ...[ + const SizedBox(height: 8), + ChainChip( + chain: CanaryChain.solana, + label: 'Proof on Solana', + txHash: copy.openSolanaSig, + ), ], ], const SizedBox(height: 8), diff --git a/app/lib/features/canary/presentation/ui/canary_strip.dart b/app/lib/features/canary/presentation/ui/canary_strip.dart index b9911cf..930c535 100644 --- a/app/lib/features/canary/presentation/ui/canary_strip.dart +++ b/app/lib/features/canary/presentation/ui/canary_strip.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import '../../../../theme.dart'; +import 'canary_nav_bar.dart' show kCanaryNetworkLabel; /// Orange "testnet" strip across the top of the Canary web app. class CanaryStrip extends StatelessWidget { @@ -24,7 +25,7 @@ class CanaryStrip extends StatelessWidget { child: const SafeArea( bottom: false, child: Text( - 'NO SUS · MONAD TESTNET · USE HARMLESS TEST NOTES ONLY', + 'NO SUS · $kCanaryNetworkLabel · USE HARMLESS TEST NOTES ONLY', textAlign: TextAlign.center, maxLines: 1, overflow: TextOverflow.ellipsis, diff --git a/app/lib/features/canary/presentation/ui/chain_chip.dart b/app/lib/features/canary/presentation/ui/chain_chip.dart index b4cfb50..a1b76d8 100644 --- a/app/lib/features/canary/presentation/ui/chain_chip.dart +++ b/app/lib/features/canary/presentation/ui/chain_chip.dart @@ -4,33 +4,70 @@ import 'package:url_launcher/url_launcher.dart'; import '../../../../theme.dart'; import '../../domain/canary_link.dart'; -/// On-chain status pill. Monad purple only; hash is VT323. +/// Ink and tint for one chain's chip. Monad keeps the orange paper tint with +/// an ink border; Solana gets a single restrained teal ink (5.7:1 on the +/// paper background) so the two proofs read apart without a brand gradient. +class _ChainStyle { + const _ChainStyle({required this.ink, required this.tint}); + + final Color ink; + final Color tint; + + static const Color _solanaInk = Color(0xFF0F6E63); + + static _ChainStyle of(CanaryChain chain) => switch (chain) { + CanaryChain.monad => const _ChainStyle( + ink: CanaryTokens.monad, + tint: Color(0x40F28C28), + ), + CanaryChain.solana => const _ChainStyle( + ink: _solanaInk, + tint: Color(0x1F0F6E63), + ), + }; +} + +const TextStyle _chipText = TextStyle( + fontFamily: CanaryTokens.monoFont, + fontSize: 20, + color: CanaryTokens.text, + height: 1.2, +); + +/// On-chain status pill. Border and icon take the chain's ink; hash is VT323. class ChainChip extends StatelessWidget { const ChainChip({ super.key, required this.label, this.txHash, + this.chain = CanaryChain.monad, this.compact = false, }); final String label; final String? txHash; + final CanaryChain chain; final bool compact; + /// `0x1234…abcd` for hex hashes, `5VfY…Qm2p` for base58 signatures. static String shortHash(String hash) { - final h = hash.startsWith('0x') ? hash.substring(2) : hash; + final hex = hash.startsWith('0x'); + final h = hex ? hash.substring(2) : hash; if (h.length < 10) return hash; - return '0x${h.substring(0, 4)}…${h.substring(h.length - 4)}'; + final short = '${h.substring(0, 4)}…${h.substring(h.length - 4)}'; + return hex ? '0x$short' : short; } Future _open(BuildContext context) async { final hash = txHash; if (hash == null) return; + // A 42-char 0x value is a Monad address (the contract), not a tx. + final isMonadAddress = chain == CanaryChain.monad && hash.length == 42; final ok = await launchUrl( Uri.parse( - hash.length == 42 + isMonadAddress ? 'https://testnet.monadscan.com/address/$hash' - : canaryExplorerTxUrl(hash), + : chain.txUrl(hash), ), mode: LaunchMode.externalApplication, ); @@ -44,14 +81,15 @@ class ChainChip extends StatelessWidget { @override Widget build(BuildContext context) { final hash = txHash; + final style = _ChainStyle.of(chain); final text = hash == null ? label : '$label · ${shortHash(hash)}'; final chip = ConstrainedBox( constraints: const BoxConstraints(minHeight: 48), child: DecoratedBox( decoration: BoxDecoration( - color: const Color(0x40F28C28), + color: style.tint, borderRadius: BorderRadius.circular(CanaryTokens.rChip), - border: Border.all(color: CanaryTokens.monad), + border: Border.all(color: style.ink), ), child: Padding( padding: EdgeInsets.symmetric( @@ -61,18 +99,9 @@ class ChainChip extends StatelessWidget { child: Row( mainAxisSize: MainAxisSize.min, children: [ - const Icon(Icons.link, size: 18, color: CanaryTokens.monad), + Icon(Icons.link, size: 18, color: style.ink), const SizedBox(width: 8), - Text( - text, - overflow: TextOverflow.ellipsis, - style: const TextStyle( - fontFamily: CanaryTokens.monoFont, - fontSize: 20, - color: CanaryTokens.text, - height: 1.2, - ), - ), + Text(text, overflow: TextOverflow.ellipsis, style: _chipText), ], ), ), @@ -84,7 +113,7 @@ class ChainChip extends StatelessWidget { } return Semantics( button: true, - label: '$label. View proof on Monad testnet.', + label: '$label. View proof on ${chain.network}.', child: Material( color: Colors.transparent, child: InkWell( @@ -96,3 +125,59 @@ class ChainChip extends StatelessWidget { ); } } + +/// Same silhouette as [ChainChip] for a proof that is still being written: +/// a 16 px progress ring plus "Monad…" / "Solana…". Not tappable. +class PendingChainChip extends StatelessWidget { + const PendingChainChip({ + super.key, + required this.chain, + this.compact = false, + }); + + final CanaryChain chain; + final bool compact; + + @override + Widget build(BuildContext context) { + final style = _ChainStyle.of(chain); + final message = 'Recording on ${chain.network}…'; + return Semantics( + label: message, + excludeSemantics: true, + child: Tooltip( + message: message, + child: ConstrainedBox( + constraints: const BoxConstraints(minHeight: 48), + child: DecoratedBox( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(CanaryTokens.rChip), + border: Border.all(color: style.ink.withValues(alpha: 0.6)), + ), + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: compact ? 12 : 16, + vertical: 10, + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + SizedBox( + width: 16, + height: 16, + child: CircularProgressIndicator( + strokeWidth: 2, + color: style.ink, + ), + ), + const SizedBox(width: 8), + Text('${chain.label}…', style: _chipText), + ], + ), + ), + ), + ), + ), + ); + } +} diff --git a/app/lib/features/canary/presentation/ui/proof_chips.dart b/app/lib/features/canary/presentation/ui/proof_chips.dart new file mode 100644 index 0000000..025793a --- /dev/null +++ b/app/lib/features/canary/presentation/ui/proof_chips.dart @@ -0,0 +1,75 @@ +import 'package:flutter/material.dart'; + +import '../../../../config/app_mode.dart'; +import '../../domain/canary_link.dart'; +import 'chain_chip.dart'; + +/// The on-chain proofs for one seal or one open. +/// +/// Solana devnet is the receipt: its chip shows whenever a signature exists. +/// The Monad testnet chip (earlier prototype) shows only when [showMonad] is +/// true, which defaults to the CANARY_MONAD build flag ([kCanaryMonad]). +/// +/// A [ChainChip] is shown for every hash that exists. A null hash shows a +/// [PendingChainChip] only when the matching `pending` flag is true, so a +/// chain that is switched off simply does not appear. Chips wrap onto new +/// rows instead of clipping on narrow screens. +class ProofChips extends StatelessWidget { + const ProofChips({ + super.key, + this.monadTxHash, + this.solanaSig, + this.monadPending = false, + this.solanaPending = false, + this.labelPrefix = '', + this.compact = false, + bool? showMonad, + }) : showMonad = showMonad ?? kCanaryMonad; + + final String? monadTxHash; + final String? solanaSig; + + /// Show a progress chip while the Monad record is still being written. + final bool monadPending; + + /// Show a progress chip while the Solana record is still being written. + final bool solanaPending; + + /// 'Sealed on' / 'Recorded on' / '' (bare chain name). + final String labelPrefix; + final bool compact; + + /// Whether the Monad chip may appear at all. + final bool showMonad; + + String _label(CanaryChain chain) => + labelPrefix.isEmpty ? chain.label : '$labelPrefix ${chain.label}'; + + Widget? _chip(CanaryChain chain, String? hash, bool pending) { + if (hash != null) { + return ChainChip( + chain: chain, + label: _label(chain), + txHash: hash, + compact: compact, + ); + } + if (pending) return PendingChainChip(chain: chain, compact: compact); + return null; + } + + @override + Widget build(BuildContext context) { + final chips = [ + if (showMonad) _chip(CanaryChain.monad, monadTxHash, monadPending), + _chip(CanaryChain.solana, solanaSig, solanaPending), + ].nonNulls.toList(); + if (chips.isEmpty) return const SizedBox.shrink(); + return Wrap( + spacing: 8, + runSpacing: 8, + crossAxisAlignment: WrapCrossAlignment.center, + children: chips, + ); + } +} diff --git a/app/supabase/functions/canary/gating.ts b/app/supabase/functions/canary/gating.ts new file mode 100644 index 0000000..24f5b3f --- /dev/null +++ b/app/supabase/functions/canary/gating.ts @@ -0,0 +1,61 @@ +// Which proof chains a canary request writes to. Pure functions only (no env, +// no network) so the rules can be checked with `deno test` offline. +// +// Solana devnet is the product's receipt. Monad testnet is the earlier +// prototype and is on only while CANARY_CONTRACT_ADDRESS is set. + +/** Monad is on only when a contract address is configured (blank = off). */ +export function monadEnabled(contractAddress: string | null | undefined): boolean { + return (contractAddress ?? "").trim() !== ""; +} + +type SealFields = { seal_tx_hash?: string | null; seal_solana_sig?: string | null }; + +/** A note is sealed once either chain holds its seal. */ +export function isSealed(note: SealFields | null | undefined): boolean { + return !!note && (!!note.seal_tx_hash || !!note.seal_solana_sig); +} + +export type SealPlan = { + /** Send sealNote on Monad (in parallel with Solana, Monad authoritative). */ + monad: boolean; + /** Send the seal memo on Solana. */ + solana: boolean; + /** A failed Solana memo must fail the request (Solana is the only receipt). */ + solanaRequired: boolean; +}; + +export function planSeal(p: { + monadOn: boolean; + solanaOn: boolean; + sealTx: string | null; + sealSolana: string | null; +}): SealPlan { + const sealed = isSealed({ seal_tx_hash: p.sealTx, seal_solana_sig: p.sealSolana }); + const solana = p.solanaOn && !p.sealSolana; + return { + monad: p.monadOn && !p.sealTx, + solana, + solanaRequired: solana && !p.monadOn && !sealed, + }; +} + +export type OpenPlan = { + /** Send openCopy on Monad (only for notes sealed there). */ + monad: boolean; + /** Send the open memo on Solana. A failure is stored as null and retried. */ + solana: boolean; +}; + +export function planOpen(p: { + monadOn: boolean; + solanaOn: boolean; + noteSealTx: string | null; + openTx: string | null; + openSolana: string | null; +}): OpenPlan { + return { + monad: p.monadOn && !!p.noteSealTx && !p.openTx, + solana: p.solanaOn && !p.openSolana, + }; +} diff --git a/app/supabase/functions/canary/gating_test.ts b/app/supabase/functions/canary/gating_test.ts new file mode 100644 index 0000000..3ae9be8 --- /dev/null +++ b/app/supabase/functions/canary/gating_test.ts @@ -0,0 +1,83 @@ +// Offline checks for the proof-chain rules. Run from the repo root: +// npx -y deno@2 test app/supabase/functions/canary/gating_test.ts +import { assertEquals } from "jsr:@std/assert@1"; +import { isSealed, monadEnabled, planOpen, planSeal } from "./gating.ts"; + +const TX = "0x" + "a".repeat(64); +const SIG = "5".repeat(88); + +Deno.test("monadEnabled: only a non-blank contract address turns Monad on", () => { + assertEquals(monadEnabled(undefined), false); + assertEquals(monadEnabled(null), false); + assertEquals(monadEnabled(""), false); + assertEquals(monadEnabled(" "), false); + assertEquals(monadEnabled("0x" + "1".repeat(40)), true); +}); + +Deno.test("isSealed: either chain's seal counts", () => { + assertEquals(isSealed(null), false); + assertEquals(isSealed({ seal_tx_hash: null, seal_solana_sig: null }), false); + assertEquals(isSealed({ seal_tx_hash: TX, seal_solana_sig: null }), true); + assertEquals(isSealed({ seal_tx_hash: null, seal_solana_sig: SIG }), true); +}); + +Deno.test("planSeal: Solana only, new note -> Solana required", () => { + assertEquals( + planSeal({ monadOn: false, solanaOn: true, sealTx: null, sealSolana: null }), + { monad: false, solana: true, solanaRequired: true }, + ); +}); + +Deno.test("planSeal: Solana only, already sealed -> nothing to send", () => { + assertEquals( + planSeal({ monadOn: false, solanaOn: true, sealTx: null, sealSolana: SIG }), + { monad: false, solana: false, solanaRequired: false }, + ); + // Sealed on Monad by an older build: fill the memo quietly. + assertEquals( + planSeal({ monadOn: false, solanaOn: true, sealTx: TX, sealSolana: null }), + { monad: false, solana: true, solanaRequired: false }, + ); +}); + +Deno.test("planSeal: both on behaves as before (Monad authoritative)", () => { + assertEquals( + planSeal({ monadOn: true, solanaOn: true, sealTx: null, sealSolana: null }), + { monad: true, solana: true, solanaRequired: false }, + ); + assertEquals( + planSeal({ monadOn: true, solanaOn: true, sealTx: TX, sealSolana: null }), + { monad: false, solana: true, solanaRequired: false }, + ); + assertEquals( + planSeal({ monadOn: true, solanaOn: false, sealTx: null, sealSolana: null }), + { monad: true, solana: false, solanaRequired: false }, + ); +}); + +Deno.test("planOpen: Solana only never touches Monad", () => { + assertEquals( + planOpen({ monadOn: false, solanaOn: true, noteSealTx: TX, openTx: null, openSolana: null }), + { monad: false, solana: true }, + ); + assertEquals( + planOpen({ monadOn: false, solanaOn: true, noteSealTx: null, openTx: null, openSolana: SIG }), + { monad: false, solana: false }, + ); +}); + +Deno.test("planOpen: both on behaves as before", () => { + assertEquals( + planOpen({ monadOn: true, solanaOn: true, noteSealTx: TX, openTx: null, openSolana: null }), + { monad: true, solana: true }, + ); + assertEquals( + planOpen({ monadOn: true, solanaOn: true, noteSealTx: TX, openTx: TX, openSolana: null }), + { monad: false, solana: true }, + ); + // A note sealed only on Solana is never opened on Monad (the contract would revert). + assertEquals( + planOpen({ monadOn: true, solanaOn: true, noteSealTx: null, openTx: null, openSolana: null }), + { monad: false, solana: true }, + ); +}); diff --git a/app/supabase/functions/canary/index.ts b/app/supabase/functions/canary/index.ts index 373ae7f..10bd987 100644 --- a/app/supabase/functions/canary/index.ts +++ b/app/supabase/functions/canary/index.ts @@ -5,24 +5,46 @@ // // { action: "create", note_id, owner_hash, copy_count, copies_hash, // expires_in_hours, copies: [{ index, ciphertext, iv }] } -// -> { seal_tx_hash, expires_at } +// -> { seal_tx_hash, seal_solana_sig, expires_at } // { action: "open", note_id, device_id, reader_name } -// -> { copy_index, copy_count, ciphertext, iv, open_tx_hash, opened_at } +// -> { copy_index, copy_count, ciphertext, iv, open_tx_hash, open_solana_sig, opened_at } // { action: "status", note_id, owner_secret } -// -> { copy_count, seal_tx_hash, expires_at, -// copies: [{ copy_index, reader_name, opened_at, open_tx_hash }] } +// -> { copy_count, seal_tx_hash, seal_solana_sig, expires_at, +// copies: [{ copy_index, reader_name, opened_at, open_tx_hash, open_solana_sig }] } +// +// *_solana_sig is the Solana devnet memo signature. *_tx_hash is the Monad +// testnet transaction hash and stays null whenever Monad is off. // // Errors: { error: "", retry?: true } with a 4xx/5xx status. // // The server never sees note text or keys: copies arrive already encrypted -// and the key stays in the link fragment. Monad receives only +// and the key stays in the link fragment. The chains receive only // sha256-based ids and hashes (never names or text). // +// Proof chains (rules in gating.ts): +// - Solana devnet (solana.ts) is the receipt: one SPL Memo per seal and per +// open. With Monad off a note is sealed only once its Solana memo lands, so +// a failed seal memo fails `create` with retry: true. A failed open memo is +// stored as null and sent again on the next open of that copy. +// - Monad testnet is the earlier prototype, kept behind a switch: on only +// while CANARY_CONTRACT_ADDRESS is set. When on, it runs in parallel with +// Solana exactly as before (Monad authoritative; a Solana failure only +// leaves *_solana_sig null). When off: no viem calls, no relayer leases. +// - A note counts as sealed when seal_tx_hash OR seal_solana_sig is set. +// - With neither chain configured, create and open return 503. +// // Secrets (supabase secrets set ...): -// CANARY_CONTRACT_ADDRESS 0x… NoSusCanary on Monad testnet -// CANARY_RELAYER_KEYS comma-separated 0x… private keys (testnet only) // CANARY_TAG_SALT 64 hex chars, random, never shared -// MONAD_RPC_URL optional, default https://testnet-rpc.monad.xyz +// SOLANA_RELAYER_KEYS comma-separated devnet keypairs (base58 64-byte +// secret key or solana-keygen JSON array). Required +// while Monad is off; unset = Solana proof off and +// responses carry null. +// SOLANA_RPC_URL optional, default https://api.devnet.solana.com +// SOLANA_MEMO_PROGRAM optional, default MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr +// CANARY_CONTRACT_ADDRESS optional; 0x… NoSusCanary on Monad testnet. +// Unset or empty = Monad off. +// CANARY_RELAYER_KEYS Monad only: comma-separated 0x… private keys (testnet) +// MONAD_RPC_URL Monad only, default https://testnet-rpc.monad.xyz // SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY are injected automatically. import { createClient, type SupabaseClient } from "https://esm.sh/@supabase/supabase-js@2.39.8"; @@ -34,6 +56,8 @@ import { type Hex, } from "npm:viem@2.56.5"; import { privateKeyToAccount } from "npm:viem@2.56.5/accounts"; +import { loadSolana, openMemo, sealMemo, sendSolanaMemo, type SolanaConfig } from "./solana.ts"; +import { isSealed, monadEnabled, planOpen, planSeal } from "./gating.ts"; const corsHeaders = { "Access-Control-Allow-Origin": "*", @@ -113,8 +137,11 @@ type Chain = { rpcUrl: string; }; -function loadChain(): Chain { - const contract = requireEnv("CANARY_CONTRACT_ADDRESS").trim(); +// Null when Monad is off (CANARY_CONTRACT_ADDRESS unset or empty). Once an +// address is set, a bad Monad config is a 503 as before. +function loadChainOrNull(): Chain | null { + const contract = (Deno.env.get("CANARY_CONTRACT_ADDRESS") ?? "").trim(); + if (!monadEnabled(contract)) return null; if (!/^0x[0-9a-fA-F]{40}$/.test(contract)) { throw new HttpError(503, "canary is not configured (contract address)"); } @@ -132,6 +159,29 @@ function loadChain(): Chain { }; } +// A bad Solana config is logged and treated as "off". With Monad on, a failed +// memo is logged and stored as null; with Monad off, see handleCreate. +function loadSolanaOrNull(): SolanaConfig | null { + try { + return loadSolana(); + } catch (e) { + console.error("canary: solana is misconfigured", e); + return null; + } +} + +function requireProofChain(chain: Chain | null, solana: SolanaConfig | null) { + if (!chain && !solana) { + throw new HttpError(503, "canary is not configured (no proof chain)"); + } +} + +function solanaSig(result: PromiseSettledResult, label: string): string | null { + if (result.status === "fulfilled") return result.value; + console.error(`${label}: solana memo failed`, result.reason); + return null; +} + // Sends one contract call from a leased relayer key and waits for success. // A key is leased for the whole send+confirm so its nonce is never shared. async function sendCanaryTx( @@ -221,12 +271,14 @@ async function handleCreate(admin: SupabaseClient, body: Record return { note_id: noteId, copy_index: index, ciphertext, iv }; }); - const chain = loadChain(); + const chain = loadChainOrNull(); + const solana = loadSolanaOrNull(); + requireProofChain(chain, solana); const chainNoteId = `0x${await sha256Hex(`nosus-canary:${noteId}`)}`; const { data: existing, error: readError } = await admin .from("canary_notes") - .select("owner_hash, seal_tx_hash, expires_at") + .select("owner_hash, seal_tx_hash, seal_solana_sig, expires_at") .eq("id", noteId) .maybeSingle(); if (readError) throw readError; @@ -234,9 +286,6 @@ async function handleCreate(admin: SupabaseClient, body: Record let expiresAt: string; if (existing) { if (existing.owner_hash !== ownerHash) throw new HttpError(409, "This note id is taken."); - if (existing.seal_tx_hash) { - return json({ seal_tx_hash: existing.seal_tx_hash, expires_at: existing.expires_at }); - } expiresAt = existing.expires_at; } else { expiresAt = new Date(Date.now() + hours * 3600 * 1000).toISOString(); @@ -256,26 +305,59 @@ async function handleCreate(admin: SupabaseClient, body: Record } } - const expiresAtSeconds = BigInt(Math.floor(new Date(expiresAt).getTime() / 1000)); - let sealTx: Hex; - try { - sealTx = await sendCanaryTx(admin, chain, "sealNote", [ - chainNoteId, - copyCount, - copiesHash, - expiresAtSeconds, - ]); - } catch (e) { + const expiresAtSeconds = Math.floor(new Date(expiresAt).getTime() / 1000); + const memo = sealMemo({ note: chainNoteId, copies: copyCount, hash: copiesHash, exp: expiresAtSeconds }); + const sealTxBefore: string | null = existing?.seal_tx_hash ?? null; + let sealSolana: string | null = existing?.seal_solana_sig ?? null; + const plan = planSeal({ + monadOn: chain !== null, + solanaOn: solana !== null, + sealTx: sealTxBefore, + sealSolana, + }); + + if (!chain || !plan.monad) { + // Nothing to send on Monad (Monad is off, or the note is sealed there + // already); at most the Solana memo is missing. + if (solana && plan.solana) { + const [sol] = await Promise.allSettled([sendSolanaMemo(solana, memo)]); + if (sol.status === "rejected" && plan.solanaRequired) { + // Solana is the only receipt: no memo means no seal. The row stays, and + // a retry with the same note id takes the existing-note path. + console.error("canary create: solana seal failed", sol.reason); + throw new HttpError(503, "Could not seal the note on Solana. Try again.", true); + } + sealSolana = solanaSig(sol, existing ? "canary create (retry)" : "canary create"); + if (sealSolana) { + await admin.from("canary_notes").update({ seal_solana_sig: sealSolana }).eq("id", noteId); + } + } + if (!isSealed({ seal_tx_hash: sealTxBefore, seal_solana_sig: sealSolana })) { + // Not reachable while requireProofChain holds; never hand out an unsealed link. + throw new HttpError(503, "Could not seal the note. Try again.", true); + } + return json({ seal_tx_hash: sealTxBefore, seal_solana_sig: sealSolana, expires_at: expiresAt }); + } + + // Monad and Solana in parallel. Monad is authoritative; Solana may fail quietly. + const [monad, sol] = await Promise.allSettled([ + sendCanaryTx(admin, chain, "sealNote", [chainNoteId, copyCount, copiesHash, BigInt(expiresAtSeconds)]), + solana && plan.solana ? sendSolanaMemo(solana, memo) : Promise.resolve(sealSolana), + ]); + sealSolana = solanaSig(sol, "canary create"); + if (monad.status === "rejected") { + const e = monad.reason; if (e instanceof HttpError) throw e; console.error("canary create: seal failed", e); throw new HttpError(503, "Could not seal the note on Monad. Try again.", true); } + const sealTx: Hex = monad.value; const { error: updateError } = await admin .from("canary_notes") - .update({ seal_tx_hash: sealTx }) + .update({ seal_tx_hash: sealTx, seal_solana_sig: sealSolana }) .eq("id", noteId); if (updateError) throw updateError; - return json({ seal_tx_hash: sealTx, expires_at: expiresAt }); + return json({ seal_tx_hash: sealTx, seal_solana_sig: sealSolana, expires_at: expiresAt }); } async function handleOpen(admin: SupabaseClient, body: Record) { @@ -292,15 +374,17 @@ async function handleOpen(admin: SupabaseClient, body: Record) const { data: note, error: noteError } = await admin .from("canary_notes") - .select("copy_count, chain_note_id, seal_tx_hash, expires_at") + .select("copy_count, chain_note_id, seal_tx_hash, seal_solana_sig, expires_at") .eq("id", noteId) .maybeSingle(); if (noteError) throw noteError; - if (!note || !note.seal_tx_hash) throw new HttpError(404, "This Canary link is not valid."); + if (!note || !isSealed(note)) throw new HttpError(404, "This Canary link is not valid."); if (new Date(note.expires_at) <= new Date()) throw new HttpError(410, "This Canary link has expired."); const tagSalt = requireEnv("CANARY_TAG_SALT"); - const chain = loadChain(); + const chain = loadChainOrNull(); + const solana = loadSolanaOrNull(); + requireProofChain(chain, solana); const deviceHash = await sha256Hex(`device:${deviceId}`); let assigned: Record | null = null; @@ -321,12 +405,28 @@ async function handleOpen(admin: SupabaseClient, body: Record) if (assigned === null) throw new HttpError(409, "Every copy of this note has been opened."); const copyIndex = Number(assigned.copy_index); + const readerTag = `0x${await sha256Hex(`${tagSalt}:${noteId}:${copyIndex}:${deviceHash}`)}`; + const memo = openMemo({ note: note.chain_note_id, copy: copyIndex, tag: readerTag }); let openTx = (assigned.open_tx_hash as string | null) ?? null; - if (!openTx) { - const readerTag = `0x${await sha256Hex(`${tagSalt}:${noteId}:${copyIndex}:${deviceHash}`)}`; - try { - openTx = await sendCanaryTx(admin, chain, "openCopy", [note.chain_note_id, copyIndex, readerTag]); - } catch (e) { + let openSolana = (assigned.open_solana_sig as string | null) ?? null; + const plan = planOpen({ + monadOn: chain !== null, + solanaOn: solana !== null, + noteSealTx: note.seal_tx_hash ?? null, + openTx, + openSolana, + }); + if (chain && plan.monad) { + // Monad and Solana in parallel. Monad is authoritative; Solana may fail quietly. + const [monad, sol] = await Promise.allSettled([ + sendCanaryTx(admin, chain, "openCopy", [note.chain_note_id, copyIndex, readerTag]), + solana && plan.solana ? sendSolanaMemo(solana, memo) : Promise.resolve(openSolana), + ]); + openSolana = solanaSig(sol, "canary open"); + if (monad.status === "fulfilled") { + openTx = monad.value; + } else { + const e = monad.reason; if (e instanceof HttpError) throw e; const message = e instanceof Error ? e.message : String(e); if (!message.includes("CopyTaken")) { @@ -338,9 +438,26 @@ async function handleOpen(admin: SupabaseClient, body: Record) } await admin .from("canary_copies") - .update({ reader_tag: readerTag, open_tx_hash: openTx }) + .update({ reader_tag: readerTag, open_tx_hash: openTx, open_solana_sig: openSolana }) .eq("note_id", noteId) .eq("copy_index", copyIndex); + } else if (solana && plan.solana) { + // Nothing to send on Monad (Monad is off, or this copy is recorded there + // already); only the Solana memo is missing. A failure stays null and is + // sent again on the next open of this copy. + const firstOpen = !assigned.reader_tag; + const [sol] = await Promise.allSettled([sendSolanaMemo(solana, memo)]); + openSolana = solanaSig(sol, firstOpen ? "canary open" : "canary open (retry)"); + const patch: Record = {}; + if (firstOpen) patch.reader_tag = readerTag; + if (openSolana) patch.open_solana_sig = openSolana; + if (Object.keys(patch).length > 0) { + await admin + .from("canary_copies") + .update(patch) + .eq("note_id", noteId) + .eq("copy_index", copyIndex); + } } return json({ @@ -349,6 +466,7 @@ async function handleOpen(admin: SupabaseClient, body: Record) ciphertext: assigned.ciphertext, iv: assigned.iv, open_tx_hash: openTx, + open_solana_sig: openSolana, opened_at: assigned.opened_at, }); } @@ -360,7 +478,7 @@ async function handleStatus(admin: SupabaseClient, body: Record const { data: note, error: noteError } = await admin .from("canary_notes") - .select("owner_hash, copy_count, seal_tx_hash, expires_at") + .select("owner_hash, copy_count, seal_tx_hash, seal_solana_sig, expires_at") .eq("id", noteId) .maybeSingle(); if (noteError) throw noteError; @@ -369,7 +487,7 @@ async function handleStatus(admin: SupabaseClient, body: Record const { data: copies, error: copiesError } = await admin .from("canary_copies") - .select("copy_index, reader_name, opened_at, open_tx_hash") + .select("copy_index, reader_name, opened_at, open_tx_hash, open_solana_sig") .eq("note_id", noteId) .not("opened_at", "is", null) .order("copy_index"); @@ -378,6 +496,7 @@ async function handleStatus(admin: SupabaseClient, body: Record return json({ copy_count: note.copy_count, seal_tx_hash: note.seal_tx_hash, + seal_solana_sig: note.seal_solana_sig, expires_at: note.expires_at, copies: copies ?? [], }); diff --git a/app/supabase/functions/canary/solana.ts b/app/supabase/functions/canary/solana.ts new file mode 100644 index 0000000..a7a23cd --- /dev/null +++ b/app/supabase/functions/canary/solana.ts @@ -0,0 +1,194 @@ +// Solana devnet proof for NO SUS Canary (the receipt; Monad is optional). +// +// Every seal and every open is written as one SPL Memo on Solana devnet. +// The memo carries the same sha256-based ids and hashes the Monad contract takes, and +// nothing else: never names, note text or keys. While +// SOLANA_RELAYER_KEYS is unset, loadSolana() returns null and nothing here runs +// (index.ts then needs Monad on, or create/open return 503). +// +// Unlike Monad, a Solana transaction is scoped by a recent blockhash, not an +// account nonce, so one relayer key can send concurrently and no lease is needed. +// +// Env (all optional here): +// SOLANA_RELAYER_KEYS comma-separated devnet keypairs, each either a base58 +// 64-byte secret key or a solana-keygen JSON array +// SOLANA_RPC_URL default https://api.devnet.solana.com +// SOLANA_MEMO_PROGRAM default MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr +// (SPL Memo: Solana Explorer shows the memo text). +// Memo4c2pN8afCj432Lb7RMVKi9PbQnnW7ewFFaV3oAH (p-memo) +// is accepted too. + +import { + type Address, + address, + appendTransactionMessageInstruction, + createKeyPairSignerFromBytes, + createSolanaRpc, + createTransactionMessage, + getBase58Encoder, + getBase64EncodedWireTransaction, + getSignatureFromTransaction, + pipe, + setTransactionMessageFeePayerSigner, + setTransactionMessageLifetimeUsingBlockhash, + signTransactionMessageWithSigners, +} from "npm:@solana/kit@8.4.0"; +import { Buffer } from "node:buffer"; +import { + getAddMemoInstruction, + LEGACY_MEMO_PROGRAM_ADDRESS_V3, + SUPPORTED_MEMO_PROGRAM_ADDRESSES, +} from "npm:@solana-program/memo@0.15.0"; + +// The Supabase edge runtime resolves @solana/kit's Node build, whose base64 +// codec reads the global Buffer that Deno does not define. +(globalThis as { Buffer?: typeof Buffer }).Buffer ??= Buffer; + +export type SolanaConfig = { + rpcUrl: string; + /** 64-byte secret keys (private key || public key), as solana-keygen writes them. */ + keys: Uint8Array[]; + memoProgram: Address; +}; + +const BASE58_RE = /^[1-9A-HJ-NP-Za-km-z]+$/; +const BYTES32_RE = /^0x[0-9a-f]{64}$/; +const CONFIRM_TIMEOUT_MS = 20_000; +const CONFIRM_POLL_MS = 400; + +// Null when Solana is off. Throws on a bad config (the message never includes +// key material) so the caller can log it and carry on without Solana. +export function loadSolana(): SolanaConfig | null { + const raw = (Deno.env.get("SOLANA_RELAYER_KEYS") ?? "").trim(); + if (raw === "") return null; + + // Items are comma-separated, but a JSON array item contains commas itself. + const items = raw.match(/\[[^\]]*\]|[^,\[\]\s]+/g) ?? []; + const keys = items.map(parseSecretKey); + if (keys.length === 0 || keys.length > 32) { + throw new Error("SOLANA_RELAYER_KEYS must hold 1 to 32 keys"); + } + + const memoProgram = (Deno.env.get("SOLANA_MEMO_PROGRAM") ?? "").trim() || + LEGACY_MEMO_PROGRAM_ADDRESS_V3; + if (!(SUPPORTED_MEMO_PROGRAM_ADDRESSES as readonly string[]).includes(memoProgram)) { + throw new Error("SOLANA_MEMO_PROGRAM is not a known Memo program address"); + } + + return { + rpcUrl: Deno.env.get("SOLANA_RPC_URL") ?? "https://api.devnet.solana.com", + keys, + memoProgram: address(memoProgram), + }; +} + +function parseSecretKey(item: string): Uint8Array { + let bytes: Uint8Array; + if (item.startsWith("[")) { + let parsed: unknown; + try { + parsed = JSON.parse(item); + } catch { + throw new Error("SOLANA_RELAYER_KEYS: a JSON key is not valid JSON"); + } + if ( + !Array.isArray(parsed) || + !parsed.every((n) => Number.isInteger(n) && n >= 0 && n <= 255) + ) { + throw new Error("SOLANA_RELAYER_KEYS: a JSON key must be an array of bytes"); + } + bytes = Uint8Array.from(parsed as number[]); + } else { + if (!BASE58_RE.test(item)) { + throw new Error("SOLANA_RELAYER_KEYS: a key must be base58 or a JSON array"); + } + bytes = new Uint8Array(getBase58Encoder().encode(item)); + } + if (bytes.length !== 64) throw new Error("SOLANA_RELAYER_KEYS: a key must be 64 bytes"); + return bytes; +} + +function bytes32(name: string, value: string): string { + if (!BYTES32_RE.test(value)) throw new Error(`memo ${name} must be 0x + 64 hex chars`); + return value; +} + +function uint(name: string, value: number): number { + if (!Number.isInteger(value) || value < 0) { + throw new Error(`memo ${name} must be a non-negative integer`); + } + return value; +} + +// {"p":"nosus-canary","v":1,"t":"seal","note":"0x…","copies":N,"hash":"0x…","exp":E} +// exp is unix seconds, 0 when the note never expires. +export function sealMemo(p: { note: string; copies: number; hash: string; exp: number }): string { + return JSON.stringify({ + p: "nosus-canary", + v: 1, + t: "seal", + note: bytes32("note", p.note), + copies: uint("copies", p.copies), + hash: bytes32("hash", p.hash), + exp: uint("exp", p.exp), + }); +} + +// {"p":"nosus-canary","v":1,"t":"open","note":"0x…","copy":N,"tag":"0x…"} +export function openMemo(p: { note: string; copy: number; tag: string }): string { + return JSON.stringify({ + p: "nosus-canary", + v: 1, + t: "open", + note: bytes32("note", p.note), + copy: uint("copy", p.copy), + tag: bytes32("tag", p.tag), + }); +} + +// Sends one memo instruction from a random relayer key and waits until the +// transaction is confirmed. Returns the base58 signature. Polls over HTTP; no +// WebSocket subscriptions. +export async function sendSolanaMemo(cfg: SolanaConfig, memo: string): Promise { + const rpc = createSolanaRpc(cfg.rpcUrl); + const signer = await createKeyPairSignerFromBytes( + cfg.keys[Math.floor(Math.random() * cfg.keys.length)], + ); + const { value: latest } = await rpc.getLatestBlockhash({ commitment: "confirmed" }).send(); + + const message = pipe( + createTransactionMessage({ version: 0 }), + (m) => setTransactionMessageFeePayerSigner(signer, m), + (m) => setTransactionMessageLifetimeUsingBlockhash(latest, m), + (m) => + appendTransactionMessageInstruction( + getAddMemoInstruction({ memo, signers: [signer] }, { programAddress: cfg.memoProgram }), + m, + ), + ); + const transaction = await signTransactionMessageWithSigners(message); + const signature = getSignatureFromTransaction(transaction); + + await rpc + .sendTransaction(getBase64EncodedWireTransaction(transaction), { + encoding: "base64", + preflightCommitment: "confirmed", + }) + .send(); + + const deadline = Date.now() + CONFIRM_TIMEOUT_MS; + for (;;) { + const { value: [status] } = await rpc.getSignatureStatuses([signature]).send(); + if (status?.err) { + const err = JSON.stringify(status.err, (_, v) => (typeof v === "bigint" ? v.toString() : v)); + throw new Error(`solana memo ${signature} failed: ${err}`); + } + if (status?.confirmationStatus === "confirmed" || status?.confirmationStatus === "finalized") { + return signature; + } + if (Date.now() >= deadline) { + throw new Error(`solana memo ${signature} not confirmed within ${CONFIRM_TIMEOUT_MS} ms`); + } + await new Promise((resolve) => setTimeout(resolve, CONFIRM_POLL_MS)); + } +} diff --git a/app/supabase/migrations/20261010090000_nosus_canary_solana.sql b/app/supabase/migrations/20261010090000_nosus_canary_solana.sql new file mode 100644 index 0000000..ff0fd82 --- /dev/null +++ b/app/supabase/migrations/20261010090000_nosus_canary_solana.sql @@ -0,0 +1,80 @@ +-- NO SUS Canary: Solana devnet proof. Experiment project ffidvfguojalzpclipzi ONLY. +-- Never apply to production (rxfnazmusofikwaggntb). +-- +-- Adds the Solana memo signature next to each Monad transaction hash. Like the +-- Monad hashes these are public identifiers of sha256-based ids; the server +-- still never stores note text, keys, salts or codewords. +-- +-- Apply before deploying the `canary` edge function that selects these columns. +-- +-- Reverse (manual, if ever needed): +-- drop function if exists public.canary_assign_copy(uuid, text, text); +-- alter table public.canary_copies drop column if exists open_solana_sig; +-- alter table public.canary_notes drop column if exists seal_solana_sig; +-- -- then re-create canary_assign_copy and its grants from 20260919090000_nosus_canary.sql + +alter table public.canary_notes + add column if not exists seal_solana_sig text + check (seal_solana_sig is null or seal_solana_sig ~ '^[1-9A-HJ-NP-Za-km-z]{64,100}$'); + +alter table public.canary_copies + add column if not exists open_solana_sig text + check (open_solana_sig is null or open_solana_sig ~ '^[1-9A-HJ-NP-Za-km-z]{64,100}$'); + +-- Same function as before plus open_solana_sig in the result. Postgres cannot +-- change a function's result columns with "or replace", so drop it first; the +-- grants are dropped with it and re-applied below. +drop function if exists public.canary_assign_copy(uuid, text, text); + +-- Give a device its copy: the same copy again if it already has one, +-- otherwise the lowest unassigned copy. Concurrency-safe (SKIP LOCKED + the +-- one-per-device unique index). Returns no row when every copy is taken. +create or replace function public.canary_assign_copy( + p_note_id uuid, + p_device_hash text, + p_reader_name text +) +returns table ( + copy_index integer, + ciphertext text, + iv text, + reader_tag text, + opened_at timestamptz, + open_tx_hash text, + open_solana_sig text +) +language plpgsql +security definer +set search_path = public +as $$ +#variable_conflict use_column +begin + return query + select c.copy_index, c.ciphertext, c.iv, c.reader_tag, c.opened_at, c.open_tx_hash, c.open_solana_sig + from public.canary_copies c + where c.note_id = p_note_id + and c.reader_device_hash = p_device_hash; + if found then + return; + end if; + + return query + update public.canary_copies c + set reader_device_hash = p_device_hash, + reader_name = p_reader_name, + opened_at = now() + where (c.note_id, c.copy_index) = ( + select c2.note_id, c2.copy_index + from public.canary_copies c2 + where c2.note_id = p_note_id + and c2.reader_device_hash is null + order by c2.copy_index + limit 1 + for update skip locked + ) + returning c.copy_index, c.ciphertext, c.iv, c.reader_tag, c.opened_at, c.open_tx_hash, c.open_solana_sig; +end; +$$; + +revoke all on function public.canary_assign_copy(uuid, text, text) from public, anon, authenticated; +grant execute on function public.canary_assign_copy(uuid, text, text) to service_role; diff --git a/app/test/unit/canary_link_test.dart b/app/test/unit/canary_link_test.dart index 6abcc31..a16e62f 100644 --- a/app/test/unit/canary_link_test.dart +++ b/app/test/unit/canary_link_test.dart @@ -66,4 +66,31 @@ void main() { '0xb8168efcc5c17afc454283c0e2237b39f5dc917d39ab0eb0f540f544b9878f2e', ); }); + + test('explorer links point at the right testnet per chain', () { + final monadHash = '0x${'ab' * 32}'; + // Base58 Solana signatures are 86–88 chars; this one is 88. + final solanaSig = '5' * 88; + + expect( + canaryExplorerTxUrl(monadHash), + 'https://testnet.monadscan.com/tx/$monadHash', + ); + expect( + canarySolanaExplorerTxUrl(solanaSig), + 'https://explorer.solana.com/tx/$solanaSig?cluster=devnet', + ); + expect(CanaryChain.monad.txUrl(monadHash), canaryExplorerTxUrl(monadHash)); + expect( + CanaryChain.solana.txUrl(solanaSig), + canarySolanaExplorerTxUrl(solanaSig), + ); + }); + + test('chain labels read correctly in chips and sentences', () { + expect(CanaryChain.monad.label, 'Monad'); + expect(CanaryChain.solana.label, 'Solana'); + expect(CanaryChain.monad.network, 'Monad testnet'); + expect(CanaryChain.solana.network, 'Solana devnet'); + }); } diff --git a/app/test/unit/canary_models_test.dart b/app/test/unit/canary_models_test.dart new file mode 100644 index 0000000..fc74d38 --- /dev/null +++ b/app/test/unit/canary_models_test.dart @@ -0,0 +1,151 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:no_sus/features/canary/domain/canary_fingerprint.dart'; +import 'package:no_sus/features/canary/domain/canary_models.dart'; + +const _noteId = '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'; +final _monadHash = '0x${'ab' * 32}'; +final _solanaSig = '5' * 88; + +CanaryOwnerRecord _record({String? sealTxHash, String? sealSolanaSig}) => + CanaryOwnerRecord( + noteId: _noteId, + keyHex: 'cd' * 32, + ownerSecret: 'ef' * 32, + saltHex: '01' * 32, + copyCount: 2, + createdAt: DateTime.utc(2026, 10, 10, 12), + expiresAt: DateTime.utc(2026, 10, 11, 12), + readerLink: 'https://x.y/#/canary/$_noteId?k=${'cd' * 32}', + preview: 'The quick brown fox jumps over the lazy dog.', + plan: buildCanaryPlan( + 'The quick brown fox jumps over the lazy dog. ' + 'It was a very big and really nice day for a walk.', + ), + codewords: const [ + [0, 1, 0], + [1, 0, 1], + ], + sealTxHash: sealTxHash, + sealSolanaSig: sealSolanaSig, + ); + +void main() { + test('owner record round-trips with both proofs', () { + final original = _record( + sealTxHash: _monadHash, + sealSolanaSig: _solanaSig, + ); + final json = original.toJson(); + expect(json['v'], 1); + expect(json['sealTxHash'], _monadHash); + expect(json['sealSolanaSig'], _solanaSig); + + final restored = CanaryOwnerRecord.fromJson(json); + expect(restored.noteId, original.noteId); + expect(restored.sealTxHash, _monadHash); + expect(restored.sealSolanaSig, _solanaSig); + expect(restored.codewords, original.codewords); + expect(restored.isSealed, isTrue); + }); + + test('owner record round-trips without a Solana proof', () { + final original = _record(sealTxHash: _monadHash); + final json = original.toJson(); + expect(json.containsKey('sealSolanaSig'), isTrue); + expect(json['sealSolanaSig'], isNull); + + final restored = CanaryOwnerRecord.fromJson(json); + expect(restored.sealTxHash, _monadHash); + expect(restored.sealSolanaSig, isNull); + // A Monad seal alone still counts, so records from the Monad build + // keep working. + expect(restored.isSealed, isTrue); + }); + + test('records saved before Solana proofs load with a null signature', () { + final legacy = _record(sealTxHash: _monadHash).toJson() + ..remove('sealSolanaSig'); + expect(legacy.containsKey('sealSolanaSig'), isFalse); + + final restored = CanaryOwnerRecord.fromJson(legacy); + expect(restored.sealTxHash, _monadHash); + expect(restored.sealSolanaSig, isNull); + expect(restored.isSealed, isTrue); + }); + + test('copyWith adds the Solana proof without dropping the Monad one', () { + final draft = _record(); + expect(draft.isSealed, isFalse); + + final sealed = draft.copyWith( + sealTxHash: _monadHash, + sealSolanaSig: _solanaSig, + ); + expect(sealed.sealTxHash, _monadHash); + expect(sealed.sealSolanaSig, _solanaSig); + + final untouched = sealed.copyWith(expiresAt: DateTime.utc(2027)); + expect(untouched.sealTxHash, _monadHash); + expect(untouched.sealSolanaSig, _solanaSig); + }); + + test('note status settles on Monad alone', () { + final future = DateTime.now().add(const Duration(days: 1)); + final status = CanaryNoteStatus( + copyCount: 1, + sealTxHash: _monadHash, + sealSolanaSig: null, + expiresAt: future, + copies: [ + CanaryCopyStatus( + copyIndex: 0, + readerName: 'Sam', + openedAt: DateTime.now(), + openTxHash: _monadHash, + openSolanaSig: null, + ), + ], + ); + expect(status.isSettled, isTrue); + expect(status.copy(0)?.openSolanaSig, isNull); + }); + + test('a Solana-only seal counts as sealed (Monad off)', () { + final record = _record(sealSolanaSig: _solanaSig); + expect(record.sealTxHash, isNull); + expect(record.isSealed, isTrue); + + final restored = CanaryOwnerRecord.fromJson(record.toJson()); + expect(restored.sealTxHash, isNull); + expect(restored.sealSolanaSig, _solanaSig); + expect(restored.isSealed, isTrue); + }); + + CanaryCopyStatus copy({String? tx, String? sig}) => CanaryCopyStatus( + copyIndex: 0, + readerName: 'Sam', + openedAt: DateTime.now(), + openTxHash: tx, + openSolanaSig: sig, + ); + + CanaryNoteStatus status(CanaryCopyStatus c) => CanaryNoteStatus( + copyCount: 1, + sealTxHash: null, + sealSolanaSig: _solanaSig, + expiresAt: DateTime.now().add(const Duration(days: 1)), + copies: [c], + ); + + test('a copy is recorded by either chain', () { + expect(copy().isRecorded, isFalse); + expect(copy(tx: _monadHash).isRecorded, isTrue); + expect(copy(sig: _solanaSig).isRecorded, isTrue); + }); + + test('note status settles on Solana alone (Monad off)', () { + expect(status(copy(sig: _solanaSig)).isSettled, isTrue); + // The open memo has not landed yet: keep polling. + expect(status(copy()).isSettled, isFalse); + }); +} diff --git a/app/test/widget/canary_app_test.dart b/app/test/widget/canary_app_test.dart index e45bb7d..f8f1591 100644 --- a/app/test/widget/canary_app_test.dart +++ b/app/test/widget/canary_app_test.dart @@ -2,8 +2,10 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:no_sus/config/app_mode.dart'; import 'package:no_sus/core/providers/theme_provider.dart'; import 'package:no_sus/features/canary/presentation/canary_app.dart'; +import 'package:no_sus/features/canary/presentation/ui/wallet_button.dart'; import 'package:shared_preferences/shared_preferences.dart'; /// Widget tests draw text in a placeholder font whose glyphs are full @@ -56,6 +58,19 @@ void main() { expect(find.text('Every reader gets their own copy.'), findsOneWidget); expect(find.byType(BackButton), findsNothing); + // CANARY_MONAD decides whether any Monad UI exists at all. + final monadText = find.textContaining( + RegExp(r'[Mm]onad|MONAD|\bMON\b'), + ); + if (kCanaryMonad) { + expect(find.byType(WalletButton), findsOneWidget); + expect(monadText, findsWidgets); + } else { + expect(find.byType(WalletButton), findsNothing); + expect(monadText, findsNothing); + expect(find.textContaining('SOLANA'), findsWidgets); + } + await tester.pumpWidget(const SizedBox()); }); } diff --git a/app/test/widget/proof_chips_test.dart b/app/test/widget/proof_chips_test.dart new file mode 100644 index 0000000..e833165 --- /dev/null +++ b/app/test/widget/proof_chips_test.dart @@ -0,0 +1,232 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:no_sus/config/app_mode.dart'; +import 'package:no_sus/features/canary/presentation/ui/chain_chip.dart'; +import 'package:no_sus/features/canary/presentation/ui/proof_chips.dart'; +import 'package:no_sus/theme.dart'; + +/// Widget tests draw text in a placeholder font whose glyphs are full +/// squares, which makes the pixel-font labels measure about twice their real +/// width. Load the real bundled fonts so layout checks match the browser. +Future _loadFonts() async { + const families = { + 'Outfit': ['Outfit-Regular', 'Outfit-SemiBold', 'Outfit-Bold'], + 'Inter': ['Inter-Regular', 'Inter-Medium', 'Inter-SemiBold', 'Inter-Bold'], + 'VT323': ['VT323-Regular'], + }; + for (final entry in families.entries) { + final loader = FontLoader(entry.key); + for (final file in entry.value) { + loader.addFont(rootBundle.load('assets/google_fonts/$file.ttf')); + } + await loader.load(); + } +} + +const _monadTx = + '0x9f2c4b1e7d3a5c6b8e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d'; +const _solanaSig = + '5VfYmGZ8s3kQxq2wE1rT9yU4iO6pA7sD8fG0hJ1kL2zX3cV4bN5mQm2p'; + +Widget _host(Widget child, {double? width}) => MaterialApp( + theme: CanaryTokens.theme(), + home: Scaffold( + body: Center( + child: width == null ? child : SizedBox(width: width, child: child), + ), + ), +); + +void main() { + setUpAll(_loadFonts); + + testWidgets('Monad only shows one linked chip and nothing for Solana', ( + tester, + ) async { + await tester.pumpWidget( + _host( + const ProofChips( + monadTxHash: _monadTx, + labelPrefix: 'Sealed on', + showMonad: true, + ), + ), + ); + + expect(find.byType(ChainChip), findsOneWidget); + expect(find.text('Sealed on Monad · 0x9f2c…1c2d'), findsOneWidget); + expect(find.textContaining('Solana'), findsNothing); + expect(find.byType(PendingChainChip), findsNothing); + expect( + find.bySemanticsLabel(RegExp(r'View proof on Monad testnet')), + findsOneWidget, + ); + }); + + testWidgets('Monad + Solana shows both chips with bounded hashes', ( + tester, + ) async { + await tester.pumpWidget( + _host( + const ProofChips( + monadTxHash: _monadTx, + solanaSig: _solanaSig, + labelPrefix: 'Recorded on', + showMonad: true, + ), + ), + ); + + expect(find.byType(ChainChip), findsNWidgets(2)); + expect(find.text('Recorded on Monad · 0x9f2c…1c2d'), findsOneWidget); + // Base58 signature: no 0x prefix, first 4 + last 4. + expect(find.text('Recorded on Solana · 5VfY…Qm2p'), findsOneWidget); + expect( + find.bySemanticsLabel(RegExp(r'View proof on Solana devnet')), + findsOneWidget, + ); + }); + + testWidgets('pending Solana shows a progress ring and no link', ( + tester, + ) async { + await tester.pumpWidget( + _host( + const ProofChips( + monadTxHash: _monadTx, + solanaPending: true, + showMonad: true, + ), + ), + ); + // One frame only: the progress ring animates forever. + await tester.pump(); + + expect(find.byType(ChainChip), findsOneWidget); + expect(find.byType(PendingChainChip), findsOneWidget); + expect(find.byType(CircularProgressIndicator), findsOneWidget); + expect(find.text('Solana…'), findsOneWidget); + expect( + find.bySemanticsLabel(RegExp(r'Recording on Solana devnet')), + findsOneWidget, + ); + expect(find.bySemanticsLabel(RegExp(r'View proof on Solana')), findsNothing); + expect(find.byType(InkWell), findsOneWidget); // only the Monad chip taps + }); + + testWidgets('Solana off (null, not pending) renders nothing for Solana', ( + tester, + ) async { + await tester.pumpWidget( + _host(const ProofChips(monadTxHash: _monadTx, showMonad: true)), + ); + + expect(find.byType(ChainChip), findsOneWidget); + expect(find.byType(PendingChainChip), findsNothing); + expect(find.textContaining('Solana'), findsNothing); + }); + + testWidgets('two chips wrap onto a second row at 320 px without overflow', ( + tester, + ) async { + await tester.pumpWidget( + _host( + const ProofChips( + monadTxHash: _monadTx, + solanaSig: _solanaSig, + labelPrefix: 'Recorded on', + showMonad: true, + ), + width: 320, + ), + ); + + expect(tester.takeException(), isNull); + final chips = find.byType(ChainChip); + expect(chips, findsNWidgets(2)); + final first = tester.getRect(chips.at(0)); + final second = tester.getRect(chips.at(1)); + expect(second.top, greaterThanOrEqualTo(first.bottom)); + expect(first.height, greaterThanOrEqualTo(48)); + expect(second.height, greaterThanOrEqualTo(48)); + expect(first.right, lessThanOrEqualTo(tester.getRect(find.byType(ProofChips)).right)); + }); + + group('Monad hidden (CANARY_MONAD off)', () { + testWidgets('only the Solana chip shows, even when a Monad hash exists', ( + tester, + ) async { + await tester.pumpWidget( + _host( + const ProofChips( + monadTxHash: _monadTx, + solanaSig: _solanaSig, + monadPending: true, + labelPrefix: 'Sealed on', + showMonad: false, + ), + ), + ); + + expect(find.byType(ChainChip), findsOneWidget); + expect(find.text('Sealed on Solana · 5VfY…Qm2p'), findsOneWidget); + expect(find.byType(PendingChainChip), findsNothing); + expect(find.textContaining('Monad'), findsNothing); + expect(find.bySemanticsLabel(RegExp('Monad')), findsNothing); + }); + + testWidgets('a Solana-only proof renders on its own', (tester) async { + await tester.pumpWidget( + _host(const ProofChips(solanaSig: _solanaSig, showMonad: false)), + ); + + expect(find.byType(ChainChip), findsOneWidget); + expect(find.text('Solana · 5VfY…Qm2p'), findsOneWidget); + expect( + find.bySemanticsLabel(RegExp(r'View proof on Solana devnet')), + findsOneWidget, + ); + }); + + testWidgets('pending Solana alone shows only the progress chip', ( + tester, + ) async { + await tester.pumpWidget( + _host( + const ProofChips( + monadPending: true, + solanaPending: true, + showMonad: false, + ), + ), + ); + await tester.pump(); + + expect(find.byType(ChainChip), findsNothing); + expect(find.byType(PendingChainChip), findsOneWidget); + expect(find.text('Solana…'), findsOneWidget); + expect(find.textContaining('Monad'), findsNothing); + }); + + testWidgets('nothing to show renders an empty box', (tester) async { + await tester.pumpWidget( + _host(const ProofChips(monadTxHash: _monadTx, showMonad: false)), + ); + + expect(find.byType(ChainChip), findsNothing); + expect(find.byType(PendingChainChip), findsNothing); + }); + }); + + testWidgets('showMonad defaults to the CANARY_MONAD build flag', ( + tester, + ) async { + await tester.pumpWidget(_host(const ProofChips(monadTxHash: _monadTx))); + + expect( + find.byType(ChainChip), + kCanaryMonad ? findsOneWidget : findsNothing, + ); + }); +} diff --git a/assets/readme/banner.svg b/assets/readme/banner.svg index f439c6b..ce610ae 100644 --- a/assets/readme/banner.svg +++ b/assets/readme/banner.svg @@ -15,5 +15,5 @@ - + diff --git a/assets/readme/story.svg b/assets/readme/story.svg index 6e49b87..29bc3bd 100644 --- a/assets/readme/story.svg +++ b/assets/readme/story.svg @@ -1,5 +1,5 @@ - -Animation: the sender seals a note on Monad, five readers each receive a different copy, Priya's copy leaks, NO SUS scans it and the canary sings: copy 03 is Priya's. + +Animation: the sender seals a note on Solana, five readers each receive a different copy, Priya's copy leaks, NO SUS scans it and the canary sings: copy 03 is Priya's.

@@ -552,7 +564,7 @@ function readme() { ## Step 1: Watch -

Animation: the sender seals a note on Monad, five readers each receive a different copy, Priya's copy leaks, NO SUS scans it and the canary sings: copy 03 is Priya's.

+

Animation: the sender seals a note on Solana, five readers each receive a different copy, Priya's copy leaks, NO SUS scans it and the canary sings: copy 03 is Priya's.

## Step 2: Try it @@ -564,11 +576,12 @@ function readme() {

Battle text: A wild LEAK appeared! Canary used FINGERPRINT! It's super effective! It was Priya's copy, number 03.

-## Step 3: Why Monad +## Step 3: Why Solana -- **One transaction per reader.** Every **Open my copy** is recorded on-chain. -- **Final in under a second.** About **0.015 MON** each. -- **Parallel execution.** A whole room can open the link at once. +- **One memo per seal and per open.** Sealing a note and every **Open my copy** each write one Memo-program transaction on Solana devnet. +- **Hashes only.** A memo carries a hashed note id, one hash of all copies and an anonymous reader tag. Never the text, the key or a name. +- **A link on every chip.** Each record has its own Solana Explorer link in the app. +- **No wallet for readers.** A relayer pays the fee, about **0.000005 SOL** per memo. ## Judge checklist @@ -576,6 +589,8 @@ function readme() { |---|---|---| ${checklist} +${monadLine} + > **Honest limits:** it names *whose copy* leaked, not *who shared it*. It doesn't stop screenshots. It makes them traceable. ## More @@ -584,8 +599,8 @@ ${checklist} How the fingerprint works - **Write once.** NO SUS swaps safe word twins (\`don't\` / \`do not\`, \`five\` / \`5\`) to make up to **100 copies**. Each looks normal, each is unique. -- **Seal it.** Copies are encrypted in your browser. The key lives only in the link's \`#fragment\`. \`sealNote\` puts one hash of all copies on Monad before anyone reads. -- **Share it.** Each reader gets the next unused copy. \`openCopy\` records it on Monad with an anonymous tag, never the name. +- **Seal it.** Copies are encrypted in your browser. The key lives only in the link's \`#fragment\`. A seal memo puts one hash of all copies on Solana devnet before anyone reads. +- **Share it.** Each reader gets the next unused copy. An open memo records it on Solana with an anonymous tag, never the name. - **Catch it.** Paste a leak into **Check a leak**. Matching runs on your device. If too little text survived, it names nobody. @@ -603,13 +618,13 @@ cd app flutter pub get flutter run -d chrome -# Contract -cd ../contracts -npm ci -npx hardhat test +# Edge function checks (offline) +cd .. +npx -y deno@2 check app/supabase/functions/canary/index.ts +npx -y deno@2 test app/supabase/functions/canary/gating_test.ts \`\`\` -Own backend and contract: see [\`docs/canary/NOSUS_CANARY_BUILD_PLAN.md\`](docs/canary/NOSUS_CANARY_BUILD_PLAN.md). +Own backend: see [\`docs/canary/NOSUS_CANARY_BUILD_PLAN.md\`](docs/canary/NOSUS_CANARY_BUILD_PLAN.md).
@@ -619,9 +634,9 @@ Own backend and contract: see [\`docs/canary/NOSUS_CANARY_BUILD_PLAN.md\`](docs/ %%{init: {'theme':'base','themeVariables':{'primaryColor':'${PAPER}','primaryTextColor':'${INK}','primaryBorderColor':'${INK}','lineColor':'${ORANGE}','fontFamily':'monospace'}}}%% flowchart LR S["Sender app"] -- "encrypted copies" --> F["canary function"] - F -- "sealNote" --> M[("NoSusCanary on Monad")] + F -- "seal memo" --> M[("Memo program on Solana devnet")] R["Reader"] -- "open + name" --> F - F -- "openCopy" --> M + F -- "open memo" --> M F -- "their copy" --> R \`\`\` @@ -643,11 +658,11 @@ Fingerprint test harness, 15-slot demo note: | Partial excerpts (30–70%) | named only when sure | 0 / 600 |
-Full technical write-up (setup, deployment, contract and relayers): [\`docs/TECHNICAL_README.md\`](docs/TECHNICAL_README.md) +Full technical write-up (setup, deployment and relayers): [\`docs/TECHNICAL_README.md\`](docs/TECHNICAL_README.md) --- -${team ? `**Team:** ${team} · ` : ''}Built at **${cfg.eventName}** · part of **NO SUS** +${team ? `**Team:** ${team} · ` : ''}Part of **NO SUS**

Game over? Play again at the live app.

`; diff --git a/tool/solana-spike/.gitignore b/tool/solana-spike/.gitignore new file mode 100644 index 0000000..8535fbc --- /dev/null +++ b/tool/solana-spike/.gitignore @@ -0,0 +1,2 @@ +# Devnet relayer keypair written by send_memo.ts. Never commit. +.keys/ diff --git a/tool/solana-spike/README.md b/tool/solana-spike/README.md new file mode 100644 index 0000000..da6c07e --- /dev/null +++ b/tool/solana-spike/README.md @@ -0,0 +1,39 @@ +# Solana devnet memo spike + +Sends one NO SUS Canary "seal" memo and one "open" memo to Solana devnet through +the production module `app/supabase/functions/canary/solana.ts` (the exact code +path the `canary` edge function uses), then reads one transaction back and +checks that the decoded memo equals what was sent. Memos carry dummy +sha256-shaped ids only; no note text, names or keys. + +Deno is not installed in this repo; `npx` fetches the official npm build: + +```sh +npx -y deno run -A tool/solana-spike/send_memo.ts +``` + +## Keys + +On the first run the script generates a devnet keypair and writes it to +`tool/solana-spike/.keys/relayer.json` in `solana-keygen` format (a JSON array +of 64 bytes). The directory is git-ignored and the secret is never printed; +only the public key is. Later runs reuse the same file. + +The script feeds that file to `loadSolana()` through `SOLANA_RELAYER_KEYS`, so it +also proves the JSON-array form of the secret parses. `SOLANA_RPC_URL` is +honoured if set (default `https://api.devnet.solana.com`). + +## Funding + +Devnet SOL is free. The script asks the RPC faucet for 1 SOL when the balance is +below 0.01 SOL and retries a few times with backoff. The public faucet is +rate-limited; if it keeps refusing, fund the printed public key by hand at + and run the script again. One memo costs 5000 +lamports (0.000005 SOL), so 1 SOL covers about 200,000 memos. + +## Using the key as the edge function relayer + +Owner only, experiment project only, with explicit approval (see `AGENTS.md`): +set `SOLANA_RELAYER_KEYS` to the contents of `relayer.json` (or to a base58 +64-byte secret key; several keys may be comma-separated). Leaving it unset keeps +the Solana proof off and the function behaves exactly as before. diff --git a/tool/solana-spike/send_memo.ts b/tool/solana-spike/send_memo.ts new file mode 100644 index 0000000..13b1e57 --- /dev/null +++ b/tool/solana-spike/send_memo.ts @@ -0,0 +1,164 @@ +// NO SUS Canary: Solana devnet memo spike. +// +// Exercises the exact production code path (app/supabase/functions/canary/ +// solana.ts): loads or generates a devnet relayer key, funds it by airdrop, +// sends one seal memo and one open memo, then reads one back and checks the +// text. The secret key is written to .keys/relayer.json and never printed. +// +// npx -y deno run -A tool/solana-spike/send_memo.ts + +import { + createKeyPairSignerFromBytes, + createKeyPairSignerFromPrivateKeyBytes, + createSolanaRpc, + getBase58Encoder, + lamports, + type Signature, +} from "npm:@solana/kit@8.4.0"; +import { + loadSolana, + openMemo, + sealMemo, + sendSolanaMemo, +} from "../../app/supabase/functions/canary/solana.ts"; + +const KEYS_DIR = new URL(".keys/", import.meta.url); +const KEY_FILE = new URL("relayer.json", KEYS_DIR); +const MIN_BALANCE = 10_000_000n; // 0.01 SOL +const AIRDROP = lamports(1_000_000_000n); // 1 SOL + +function sleep(ms: number) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +function hex64(): string { + return Array.from(crypto.getRandomValues(new Uint8Array(32)), (b) => b.toString(16).padStart(2, "0")) + .join(""); +} + +function explorer(sig: string, rpcUrl: string): string { + const cluster = rpcUrl.includes("testnet") ? "testnet" : "devnet"; + return `https://explorer.solana.com/tx/${sig}?cluster=${cluster}`; +} + +// Returns the solana-keygen style JSON array (64 bytes) for the relayer, +// generating and saving a new one when the file does not exist yet. +async function loadOrCreateKeyJson(): Promise { + try { + return (await Deno.readTextFile(KEY_FILE)).trim(); + } catch (e) { + if (!(e instanceof Deno.errors.NotFound)) throw e; + } + const seed = crypto.getRandomValues(new Uint8Array(32)); + const signer = await createKeyPairSignerFromPrivateKeyBytes(seed); + const secret = new Uint8Array(64); + secret.set(seed, 0); + secret.set(getBase58Encoder().encode(signer.address), 32); + const json = JSON.stringify(Array.from(secret)); + await Deno.mkdir(KEYS_DIR, { recursive: true }); + await Deno.writeTextFile(KEY_FILE, json + "\n"); + console.log("Generated a new devnet keypair in tool/solana-spike/.keys/relayer.json"); + return json; +} + +type Rpc = ReturnType; + +async function waitConfirmed(rpc: Rpc, sig: Signature, timeoutMs: number): Promise { + const deadline = Date.now() + timeoutMs; + while (Date.now() < deadline) { + const { value: [status] } = await rpc.getSignatureStatuses([sig]).send(); + if (status?.err) return false; + if (status?.confirmationStatus === "confirmed" || status?.confirmationStatus === "finalized") { + return true; + } + await sleep(500); + } + return false; +} + +async function main() { + Deno.env.set("SOLANA_RELAYER_KEYS", await loadOrCreateKeyJson()); + const cfg = loadSolana(); + if (!cfg) throw new Error("loadSolana() returned null although SOLANA_RELAYER_KEYS is set"); + const signer = await createKeyPairSignerFromBytes(cfg.keys[0]); + console.log(`Relayer public key: ${signer.address}`); + console.log(`RPC: ${cfg.rpcUrl}`); + console.log(`Memo program: ${cfg.memoProgram}`); + + const rpc = createSolanaRpc(cfg.rpcUrl); + const balance = async () => + (await rpc.getBalance(signer.address, { commitment: "confirmed" }).send()).value; + console.log(`Balance: ${Number(await balance()) / 1e9} SOL`); + + if ((await balance()) < MIN_BALANCE) { + let funded = false; + for (let attempt = 1; attempt <= 4 && !funded; attempt++) { + try { + const sig = await rpc.requestAirdrop(signer.address, AIRDROP, { commitment: "confirmed" }) + .send(); + console.log(`Airdrop requested (${attempt}/4): ${sig}`); + funded = await waitConfirmed(rpc, sig, 30_000); + } catch (e) { + console.log(`Airdrop attempt ${attempt}/4 failed: ${e instanceof Error ? e.message : String(e)}`); + } + if (!funded && attempt < 4) await sleep(2_000 * 2 ** (attempt - 1)); + } + if (!funded) { + console.error( + `Devnet airdrop is rate-limited. Fund ${signer.address} at https://faucet.solana.com and run again.`, + ); + Deno.exit(1); + } + console.log(`Balance after airdrop: ${Number(await balance()) / 1e9} SOL`); + } + + const note = `0x${hex64()}`; + const seal = sealMemo({ + note, + copies: 3, + hash: `0x${hex64()}`, + exp: Math.floor(Date.now() / 1000) + 3600, + }); + console.log(`\nSeal memo (${new TextEncoder().encode(seal).length} bytes): ${seal}`); + let t0 = Date.now(); + const sealSig = await sendSolanaMemo(cfg, seal); + console.log(` confirmed in ${Date.now() - t0} ms: ${sealSig}`); + console.log(` ${explorer(sealSig, cfg.rpcUrl)}`); + + const open = openMemo({ note, copy: 0, tag: `0x${hex64()}` }); + console.log(`\nOpen memo (${new TextEncoder().encode(open).length} bytes): ${open}`); + t0 = Date.now(); + const openSig = await sendSolanaMemo(cfg, open); + console.log(` confirmed in ${Date.now() - t0} ms: ${openSig}`); + console.log(` ${explorer(openSig, cfg.rpcUrl)}`); + + // Round trip: read the seal transaction back and compare the memo text. + const tx = await rpc + .getTransaction(sealSig as Signature, { + encoding: "jsonParsed", + maxSupportedTransactionVersion: 0, + commitment: "confirmed", + }) + .send(); + if (!tx) throw new Error("getTransaction returned null"); + const ix = tx.transaction.message.instructions[0] as unknown as { + program?: string; + parsed?: unknown; + data?: unknown; + }; + // SPL Memo (MemoSq4…) is parsed by the RPC into a plain string; p-memo is not, + // so fall back to decoding the raw base58 instruction data. + const decoded = typeof ix.parsed === "string" + ? ix.parsed + : new TextDecoder().decode(getBase58Encoder().encode(String(ix.data ?? ""))); + console.log(`\nRead back (${ix.program ?? "raw"}): ${decoded}`); + console.log(`Compute units: ${tx.meta?.computeUnitsConsumed ?? "?"}, fee: ${tx.meta?.fee ?? "?"} lamports`); + if (decoded !== seal) { + console.error("MISMATCH: decoded memo differs from the sent memo"); + Deno.exit(1); + } + console.log("Round trip OK: decoded memo equals the sent memo."); + console.log(`Balance: ${Number(await balance()) / 1e9} SOL`); +} + +await main(); From 7f02505de4e3acaf4e4d7264522ac72e9673eaa4 Mon Sep 17 00:00:00 2001 From: https-shubhamsahu Date: Sat, 10 Oct 2026 17:35:31 +0530 Subject: [PATCH 2/7] docs: Canary app now served at /nosus-canary/ (app/ redirects) Co-Authored-By: Claude Opus 5.5 --- docs/STATUS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/STATUS.md b/docs/STATUS.md index f4eeb27..7be9b5f 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -33,7 +33,7 @@ 3. `supabase secrets set --project-ref ffidvfguojalzpclipzi SOLANA_RELAYER_KEYS=… SOLANA_RPC_URL=https://api.devnet.solana.com` (read the key from a PowerShell variable; set `SOLANA_MEMO_PROGRAM` only if the default must change). 4. Apply the migration: `supabase db query --linked --file app/supabase/migrations/20261010090000_nosus_canary_solana.sql`. **Never `supabase db push`**: build-plan rule 5 records that the remote migration history holds only the bootstrap entry, so `db push` would try to re-apply ~21 old migrations and break the database. 5. `supabase functions deploy canary --project-ref ffidvfguojalzpclipzi --no-verify-jwt --use-api` (same flags as the build plan; without `--no-verify-jwt` the function returns 401). - 6. Rebuild the web app: from `app/`, in PowerShell, `flutter build web --release --base-href /nosus-canary/app/ --dart-define=NOSUS_CANARY_ONLY=true` (Monad hidden by default; add `--dart-define=CANARY_MONAD=true` only to reproduce the Monad build); copy `build/web/.` into `app/` on `gh-pages`, then commit and push (see the 22 Sep hosting note below). + 6. Rebuild the web app: from `app/`, in PowerShell, `flutter build web --release --base-href /nosus-canary/ --dart-define=NOSUS_CANARY_ONLY=true` (Monad hidden by default; add `--dart-define=CANARY_MONAD=true` only to reproduce the Monad build); copy `build/web/.` into the root of `gh-pages` (keep `hub/` and the `app/` redirect), then commit and push (see the 22 Sep hosting note below). 7. Verify: create a Canary link, open a copy in a private window, and click the **Solana** chip. It must open `https://explorer.solana.com/tx/?cluster=devnet` showing one Memo instruction whose JSON starts `{"p":"nosus-canary","v":1,"t":"open"` and contains hashes only. Record the seal signature in "Evidence so far" and in `docs/canary/VERIFICATION.md`. ## NO SUS Canary — 19 Sep 2026 @@ -53,7 +53,7 @@ - `docs/canary/reference/` was removed after being merged. The fingerprint harness is now `app/tool/canary_fingerprint_harness.dart` (FAILURES: 0). - Checks: 133 passed, 1 skipped; analyze 0 issues. - Hosting (22 Sep 2026): this repo, renamed from `nosus-monad` (old URLs redirect), now also hosts the site. Source is on `main`; the built site is on `gh-pages` and served at http://shubham-sahu.me/nosus-canary/ (`app/` = the Flutter build, `hub/` + `index.html` = landing). - - To deploy: from `app/`, run `flutter build web --release --base-href /nosus-canary/app/ --dart-define=NOSUS_CANARY_ONLY=true` in PowerShell, copy `build/web/.` into `app/` on `gh-pages`, then commit and push. + - To deploy: from `app/`, run `flutter build web --release --base-href /nosus-canary/ --dart-define=NOSUS_CANARY_ONLY=true` in PowerShell, copy `build/web/.` into the root of `gh-pages` (keep `hub/` and the `app/` redirect), then commit and push. Since 10 Oct 2026 the app is served at https://shubham-sahu.me/nosus-canary/; `/app/` redirects there keeping the hash, so older reader links still open. - The separate site repo was retired. ## Current state From cedc0357ab27310b51eb5ae0f5e3ee2906f3d728 Mon Sep 17 00:00:00 2001 From: https-shubhamsahu Date: Tue, 20 Oct 2026 17:59:42 +0530 Subject: [PATCH 3/7] chore: drop the EVM prototype and dead screens; Solana is the only receipt - Remove contracts/ (Solidity), web/ (Next.js threshold-decrypt spike), tool/threshold-spike, the root supabase/ schema for that spike, the .cursor rules and the docs that only described it. History keeps them. - Remove the unreachable features/monad screens and their tests, the /monad route, and the live-network db_test diagnostic. ExperimentFrame moves to lib/components and no longer names a chain. - Retire the README generator and its unused retro SVGs. - Contact email on the legal pages is shubhamsahu@nosus.foo. - pubspec.lock picks up the same transitive bumps as the local chore/canary-hardening working copy. Co-Authored-By: Claude Opus 5.5 --- .cursor/rules/00-project.mdc | 14 - .cursor/rules/10-contracts.mdc | 9 - .cursor/rules/20-web.mdc | 9 - .../experiment_frame.dart | 2 +- .../monad/data/monad_rpc_repository.dart | 79 - .../features/monad/domain/monad_receipt.dart | 80 - .../monad/domain/monad_repository.dart | 6 - .../monad/presentation/monad_entry_card.dart | 25 - .../monad/presentation/monad_providers.dart | 13 - .../monad/presentation/monad_screen.dart | 288 - .../anonymous_share_viewer_screen.dart | 2 +- .../screens/burn_file_viewer_screen.dart | 2 +- .../screens/burn_note_viewer_screen.dart | 2 +- app/lib/main.dart | 10 +- app/pubspec.lock | 24 +- app/supabase/config.toml | 6 +- app/test/db_test.dart | 100 - app/test/unit/monad_receipt_test.dart | 122 - app/test/widget/monad_screen_test.dart | 28 - app/web/account-deletion.html | 2 +- app/web/privacy.html | 2 +- app/web/terms.html | 2 +- assets/readme/battle.svg | 58 - assets/readme/btn-judge.svg | 11 - assets/readme/btn-play.svg | 12 - assets/readme/game-over.svg | 11 - assets/readme/say-hello.svg | 30 - assets/readme/story.svg | 60 - contracts/AGENTS.md | 7 - contracts/README.md | 25 - contracts/contracts/NoSusCanary.sol | 107 - contracts/contracts/NoSusMonadDrops.sol | 93 - contracts/hardhat.config.ts | 23 - contracts/package-lock.json | 3278 ---- contracts/package.json | 17 - contracts/scripts/canary-relayers.ts | 46 - contracts/scripts/deploy-canary.ts | 14 - contracts/scripts/deploy.ts | 14 - contracts/test/NoSusCanary.test.ts | 111 - contracts/test/NoSusMonadDrops.test.ts | 128 - contracts/tsconfig.json | 9 - docs/AGENT_COLLABORATION.md | 35 - docs/CURSOR_HANDOFF.md | 34 - docs/DEMO_RUNBOOK.md | 34 - docs/DESIGN_SYSTEM.md | 44 - docs/LIT_MONAD_SPIKE.md | 96 - docs/TECHNICAL_README.md | 124 - docs/canary/NOSUS_CANARY_BUILD_PLAN.md | 589 - readme.config.json | 19 - supabase/.gitignore | 8 - supabase/AGENTS.md | 15 - supabase/README.md | 45 - supabase/config.toml | 413 - .../20260916082811_experiment_drops.sql | 69 - tool/build-backend-bootstrap.mjs | 1 - tool/build-readme.mjs | 690 - tool/check-repository.mjs | 55 - tool/threshold-spike/README.md | 23 - tool/threshold-spike/conditions.mjs | 33 - tool/threshold-spike/conditions.test.mjs | 32 - tool/threshold-spike/package-lock.json | 13776 ---------------- tool/threshold-spike/package.json | 18 - tool/threshold-spike/run.mjs | 231 - web/AGENTS.md | 25 - web/README.md | 38 - web/next-env.d.ts | 7 - web/next.config.ts | 7 - web/package-lock.json | 1714 -- web/package.json | 25 - web/src/app/api/drops/[id]/route.ts | 42 - web/src/app/api/wall/route.ts | 35 - web/src/app/d/[id]/page.tsx | 6 - web/src/app/error.tsx | 17 - web/src/app/fonts/fonts.css | 11 - .../app/fonts/geist-53b9e256198e5412.woff2 | Bin 7968 -> 0 bytes .../app/fonts/geist-7178b3e590c64307.woff2 | Bin 16540 -> 0 bytes .../app/fonts/geist-8a480f0b521d4e75.woff2 | Bin 14900 -> 0 bytes .../app/fonts/geist-caa3a2e1cccd8315.woff2 | Bin 29288 -> 0 bytes .../app/fonts/geist-fef07dbb0973bf53.woff2 | Bin 7252 -> 0 bytes .../fonts/geist-mono-4fa387ec64143e14.woff2 | Bin 12872 -> 0 bytes .../fonts/geist-mono-5ce348bf30bf5439.woff2 | Bin 6204 -> 0 bytes .../fonts/geist-mono-6306c77e7c8268e4.woff2 | Bin 5892 -> 0 bytes .../fonts/geist-mono-797e433ab948586e.woff2 | Bin 23108 -> 0 bytes .../fonts/geist-mono-7d817b4c03b0c5f1.woff2 | Bin 7728 -> 0 bytes .../fonts/geist-mono-bbc41e54d2fcbd21.woff2 | Bin 14712 -> 0 bytes web/src/app/globals.css | 191 - web/src/app/layout.tsx | 16 - web/src/app/not-found.tsx | 14 - web/src/app/operator/page.tsx | 6 - web/src/app/page.tsx | 5 - web/src/app/preview/page.tsx | 3 - web/src/app/verify/[id]/page.tsx | 6 - web/src/components/experiment-badge.tsx | 12 - web/src/components/home-dashboard.tsx | 57 - web/src/components/live-receipt-wall.tsx | 82 - web/src/components/lock-orb.tsx | 25 - web/src/components/receipt-verifier.tsx | 138 - web/src/components/recipient-console.tsx | 75 - web/src/components/seal-console.tsx | 77 - web/src/components/wallet-control.tsx | 38 - .../features/private-notes/consumer-home.tsx | 30 - .../features/private-notes/note-composer.tsx | 102 - web/src/features/private-notes/note-shell.tsx | 25 - web/src/features/private-notes/note-state.ts | 44 - .../features/private-notes/sample-journey.tsx | 117 - .../features/private-notes/sample-state.ts | 35 - web/src/lib/drop-id.ts | 5 - web/src/lib/drops-contract.ts | 91 - web/src/lib/env.ts | 26 - web/src/lib/lit-conditions.ts | 46 - web/src/lib/monad.ts | 105 - web/src/lib/server/supabase.ts | 24 - web/src/lib/threshold.ts | 43 - web/src/lib/wallet.ts | 57 - web/src/types/ethereum.d.ts | 5 - web/tests/private-notes.test.ts | 37 - web/tsconfig.json | 41 - 117 files changed, 23 insertions(+), 24747 deletions(-) delete mode 100644 .cursor/rules/00-project.mdc delete mode 100644 .cursor/rules/10-contracts.mdc delete mode 100644 .cursor/rules/20-web.mdc rename app/lib/{features/monad/presentation => components}/experiment_frame.dart (90%) delete mode 100644 app/lib/features/monad/data/monad_rpc_repository.dart delete mode 100644 app/lib/features/monad/domain/monad_receipt.dart delete mode 100644 app/lib/features/monad/domain/monad_repository.dart delete mode 100644 app/lib/features/monad/presentation/monad_entry_card.dart delete mode 100644 app/lib/features/monad/presentation/monad_providers.dart delete mode 100644 app/lib/features/monad/presentation/monad_screen.dart delete mode 100644 app/test/db_test.dart delete mode 100644 app/test/unit/monad_receipt_test.dart delete mode 100644 app/test/widget/monad_screen_test.dart delete mode 100644 assets/readme/battle.svg delete mode 100644 assets/readme/btn-judge.svg delete mode 100644 assets/readme/btn-play.svg delete mode 100644 assets/readme/game-over.svg delete mode 100644 assets/readme/say-hello.svg delete mode 100644 assets/readme/story.svg delete mode 100644 contracts/AGENTS.md delete mode 100644 contracts/README.md delete mode 100644 contracts/contracts/NoSusCanary.sol delete mode 100644 contracts/contracts/NoSusMonadDrops.sol delete mode 100644 contracts/hardhat.config.ts delete mode 100644 contracts/package-lock.json delete mode 100644 contracts/package.json delete mode 100644 contracts/scripts/canary-relayers.ts delete mode 100644 contracts/scripts/deploy-canary.ts delete mode 100644 contracts/scripts/deploy.ts delete mode 100644 contracts/test/NoSusCanary.test.ts delete mode 100644 contracts/test/NoSusMonadDrops.test.ts delete mode 100644 contracts/tsconfig.json delete mode 100644 docs/AGENT_COLLABORATION.md delete mode 100644 docs/CURSOR_HANDOFF.md delete mode 100644 docs/DEMO_RUNBOOK.md delete mode 100644 docs/DESIGN_SYSTEM.md delete mode 100644 docs/LIT_MONAD_SPIKE.md delete mode 100644 docs/TECHNICAL_README.md delete mode 100644 docs/canary/NOSUS_CANARY_BUILD_PLAN.md delete mode 100644 readme.config.json delete mode 100644 supabase/.gitignore delete mode 100644 supabase/AGENTS.md delete mode 100644 supabase/README.md delete mode 100644 supabase/config.toml delete mode 100644 supabase/migrations/20260916082811_experiment_drops.sql delete mode 100644 tool/build-readme.mjs delete mode 100644 tool/check-repository.mjs delete mode 100644 tool/threshold-spike/README.md delete mode 100644 tool/threshold-spike/conditions.mjs delete mode 100644 tool/threshold-spike/conditions.test.mjs delete mode 100644 tool/threshold-spike/package-lock.json delete mode 100644 tool/threshold-spike/package.json delete mode 100644 tool/threshold-spike/run.mjs delete mode 100644 web/AGENTS.md delete mode 100644 web/README.md delete mode 100644 web/next-env.d.ts delete mode 100644 web/next.config.ts delete mode 100644 web/package-lock.json delete mode 100644 web/package.json delete mode 100644 web/src/app/api/drops/[id]/route.ts delete mode 100644 web/src/app/api/wall/route.ts delete mode 100644 web/src/app/d/[id]/page.tsx delete mode 100644 web/src/app/error.tsx delete mode 100644 web/src/app/fonts/fonts.css delete mode 100644 web/src/app/fonts/geist-53b9e256198e5412.woff2 delete mode 100644 web/src/app/fonts/geist-7178b3e590c64307.woff2 delete mode 100644 web/src/app/fonts/geist-8a480f0b521d4e75.woff2 delete mode 100644 web/src/app/fonts/geist-caa3a2e1cccd8315.woff2 delete mode 100644 web/src/app/fonts/geist-fef07dbb0973bf53.woff2 delete mode 100644 web/src/app/fonts/geist-mono-4fa387ec64143e14.woff2 delete mode 100644 web/src/app/fonts/geist-mono-5ce348bf30bf5439.woff2 delete mode 100644 web/src/app/fonts/geist-mono-6306c77e7c8268e4.woff2 delete mode 100644 web/src/app/fonts/geist-mono-797e433ab948586e.woff2 delete mode 100644 web/src/app/fonts/geist-mono-7d817b4c03b0c5f1.woff2 delete mode 100644 web/src/app/fonts/geist-mono-bbc41e54d2fcbd21.woff2 delete mode 100644 web/src/app/globals.css delete mode 100644 web/src/app/layout.tsx delete mode 100644 web/src/app/not-found.tsx delete mode 100644 web/src/app/operator/page.tsx delete mode 100644 web/src/app/page.tsx delete mode 100644 web/src/app/preview/page.tsx delete mode 100644 web/src/app/verify/[id]/page.tsx delete mode 100644 web/src/components/experiment-badge.tsx delete mode 100644 web/src/components/home-dashboard.tsx delete mode 100644 web/src/components/live-receipt-wall.tsx delete mode 100644 web/src/components/lock-orb.tsx delete mode 100644 web/src/components/receipt-verifier.tsx delete mode 100644 web/src/components/recipient-console.tsx delete mode 100644 web/src/components/seal-console.tsx delete mode 100644 web/src/components/wallet-control.tsx delete mode 100644 web/src/features/private-notes/consumer-home.tsx delete mode 100644 web/src/features/private-notes/note-composer.tsx delete mode 100644 web/src/features/private-notes/note-shell.tsx delete mode 100644 web/src/features/private-notes/note-state.ts delete mode 100644 web/src/features/private-notes/sample-journey.tsx delete mode 100644 web/src/features/private-notes/sample-state.ts delete mode 100644 web/src/lib/drop-id.ts delete mode 100644 web/src/lib/drops-contract.ts delete mode 100644 web/src/lib/env.ts delete mode 100644 web/src/lib/lit-conditions.ts delete mode 100644 web/src/lib/monad.ts delete mode 100644 web/src/lib/server/supabase.ts delete mode 100644 web/src/lib/threshold.ts delete mode 100644 web/src/lib/wallet.ts delete mode 100644 web/src/types/ethereum.d.ts delete mode 100644 web/tests/private-notes.test.ts delete mode 100644 web/tsconfig.json diff --git a/.cursor/rules/00-project.mdc b/.cursor/rules/00-project.mdc deleted file mode 100644 index 4c5ba03..0000000 --- a/.cursor/rules/00-project.mdc +++ /dev/null @@ -1,14 +0,0 @@ ---- -description: Project-wide NO SUS Monad experiment rules and handover map. -alwaysApply: true ---- - -Read `AGENTS.md` and `docs/STATUS.md` before changing code. This is a separate, testnet-only NO SUS -experiment; do not read, edit, deploy, or reuse secrets from the production NO SUS repository. - -Preserve the threshold-custody honesty boundary: no plaintext, key, salt, filename, private key, or -service-role key may reach the contract, client logs, or public environment. Do not claim a human read, -legal proof, screenshot prevention, or independently verifiable deletion. - -Use focused checks in normal work. Ask the exact finalization question from `AGENTS.md` after every -substantive file-changing response. diff --git a/.cursor/rules/10-contracts.mdc b/.cursor/rules/10-contracts.mdc deleted file mode 100644 index 9efbd0d..0000000 --- a/.cursor/rules/10-contracts.mdc +++ /dev/null @@ -1,9 +0,0 @@ ---- -description: Solidity contract scope and receipt invariants. -globs: contracts/** -alwaysApply: false ---- - -The contract records a ciphertext digest and wallet acknowledgement only. Never add plaintext, keys, -salts, filenames, payment logic, admin bypasses, or an on-chain key-proof function. Preserve one open, -recipient, and expiry invariants. Add a failing test before every contract behavior change. diff --git a/.cursor/rules/20-web.mdc b/.cursor/rules/20-web.mdc deleted file mode 100644 index b190ba6..0000000 --- a/.cursor/rules/20-web.mdc +++ /dev/null @@ -1,9 +0,0 @@ ---- -description: Web experience and client security rules. -globs: web/** -alwaysApply: false ---- - -Keep browser crypto and wallet actions in client components; keep Supabase service-role access in server -route handlers only. Show explicit testnet and experimental labels. Dynamic wallet and receipt state must -be accessible, keyboard usable, and respect reduced-motion preferences. diff --git a/app/lib/features/monad/presentation/experiment_frame.dart b/app/lib/components/experiment_frame.dart similarity index 90% rename from app/lib/features/monad/presentation/experiment_frame.dart rename to app/lib/components/experiment_frame.dart index 56f988c..04d5887 100644 --- a/app/lib/features/monad/presentation/experiment_frame.dart +++ b/app/lib/components/experiment_frame.dart @@ -14,7 +14,7 @@ class ExperimentFrame extends StatelessWidget { padding: EdgeInsets.symmetric(horizontal: 12, vertical: 7), child: Center( child: Text( - 'NO SUS · Monad testnet · use harmless test notes only', + 'NO SUS · experiment build · use harmless test notes only', textAlign: TextAlign.center, style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600), ), diff --git a/app/lib/features/monad/data/monad_rpc_repository.dart b/app/lib/features/monad/data/monad_rpc_repository.dart deleted file mode 100644 index 82ea781..0000000 --- a/app/lib/features/monad/data/monad_rpc_repository.dart +++ /dev/null @@ -1,79 +0,0 @@ -import 'dart:convert'; -import 'package:http/http.dart' as http; -import '../domain/monad_receipt.dart'; -import '../domain/monad_repository.dart'; - -class MonadRpcRepository implements MonadRepository { - MonadRpcRepository({ - http.Client? client, - String? contractAddress, - Uri? rpcUrl, - }) : _client = client ?? http.Client(), - _contract = - contractAddress ?? - const String.fromEnvironment('MONAD_DROPS_CONTRACT'), - _rpc = rpcUrl ?? Uri.parse('https://testnet-rpc.monad.xyz'); - final http.Client _client; - final String _contract; - final Uri _rpc; - - @override - bool get isConfigured => - RegExp(r'^0x[0-9a-fA-F]{40}$').hasMatch(_contract) && - _contract.toLowerCase() != MonadReceipt.zeroAddress; - - Future _call(String method, List params) async { - final response = await _client - .post( - _rpc, - headers: {'Content-Type': 'application/json'}, - body: jsonEncode({ - 'jsonrpc': '2.0', - 'id': 1, - 'method': method, - 'params': params, - }), - ) - .timeout(const Duration(seconds: 15)); - if (response.statusCode != 200) { - throw StateError('Monad is unavailable. Try again shortly.'); - } - final decoded = jsonDecode(response.body); - if (decoded is! Map || - decoded['id'] != 1 || - decoded['error'] != null || - decoded['result'] is! String) { - throw StateError( - 'No receipt could be verified. Check the ID and try again.', - ); - } - return decoded['result'] as String; - } - - @override - Future receiptOf(String id) async { - final dropId = parseMonadDropId(id); - if (dropId == null) { - throw const FormatException('Enter a valid Monad receipt ID.'); - } - if (!isConfigured) { - throw StateError('The testnet receipt contract is not deployed yet.'); - } - final chain = await _call('eth_chainId', const []); - if (BigInt.tryParse(chain.replaceFirst('0x', ''), radix: 16) != - BigInt.from(10143)) { - throw StateError('This experiment requires Monad testnet (10143).'); - } - final code = await _call('eth_getCode', [_contract, 'latest']); - if (code == '0x' || code == '0x0') { - throw StateError('No contract exists at the configured address.'); - } - final data = await _call('eth_call', [ - {'to': _contract, 'data': '0x72a41fdd${dropId.substring(2)}'}, - 'latest', - ]); - return MonadReceipt.fromAbi(dropId, data); - } - - void dispose() => _client.close(); -} diff --git a/app/lib/features/monad/domain/monad_receipt.dart b/app/lib/features/monad/domain/monad_receipt.dart deleted file mode 100644 index e9a23b3..0000000 --- a/app/lib/features/monad/domain/monad_receipt.dart +++ /dev/null @@ -1,80 +0,0 @@ -/// Public acknowledgement metadata. Never contains note content or keys. -class MonadReceipt { - const MonadReceipt({ - required this.id, - required this.sender, - required this.recipient, - required this.opener, - required this.ciphertextDigest, - required this.sealedAt, - required this.openedAt, - required this.expiresAt, - }); - - static const zeroAddress = '0x0000000000000000000000000000000000000000'; - final String id, sender, recipient, opener, ciphertextDigest; - final int sealedAt, openedAt, expiresAt; - bool get acknowledged => opener != zeroAddress; - bool isExpired(DateTime now) => - expiresAt != 0 && now.millisecondsSinceEpoch ~/ 1000 >= expiresAt; - String status(DateTime now) => acknowledged - ? (isExpired(now) ? 'Acknowledged · access expired' : 'Acknowledged') - : (isExpired(now) - ? 'Expired without acknowledgement' - : 'Awaiting acknowledgement'); - - factory MonadReceipt.fromAbi(String id, String data) { - if (!RegExp(r'^0x[0-9a-fA-F]{448}$').hasMatch(data)) { - throw const FormatException('The contract returned an invalid receipt.'); - } - final words = List.generate( - 7, - (i) => data.substring(2 + i * 64, 2 + (i + 1) * 64), - ); - for (final word in words.take(3)) { - if (!word.startsWith('0' * 24)) { - throw const FormatException('Invalid wallet address in receipt.'); - } - } - int timestamp(int index) { - final value = BigInt.parse(words[index], radix: 16); - if (value > BigInt.from(8640000000000)) { - throw const FormatException('Invalid receipt timestamp.'); - } - return value.toInt(); - } - - final sender = '0x${words[0].substring(24)}'.toLowerCase(); - if (sender == zeroAddress) { - throw const FormatException('Receipt does not exist.'); - } - return MonadReceipt( - id: id.toLowerCase(), - sender: sender, - recipient: '0x${words[1].substring(24)}'.toLowerCase(), - opener: '0x${words[2].substring(24)}'.toLowerCase(), - ciphertextDigest: '0x${words[3]}'.toLowerCase(), - sealedAt: timestamp(4), - openedAt: timestamp(5), - expiresAt: timestamp(6), - ); - } -} - -/// Never forward arbitrary URLs or Burn fragments to the RPC. -String? parseMonadDropId(String input) { - final text = input.trim(); - if (RegExp(r'^0x[0-9a-fA-F]{64}$').hasMatch(text)) return text.toLowerCase(); - final uri = Uri.tryParse(text); - if (uri == null || - uri.scheme != 'https' || - uri.host != 'monad.nosus.foo' || - uri.userInfo.isNotEmpty || - uri.hasQuery || - uri.path != '/') { - return null; - } - return RegExp( - r'^/monad/(0x[0-9a-fA-F]{64})$', - ).firstMatch(uri.fragment)?.group(1)?.toLowerCase(); -} diff --git a/app/lib/features/monad/domain/monad_repository.dart b/app/lib/features/monad/domain/monad_repository.dart deleted file mode 100644 index dcdf255..0000000 --- a/app/lib/features/monad/domain/monad_repository.dart +++ /dev/null @@ -1,6 +0,0 @@ -import 'monad_receipt.dart'; - -abstract interface class MonadRepository { - bool get isConfigured; - Future receiptOf(String id); -} diff --git a/app/lib/features/monad/presentation/monad_entry_card.dart b/app/lib/features/monad/presentation/monad_entry_card.dart deleted file mode 100644 index 866f0c9..0000000 --- a/app/lib/features/monad/presentation/monad_entry_card.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/material.dart'; -import 'monad_screen.dart'; - -class MonadEntryCard extends StatelessWidget { - const MonadEntryCard({super.key}); - @override - Widget build(BuildContext context) => Card.outlined( - margin: const EdgeInsets.symmetric(vertical: 12), - child: ListTile( - contentPadding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10), - leading: const Icon(Icons.verified_outlined), - title: const Text('Monad receipts'), - subtitle: const Text( - 'A wallet acknowledgement for an encrypted note. Explore the experiment.', - ), - trailing: const Icon(Icons.chevron_right), - onTap: () => Navigator.of(context).push( - MaterialPageRoute( - builder: (_) => const MonadScreen(), - settings: const RouteSettings(name: '/monad'), - ), - ), - ), - ); -} diff --git a/app/lib/features/monad/presentation/monad_providers.dart b/app/lib/features/monad/presentation/monad_providers.dart deleted file mode 100644 index ba0d807..0000000 --- a/app/lib/features/monad/presentation/monad_providers.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import '../data/monad_rpc_repository.dart'; -import '../domain/monad_repository.dart'; - -final monadRepositoryProvider = Provider((ref) { - final repository = MonadRpcRepository(); - ref.onDispose(repository.dispose); - return repository; -}); - -// Not an environment flag. Requires browser custody implementation and all -// six recorded Gate T1 proofs before it may become true. -const monadThresholdVerified = false; diff --git a/app/lib/features/monad/presentation/monad_screen.dart b/app/lib/features/monad/presentation/monad_screen.dart deleted file mode 100644 index b57fd31..0000000 --- a/app/lib/features/monad/presentation/monad_screen.dart +++ /dev/null @@ -1,288 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import '../domain/monad_receipt.dart'; -import 'monad_providers.dart'; - -class MonadScreen extends ConsumerStatefulWidget { - const MonadScreen({super.key, this.dropId}); - final String? dropId; - @override - ConsumerState createState() => _MonadScreenState(); -} - -class _MonadScreenState extends ConsumerState { - final _input = TextEditingController(); - MonadReceipt? _receipt; - String? _error; - bool _loading = false; - @override - void initState() { - super.initState(); - _input.text = widget.dropId ?? ''; - if (widget.dropId != null) { - WidgetsBinding.instance.addPostFrameCallback((_) { - if (mounted) _verify(); - }); - } - } - - @override - void dispose() { - _input.dispose(); - super.dispose(); - } - - Future _verify() async { - if (_loading) return; - final id = parseMonadDropId(_input.text); - setState(() { - _receipt = null; - _error = null; - }); - if (id == null) { - setState( - () => _error = - 'Enter a 0x receipt ID (64 hex characters), or a Monad receipt link.', - ); - return; - } - setState(() => _loading = true); - try { - final receipt = await ref.read(monadRepositoryProvider).receiptOf(id); - if (mounted) setState(() => _receipt = receipt); - } on FormatException catch (error) { - if (mounted) setState(() => _error = error.message); - } on StateError catch (error) { - if (mounted) setState(() => _error = error.message); - } catch (_) { - if (mounted) { - setState( - () => _error = - 'Could not reach Monad. Check your connection and try again.', - ); - } - } finally { - if (mounted) setState(() => _loading = false); - } - } - - Widget _step(String number, String title, String body) => Padding( - padding: const EdgeInsets.symmetric(vertical: 10), - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(number, style: Theme.of(context).textTheme.titleMedium), - const SizedBox(width: 18), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(title, style: Theme.of(context).textTheme.titleSmall), - const SizedBox(height: 4), - Text(body), - ], - ), - ), - ], - ), - ); - String _time(int seconds) => seconds == 0 - ? '—' - : '${DateTime.fromMillisecondsSinceEpoch(seconds * 1000, isUtc: true).toIso8601String()} (UTC)'; - - @override - Widget build(BuildContext context) { - final configured = ref.watch(monadRepositoryProvider).isConfigured; - final receipt = _receipt; - return Scaffold( - appBar: AppBar(title: const Text('Monad receipts')), - body: Center( - child: ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 720), - child: ListView( - padding: const EdgeInsets.all(24), - children: [ - Text( - 'NO SUS — MONAD EXPERIMENT', - style: Theme.of(context).textTheme.labelSmall, - ), - const SizedBox(height: 20), - Text( - 'Share a note.\nKeep the acknowledgement.', - style: Theme.of(context).textTheme.headlineLarge, - ), - const SizedBox(height: 14), - const Text( - 'An optional receipt for handoffs where the receiving wallet matters. ' - 'Your Workspace, Vault, Study Desk and Burn tools remain part of this app.', - ), - const SizedBox(height: 24), - const Card.outlined( - child: Padding( - padding: EdgeInsets.all(20), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - 'Encrypted Monad sharing is not available yet', - style: TextStyle(fontWeight: FontWeight.w700), - ), - SizedBox(height: 12), - Text( - 'We still need to verify that only the acknowledged wallet can decrypt. ' - 'Use harmless test data in this experimental app.', - ), - SizedBox(height: 16), - FilledButton( - onPressed: null, - child: Text('Send with a Monad receipt'), - ), - ], - ), - ), - ), - const SizedBox(height: 20), - Text( - 'How the planned handoff works', - style: Theme.of(context).textTheme.titleLarge, - ), - _step( - '01', - 'Address it to a wallet', - 'Encrypt a note for a recipient and choose an expiry.', - ), - _step( - '02', - 'The recipient acknowledges', - 'Their wallet records an acknowledgement on Monad testnet.', - ), - _step( - '03', - 'Unlock and verify', - 'Threshold custody permits decryption; the public receipt remains verifiable.', - ), - const Divider(height: 40), - Text( - 'Verify a receipt', - style: Theme.of(context).textTheme.titleLarge, - ), - const SizedBox(height: 8), - const Text( - 'Read public acknowledgement metadata directly from Monad. No wallet connection required.', - ), - if (!configured) - const Padding( - padding: EdgeInsets.only(top: 12), - child: Text( - 'Waiting for the testnet contract deployment. Receipt lookup will become available here.', - ), - ), - const SizedBox(height: 16), - TextField( - controller: _input, - enabled: !_loading, - autocorrect: false, - enableSuggestions: false, - decoration: const InputDecoration( - labelText: 'Receipt ID or Monad receipt link', - hintText: '0x…', - border: OutlineInputBorder(), - ), - onChanged: (_) { - if (_receipt != null || _error != null) { - setState(() { - _receipt = null; - _error = null; - }); - } - }, - onSubmitted: configured ? (_) => _verify() : null, - ), - const SizedBox(height: 12), - FilledButton.icon( - onPressed: configured && !_loading ? _verify : null, - icon: _loading - ? const SizedBox( - width: 16, - height: 16, - child: CircularProgressIndicator(strokeWidth: 2), - ) - : const Icon(Icons.search), - label: Text(_loading ? 'Checking Monad…' : 'Verify receipt'), - ), - if (_error != null) - Padding( - padding: const EdgeInsets.only(top: 16), - child: Semantics( - liveRegion: true, - child: Text( - _error!, - style: TextStyle( - color: Theme.of(context).colorScheme.error, - ), - ), - ), - ), - if (receipt != null) ...[ - const SizedBox(height: 20), - Card.outlined( - child: Padding( - padding: const EdgeInsets.all(20), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Semantics( - liveRegion: true, - child: Text( - receipt.status(DateTime.now()), - style: Theme.of(context).textTheme.titleLarge, - ), - ), - const SizedBox(height: 16), - SelectableText( - 'Sender\n${receipt.sender}\n\nRecipient\n${receipt.recipient == MonadReceipt.zeroAddress ? 'First eligible wallet' : receipt.recipient}' - '\n\nAcknowledged by\n${receipt.acknowledged ? receipt.opener : 'No wallet yet'}' - '\n\nSealed\n${_time(receipt.sealedAt)}\n\nAcknowledged\n${_time(receipt.openedAt)}' - '\n\nExpiry\n${receipt.expiresAt == 0 ? 'No expiry' : _time(receipt.expiresAt)}' - '\n\nEncrypted-content digest\n${receipt.ciphertextDigest}', - ), - const SizedBox(height: 16), - OutlinedButton.icon( - icon: const Icon(Icons.copy), - label: const Text('Copy receipt link'), - onPressed: () async { - await Clipboard.setData( - ClipboardData( - text: - 'https://monad.nosus.foo/#/monad/${receipt.id}', - ), - ); - if (context.mounted) { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Receipt link copied'), - ), - ); - } - }, - ), - ], - ), - ), - ), - ], - const SizedBox(height: 24), - const Text( - 'A receipt proves a wallet acknowledged an encrypted drop. It does not prove ' - 'that a person read it or that decryption succeeded. Wallet addresses and timestamps ' - 'are public. Recipients can keep content after decrypting it.', - style: TextStyle(fontSize: 12), - ), - ], - ), - ), - ), - ); - } -} diff --git a/app/lib/features/share/presentation/screens/anonymous_share_viewer_screen.dart b/app/lib/features/share/presentation/screens/anonymous_share_viewer_screen.dart index b41037f..34d60b6 100644 --- a/app/lib/features/share/presentation/screens/anonymous_share_viewer_screen.dart +++ b/app/lib/features/share/presentation/screens/anonymous_share_viewer_screen.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'dart:typed_data'; import 'package:flutter/material.dart'; -import '../../../monad/presentation/experiment_frame.dart'; +import '../../../../components/experiment_frame.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:http/http.dart' as http; import 'package:pdfrx/pdfrx.dart'; diff --git a/app/lib/features/share/presentation/screens/burn_file_viewer_screen.dart b/app/lib/features/share/presentation/screens/burn_file_viewer_screen.dart index df94ebb..624b2eb 100644 --- a/app/lib/features/share/presentation/screens/burn_file_viewer_screen.dart +++ b/app/lib/features/share/presentation/screens/burn_file_viewer_screen.dart @@ -1,6 +1,6 @@ import 'package:encrypt/encrypt.dart' as enc; import 'package:flutter/material.dart'; -import '../../../monad/presentation/experiment_frame.dart'; +import '../../../../components/experiment_frame.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:http/http.dart' as http; import 'package:share_plus/share_plus.dart'; diff --git a/app/lib/features/share/presentation/screens/burn_note_viewer_screen.dart b/app/lib/features/share/presentation/screens/burn_note_viewer_screen.dart index 072440f..61a942d 100644 --- a/app/lib/features/share/presentation/screens/burn_note_viewer_screen.dart +++ b/app/lib/features/share/presentation/screens/burn_note_viewer_screen.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import '../../../monad/presentation/experiment_frame.dart'; +import '../../../../components/experiment_frame.dart'; import 'package:flutter_animate/flutter_animate.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; diff --git a/app/lib/main.dart b/app/lib/main.dart index fb1fba8..84cb73a 100644 --- a/app/lib/main.dart +++ b/app/lib/main.dart @@ -1,7 +1,5 @@ import 'dart:async'; -import 'features/monad/domain/monad_receipt.dart'; -import 'features/monad/presentation/experiment_frame.dart'; -import 'features/monad/presentation/monad_screen.dart'; +import 'components/experiment_frame.dart'; import 'features/canary/domain/canary_link.dart'; import 'features/canary/presentation/canary_app.dart'; import 'features/canary/presentation/canary_home_screen.dart'; @@ -615,12 +613,6 @@ class MyApp extends ConsumerWidget { builder: (_) => const CanaryHomeScreen(), ); } - if (route == '/monad' || route.startsWith('/monad/')) { - final id = route.startsWith('/monad/') - ? parseMonadDropId(route.substring('/monad/'.length)) : null; - return MaterialPageRoute(settings: settings, - builder: (_) => MonadScreen(dropId: id)); - } // Web OAuth (Google/GitHub) redirects land on e.g. "/?code=..." — not // exactly "/", so Flutter treats it as a distinct route instead of // falling back to `home`. By the time this builds, Supabase has diff --git a/app/pubspec.lock b/app/pubspec.lock index 07fb904..e72720d 100644 --- a/app/pubspec.lock +++ b/app/pubspec.lock @@ -700,10 +700,10 @@ packages: dependency: transitive description: name: matcher - sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 + sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd" url: "https://pub.dev" source: hosted - version: "0.12.19" + version: "0.12.20" material_color_utilities: dependency: transitive description: @@ -724,10 +724,10 @@ packages: dependency: transitive description: name: meta - sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" + sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9" url: "https://pub.dev" source: hosted - version: "1.18.0" + version: "1.19.0" mime: dependency: transitive description: @@ -1257,26 +1257,26 @@ packages: dependency: transitive description: name: test - sha256: "8d9ceddbab833f180fbefed08afa76d7c03513dfdba87ffcec2718b02bbcbf20" + sha256: ca578dc12bb8b2f40b67b7d3bd2fac4f31c01a6ff7130a14e2597b919934507f url: "https://pub.dev" source: hosted - version: "1.31.0" + version: "1.31.1" test_api: dependency: transitive description: name: test_api - sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" + sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11" url: "https://pub.dev" source: hosted - version: "0.7.11" + version: "0.7.12" test_core: dependency: transitive description: name: test_core - sha256: "1991d4cfe85d5043241acac92962c3977c8d2f2add1ee73130c7b286417d1d34" + sha256: d2e98ec12998368dc59ddd47ab709f2cd55acd6b66dc7db764455a44082f4bc5 url: "https://pub.dev" source: hosted - version: "0.6.17" + version: "0.6.18" typed_data: dependency: transitive description: @@ -1377,10 +1377,10 @@ packages: dependency: transitive description: name: vector_math - sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + sha256: "92b9910f66ed1057fd4da7b040ae7c74cafacf885bdc81be496928d5049b032d" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.4.3" vm_service: dependency: transitive description: diff --git a/app/supabase/config.toml b/app/supabase/config.toml index a2f5b6b..41866b3 100644 --- a/app/supabase/config.toml +++ b/app/supabase/config.toml @@ -2,7 +2,7 @@ # https://supabase.com/docs/guides/local-development/cli/config # A string used to distinguish different Supabase projects on the same host. Defaults to the # working directory name when running `supabase init`. -project_id = "nosus-monad-experiment" +project_id = "nosus-canary" [api] enabled = true @@ -156,11 +156,11 @@ max_indexes = 5 enabled = true # The base URL of your website. Used as an allow-list for redirects and for constructing URLs used # in emails. -site_url = "https://monad.nosus.foo" +site_url = "https://shubham-sahu.me/nosus-canary/" # The public URL that Auth serves on. Defaults to the API external URL with `/auth/v1` appended. # external_url = "" # A list of *exact* URLs that auth providers are permitted to redirect to post authentication. -additional_redirect_urls = ["https://monad.nosus.foo/**", "http://127.0.0.1:5052/**"] +additional_redirect_urls = ["https://shubham-sahu.me/nosus-canary/**", "http://127.0.0.1:5052/**"] # How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 (1 week). jwt_expiry = 3600 # JWT issuer URL. If not set, defaults to auth.external_url. diff --git a/app/test/db_test.dart b/app/test/db_test.dart deleted file mode 100644 index 281ce63..0000000 --- a/app/test/db_test.dart +++ /dev/null @@ -1,100 +0,0 @@ -// ignore_for_file: avoid_print -import 'dart:io'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:supabase_flutter/supabase_flutter.dart'; -import 'package:shared_preferences/shared_preferences.dart'; -import 'package:no_sus/config/supabase_credentials.dart'; - -class EmptyLocalStorage extends LocalStorage { - const EmptyLocalStorage(); - @override - Future initialize() async {} - @override - Future accessToken() async => null; - @override - Future hasAccessToken() async => false; - @override - Future persistSession(String session) async {} - @override - Future removePersistedSession() async {} -} - -void main() { - test('diagnose database', () async { - try { - TestWidgetsFlutterBinding.ensureInitialized(); - HttpOverrides.global = null; - SharedPreferences.setMockInitialValues({}); - await Supabase.initialize( - url: SupabaseCredentials.url, - publishableKey: SupabaseCredentials.anonKey, - authOptions: const FlutterAuthClientOptions( - localStorage: EmptyLocalStorage(), - ), - ); - - final client = Supabase.instance.client; - print('Supabase initialized.'); - - try { - final groups = await client.from('study_groups').select('*'); - print('--- STUDY GROUPS (${groups.length}) ---'); - for (var g in groups) { - print('Group: $g'); - } - } catch (e) { - print('Error fetching study_groups: $e'); - } - - try { - final members = await client.from('study_group_members').select('*'); - print('--- STUDY GROUP MEMBERS (${members.length}) ---'); - } catch (e) { - print('Error fetching study_group_members: $e'); - } - - try { - final profiles = await client.from('profiles').select('*'); - print('--- PROFILES (${profiles.length}) ---'); - for (var p in profiles) { - print('Profile: $p'); - } - } catch (e) { - print('Error fetching profiles: $e'); - } - - try { - final files = await client.from('secure_files').select('*'); - print('--- SECURE FILES (${files.length}) ---'); - for (var f in files) { - print('File: $f'); - } - } catch (e) { - print('Error fetching secure_files: $e'); - } - - final tablesToCheck = [ - 'profiles', - 'study_groups', - 'study_group_members', - 'secure_files', - 'audit_logs', - 'focus_logs', - 'user_notes' - ]; - - for (final table in tablesToCheck) { - try { - await client.from(table).select('*').limit(1); - print('Table "$table" EXISTS.'); - } catch (e) { - print('Table "$table" DOES NOT EXIST or query failed: $e'); - } - } - - } catch (e, s) { - print('Error: $e'); - print(s); - } - }); -} diff --git a/app/test/unit/monad_receipt_test.dart b/app/test/unit/monad_receipt_test.dart deleted file mode 100644 index 65ac9e3..0000000 --- a/app/test/unit/monad_receipt_test.dart +++ /dev/null @@ -1,122 +0,0 @@ -import 'dart:convert'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:http/http.dart' as http; -import 'package:http/testing.dart'; -import 'package:no_sus/features/monad/domain/monad_receipt.dart'; -import 'package:no_sus/features/monad/data/monad_rpc_repository.dart'; - -void main() { - final id = '0x${'ab' * 32}'; - final sender = '0x${'11' * 20}'; - final recipient = '0x${'22' * 20}'; - final contract = '0x${'33' * 20}'; - String abi({bool opened = false}) => - '0x${[sender.substring(2).padLeft(64, '0'), recipient.substring(2).padLeft(64, '0'), (opened ? recipient.substring(2) : '0').padLeft(64, '0'), 'cd' * 32, 100.toRadixString(16).padLeft(64, '0'), (opened ? 150 : 0).toRadixString(16).padLeft(64, '0'), 200.toRadixString(16).padLeft(64, '0')].join()}'; - - test('only accepts receipt IDs and experiment receipt links', () { - expect(parseMonadDropId(' $id '), id); - expect(parseMonadDropId('https://monad.nosus.foo/#/monad/$id'), id); - for (final input in [ - 'https://app.nosus.foo/#/monad/$id', - 'https://monad.nosus.foo/#/burn/$id?k=secret', - '$id?k=secret', - 'https://monad.nosus.foo/#/monad/$id?k=secret', - '0x123', - 'https://evil.example/#/monad/$id', - ]) { - expect(parseMonadDropId(input), isNull); - } - }); - test('receipt keeps acknowledgement evidence after exact expiry', () { - final receipt = MonadReceipt.fromAbi(id, abi(opened: true)); - expect(receipt.sender, sender); - expect(receipt.opener, recipient); - expect( - receipt.status(DateTime.fromMillisecondsSinceEpoch(199999)), - 'Acknowledged', - ); - expect( - receipt.status(DateTime.fromMillisecondsSinceEpoch(200000)), - 'Acknowledged · access expired', - ); - }); - test('rejects malformed or nonexistent receipts', () { - for (final value in [ - '0x', - '0x${'0' * 448}', - '${abi()}00', - abi().replaceFirst('0000', 'ffff'), - ]) { - expect(() => MonadReceipt.fromAbi(id, value), throwsFormatException); - } - }); - test('RPC verifies testnet and bytecode before reading receipt', () async { - final methods = []; - final client = MockClient((request) async { - final call = jsonDecode(request.body) as Map; - methods.add(call['method'] as String); - final result = switch (call['method']) { - 'eth_chainId' => '0x279f', - 'eth_getCode' => '0x6000', - 'eth_call' => abi(opened: true), - _ => throw StateError('Unexpected RPC call'), - }; - if (call['method'] == 'eth_call') { - expect(call['params'][0], { - 'to': contract, - 'data': '0x72a41fdd${id.substring(2)}', - }); - } - return http.Response( - jsonEncode({'jsonrpc': '2.0', 'id': 1, 'result': result}), - 200, - ); - }); - final repository = MonadRpcRepository( - client: client, - contractAddress: contract, - ); - addTearDown(repository.dispose); - expect((await repository.receiptOf(id)).acknowledged, isTrue); - expect(methods, ['eth_chainId', 'eth_getCode', 'eth_call']); - }); - test('wrong chain, missing bytecode and RPC errors fail closed', () async { - for (final mode in ['wrong-chain', 'no-code', 'error']) { - final client = MockClient((request) async { - final method = jsonDecode(request.body)['method']; - return http.Response( - jsonEncode( - mode == 'error' - ? { - 'id': 1, - 'error': {'message': 'revert'}, - } - : { - 'id': 1, - 'result': method == 'eth_chainId' - ? (mode == 'wrong-chain' ? '0x8f' : '0x279f') - : '0x', - }, - ), - 200, - ); - }); - final repository = MonadRpcRepository( - client: client, - contractAddress: contract, - ); - addTearDown(repository.dispose); - await expectLater(repository.receiptOf(id), throwsStateError); - } - }); - test('unconfigured contract makes no network calls', () async { - final repository = MonadRpcRepository( - client: MockClient( - (_) async => throw StateError('Unexpected network call'), - ), - ); - addTearDown(repository.dispose); - expect(repository.isConfigured, isFalse); - await expectLater(repository.receiptOf(id), throwsStateError); - }); -} diff --git a/app/test/widget/monad_screen_test.dart b/app/test/widget/monad_screen_test.dart deleted file mode 100644 index 94f2cf9..0000000 --- a/app/test/widget/monad_screen_test.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:no_sus/features/monad/presentation/monad_screen.dart'; -import 'package:no_sus/features/monad/presentation/monad_providers.dart'; - -void main() { - testWidgets('Monad remains visibly unavailable without threshold evidence', ( - tester, - ) async { - tester.view.physicalSize = const Size(390, 1500); - tester.view.devicePixelRatio = 1; - addTearDown(tester.view.reset); - await tester.pumpWidget( - const ProviderScope(child: MaterialApp(home: MonadScreen())), - ); - expect(monadThresholdVerified, isFalse); - expect( - find.text('Encrypted Monad sharing is not available yet'), - findsOneWidget, - ); - final send = tester.widget( - find.widgetWithText(FilledButton, 'Send with a Monad receipt'), - ); - expect(send.onPressed, isNull); - expect(tester.takeException(), isNull); - }); -} diff --git a/app/web/account-deletion.html b/app/web/account-deletion.html index 7f1899e..a0eb700 100644 --- a/app/web/account-deletion.html +++ b/app/web/account-deletion.html @@ -30,7 +30,7 @@

Delete in the app (immediate)

This permanently deletes your profile, group memberships, uploaded files and their storage objects, your avatar, and your authentication record. Groups where you were the only admin are removed or ownership is transferred. This cannot be undone.

Request deletion by email

-

If you can't access the app, email shubhamsahu9372580326@gmail.com from the address on your account with the subject "NO SUS account deletion request". Deletion is completed within 30 days.

+

If you can't access the app, email shubhamsahu@nosus.foo from the address on your account with the subject "NO SUS account deletion request". Deletion is completed within 30 days.

What is retained

Tamper-evident group audit entries reference actor IDs; after deletion these no longer resolve to any identity. Feedback you submitted is kept in anonymized form (the link to your account is severed). App usage events (see the privacy policy) are kept with your account ID removed, so they are no longer linked to your account.

diff --git a/app/web/privacy.html b/app/web/privacy.html index af540c0..951ba70 100644 --- a/app/web/privacy.html +++ b/app/web/privacy.html @@ -51,7 +51,7 @@

5. Data deletion

You can delete your account at any time from Profile → Danger Zone → Delete User Account. This permanently removes your profile, group memberships, uploaded files, and auth record. App usage events are not deleted: your account ID is removed from them, detaching them from your account, and the rest of each event is kept. See account deletion for details.

6. Contact

-

Questions or requests: shubhamsahu9372580326@gmail.com

+

Questions or requests: shubhamsahu@nosus.foo

7. Terms of Service

Please also review our Terms of Service, which govern your use of NO SUS.

diff --git a/app/web/terms.html b/app/web/terms.html index 823283d..b0c7db5 100644 --- a/app/web/terms.html +++ b/app/web/terms.html @@ -64,6 +64,6 @@

11. Entire Agreement

These terms, together with our Privacy Policy, constitute the entire agreement between you and NO SUS regarding the use of the service and supersede all prior agreements.

12. Contact

-

Questions or disputes regarding these terms: shubhamsahu9372580326@gmail.com

+

Questions or disputes regarding these terms: shubhamsahu@nosus.foo

diff --git a/assets/readme/battle.svg b/assets/readme/battle.svg deleted file mode 100644 index 36a0715..0000000 --- a/assets/readme/battle.svg +++ /dev/null @@ -1,58 +0,0 @@ - -Battle text: A wild LEAK appeared! Canary used FINGERPRINT! It's super effective! It was Priya's copy, number 03. - - - - - - - - - - - - - - - diff --git a/assets/readme/btn-judge.svg b/assets/readme/btn-judge.svg deleted file mode 100644 index 57640b3..0000000 --- a/assets/readme/btn-judge.svg +++ /dev/null @@ -1,11 +0,0 @@ - -Judge checklist - - - - - - diff --git a/assets/readme/btn-play.svg b/assets/readme/btn-play.svg deleted file mode 100644 index e4592cc..0000000 --- a/assets/readme/btn-play.svg +++ /dev/null @@ -1,12 +0,0 @@ - -Play live - - - - - - diff --git a/assets/readme/game-over.svg b/assets/readme/game-over.svg deleted file mode 100644 index f91b6da..0000000 --- a/assets/readme/game-over.svg +++ /dev/null @@ -1,11 +0,0 @@ - -Game over? Play again at the live app. - - - - - diff --git a/assets/readme/say-hello.svg b/assets/readme/say-hello.svg deleted file mode 100644 index 60a9435..0000000 --- a/assets/readme/say-hello.svg +++ /dev/null @@ -1,30 +0,0 @@ - -Prof. Canary: Share one link. Every reader gets a secretly different copy. If it leaks, I tell you whose copy it was. - - - - - - - - - diff --git a/assets/readme/story.svg b/assets/readme/story.svg deleted file mode 100644 index 29bc3bd..0000000 --- a/assets/readme/story.svg +++ /dev/null @@ -1,60 +0,0 @@ - -Animation: the sender seals a note on Solana, five readers each receive a different copy, Priya's copy leaks, NO SUS scans it and the canary sings: copy 03 is Priya's. - - - - - - - - - - diff --git a/contracts/AGENTS.md b/contracts/AGENTS.md deleted file mode 100644 index e2a3525..0000000 --- a/contracts/AGENTS.md +++ /dev/null @@ -1,7 +0,0 @@ -# Contract scope - -Read `README.md` and the root `AGENTS.md` before editing. Preserve a one-open-only record, named -recipient enforcement, and expiry enforcement. Add a test for any contract behavior change. - -No payable flows, owner controls, key commitments, salts, plaintext, filenames, or public key-proof -functions belong here. A wallet acknowledgement is not proof that a human read content. diff --git a/contracts/README.md b/contracts/README.md deleted file mode 100644 index 82aae27..0000000 --- a/contracts/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Smart contracts - -`NoSusMonadDrops` is a deliberately small Monad-testnet receipt contract. It stores only encrypted -ciphertext digests, public wallet addresses, expiry, and acknowledgement state. - -## Public contract - -- `seal(id, ciphertextDigest, recipient, expiresAt)` creates a drop. -- `acknowledgeOpen(id)` records the one eligible opening wallet. -- `canDecrypt(id, account)` is the threshold-custody policy predicate. -- `receiptOf(id)` returns public receipt state. - -The contract does not accept payments, keys, salts, plaintext, filenames, or key proofs. - -## Commands - -```sh -npm install -npm run test -npm run compile -``` - -Set `MONAD_RPC_URL` and `DEPLOYER_PRIVATE_KEY` only in a local ignored `.env`. A testnet deploy also -requires an explicit named-target approval and `CONFIRM_MONAD_DEPLOY=1`. The script refuses to -broadcast without that flag. diff --git a/contracts/contracts/NoSusCanary.sol b/contracts/contracts/NoSusCanary.sol deleted file mode 100644 index 6d93c79..0000000 --- a/contracts/contracts/NoSusCanary.sol +++ /dev/null @@ -1,107 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -/// @title NoSusCanary -/// @notice Public, append-only log for NO SUS Canary notes. -/// The chain never receives note text, keys, reader names, fingerprints or -/// codewords. It stores only: -/// * per note: one hash that commits to every copy, the copy count, expiry; -/// * per opened copy: a salted reader tag and the time it was opened. -/// Only allow-listed NO SUS relayers can write, so nobody can fill a note's -/// copies with junk. The owner (deployer) manages the relayer list. -contract NoSusCanary { - struct Note { - uint64 sealedAt; - uint64 expiresAt; - uint16 copyCount; - uint16 openedCount; - bytes32 copiesHash; - } - - struct Copy { - bytes32 readerTag; - uint64 openedAt; - } - - address public immutable owner; - mapping(address => bool) public isRelayer; - mapping(bytes32 => Note) private notes; - mapping(bytes32 => mapping(uint16 => Copy)) private copies; - - event RelayerSet(address indexed relayer, bool allowed); - event NoteSealed(bytes32 indexed noteId, uint16 copyCount, bytes32 copiesHash, uint64 expiresAt); - event CopyOpened(bytes32 indexed noteId, uint16 indexed copyIndex, bytes32 readerTag, uint64 openedAt); - - error NotOwner(); - error NotRelayer(); - error NoteExists(); - error NoteMissing(); - error InvalidNote(); - error InvalidCopy(); - error CopyTaken(); - error NoteExpired(); - - modifier onlyRelayer() { - if (!isRelayer[msg.sender]) revert NotRelayer(); - _; - } - - constructor() { - owner = msg.sender; - isRelayer[msg.sender] = true; - emit RelayerSet(msg.sender, true); - } - - function setRelayer(address relayer, bool allowed) external { - if (msg.sender != owner) revert NotOwner(); - isRelayer[relayer] = allowed; - emit RelayerSet(relayer, allowed); - } - - /// Commits to every copy of a note before any reader can open one. - function sealNote(bytes32 noteId, uint16 copyCount, bytes32 copiesHash, uint64 expiresAt) - external - onlyRelayer - { - if (notes[noteId].sealedAt != 0) revert NoteExists(); - if ( - noteId == bytes32(0) || copyCount == 0 || copiesHash == bytes32(0) - || (expiresAt != 0 && expiresAt <= block.timestamp) - ) revert InvalidNote(); - - notes[noteId] = Note({ - sealedAt: uint64(block.timestamp), - expiresAt: expiresAt, - copyCount: copyCount, - openedCount: 0, - copiesHash: copiesHash - }); - emit NoteSealed(noteId, copyCount, copiesHash, expiresAt); - } - - /// Records, once, which (salted, anonymous) reader received a copy. - function openCopy(bytes32 noteId, uint16 copyIndex, bytes32 readerTag) external onlyRelayer { - Note storage note = notes[noteId]; - if (note.sealedAt == 0) revert NoteMissing(); - if (note.expiresAt != 0 && block.timestamp >= note.expiresAt) revert NoteExpired(); - if (copyIndex >= note.copyCount || readerTag == bytes32(0)) revert InvalidCopy(); - - Copy storage entry = copies[noteId][copyIndex]; - if (entry.openedAt != 0) revert CopyTaken(); - entry.readerTag = readerTag; - entry.openedAt = uint64(block.timestamp); - note.openedCount += 1; - emit CopyOpened(noteId, copyIndex, readerTag, uint64(block.timestamp)); - } - - function noteOf(bytes32 noteId) external view returns (Note memory) { - Note memory note = notes[noteId]; - if (note.sealedAt == 0) revert NoteMissing(); - return note; - } - - /// Returns zero values for a copy nobody has opened yet. - function copyOf(bytes32 noteId, uint16 copyIndex) external view returns (Copy memory) { - return copies[noteId][copyIndex]; - } -} diff --git a/contracts/contracts/NoSusMonadDrops.sol b/contracts/contracts/NoSusMonadDrops.sol deleted file mode 100644 index dafd05d..0000000 --- a/contracts/contracts/NoSusMonadDrops.sol +++ /dev/null @@ -1,93 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -/// @title NoSusMonadDrops -/// @notice A Monad-testnet receipt for an encrypted drop. The contract never receives content, -/// encryption keys, salts, filenames, or private storage locations. -contract NoSusMonadDrops { - struct Drop { - address sender; - address recipient; - address opener; - bytes32 ciphertextDigest; - uint64 sealedAt; - uint64 openedAt; - uint64 expiresAt; - } - - mapping(bytes32 id => Drop) private drops; - - error DropAlreadyExists(); - error DropDoesNotExist(); - error DropAlreadyOpened(); - error DropExpired(); - error InvalidCiphertextDigest(); - error InvalidExpiry(); - error RecipientOnly(); - - event Sealed( - bytes32 indexed id, - address indexed sender, - address indexed recipient, - bytes32 ciphertextDigest, - uint64 expiresAt - ); - event OpenAcknowledged( - bytes32 indexed id, - address indexed opener, - uint64 openedAt - ); - - function seal( - bytes32 id, - bytes32 ciphertextDigest, - address recipient, - uint64 expiresAt - ) external { - if (drops[id].sender != address(0)) revert DropAlreadyExists(); - if (ciphertextDigest == bytes32(0)) revert InvalidCiphertextDigest(); - if (expiresAt != 0 && expiresAt <= block.timestamp) revert InvalidExpiry(); - - uint64 sealedAt = uint64(block.timestamp); - drops[id] = Drop({ - sender: msg.sender, - recipient: recipient, - opener: address(0), - ciphertextDigest: ciphertextDigest, - sealedAt: sealedAt, - openedAt: 0, - expiresAt: expiresAt - }); - - emit Sealed(id, msg.sender, recipient, ciphertextDigest, expiresAt); - } - - function acknowledgeOpen(bytes32 id) external { - Drop storage drop = drops[id]; - if (drop.sender == address(0)) revert DropDoesNotExist(); - if (drop.opener != address(0)) revert DropAlreadyOpened(); - if (drop.expiresAt != 0 && block.timestamp >= drop.expiresAt) revert DropExpired(); - if (drop.recipient != address(0) && drop.recipient != msg.sender) { - revert RecipientOnly(); - } - - uint64 openedAt = uint64(block.timestamp); - drop.opener = msg.sender; - drop.openedAt = openedAt; - - emit OpenAcknowledged(id, msg.sender, openedAt); - } - - function canDecrypt(bytes32 id, address account) external view returns (bool) { - Drop memory drop = drops[id]; - if (account == address(0) || drop.sender == address(0) || drop.opener != account) return false; - if (drop.expiresAt != 0 && block.timestamp >= drop.expiresAt) return false; - return true; - } - - function receiptOf(bytes32 id) external view returns (Drop memory) { - Drop memory drop = drops[id]; - if (drop.sender == address(0)) revert DropDoesNotExist(); - return drop; - } -} diff --git a/contracts/hardhat.config.ts b/contracts/hardhat.config.ts deleted file mode 100644 index fcdb8cf..0000000 --- a/contracts/hardhat.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { HardhatUserConfig } from "hardhat/config"; -import hardhatToolboxViem from "@nomicfoundation/hardhat-toolbox-viem"; - -const monadRpcUrl = process.env.MONAD_RPC_URL ?? "https://testnet-rpc.monad.xyz"; -const deployerPrivateKey = process.env.DEPLOYER_PRIVATE_KEY; - -const config: HardhatUserConfig = { - plugins: [hardhatToolboxViem], - solidity: { - version: "0.8.24", - }, - networks: { - monadTestnet: { - type: "http", - chainType: "generic", - url: monadRpcUrl, - chainId: 10143, - accounts: deployerPrivateKey ? [deployerPrivateKey] : [], - }, - }, -}; - -export default config; diff --git a/contracts/package-lock.json b/contracts/package-lock.json deleted file mode 100644 index 1e7bd58..0000000 --- a/contracts/package-lock.json +++ /dev/null @@ -1,3278 +0,0 @@ -{ - "name": "@nosus-monad/contracts", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "@nosus-monad/contracts", - "version": "0.1.0", - "devDependencies": { - "@nomicfoundation/hardhat-toolbox-viem": "5.0.7", - "@types/node": "24.10.1", - "hardhat": "3.16.0", - "typescript": "7.0.2" - } - }, - "node_modules/@actions/core": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-3.0.1.tgz", - "integrity": "sha512-a6d/Nwahm9fliVGRhdhofo40HjHQasUPusmc7vBfyky+7Z+P2A1J68zyFVaNcEclc/Se+eO595oAr5nwEIoIUA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@actions/exec": "^3.0.0", - "@actions/http-client": "^4.0.0" - } - }, - "node_modules/@actions/exec": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-3.0.0.tgz", - "integrity": "sha512-6xH/puSoNBXb72VPlZVm7vQ+svQpFyA96qdDBvhB8eNZOE8LtPf9L4oAsfzK/crCL8YZ+19fKYVnM63Sl+Xzlw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@actions/io": "^3.0.2" - } - }, - "node_modules/@actions/http-client": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-4.0.1.tgz", - "integrity": "sha512-+Nvd1ImaOZBSoPbsUtEhv+1z99H12xzncCkz0a3RuehINE81FZSe2QTj3uvAPTcJX/SCzUQHQ0D1GrPMbrPitg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "tunnel": "^0.0.6", - "undici": "^6.23.0" - } - }, - "node_modules/@actions/io": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@actions/io/-/io-3.0.2.tgz", - "integrity": "sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@adraffy/ens-normalize": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.1.tgz", - "integrity": "sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@cto.af/wtf8": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@cto.af/wtf8/-/wtf8-0.0.5.tgz", - "integrity": "sha512-LfUFi+Vv4eDzj+XAtR89e3wwjXA/NZjUSwU5NhwbBrLecxPaBYFy3exCuc1j+D4UZeOVdqlsl8G7LmOt18V0tg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=20" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", - "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", - "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", - "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", - "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", - "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", - "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", - "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", - "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", - "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", - "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", - "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", - "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", - "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", - "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", - "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", - "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", - "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", - "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", - "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", - "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", - "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", - "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", - "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", - "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", - "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", - "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@ethersproject/abi": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", - "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", - "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0" - } - }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", - "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0" - } - }, - "node_modules/@ethersproject/address": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", - "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/rlp": "^5.8.0" - } - }, - "node_modules/@ethersproject/base64": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", - "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.8.0" - } - }, - "node_modules/@ethersproject/bignumber": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", - "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/@ethersproject/bytes": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", - "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/constants": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", - "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bignumber": "^5.8.0" - } - }, - "node_modules/@ethersproject/hash": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", - "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "node_modules/@ethersproject/keccak256": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", - "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@ethersproject/logger": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", - "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true - }, - "node_modules/@ethersproject/networks": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", - "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/properties": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", - "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/rlp": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", - "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/signing-key": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", - "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "bn.js": "^5.2.1", - "elliptic": "6.6.1", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/strings": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", - "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/transactions": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", - "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0" - } - }, - "node_modules/@ethersproject/web": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", - "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "node_modules/@jest/diff-sequences": { - "version": "30.5.0", - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.5.0.tgz", - "integrity": "sha512-OsqBjHXCn8cadasoAZBP6nWYvMsRhpMzGXTpxJ5aO04NlbdhIz+FVe3q49l0AwVhsz/cEmIpBes6gAFl1/dWQg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/get-type": { - "version": "30.5.0", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.5.0.tgz", - "integrity": "sha512-9/2VUPitAjmBzbvDvqrxmvB7BzWsBW0WmkkojX1ODuxX1NLGxx9gfaZpHB0z8DtJ9uhGNmZG/VXBhf8uO0OV8Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/react-is-18": { - "name": "react-is", - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@jest/react-is-19": { - "name": "react-is", - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.3.0.tgz", - "integrity": "sha512-UpMYezM4v5/18F28aC66AEsjXIgE02kyEMH6yLdgLXu/UTfa1Ntwck/nNLrbqJsEXW7gPb0coNO9FQse9WTovA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@jest/schemas": { - "version": "30.5.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.5.0.tgz", - "integrity": "sha512-/hunigyNpc4RCjC0VaW3f5RCUZVM2+WQ65qP7z083Gmvac7or2LI50XVNOtE4YPgBpV0yxYiAgorAPGniCoJmg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@noble/ciphers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.2.1.tgz", - "integrity": "sha512-rONPWMC7PeExE077uLE4oqWrZ1IvAfz3oH9LibVAcVCopJiA9R62uavnbEzdkVmJYI6M6Zgkbeb07+tWjlq2XA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.4.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/curves/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz", - "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@nomicfoundation/edr": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.19.0.tgz", - "integrity": "sha512-wzuyAylm4XWIahFjy1pFDQfHny4Xsx73T98d8KJAkGG/Rpgp0M36rqS4lzjbGQ1tXDrWEBG0WRr0v1jrQhQ0xg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 22" - }, - "optionalDependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.19.0", - "@nomicfoundation/edr-darwin-x64": "0.19.0", - "@nomicfoundation/edr-linux-arm64-gnu": "0.19.0", - "@nomicfoundation/edr-linux-arm64-musl": "0.19.0", - "@nomicfoundation/edr-linux-x64-gnu": "0.19.0", - "@nomicfoundation/edr-linux-x64-musl": "0.19.0", - "@nomicfoundation/edr-win32-x64-msvc": "0.19.0" - } - }, - "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.19.0.tgz", - "integrity": "sha512-Yo2MkZoM85zkasUPJDj8l8QezPdrMzqQUJhp78TUQDq8FQXhdJTZ39k3Jax5OQ3hqjMhMkrGbctn9w9h6mEusg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 22" - } - }, - "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.19.0.tgz", - "integrity": "sha512-RC7RVX1iATg9SlJTnKD57A8jRBIBiUKmAdi8maBN4zhmK5Z7aAeiwdQX6VjPOum3c2Mdpp2Q7JfooJxxF6bCvw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 22" - } - }, - "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.19.0.tgz", - "integrity": "sha512-vhEKPUomGwM0Lsjpwd5q/Jc6yE2hpspJBCRYFkCghzCmwgZHtoYn/2nd1nOLsTt7jqMlvAKJSaLCrhz1HCTCTA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 22" - } - }, - "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.19.0.tgz", - "integrity": "sha512-mlkpVUolkSpMIriZyiJeTbgx/m4Ngm9lQtah2BG92H+dgtwMIMze6Q6OQfZG6oi6wMrhDgu8WEyAy3XgIwlcRg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 22" - } - }, - "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.19.0.tgz", - "integrity": "sha512-d0Z+WVbX5mm6s9ozc5TXrCRjQykdN81tGI+eaM4hQcD/S5VSY9rwKuCXyLJ/GkgeI5S8HEHsyVdXEsDJznPyhA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 22" - } - }, - "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.19.0.tgz", - "integrity": "sha512-UIrlNqYj9lbUXpBy++WwHeC0xZqyFw9TXy06/8+0PLffI7Si4kiTKfXqdITGQhP6Vf/JuJ8y+jos8oy6bL8jFQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 22" - } - }, - "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.19.0.tgz", - "integrity": "sha512-pIyEJBiS8l09Yndz+aE/JmkD39FCqtyiRO+wlx6tX426o4290acRfJ0r7GwTBmqqZD5G4pLOOB0uLIMRyDrY+g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 22" - } - }, - "node_modules/@nomicfoundation/hardhat-errors": { - "version": "3.0.21", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-errors/-/hardhat-errors-3.0.21.tgz", - "integrity": "sha512-jXgqgxmI1D7vYcWRQnb6HsRDssxE87a4xJ48FQAdkZUPclB0aVISx6IoVG1Kttx2jJ7tNuo9GasJxpOv7stqyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nomicfoundation/hardhat-utils": "^4.1.5" - } - }, - "node_modules/@nomicfoundation/hardhat-ignition": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-3.1.8.tgz", - "integrity": "sha512-zVsR1SA1gqjd3SF3C+BljttSEMOaIbSIEvHgFhXF/A1IgeecJYD/MqGcvGAW4s51r5ZGQnUSl9t/5VQKvuExlw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@nomicfoundation/hardhat-errors": "^3.0.16", - "@nomicfoundation/hardhat-utils": "^4.1.4", - "@nomicfoundation/ignition-core": "^3.1.8", - "@nomicfoundation/ignition-ui": "^3.1.2", - "json5": "^2.2.3", - "prompts": "^2.4.2" - }, - "peerDependencies": { - "@nomicfoundation/hardhat-verify": "^3.0.0", - "hardhat": "^3.8.0" - } - }, - "node_modules/@nomicfoundation/hardhat-ignition-viem": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition-viem/-/hardhat-ignition-viem-3.1.6.tgz", - "integrity": "sha512-ggjHftjDNLQPnHBMEtDcTafYJfTzqTMlorKlAWj0HunzwiDhC5p7ox2MuEGmZHqt2oVjrnPF5E+Dp3G0RlYRgg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@nomicfoundation/hardhat-errors": "^3.0.15" - }, - "peerDependencies": { - "@nomicfoundation/hardhat-ignition": "^3.1.2", - "@nomicfoundation/hardhat-verify": "^3.0.0", - "@nomicfoundation/hardhat-viem": "^3.0.4", - "@nomicfoundation/ignition-core": "^3.0.7", - "hardhat": "^3.8.0", - "viem": "^2.47.6" - } - }, - "node_modules/@nomicfoundation/hardhat-keystore": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-keystore/-/hardhat-keystore-3.0.13.tgz", - "integrity": "sha512-e4RdtlGBSHhgwv66tEyayrF/G5a2DVT70Jv3AGocUCpDtnxSfNDQez4Pmr7fmjNUhn0TSK6mOwtJ+Yjr1IEwrg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/ciphers": "1.2.1", - "@noble/hashes": "1.7.1", - "@nomicfoundation/hardhat-errors": "^3.0.15", - "@nomicfoundation/hardhat-utils": "^4.1.3", - "@nomicfoundation/hardhat-zod-utils": "^3.0.5", - "zod": "^3.23.8" - }, - "peerDependencies": { - "hardhat": "^3.13.0" - } - }, - "node_modules/@nomicfoundation/hardhat-network-helpers": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-3.0.11.tgz", - "integrity": "sha512-3/xuORejAOGbfqBmIen+OCHu9ExK9O8pjE11ILU9NcN37zy3GDbyNCKV9keK1gSjWWVb0okAlAR/yvewfEE4TA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@nomicfoundation/hardhat-errors": "^3.0.16", - "@nomicfoundation/hardhat-utils": "^4.1.4" - }, - "peerDependencies": { - "hardhat": "^3.8.0" - } - }, - "node_modules/@nomicfoundation/hardhat-node-test-reporter": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-node-test-reporter/-/hardhat-node-test-reporter-3.1.1.tgz", - "integrity": "sha512-dGWMfDYM2gg7leFA2w3RMKW3TzIXJm0+8VLOLxCbROQ9bJTzI76nwrPNmVNAeH49Q2cU3WCdgw7YXAp7lcoYRA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@actions/core": "^3.0.1", - "jest-diff": "^30.4.1" - } - }, - "node_modules/@nomicfoundation/hardhat-node-test-runner": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-node-test-runner/-/hardhat-node-test-runner-3.1.0.tgz", - "integrity": "sha512-afuTNxslf1H6tkXApf1r4Is12dyxsew1AscutGvQG+maPTDuk/BuTQ2a9idXBULZA3/6TGfbEEQvki5FxaONWQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@nomicfoundation/hardhat-errors": "^3.0.15", - "@nomicfoundation/hardhat-node-test-reporter": "^3.1.0", - "@nomicfoundation/hardhat-utils": "^4.1.2", - "@nomicfoundation/hardhat-zod-utils": "^3.0.5", - "tsx": "^4.23.1", - "zod": "^3.23.8" - }, - "peerDependencies": { - "hardhat": "^3.12.0" - } - }, - "node_modules/@nomicfoundation/hardhat-toolbox-viem": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox-viem/-/hardhat-toolbox-viem-5.0.7.tgz", - "integrity": "sha512-aHF77tTYmBIbuxY99KKBPx4cLWdcQvvar1PpzWJyrDgC+P6rA7Edi1GpvvPcwO/HdfZXuACQ74zSS2PnmJu3mA==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@nomicfoundation/hardhat-ignition": "^3.0.7", - "@nomicfoundation/hardhat-ignition-viem": "^3.0.7", - "@nomicfoundation/hardhat-keystore": "^3.0.0", - "@nomicfoundation/hardhat-network-helpers": "^3.0.0", - "@nomicfoundation/hardhat-node-test-runner": "^3.0.0", - "@nomicfoundation/hardhat-verify": "^3.0.0", - "@nomicfoundation/hardhat-viem": "^3.0.4", - "@nomicfoundation/hardhat-viem-assertions": "^3.0.5", - "@nomicfoundation/ignition-core": "^3.0.7", - "hardhat": "^3.8.0", - "viem": "^2.47.6" - } - }, - "node_modules/@nomicfoundation/hardhat-utils": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-utils/-/hardhat-utils-4.1.9.tgz", - "integrity": "sha512-vUyHQ2H1VfknTUxO3Vat7z0y9WkDUF69pLrrLZN2K1/+TKJN+TVzEMeXW/2GXJzIhm2uc2qZXOYwQUh+SU9PbQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@streamparser/json-node": "^0.0.22", - "env-paths": "^4.0.0", - "ethereum-cryptography": "^2.2.1", - "fast-equals": "^6.0.0", - "json-stream-stringify": "^3.1.7", - "rfdc": "^1.3.1", - "undici": "^6.28.0" - } - }, - "node_modules/@nomicfoundation/hardhat-vendored": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-vendored/-/hardhat-vendored-3.0.4.tgz", - "integrity": "sha512-RO8Otj1FvRvxJmXzkxh1vTwK/+cqSVPYLqY6RrWkmzHEEcxnAwAFsBYdW7xyTEyW/pVbSSNd2gs3aoGdGZaoNA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nomicfoundation/hardhat-verify": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-3.1.0.tgz", - "integrity": "sha512-qGaaUr7deSSGnpZP7nZg7jQyaft0QPUzfbGhdO46BygAR9lUHHLppuuWnUpdqwV3d1IMSo8pFSEpVlt/ZtyQvQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/abi": "^5.8.0", - "@nomicfoundation/hardhat-errors": "^3.0.16", - "@nomicfoundation/hardhat-utils": "^4.1.4", - "@nomicfoundation/hardhat-zod-utils": "^3.0.5", - "cbor2": "^2.0.0", - "zod": "^3.23.8" - }, - "peerDependencies": { - "hardhat": "^3.12.0" - } - }, - "node_modules/@nomicfoundation/hardhat-viem": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-viem/-/hardhat-viem-3.0.9.tgz", - "integrity": "sha512-GtQ7l55C70Jj80yrZGdW7Kah0vPmEje29G/xVfcxchVxRRFdj1XyFZFn+7e53b11qhHMWDB787pVN+I8YZae3w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@nomicfoundation/hardhat-errors": "^3.0.15", - "@nomicfoundation/hardhat-utils": "^4.1.2" - }, - "peerDependencies": { - "hardhat": "^3.8.0", - "viem": "^2.47.6" - } - }, - "node_modules/@nomicfoundation/hardhat-viem-assertions": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-viem-assertions/-/hardhat-viem-assertions-3.1.2.tgz", - "integrity": "sha512-vMdyBnvgAD/2uZVzDwWc4ynGekxEQx/1LJ3gIXmsJtAPWENolfBXs3fHCxnA48he7lldyEsymZaNya8MZBLYwA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@nomicfoundation/hardhat-errors": "^3.0.16", - "@nomicfoundation/hardhat-utils": "^4.1.4" - }, - "peerDependencies": { - "@nomicfoundation/hardhat-viem": "^3.0.4", - "hardhat": "^3.8.0", - "viem": "^2.47.6" - } - }, - "node_modules/@nomicfoundation/hardhat-zod-utils": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-zod-utils/-/hardhat-zod-utils-3.0.6.tgz", - "integrity": "sha512-DraBttTle+tRi24wkEfTYUrsX/Cdp74ySXcc4MUzMQPBQNUTFx5YyTH7qFhXQdz3V171iqLAQpOAhNcEqwmq9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nomicfoundation/hardhat-errors": "^3.0.13", - "@nomicfoundation/hardhat-utils": "^4.1.2" - }, - "peerDependencies": { - "zod": "^3.23.8" - } - }, - "node_modules/@nomicfoundation/ignition-core": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-core/-/ignition-core-3.1.9.tgz", - "integrity": "sha512-HpAUqg3wh1FnpQMfLc/K10UJFTcyABLcPiZmNk5Rc5Znx1FzMOLPUvyMO/Vl3Ta21u8INQJ2VhmJeCiXpRzgRw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/address": "5.8.0", - "@nomicfoundation/hardhat-errors": "^3.0.16", - "@nomicfoundation/hardhat-utils": "^4.1.4", - "@nomicfoundation/solidity-analyzer": "^0.1.1", - "cbor2": "^2.0.0", - "ethers": "^6.14.0", - "immer": "11.1.15", - "lodash-es": "4.18.1", - "ndjson": "2.0.0" - } - }, - "node_modules/@nomicfoundation/ignition-ui": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-ui/-/ignition-ui-3.1.2.tgz", - "integrity": "sha512-OoS5eQi9WBeiYI6EXurhqrpr6syRVhnaUzdx5fyK/1syKGq9BsjWWHXTNru0qk5ZFQ9f/KMTZotcDZD4eAdCpg==", - "dev": true, - "peer": true - }, - "node_modules/@nomicfoundation/solidity-analyzer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", - "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - }, - "optionalDependencies": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", - "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", - "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", - "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", - "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", - "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", - "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", - "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", - "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/curves": "~1.4.0", - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip39": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", - "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip39/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@sentry/core": { - "version": "9.47.1", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.47.1.tgz", - "integrity": "sha512-KX62+qIt4xgy8eHKHiikfhz2p5fOciXd0Cl+dNzhgPFq8klq4MGMNaf148GB3M/vBqP4nw/eFvRMAayFCgdRQw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.34.52", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.52.tgz", - "integrity": "sha512-XiMQh7qqVlxZzcVD+kkGMNGMzcTrDMLWI7S4x7z1MkCkbDPrekpZXEUK0eZqZFMuHQg2a2DZOcDIh9o5v3Gonw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@streamparser/json": { - "version": "0.0.22", - "resolved": "https://registry.npmjs.org/@streamparser/json/-/json-0.0.22.tgz", - "integrity": "sha512-b6gTSBjJ8G8SuO3Gbbj+zXbVx8NSs1EbpbMKpzGLWMdkR+98McH9bEjSz3+0mPJf68c5nxa3CrJHp5EQNXM6zQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@streamparser/json-node": { - "version": "0.0.22", - "resolved": "https://registry.npmjs.org/@streamparser/json-node/-/json-node-0.0.22.tgz", - "integrity": "sha512-sJT2ptNRwqB1lIsQrQlCoWk5rF4tif9wDh+7yluAGijJamAhrHGYpFB/Zg3hJeceoZypi74ftXk8DHzwYpbZSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@streamparser/json": "^0.0.22" - } - }, - "node_modules/@types/node": { - "version": "24.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", - "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "node_modules/@typescript/typescript-aix-ppc64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz", - "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-darwin-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz", - "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-darwin-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz", - "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-freebsd-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz", - "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-freebsd-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz", - "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-arm": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz", - "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz", - "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-loong64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz", - "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-mips64el": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz", - "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-ppc64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz", - "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-riscv64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz", - "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-s390x": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz", - "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz", - "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-netbsd-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz", - "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-netbsd-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz", - "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-openbsd-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz", - "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-openbsd-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz", - "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-sunos-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz", - "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-win32-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz", - "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-win32-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz", - "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/abitype": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.2.3.tgz", - "integrity": "sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg==", - "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/wevm" - }, - "peerDependencies": { - "typescript": ">=5.0.4", - "zod": "^3.22.0 || ^4.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, - "node_modules/adm-zip": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.6.1.tgz", - "integrity": "sha512-Xwrja8nx9e5o2N1my4DsKCeKpdrnACyr1wtbPxBDgGzKzKyE9kRtBFA8mWldI+RVlD7CBZNWY/wQ2+ydwOR6kQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0" - } - }, - "node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/bn.js": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.5.tgz", - "integrity": "sha512-Vq886eXykuP5E6HcKSSStP3bJgrE6In5WKxVUvJ8XGpWWYs2xZHWqUwzCtGgEtBcxyd57KBFDPFoUfNzdaHCNg==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/cbor2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cbor2/-/cbor2-2.3.0.tgz", - "integrity": "sha512-76WB3hq8BoaGkMkBVJ27fW5LJU+qqDLEpgRNCG/SYKhODWXpVPOTD4UcUto3IEzYLA52nsvbhb0wabhHDn3qXg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@cto.af/wtf8": "0.0.5" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chokidar": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", - "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", - "dev": true, - "license": "MIT", - "dependencies": { - "readdirp": "^5.0.0" - }, - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.5", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", - "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/env-paths": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-4.0.0.tgz", - "integrity": "sha512-pxP8eL2SwwaTRi/KHYwLYXinDs7gL3jxFcBYmEdYfZmZXbaVDvdppd0XBU8qVz03rDfKZMXg1omHCbsJjZrMsw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-safe-filename": "^0.1.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/esbuild": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", - "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.28.2", - "@esbuild/android-arm": "0.28.2", - "@esbuild/android-arm64": "0.28.2", - "@esbuild/android-x64": "0.28.2", - "@esbuild/darwin-arm64": "0.28.2", - "@esbuild/darwin-x64": "0.28.2", - "@esbuild/freebsd-arm64": "0.28.2", - "@esbuild/freebsd-x64": "0.28.2", - "@esbuild/linux-arm": "0.28.2", - "@esbuild/linux-arm64": "0.28.2", - "@esbuild/linux-ia32": "0.28.2", - "@esbuild/linux-loong64": "0.28.2", - "@esbuild/linux-mips64el": "0.28.2", - "@esbuild/linux-ppc64": "0.28.2", - "@esbuild/linux-riscv64": "0.28.2", - "@esbuild/linux-s390x": "0.28.2", - "@esbuild/linux-x64": "0.28.2", - "@esbuild/netbsd-arm64": "0.28.2", - "@esbuild/netbsd-x64": "0.28.2", - "@esbuild/openbsd-arm64": "0.28.2", - "@esbuild/openbsd-x64": "0.28.2", - "@esbuild/openharmony-arm64": "0.28.2", - "@esbuild/sunos-x64": "0.28.2", - "@esbuild/win32-arm64": "0.28.2", - "@esbuild/win32-ia32": "0.28.2", - "@esbuild/win32-x64": "0.28.2" - } - }, - "node_modules/ethereum-cryptography": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", - "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" - } - }, - "node_modules/ethereum-cryptography/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ethers": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.17.0.tgz", - "integrity": "sha512-BpyrpIPJ3ydEVow8zGaz1DuPS7YU8DcWxuBnY9a0UA/lvAPwrMr+EPXsfrul628SRaekPNeIM4UFh/91GWZang==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@adraffy/ens-normalize": "1.11.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "22.7.5", - "aes-js": "4.0.0-beta.5", - "tslib": "2.7.0", - "ws": "8.21.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/ethers/node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/hashes": "1.3.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ethers/node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ethers/node_modules/@types/node": { - "version": "22.7.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", - "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/ethers/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/fast-equals": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-6.0.3.tgz", - "integrity": "sha512-IECu4C0fFZFoUC2cA2rDaNUuVIfWIZMwh3tY+ng924vOuD9OaUFFrcIrVwCKbV7TJDkGmrHfhwZ7R0AnHfVhyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/hardhat": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-3.16.0.tgz", - "integrity": "sha512-LWFFR3rYl8AIhwpYVjK2L5y0Z0CqdQFQ8AZWe8gqf1t7KGH+E/EguoIX7rcB4KfyKoWK6ooj+7Jgba4vlQ1feQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nomicfoundation/edr": "0.19.0", - "@nomicfoundation/hardhat-errors": "^3.0.17", - "@nomicfoundation/hardhat-utils": "^4.1.6", - "@nomicfoundation/hardhat-vendored": "^3.0.4", - "@nomicfoundation/hardhat-zod-utils": "^3.0.5", - "@nomicfoundation/solidity-analyzer": "^0.1.1", - "@sentry/core": "^9.4.0", - "adm-zip": "^0.6.0", - "chokidar": "^5.0.0", - "enquirer": "^2.3.0", - "ethereum-cryptography": "^2.2.1", - "micro-eth-signer": "^0.14.0", - "p-map": "^7.0.6", - "resolve.exports": "^2.0.3", - "semver": "^7.8.5", - "tsx": "^4.23.1", - "ws": "^8.21.1", - "zod": "^3.23.8" - }, - "bin": { - "hardhat": "dist/src/cli.js" - } - }, - "node_modules/hardhat/node_modules/ws": { - "version": "8.21.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", - "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/immer": { - "version": "11.1.15", - "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.15.tgz", - "integrity": "sha512-VrNANlmnWQnh5COXIIOQXM9oOJw7naGKlBT74ZOOR6lpVXc3gFEu9FJLDFcpCJ2j+NWr8TIwtWD//T6ZX6TKiQ==", - "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/is-safe-filename": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-safe-filename/-/is-safe-filename-0.1.1.tgz", - "integrity": "sha512-4SrR7AdnY11LHfDKTZY1u6Ga3RuxZdl3YKWWShO5iyuG5h8QS4GD2tOb04peBJ5I7pXbR+CGBNEhTcwK+FzN3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isows": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.7.tgz", - "integrity": "sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "peer": true, - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/jest-diff": { - "version": "30.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.5.1.tgz", - "integrity": "sha512-e3cNNMpv8Kh20MjjphTXs+3Vz7DQyLM1nft7KJhnh46atFhjVJRa+0Hq0beywuwsACtMQUBihQkFl8zxb7gt1Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/diff-sequences": "30.5.0", - "@jest/get-type": "30.5.0", - "chalk": "^4.1.2", - "pretty-format": "30.5.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/json-stream-stringify": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.7.tgz", - "integrity": "sha512-F4MWetLtY42YMaAKw5cV4e47zMD5aOT+tjjQWjX18ACtdkQ5Y/vrcfbcQ107Rh+MXjOCIx4KhW0wPmOvG8iQ5w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=7.10.1" - } - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/lodash-es": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", - "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/micro-eth-signer": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz", - "integrity": "sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/curves": "~1.8.1", - "@noble/hashes": "~1.7.1", - "micro-packed": "~0.7.2" - } - }, - "node_modules/micro-eth-signer/node_modules/@noble/curves": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", - "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.7.2" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/micro-eth-signer/node_modules/@noble/hashes": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", - "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/micro-packed": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz", - "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@scure/base": "~1.2.5" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/micro-packed/node_modules/@scure/base": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", - "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ndjson": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-2.0.0.tgz", - "integrity": "sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "json-stringify-safe": "^5.0.1", - "minimist": "^1.2.5", - "readable-stream": "^3.6.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "ndjson": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ox": { - "version": "0.14.44", - "resolved": "https://registry.npmjs.org/ox/-/ox-0.14.44.tgz", - "integrity": "sha512-O54qXXHEk4ySamMSyBpI0AeBegS5frxU6+LA6Jb9Sf6kMOxcTNaxYmwZfpOu22DIQsdKfgQxHq8EsAGaoBQScA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@adraffy/ens-normalize": "^1.11.0", - "@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", - "eventemitter3": "5.0.1" - }, - "peerDependencies": { - "typescript": ">=5.4.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/ox/node_modules/@noble/ciphers": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", - "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ox/node_modules/@noble/curves": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", - "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/hashes": "1.8.0" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ox/node_modules/@noble/hashes": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ox/node_modules/@scure/base": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", - "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", - "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ox/node_modules/@scure/bip32": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", - "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/curves": "~1.9.0", - "@noble/hashes": "~1.8.0", - "@scure/base": "~1.2.5" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ox/node_modules/@scure/bip39": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", - "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/hashes": "~1.8.0", - "@scure/base": "~1.2.5" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/p-map": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.8.tgz", - "integrity": "sha512-MitaVsCuCFIvOLLPIU7NnfrZvS9H9h7kwMUkDo+T2pEISaJD48IV9S8iIdXB7PsvvdxyYcsSTTrr90XKsbulNw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-format": { - "version": "30.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.5.1.tgz", - "integrity": "sha512-byhRAPguVKMQIj4kjJwJ5lAskVhfuiSdiYl/aLTWpgkGEmic2jYhJh1yE9ih8Ox44Xg9ccCT11/S6QrzSJuNrg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/react-is-18": "npm:react-is@^18.3.1", - "@jest/react-is-19": "npm:react-is@^19.2.5", - "@jest/schemas": "30.5.0", - "ansi-styles": "^5.2.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", - "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true - }, - "node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "dev": true, - "license": "0BSD", - "peer": true - }, - "node_modules/tsx": { - "version": "4.23.13", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.13.tgz", - "integrity": "sha512-BL5MGkRln6aDYhb0xbQlEAGw743BaZYWdbWtdJOBriYJboKgUUYCadFp2/FpBBZquBC/ezNBn7wMMPx7FDZUDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "~0.28.0" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/typescript": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz", - "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc" - }, - "engines": { - "node": ">=16.20.0" - }, - "optionalDependencies": { - "@typescript/typescript-aix-ppc64": "7.0.2", - "@typescript/typescript-darwin-arm64": "7.0.2", - "@typescript/typescript-darwin-x64": "7.0.2", - "@typescript/typescript-freebsd-arm64": "7.0.2", - "@typescript/typescript-freebsd-x64": "7.0.2", - "@typescript/typescript-linux-arm": "7.0.2", - "@typescript/typescript-linux-arm64": "7.0.2", - "@typescript/typescript-linux-loong64": "7.0.2", - "@typescript/typescript-linux-mips64el": "7.0.2", - "@typescript/typescript-linux-ppc64": "7.0.2", - "@typescript/typescript-linux-riscv64": "7.0.2", - "@typescript/typescript-linux-s390x": "7.0.2", - "@typescript/typescript-linux-x64": "7.0.2", - "@typescript/typescript-netbsd-arm64": "7.0.2", - "@typescript/typescript-netbsd-x64": "7.0.2", - "@typescript/typescript-openbsd-arm64": "7.0.2", - "@typescript/typescript-openbsd-x64": "7.0.2", - "@typescript/typescript-sunos-x64": "7.0.2", - "@typescript/typescript-win32-arm64": "7.0.2", - "@typescript/typescript-win32-x64": "7.0.2" - } - }, - "node_modules/undici": { - "version": "6.28.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.1.tgz", - "integrity": "sha512-zWpdTVD54H48CIybL0rWQ3ukpb9d23wM7eH5RtfdmeP70cWHNjtfo7P4vZX+5CoDcO53J4Pu5uXp7lNfjc6DRA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, - "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "dev": true, - "license": "MIT" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/viem": { - "version": "2.56.5", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.56.5.tgz", - "integrity": "sha512-GuEf/oee0PHgy4D6JIA8u0rY1g+sM5nF+p7HyMHO3vjlHC5G/ljfrgnUOnrES9m5Ny/P3RwWCHjDuN2T6HUWzQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "peer": true, - "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", - "isows": "1.0.7", - "ox": "0.14.44", - "ws": "8.21.0" - }, - "peerDependencies": { - "typescript": ">=5.0.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/viem/node_modules/@noble/curves": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", - "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/hashes": "1.8.0" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/viem/node_modules/@noble/hashes": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/viem/node_modules/@scure/base": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", - "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", - "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/viem/node_modules/@scure/bip32": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", - "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/curves": "~1.9.0", - "@noble/hashes": "~1.8.0", - "@scure/base": "~1.2.5" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/viem/node_modules/@scure/bip39": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", - "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/hashes": "~1.8.0", - "@scure/base": "~1.2.5" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ws": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", - "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} diff --git a/contracts/package.json b/contracts/package.json deleted file mode 100644 index a9ebe75..0000000 --- a/contracts/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "@nosus-monad/contracts", - "private": true, - "version": "0.1.0", - "type": "module", - "scripts": { - "compile": "hardhat compile", - "test": "hardhat test", - "deploy:monad": "hardhat run scripts/deploy.ts --network monadTestnet" - }, - "devDependencies": { - "@nomicfoundation/hardhat-toolbox-viem": "5.0.7", - "@types/node": "24.10.1", - "hardhat": "3.16.0", - "typescript": "7.0.2" - } -} diff --git a/contracts/scripts/canary-relayers.ts b/contracts/scripts/canary-relayers.ts deleted file mode 100644 index c1763db..0000000 --- a/contracts/scripts/canary-relayers.ts +++ /dev/null @@ -1,46 +0,0 @@ -// Creates (once) and funds the relayer keys the `canary` edge function uses, -// and allow-lists them on NoSusCanary. Safe to re-run: it reuses the saved -// keys, only tops up balances below half the target, and skips relayers that -// are already allowed. -// -// Keys are written to contracts/.canary-relayers.local.json (git-ignored). -// They are TESTNET-ONLY keys. Never print them, commit them or reuse them. -import { existsSync, readFileSync, writeFileSync } from "node:fs"; -import { network } from "hardhat"; -import { parseEther } from "viem"; -import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; - -if (process.env.CONFIRM_MONAD_DEPLOY !== "1") { - throw new Error("Refusing to touch Monad Testnet without CONFIRM_MONAD_DEPLOY=1."); -} -const contract = process.env.CANARY_CONTRACT_ADDRESS; -if (!contract || !/^0x[0-9a-fA-F]{40}$/.test(contract)) { - throw new Error("Set CANARY_CONTRACT_ADDRESS to the deployed NoSusCanary address."); -} -const count = Number(process.env.CANARY_RELAYER_COUNT ?? "6"); -const fundEach = parseEther(process.env.CANARY_RELAYER_FUND_MON ?? "1"); -const file = ".canary-relayers.local.json"; - -const keys: `0x${string}`[] = existsSync(file) ? JSON.parse(readFileSync(file, "utf8")) : []; -while (keys.length < count) keys.push(generatePrivateKey()); -writeFileSync(file, JSON.stringify(keys, null, 2)); - -const { viem } = await network.create("monadTestnet"); -const [owner] = await viem.getWalletClients(); -const publicClient = await viem.getPublicClient(); -const canary = await viem.getContractAt("NoSusCanary", contract as `0x${string}`); - -for (const key of keys) { - const relayer = privateKeyToAccount(key).address; - const balance = await publicClient.getBalance({ address: relayer }); - if (balance < fundEach / 2n) { - const hash = await owner.sendTransaction({ to: relayer, value: fundEach }); - await publicClient.waitForTransactionReceipt({ hash }); - } - if (!(await canary.read.isRelayer([relayer]))) { - const hash = await canary.write.setRelayer([relayer, true]); - await publicClient.waitForTransactionReceipt({ hash }); - } - console.log(`relayer ready: ${relayer}`); -} -console.log(`${keys.length} relayers ready. Keys saved in contracts/${file} (git-ignored).`); diff --git a/contracts/scripts/deploy-canary.ts b/contracts/scripts/deploy-canary.ts deleted file mode 100644 index f97fa1e..0000000 --- a/contracts/scripts/deploy-canary.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { network } from "hardhat"; - -if (process.env.CONFIRM_MONAD_DEPLOY !== "1") { - throw new Error( - "Refusing to deploy to Monad Testnet. After an explicit named-target approval, set CONFIRM_MONAD_DEPLOY=1.", - ); -} - -const connection = await network.create("monadTestnet"); -const { viem } = connection; -const canary = await viem.deployContract("NoSusCanary"); - -console.log(`NoSusCanary deployed at: ${canary.address}`); -console.log("Next: set CANARY_CONTRACT_ADDRESS to this value and run scripts/canary-relayers.ts."); diff --git a/contracts/scripts/deploy.ts b/contracts/scripts/deploy.ts deleted file mode 100644 index 784e024..0000000 --- a/contracts/scripts/deploy.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { network } from "hardhat"; - -if (process.env.CONFIRM_MONAD_DEPLOY !== "1") { - throw new Error( - "Refusing to deploy to Monad Testnet. After an explicit named-target approval, set CONFIRM_MONAD_DEPLOY=1.", - ); -} - -const connection = await network.create("monadTestnet"); -const { viem } = connection; -const drops = await viem.deployContract("NoSusMonadDrops"); - -console.log(`NoSusMonadDrops deployed at: ${drops.address}`); -console.log("Record this address in web/.env.local as NEXT_PUBLIC_DROPS_CONTRACT_ADDRESS."); diff --git a/contracts/test/NoSusCanary.test.ts b/contracts/test/NoSusCanary.test.ts deleted file mode 100644 index 9724b91..0000000 --- a/contracts/test/NoSusCanary.test.ts +++ /dev/null @@ -1,111 +0,0 @@ -import assert from "node:assert/strict"; -import { describe, it } from "node:test"; -import { network } from "hardhat"; - -const noteId = `0x${"11".repeat(32)}` as const; -const otherNoteId = `0x${"22".repeat(32)}` as const; -const copiesHash = "0x1d9f0d2a2e10e3580481170dc38f3dce11399ee6d26c6621dbb3dc401b3c7adf"; -const readerTag = "0xaabbccddeeff00112233445566778899aabbccddeeff00112233445566778899"; -const zero32 = `0x${"0".repeat(64)}` as const; - -async function expectCustomError(action: Promise, name: string) { - await assert.rejects(action, (error: unknown) => - error instanceof Error && error.message.includes(name), - ); -} - -describe("NoSusCanary", () => { - async function deploy() { - const { viem } = await network.getOrCreate(); - const [owner, relayer, stranger] = await viem.getWalletClients(); - const canary = await viem.deployContract("NoSusCanary"); - const publicClient = await viem.getPublicClient(); - const testClient = await viem.getTestClient(); - return { viem, owner, relayer, stranger, canary, publicClient, testClient }; - } - - it("makes the deployer the owner and first relayer", async () => { - const { canary, owner } = await deploy(); - assert.equal((await canary.read.owner()).toLowerCase(), owner.account.address.toLowerCase()); - assert.equal(await canary.read.isRelayer([owner.account.address]), true); - }); - - it("lets only the owner manage relayers", async () => { - const { canary, relayer, stranger } = await deploy(); - await expectCustomError( - canary.write.setRelayer([stranger.account.address, true], { account: stranger.account }), - "NotOwner", - ); - await canary.write.setRelayer([relayer.account.address, true]); - assert.equal(await canary.read.isRelayer([relayer.account.address]), true); - await canary.write.setRelayer([relayer.account.address, false]); - assert.equal(await canary.read.isRelayer([relayer.account.address]), false); - }); - - it("seals a note once and rejects bad input and strangers", async () => { - const { canary, stranger, publicClient } = await deploy(); - const now = BigInt((await publicClient.getBlock()).timestamp); - - await expectCustomError( - canary.write.sealNote([noteId, 20, copiesHash, 0n], { account: stranger.account }), - "NotRelayer", - ); - const hash = await canary.write.sealNote([noteId, 20, copiesHash, now + 3600n]); - const receipt = await publicClient.waitForTransactionReceipt({ hash }); - console.log(` sealNote gasUsed=${receipt.gasUsed}`); - - const note = await canary.read.noteOf([noteId]); - assert.equal(note.copyCount, 20); - assert.equal(note.openedCount, 0); - assert.equal(note.copiesHash, copiesHash); - assert.equal(note.expiresAt, now + 3600n); - - await expectCustomError(canary.write.sealNote([noteId, 20, copiesHash, 0n]), "NoteExists"); - await expectCustomError(canary.write.sealNote([zero32, 20, copiesHash, 0n]), "InvalidNote"); - await expectCustomError(canary.write.sealNote([otherNoteId, 0, copiesHash, 0n]), "InvalidNote"); - await expectCustomError(canary.write.sealNote([otherNoteId, 20, zero32, 0n]), "InvalidNote"); - await expectCustomError(canary.write.sealNote([otherNoteId, 20, copiesHash, now - 1n]), "InvalidNote"); - await expectCustomError(canary.read.noteOf([otherNoteId]), "NoteMissing"); - - const events = await canary.getEvents.NoteSealed({ noteId }, { fromBlock: 0n }); - assert.equal(events.length, 1); - }); - - it("opens each copy exactly once and counts opens", async () => { - const { canary, stranger, publicClient } = await deploy(); - await canary.write.sealNote([noteId, 3, copiesHash, 0n]); - - await expectCustomError( - canary.write.openCopy([noteId, 0, readerTag], { account: stranger.account }), - "NotRelayer", - ); - const hash = await canary.write.openCopy([noteId, 0, readerTag]); - const receipt = await publicClient.waitForTransactionReceipt({ hash }); - console.log(` openCopy gasUsed=${receipt.gasUsed}`); - - const copy = await canary.read.copyOf([noteId, 0]); - assert.equal(copy.readerTag, readerTag); - assert.ok(copy.openedAt > 0n); - assert.equal((await canary.read.noteOf([noteId])).openedCount, 1); - - await expectCustomError(canary.write.openCopy([noteId, 0, readerTag]), "CopyTaken"); - await expectCustomError(canary.write.openCopy([noteId, 3, readerTag]), "InvalidCopy"); - await expectCustomError(canary.write.openCopy([noteId, 1, zero32]), "InvalidCopy"); - await expectCustomError(canary.write.openCopy([otherNoteId, 0, readerTag]), "NoteMissing"); - - const unopened = await canary.read.copyOf([noteId, 2]); - assert.equal(unopened.openedAt, 0n); - const events = await canary.getEvents.CopyOpened({ noteId }, { fromBlock: 0n }); - assert.equal(events.length, 1); - assert.equal(events[0].args.copyIndex, 0); - }); - - it("refuses opens after expiry", async () => { - const { canary, publicClient, testClient } = await deploy(); - const now = BigInt((await publicClient.getBlock()).timestamp); - await canary.write.sealNote([noteId, 5, copiesHash, now + 60n]); - await testClient.increaseTime({ seconds: 120 }); - await testClient.mine({ blocks: 1 }); - await expectCustomError(canary.write.openCopy([noteId, 0, readerTag]), "NoteExpired"); - }); -}); diff --git a/contracts/test/NoSusMonadDrops.test.ts b/contracts/test/NoSusMonadDrops.test.ts deleted file mode 100644 index 22482ee..0000000 --- a/contracts/test/NoSusMonadDrops.test.ts +++ /dev/null @@ -1,128 +0,0 @@ -import assert from "node:assert/strict"; -import { describe, it } from "node:test"; -import { network } from "hardhat"; - -const id = "0x4f4e4f5355535f4d4f4e41445f44524f505f3030303030303030303030303030"; -const digest = "0x1d9f0d2a2e10e3580481170dc38f3dce11399ee6d26c6621dbb3dc401b3c7adf"; -const noRecipient = "0x0000000000000000000000000000000000000000"; - -async function expectCustomError(action: Promise, name: string) { - await assert.rejects(action, (error: unknown) => - error instanceof Error && error.message.includes(name), - ); -} - -describe("NoSusMonadDrops", () => { - async function deployDropContract() { - const { viem } = await network.getOrCreate(); - const [sender, recipient, stranger] = await viem.getWalletClients(); - const drops = await viem.deployContract("NoSusMonadDrops"); - return { viem, sender, recipient, stranger, drops }; - } - - it("seals a ciphertext digest and exposes the initial receipt", async () => { - const { drops, sender, viem } = await deployDropContract(); - const publicClient = await viem.getPublicClient(); - const now = BigInt((await publicClient.getBlock()).timestamp); - const expiry = now + 3600n; - - await drops.write.seal([id, digest, noRecipient, expiry]); - - const receipt = await drops.read.receiptOf([id]); - assert.equal(receipt.sender.toLowerCase(), sender.account.address.toLowerCase()); - assert.equal(receipt.ciphertextDigest, digest); - assert.equal(receipt.opener, noRecipient); - assert.equal(await drops.read.canDecrypt([id, noRecipient]), false); - assert.equal(await drops.read.canDecrypt([id, sender.account.address]), false); - const sealedEvents = await drops.getEvents.Sealed({ id }, { fromBlock: 0n }); - assert.equal(sealedEvents.length, 1); - assert.equal(sealedEvents[0].args.sender?.toLowerCase(), sender.account.address.toLowerCase()); - }); - - it("rejects duplicate IDs and zero ciphertext digests", async () => { - const { drops } = await deployDropContract(); - - await drops.write.seal([id, digest, noRecipient, 0n]); - await expectCustomError(drops.write.seal([id, digest, noRecipient, 0n]), "DropAlreadyExists"); - await expectCustomError( - drops.write.seal([`${id.slice(0, -1)}1`, `0x${"0".repeat(64)}`, noRecipient, 0n]), - "InvalidCiphertextDigest", - ); - }); - - it("allows only the named recipient to acknowledge once", async () => { - const { drops, recipient, stranger } = await deployDropContract(); - await drops.write.seal([id, digest, recipient.account.address, 0n]); - assert.equal(await drops.read.canDecrypt([id, recipient.account.address]), false); - - await expectCustomError( - drops.write.acknowledgeOpen([id], { account: stranger.account }), - "RecipientOnly", - ); - - await drops.write.acknowledgeOpen([id], { account: recipient.account }); - assert.equal(await drops.read.canDecrypt([id, recipient.account.address]), true); - assert.equal(await drops.read.canDecrypt([id, stranger.account.address]), false); - const openedEvents = await drops.getEvents.OpenAcknowledged( - { opener: recipient.account.address }, - { fromBlock: 0n }, - ); - assert.equal(openedEvents.length, 1); - assert.equal(openedEvents[0].args.id, id); - await expectCustomError( - drops.write.acknowledgeOpen([id], { account: recipient.account }), - "DropAlreadyOpened", - ); - }); - - it("refuses an expired drop", async () => { - const { drops, sender, viem } = await deployDropContract(); - const publicClient = await viem.getPublicClient(); - const now = BigInt((await publicClient.getBlock()).timestamp); - - await drops.write.seal([id, digest, noRecipient, now + 60n]); - await publicClient.request({ - method: "evm_increaseTime", - params: [61], - }); - await publicClient.request({ method: "evm_mine", params: [] }); - - await expectCustomError(drops.write.acknowledgeOpen([id]), "DropExpired"); - assert.equal(await drops.read.canDecrypt([id, sender.account.address]), false); - }); - - it("stops decryption after expiry even if already acknowledged", async () => { - const { drops, recipient, viem } = await deployDropContract(); - const publicClient = await viem.getPublicClient(); - const now = BigInt((await publicClient.getBlock()).timestamp); - - await drops.write.seal([id, digest, recipient.account.address, now + 60n]); - await drops.write.acknowledgeOpen([id], { account: recipient.account }); - assert.equal(await drops.read.canDecrypt([id, recipient.account.address]), true); - - await publicClient.request({ - method: "evm_increaseTime", - params: [61], - }); - await publicClient.request({ method: "evm_mine", params: [] }); - - assert.equal(await drops.read.canDecrypt([id, recipient.account.address]), false); - }); - - it("treats the exact expiry timestamp as expired", async () => { - const { drops, recipient, viem } = await deployDropContract(); - const publicClient = await viem.getPublicClient(); - const now = BigInt((await publicClient.getBlock()).timestamp); - const expiry = now + 60n; - - await drops.write.seal([id, digest, recipient.account.address, expiry]); - await publicClient.request({ - method: "evm_increaseTime", - params: [60], - }); - await publicClient.request({ method: "evm_mine", params: [] }); - - await expectCustomError(drops.write.acknowledgeOpen([id], { account: recipient.account }), "DropExpired"); - assert.equal(await drops.read.canDecrypt([id, recipient.account.address]), false); - }); -}); diff --git a/contracts/tsconfig.json b/contracts/tsconfig.json deleted file mode 100644 index 27a8578..0000000 --- a/contracts/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "module": "esnext", - "moduleResolution": "bundler", - "strict": true, - "target": "es2022", - "types": ["node"] - } -} diff --git a/docs/AGENT_COLLABORATION.md b/docs/AGENT_COLLABORATION.md deleted file mode 100644 index ecaa45a..0000000 --- a/docs/AGENT_COLLABORATION.md +++ /dev/null @@ -1,35 +0,0 @@ -# Independent-agent collaboration - -Folder layout reduces context; it does not prevent merge conflicts. Treat each -task as a narrow charter, then isolate it in a worktree. - -## Task charter - -Every agent prompt starts with: objective, allowed paths, forbidden paths, -contracts touched, and acceptance checks. One task owns one path area. If a -change crosses contract/web/backend boundaries, write a short decision in -`docs/` first and create a separate integration task. - -## Worktree pattern - -From the parent directory, give every agent a separate branch and folder: - -```powershell -git -C nosus-monad worktree add ..\nosus-monad- -b codex/ -``` - -Do not let two unconnected agents edit the same folder or shared lockfile. -They each make small commits; an integration agent reviews the diffs, resolves -only intentional conflicts, and runs the focused checks. - -## Current ownership boundaries - -| Area | Owner task type | Forbidden to unrelated tasks | -|---|---|---| -| `contracts/` | contract invariant | web/backend changes | -| `web/` | UI or wallet flow | Solidity/migration changes | -| `supabase/` | isolated backend | production NO SUS or client secrets | -| `docs/` + `.cursor/` | operating model | product behavior without owner approval | - -Main is the integration branch. Merge only after the explicit finalization -gate in `AGENTS.md`; deployment needs a named target. diff --git a/docs/CURSOR_HANDOFF.md b/docs/CURSOR_HANDOFF.md deleted file mode 100644 index c40aee3..0000000 --- a/docs/CURSOR_HANDOFF.md +++ /dev/null @@ -1,34 +0,0 @@ -# Cursor handover - -This repository is designed to continue cleanly in Cursor without re-reading the production NO SUS -codebase. - -## Open the right folder - -Open `C:\Users\shubh\_Active_Projects\NO_SUS\nosus-monad` in Cursor, not `no_sus`. -Cursor automatically loads root `AGENTS.md` and the versioned `.cursor/rules/*.mdc` rules. The rules are -kept small and scoped so unrelated contract or web context is not loaded. - -## First Cursor prompt - -```text -Read AGENTS.md, docs/STATUS.md, docs/ARCHITECTURE.md, docs/LIT_MONAD_SPIKE.md, and the local README for the area you will touch. -This is the isolated NO SUS — Monad Experiment repository. Continue only the next blocking milestone: -prove Lit threshold decryption against NoSusMonadDrops on Monad testnet using two wallets. Do not touch -the production NO SUS repository, deploy, apply Supabase migrations, or claim the feature is live until -the documented threshold-gate acceptance tests pass. Keep changes small, update STATUS.md, and end your -response with the exact finalization question in AGENTS.md. -``` - -## How to keep Cursor on track - -1. Start each task with the prompt above plus one concrete file/feature request. -2. Let Cursor read only the named local README and files; do not ask it to scan parent directories. -3. Before a new capability, ask it to update `docs/STATUS.md` with the acceptance criteria first. -4. Review `git diff` before allowing a deployment, migration, or contract funding action. -5. When a task is done, commit it and ask Cursor to record the actual check output in `docs/STATUS.md`. - -## Escalation rules - -Stop and ask for direction if threshold custody cannot bind a Monad wallet to `canDecrypt`, if a design -would put a secret into public calldata, or if a change needs production NO SUS credentials or services. diff --git a/docs/DEMO_RUNBOOK.md b/docs/DEMO_RUNBOOK.md deleted file mode 100644 index 62f2420..0000000 --- a/docs/DEMO_RUNBOOK.md +++ /dev/null @@ -1,34 +0,0 @@ -# Demo runbook - -This is a testnet experiment. Use only harmless, personally owned test notes. -Never use credentials, third-party documents, financial records, employment -material, or sensitive personal data. - -## Before the demo - -1. Confirm `docs/STATUS.md` says Gate T1 is verified. If it is not, demonstrate - the receipt interface only; do not claim a threshold unlock exists. -2. Use a fresh isolated Supabase project and testnet-only environment values. -3. Verify the current wallet, Monad network, contract address, explorer URL, - and the explicit gas limit generated for the write. -4. Open the browser at a local preview. Have the recipient QR/link and a - prepared test wallet ready, but do not show seed phrases or private keys. - -## Live flow - -1. State the promise exactly: an eligible recipient wallet can request - decryption only after its acknowledgement is recorded on Monad Testnet. -2. Seal a harmless note. Show the digest and transaction link, never plaintext - in a recording or logs. -3. Scan the recipient link, connect the named test wallet, and acknowledge. -4. Show the new event in the Receipt Wall and the verifier page. -5. If Gate T1 is verified, show the acknowledged wallet decrypting and the - second wallet failing. If it is not, stop at the receipt and say so. - -## What to say when challenged - -- The receipt proves a wallet action against a committed encrypted drop. -- It does not prove a person read or understood content, prevent screenshots, - identify a person, establish legal admissibility, or independently prove - server-side deletion. -- Costs and timing are live testnet measurements, not fixed promises. diff --git a/docs/DESIGN_SYSTEM.md b/docs/DESIGN_SYSTEM.md deleted file mode 100644 index 1b41825..0000000 --- a/docs/DESIGN_SYSTEM.md +++ /dev/null @@ -1,44 +0,0 @@ -# Design system - -The experiment uses the visual language reviewed from the user-provided NO SUS -Burn ad kit on 2026-09-16. That kit is a visual reference only. Its product -components and deployment assumptions belong to production NO SUS and must not -be copied into this separate experiment. - -## Visual rules - -- Use local Geist and Geist Mono assets from `web/src/app/fonts/`. -- Keep the canvas black (`#080808`), with white type, `#888888` secondary copy, - and thin white dividers. Use the small coral error state only for failure. -- Prefer flat rectangular surfaces, 2px corners, a white filled primary action, - and uppercase mono labels. Do not introduce gradients, glows, neon colors, - oversized shadows, or decorative crypto effects. -- Motion is functional and restrained: status may pulse by opacity; never use - motion to imply that a chain or threshold action succeeded. -- The experimental/testnet and trust-limit messages are product content, not - optional decoration. They must remain visible on every flow. - -## Token layers - -`web/src/app/globals.css` is the single source of truth: - -1. Raw palette tokens (`--black`, `--gray-dark`, `--white`) record values. -2. Semantic tokens (`--surface`, `--text-muted`, `--line`) describe purpose. -3. Component tokens (`--button-primary-bg`) describe reusable UI roles. - -Use an existing semantic token before adding a new value. Create a new raw token -only when a real, repeated need exists; then add its semantic alias. - -## Component expectations - -- Keep forms, receipt rows, and verifier fields as bordered information blocks. -- A status chip communicates system state; success styling is never evidence of - a real unlock unless the verified Lit–Monad gate permits it. -- The lock is a recognisable interface mark, not a security claim. Its unlocked - state is available only to a confirmed, unexpired recipient path. -- Preserve visible keyboard focus and `prefers-reduced-motion` support. - -## Before visual changes - -Read `web/README.md`, inspect only the screen you touch, and use localhost for -visual validation. Update this document if a durable visual rule changes. diff --git a/docs/LIT_MONAD_SPIKE.md b/docs/LIT_MONAD_SPIKE.md deleted file mode 100644 index df925de..0000000 --- a/docs/LIT_MONAD_SPIKE.md +++ /dev/null @@ -1,96 +0,0 @@ -# Gate T1 — Lit × Monad threshold-decrypt spike - -This is the first technical gate. Do not enable `web/src/lib/threshold.ts`, add -a fake fallback, or describe threshold unlock as shipped until every acceptance -test below has a recorded result in `STATUS.md`. - -## Preconditions - -- User explicitly approves a named Monad Testnet deployment target. -- `NoSusMonadDrops` is deployed and its bytecode/constructor-free address is - verified in the Monad explorer. -- Two controlled test wallets and only a harmless personal test note are ready. -- A current, supported Lit SDK is selected from Lit’s official documentation. - Do not silently revive the retired V3/`@lit-protocol/lit-node-client` Datil - packages. The selected packages for this spike are `@lit-protocol/lit-client` - **8.3.1**, `@lit-protocol/networks` **8.4.1**, and `@lit-protocol/auth` **8.2.3**, - targeting the Naga Dev network (`naga-dev`). Datil was sunset on 25 February 2026. - -## Selected condition - -The condition to send Lit is built in `web/src/lib/lit-conditions.ts` (browser) -and `tool/threshold-spike/conditions.mjs` (runner). It is an -`evmContractConditions` entry on chain key `monadTestnet` (Lit ACC schema, -chain ID 10143) that calls `canDecrypt(id, :userAddress)` and requires the -boolean result `true`. - -That chain key is published by Lit. It is **not** yet recorded evidence that -Lit nodes evaluate Monad Testnet state. Run `npm run dry-run` in -`tool/threshold-spike` to print the condition. `npm run live` runs the sender, -recipient, and stranger sequence against a named testnet deployment. It needs -three controlled test-wallet keys, not a Supabase project. Set -`THRESHOLD_SPIKE_CHECK_EXPIRY=1` to include the bounded wait-and-deny expiry test. - -## Condition to prove - -The Lit access-control condition must evaluate the deployed contract’s -`canDecrypt(bytes32 dropId, address wallet) -> bool` against Monad Testnet. - -The fixed first argument is the exact drop ID. The second argument must be the -address authenticated by the browser wallet. The condition’s result must equal -`true`. Do not use an off-chain API, a shared signed response, a server-owned -wallet, a key commitment, or a key/salt in transaction calldata. - -Lit’s custom-chain name/configuration is intentionally not assumed here. Record -the supported chain identifier, SDK package version, configuration, and source -link only after the live Lit client successfully reads Monad Testnet state. - -## Required evidence - -For one recorded ciphertext and drop ID, capture the exact command/browser -result (redacting no plaintext is needed because use a harmless note): - -1. Before `acknowledgeOpen`, recipient wallet A fails to decrypt. -2. Wallet A acknowledges and its transaction confirms. Wallet A can decrypt. -3. Wallet B attempts the same ciphertext and fails to decrypt. -4. A second `acknowledgeOpen` attempt reverts and does not change the opener. -5. A short-expiry drop lets no wallet decrypt after expiry. -6. Tampering with stored ciphertext fails integrity/decryption; no plaintext is - logged as part of the failure. - -## Implementation handoff - -When all acceptance tests are clean: - -1. Add the current supported Lit SDK with exact versions and a lockfile. -2. Implement browser-only encrypt/decrypt. Keep capacity credentials and any - server credentials out of `NEXT_PUBLIC_*`; do not turn the server into a - decryption oracle. -3. Persist only ciphertext, Lit metadata, digest, and receipt fields through a - narrow authenticated server route after it validates the sealed transaction. -4. Replace the guarded UI state with the real flow and add focused browser - tests for the six cases above. -5. Update `STATUS.md`, `ARCHITECTURE.md`, and `web/README.md` with the exact - evidence and remaining limitations. - -## Runner environment - -The runner reads values only from the process environment. Never paste a test -wallet private key into a command history, repository file, or `NEXT_PUBLIC_*` -variable. - -```text -THRESHOLD_SPIKE_RUN=1 -DROPS_CONTRACT_ADDRESS=0x... -SENDER_PRIVATE_KEY=0x... -RECIPIENT_PRIVATE_KEY=0x... -STRANGER_PRIVATE_KEY=0x... -SPIKE_DROP_ID=0x... # fresh random 32-byte value -SPIKE_EXPIRY_SECONDS=300 -THRESHOLD_SPIKE_CHECK_EXPIRY=1 # optional, makes the runner wait until expiry -``` - -The runner creates a harmless in-memory probe, prints no plaintext, and leaves -the product gate unchanged regardless of its result. Record the transaction -hashes, SDK versions, and all observed outcomes in `STATUS.md` before enabling -the browser flow. diff --git a/docs/TECHNICAL_README.md b/docs/TECHNICAL_README.md deleted file mode 100644 index 1d398b4..0000000 --- a/docs/TECHNICAL_README.md +++ /dev/null @@ -1,124 +0,0 @@ -# NO SUS Canary - -> **Every reader gets their own copy. If it leaks, see whose copy it was.** - -[![Monad Testnet](https://img.shields.io/badge/Monad-Testnet%20(Chain%2010143)-836EF9?style=flat&logo=ethereum)](https://testnet.monadscan.com) -[![License: MIT](https://img.shields.io/badge/License-MIT-black.svg)](../LICENSE) -[![Flutter 3.44](https://img.shields.io/badge/Flutter-3.44.4-02569B?logo=flutter)](https://flutter.dev) -[![Supabase](https://img.shields.io/badge/Backend-Supabase%20Edge%20Functions-3ECF8E?logo=supabase)](https://supabase.com) - ---- - -## ⚡ Quick Links (Say all 4 out loud during pitch) - -| Item | Link / Value | -|---|---| -| **1. Live Public App** | **[http://shubham-sahu.me/nosus-canary/](http://shubham-sahu.me/nosus-canary/#/canary)** *(HTTPS mirror: [https://https-shubhamsahu.github.io/nosus-canary/#/canary](https://https-shubhamsahu.github.io/nosus-canary/#/canary))* | -| **2. Public GitHub Repo** | **[https://github.com/https-shubhamsahu/nosus-canary](https://github.com/https-shubhamsahu/nosus-canary)** | -| **3. Smart Contract** | [`0xb1a1858866122c84cf97861ca815fb070e010e68`](https://testnet.monadscan.com/address/0xb1a1858866122c84cf97861ca815fb070e010e68) on Monad Testnet (Chain ID `10143`) · [Verified on Sourcify](https://sourcify.dev/server/repo-ui/10143/0xb1a1858866122c84cf97861ca815fb070e010e68) | -| **4. Live Deployment** | Standalone Flutter Web + Android APK (`foo.nosus.canary`) | - ---- - -## 🎯 What is NO SUS Canary? - -When sensitive information is shared with a group—board members, investors, legal teams, journalists, or beta testers—leaks happen. Traditional watermarks are easily cropped or removed. - -**NO SUS Canary** introduces invisible, cryptographic, and linguistic canary-trapping powered by **Monad**: -1. **Sender creates a note**: The sender inputs a sensitive message. NO SUS uses natural synonym/word-twin permutation (e.g. `don't`/`do not`, `organize`/`organise`, `five`/`5`) and invisible zero-width unicode steganography to generate up to 100 uniquely fingerprinted variations. -2. **Commitment on Monad**: Before distribution, the sender's client hashes all encrypted variations and permanently commits the root hash to Monad testnet via `sealNote()`. The server never receives plaintext or keys. -3. **Recipient receives a personal copy**: When reader "Priya" opens the link, the relayer records an anonymous token on Monad testnet via `openCopy()`. Priya sees her clear text with cryptographic proof. -4. **Instant Leak Detection**: If a screenshot or copied text leaks on Twitter/WhatsApp, the sender pastes the leak (or takes a photo with the Android app's OCR). The sender's device runs a local Bayesian fingerprint match against the original plan and announces: - > **🐤 The canary sang. Copy #7 — Priya.** - ---- - -## 🔬 Why Monad? - -Canary trapping in high-stakes environments requires: -- **Parallel High Throughput**: When a company drops an all-hands memo to 1,000 employees at 9:00 AM, hundreds of concurrent claims hit the blockchain in seconds. Monad's parallel execution engine prevents nonce bottlenecks and dropped transactions. -- **Sub-Second Finality**: Readers get their verified copy instantly (< 1 second) with live explorer receipts. -- **Micro-Gas Cost**: Each copy recording costs ~0.015 MON (~78,000 gas), making enterprise-grade tamper-evident distribution economically practical. - ---- - -## 📋 Judge & Rubrics Checklist (Monad Blitz Mumbai V4) - -### Basic Points (100 / 100) -- [x] **Public GitHub repo**: [https://github.com/https-shubhamsahu/nosus-canary](https://github.com/https-shubhamsahu/nosus-canary) -- [x] **Proper README**: Complete pitch, live URL, contract address, architecture, and reproducible instructions. -- [x] **Smart contracts deployed on Monad Testnet**: [`0xb1a1858866122c84cf97861ca815fb070e010e68`](https://testnet.monadscan.com/address/0xb1a1858866122c84cf97861ca815fb070e010e68) on Chain ID `10143`. -- [x] **Project publicly hosted**: Live on custom domain `shubham-sahu.me` and GitHub Pages. - -### Advance Points — Project Working (100 / 100) -- [x] **All announced functions working**: Note generation, AES encryption, unique copy distribution, Monad transaction logging, and local leak fingerprint matching. -- [x] **Live transaction on-chain during demo**: Every `sealNote` and `openCopy` records live transactions visible on [Monadscan](https://testnet.monadscan.com). -- [x] **Contract verified on explorer**: Source verified on [Sourcify / Monadscan](https://sourcify.dev/server/repo-ui/10143/0xb1a1858866122c84cf97861ca815fb070e010e68). -- [x] **Someone else can run it from README**: Zero-friction setup instructions below. - -### Advance Points — Build in Public (100 / 100) -- [x] **Posted on socials**: Tagging `@monad_dev` and `@geeky_kartikey`. -- [x] **Demo video**: 30+ second running product video. -- [x] **Creative ad video**: Visual walk-through of the leak detection. - -### Bonus Points -- [x] **Public page on custom domain**: `http://shubham-sahu.me/nosus-canary/` (+15 pts). -- [x] **Pre-Market Fit**: Solves real leak paranoia for crypto DAOs, legal teams, boardrooms, and venture funds. -- [x] **Revenue Model**: Freemium for individuals; tiered B2B subscriptions ($99/mo) for team audits and enterprise canary endpoints. -- [x] **Innovation & Originality**: Combines zero-width Unicode steganography, linguistic token perturbation, client-side AES-256, and Monad parallel state logs. - ---- - -## 🚀 How to Run It Yourself (Reproduce in 3 Minutes) - -### Prerequisites -- [Flutter SDK](https://docs.flutter.dev/get-started/install) 3.44+ -- [Node.js](https://nodejs.org/) 20+ - -### 1. Run the Web App -```bash -# Clone the repository -git clone https://github.com/https-shubhamsahu/nosus-canary.git -cd nosus-canary/app - -# Install Flutter dependencies -flutter pub get - -# Run standalone Canary web app -flutter run -d chrome --dart-define=NOSUS_CANARY_ONLY=true -``` - -### 2. Run Contract Tests -```bash -cd ../contracts - -# Install dependencies -npm install - -# Run contract tests (includes gas benchmarks) -npx hardhat test -# Output: 11 passing (sealNote gasUsed ≈ 73,833, openCopy gasUsed ≈ 78,403) -``` - -### 3. Build Android APK -```bash -cd ../app -flutter build apk --release --target-platform android-arm64 --dart-define=NOSUS_ALLOW_SCREEN_CAPTURE=true -``` - ---- - -## 🔒 Security & Honesty Boundaries - -- **Whose copy, not who leaked it**: Canary identifies *which specific copy* was leaked. If an attacker steals Priya's unlocked phone, it reveals Priya's copy was compromised. -- **Zero Plaintext on Chain**: Monad receives only `sha256` commitment digests and salted anonymous reader tags. No plaintext, encryption keys, salts, or reader names ever touch the contract. -- **Client-Side Cryptography**: Encryption is AES-256-CBC executed in the sender's browser; the key resides solely in the `#` URL fragment and is never sent to the server. -- **No False Blame**: The matcher is strict; if a leak is too heavily mixed or partial, it names nobody rather than falsely accusing an innocent reader. - ---- - -## 👥 Team & Acknowledgements - -Built for **Monad Blitz Mumbai V4** (19 September 2026). -- **Author**: Shubham Sahu ([@shubhamsahu](https://github.com/https-shubhamsahu)) -- **Live App**: [http://shubham-sahu.me/nosus-canary/](http://shubham-sahu.me/nosus-canary/) diff --git a/docs/canary/NOSUS_CANARY_BUILD_PLAN.md b/docs/canary/NOSUS_CANARY_BUILD_PLAN.md deleted file mode 100644 index 949e9b0..0000000 --- a/docs/canary/NOSUS_CANARY_BUILD_PLAN.md +++ /dev/null @@ -1,589 +0,0 @@ -# NO SUS Canary — build plan for the Flutter app (Android APK + web) - -> **Status (22 Sep 2026): executed and shipped.** The `reference/` sources were merged into -> `app/` and `contracts/` and the folder was removed, so the copy commands below are historical. -> The live code is the source of truth. Verification log: [VERIFICATION.md](VERIFICATION.md). - -Owner decision (19 Sep 2026): the product is called **NO SUS**. The feature is **NO SUS Canary**. -This plan lets any AI agent, including a less capable one, build and ship it without guessing. -Every piece of code it needs is already written, and has been compiled, analyzed and tested on -this exact machine. It is stored in [`reference/`](reference/). Your job is mostly to **copy -files, run commands and check results**. Do not rewrite the reference code. - ---- - -## 0. Read this first (rules for any agent) - -1. **Work top to bottom.** Every step ends with a **DONE WHEN** check. Do not start the next step - until that check passes. After each step, tick it in the Progress log (section 9). -2. **Copy, don't retype.** Take source files from `docs/canary/reference/` with the copy commands - given here. Retyping code from this document is how mistakes happen. -3. **Owner approval gates.** Steps marked **[OWNER APPROVAL]** touch real services (Monad testnet - funds, the Supabase database, secrets, public GitHub). Ask the owner, in plain words, before - running them, and wait for a clear "yes" to that exact step. A "yes" to one step does not cover - the next one. -4. **Never touch production.** The production Supabase project is `rxfnazmusofikwaggntb`: never - use it. The only backend is the experiment project `ffidvfguojalzpclipzi`. The production app - id is `foo.nosus.app`; this build uses `foo.nosus.canary`. -5. **NEVER run `supabase db push`.** The remote migration history holds only one entry, for the - bootstrap. `db push` would try to re-apply ~21 old migrations and break the database. Apply the - one new SQL file with `supabase db query --linked --file …` (Phase 3). -6. **Secrets never go in chat, commits, logs, or `--dart-define`.** Keys stay in git-ignored - files, or in PowerShell variables that are never printed. -7. **Use PowerShell for every `flutter build` and `gh api` command.** Git Bash rewrites arguments - that start with `/`: it turned `--base-href /nosus-canary/` into - `C:/Program Files/Git/nosus-canary/`, and the build failed. If you must use Git Bash, prefix - the command with `MSYS_NO_PATHCONV=1`. -8. **Line endings.** Most files in `app/` use CRLF, and some lines added later use LF. The - reference edit script handles both. If you edit by hand and an exact-text match fails, line - endings are the likely cause. -9. **Stop and ask the owner if** any DONE WHEN check fails twice, if a step needs a production - credential, or if something in this plan contradicts what you see on disk. -10. `nosus-monad/AGENTS.md` asks you to end every response that changed files with its - finalization question. Keep doing that. - -**Flutter SDK:** `C:\Users\shubh\AppData\Local\flutter\bin\flutter.bat` (Flutter 3.44.4, Dart 3.12.2). -This document writes Flutter commands as `FLUTTER `. **At the start of every new PowerShell -session**, run this once so those commands work exactly as written: -```powershell -Set-Alias FLUTTER "C:\Users\shubh\AppData\Local\flutter\bin\flutter.bat" -``` - ---- - -## 1. What we are building - -**One line:** *Every reader gets their own copy. If it leaks, see whose copy it was.* - -### Flows - -| Who | What they do | What happens | -|---|---|---| -| **Sender** (APK or web, no account needed) | Welcome or Workspace → **NO SUS Canary** → **New Canary note** → types the note (or taps **Use the demo note**) → chooses the number of readers (10/20/50/100) and the expiry (1 h/1 day/7 days) → **Create Canary link** | The phone builds N copies that differ only in small word choices (e.g. "don't"/"do not", "organize"/"organise", "five"/"5"), plus an invisible marker. It encrypts each copy with one AES key and uploads **only ciphertext**. The key stays in the link's `#` fragment. Monad testnet records a hash committing to all copies (`sealNote`). The sender gets one link, a QR code and a "See the magic" view. | -| **Reader** (any phone browser, no install) | Opens the link → types their name → **Open my copy** | The server gives this device the next unused copy (the same copy again on refresh). Monad records "copy #i was opened" with an anonymous tag (`openCopy`). The phone decrypts and shows **"Copy 7 of 50 · made for Priya"** plus a proof link. | -| **Sender** | Note dashboard → **Seen by** list (updates every 3 s) → **Check a leak** → paste the leaked text (or, on Android, **Read a screenshot**) | Matching runs **on the sender's device**: "🐤 The canary sang. Copy #7 — Priya", with the open time and a Monad proof link. | - -### Honesty rules (they are already in the UI copy; keep them) -- Canary shows **whose copy** leaked, not **who shared it**. It never claims to block screenshots. -- If two readers compare and mix their copies, the result can point at the wrong copy. The matcher - is deliberately strict and names nobody when no single copy fits. -- The server hands out encrypted copies (it decides which reader gets which copy) and cannot read - them. This is **not** threshold custody (Lit/Gate T1). Canary does not change Gate T1 or - `monadThresholdVerified`. -- Monad testnet receives only hashes and anonymous tags, never text or names. - ---- - -## 2. Verified facts about this machine and repo (checked 19 Sep 2026) - -| Fact | Value / consequence | -|---|---| -| Repo | `C:\Users\shubh\_Active_Projects\NO_SUS\nosus-monad`, branch `codex/flutter-monad-integration`, with uncommitted changes. **`app/` is untracked** (never committed). | -| Flutter app | `nosus-monad/app` (package `no_sus`), Riverpod 3, Supabase, `encrypt` (the same AES used by Burn Notes). Baseline `flutter analyze`: **no issues**. | -| Tools | Node 22.17.0, npm 11.5.2, Supabase CLI 2.105.0 (logged in, `app/supabase` linked to `ffidvfguojalzpclipzi`), Docker 29.6.2, gh 2.95 (logged in as **https-shubhamsahu**), Vercel CLI 50.25.4, Java 17, adb at `C:\Users\shubh\AppData\Local\Android\Sdk\platform-tools\adb.exe` | -| Experiment backend | Live: `burn_notes` and `remote_configs` exist, and the function `create-redemption-code` is deployed. **Remote migration history = only `20260917205606`** (hence rule 5). | -| Monad RPC | `https://testnet-rpc.monad.xyz` **works** (chain 10143, gas price ≈ 102 gwei). `https://rpc.testnet.monad.xyz`, the default in `contracts/hardhat.config.ts`, **does not respond**, so always set `MONAD_RPC_URL`. | -| Explorer | `https://testnet.monadscan.com/tx/` responds. The app uses it. | -| Web hosting | `monad.nosus.foo` is **not live**. Production `app.nosus.foo` is on GitHub Pages. Canary web goes to **GitHub Pages: `https://https-shubhamsahu.github.io/nosus-canary/`**. | -| `web/CNAME` | Contains `monad.nosus.foo` and is copied into `build/web`. It **must be deleted** before publishing to GitHub Pages, or Pages tries to use that dead domain. | -| Android identity | The copied app used production `applicationId "foo.nosus.app"`. This plan changes it to **`foo.nosus.canary`**, which avoids the signature-conflict error "App not installed" and keeps it off the production Play identity. `namespace` stays `foo.nosus.app` because the Kotlin sources live in that package. | -| Screen capture | `MainActivity.onCreate` sets `FLAG_SECURE`, and so does `ScreenshotGuard.initialize()` (screenshots and mirroring show black). A demo build passes `NOSUS_ALLOW_SCREEN_CAPTURE=true`, which calls the existing `disableSecure` channel. | -| APK build time | About 10 minutes for a full release build. Use `--target-platform android-arm64` for a faster, smaller APK. Do not run other heavy jobs at the same time: one attempt died with "Could not start thread DartWorker" while another job was running. | -| Contract gas (measured) | `sealNote` 73,833 and `openCopy` 78,403. The limit used is **150,000**. Monad charges the gas **limit**, so each write costs about **0.0153 MON** at 102 gwei. | -| Fingerprint accuracy (measured, 20–100 copies, 15-slot demo note) | Full copy, marker stripped, OCR-style text: **300/300** correct. 2% character noise: 300/300 correct, **0 wrong names**. Partial excerpts: **0 wrong names** out of 600. Two copies mixed together: 1 wrong name in 600 (20 copies) to 23/600 (100 copies). This is why the UI says "strong hint, not proof" and why at least 10 swappable words are required. | -| New packages (resolve cleanly) | `qr_flutter 4.1.0`, `image_picker 1.2.3` (already a transitive dependency), `google_mlkit_text_recognition 0.17.1` (Android only; kept out of web by a conditional export). | -| Verification of the reference code | In a copy of `app/`: `flutter analyze` **no issues**; full `flutter test` **129 passed, 1 skipped**; `flutter build web --release --base-href /nosus-canary/` **OK**; release APK (arm64) **built, 34.4 MB, package `foo.nosus.canary`**; contract `hardhat test` **5 passing**; edge function `deno check` **OK**. Details: [VERIFICATION.md](VERIFICATION.md). The SQL and the live flow have **not** run yet (they need approvals). | - ---- - -## 3. Architecture - -``` - SENDER DEVICE (APK or web) SUPABASE (ffidvfguojalzpclipzi) MONAD TESTNET - ───────────────────────────── ───────────────────────────────── ───────────── - note text ─► buildCanaryPlan (slots) - ─► N random codewords (secret) - ─► N copies (+ invisible marker) - ─► AES encrypt each (key K) ──POST create──► edge fn `canary` - digests = sha256(salt:i:copy) ├─ insert canary_notes / canary_copies - copiesHash = sha256(all digests) └─ relayer key ── sealNote(noteId32, N, copiesHash, expiry) ──► NoSusCanary - owner record (plan, codewords, key, salt, - ownerSecret) saved ONLY on this device - link = /#/canary/?k= - - READER BROWSER - ────────────── - opens link, types name ──POST open──► edge fn `canary` - ├─ canary_assign_copy(note, sha256(device), name) (same copy on retry) - └─ relayer key ── openCopy(noteId32, i, readerTag) ──► NoSusCanary - ◄── copy i ciphertext + tx hash ── - decrypt with K from fragment → "Copy i+1 of N · made for " - - SENDER DASHBOARD ──POST status (ownerSecret)──► list of opened copies (name, time, tx) - LEAK CHECK: matchCanaryLeak(leak, plan, codewords) runs locally → copy i → name from status -``` - -### IDs and encodings (the contract between the components; do not change) - -| Thing | Format | Made by | -|---|---|---| -| `noteId` | UUID v4, lowercase with dashes | sender app (`Uuid().v4()`) | -| Chain note id | `0x` + sha256(`"nosus-canary:" + noteId`), 32 bytes | app **and** edge function (must match). Known answer: noteId `1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed` → `0xb8168efcc5c17afc454283c0e2237b39f5dc917d39ab0eb0f540f544b9878f2e` | -| Key `k` | 64 lowercase hex characters (AES-256) | sender app. Only ever in the link fragment | -| Per-copy IV | 32 hex characters (16 bytes), stored beside the ciphertext | sender app | -| Ciphertext | base64 from `encrypt` package `Encrypter(AES(key)).encrypt(text, iv:)`, the same setup as Burn Notes | sender app | -| Copy digest | sha256(`"::"`) hex | sender app (the salt never leaves the device) | -| `copies_hash` | `0x` + sha256(concatenation of the digests in index order) | sender app → chain | -| Owner secret | 64 hex characters. The server stores `sha256(ownerSecret)` as `owner_hash` | sender app | -| Device id | UUID v4 per browser or app install (SharedPreferences) | reader app. The server stores sha256(`"device:" + id`) | -| Reader tag (on chain) | `0x` + sha256(`":::"`) | edge function | -| Reader link | `/#/canary/?k=` | sender app | -| Invisible marker | U+2060, then 12 bits as U+200B (0) / U+200C (1), then U+2060. 10 data bits hold copyIndex+1 and 2 check bits hold popcount%4. Inserted after the 1st, 11th, 21st… word | fingerprint engine | - -### Components -- **Contract** `NoSusCanary.sol`: `sealNote`, `openCopy`, `noteOf`, `copyOf`, `setRelayer`. Writes are relayer-only; the owner manages relayers. -- **DB** (`20260919090000_nosus_canary.sql`): tables `canary_notes`, `canary_copies` and `canary_relayer_leases`, and functions `canary_assign_copy`, `canary_lease_relayer` and `canary_release_relayer`. RLS is on with **no policies**, so only the service role can read or write. -- **Edge function** `canary` (one function, actions `create`/`open`/`status`): uses viem to send transactions from a **pool of relayer keys**. Each key is leased for one in-flight transaction, so nonces never collide. -- **Flutter** `lib/features/canary/`: domain (fingerprint engine, link, models), data (crypto, API, store, repository) and presentation (entry card, home, composer, created/QR, note dashboard, leak check, reader), plus `ocr/` (ML Kit on Android, stub on web). - ---- - -## 4. File map - -All sources are in `docs/canary/reference/`, in the same relative layout as their destination. - -| Destination (relative to `nosus-monad/`) | Action | Phase | -|---|---|---| -| `app/lib/features/canary/**` (19 files) | copy | 1 | -| `app/test/unit/canary_fingerprint_test.dart`, `canary_link_test.dart` | copy | 1 | -| `app/lib/main.dart`, `app/lib/core/utils/web_links.dart`, `app/lib/services/screenshot_guard.dart`, `app/lib/features/monad/presentation/experiment_frame.dart`, `app/lib/features/onboarding/presentation/screens/welcome_screen.dart`, `app/lib/features/workspace/presentation/pages/workspace_tab.dart`, `app/web/index.html`, `app/web/manifest.json`, `app/android/app/build.gradle.kts`, `app/android/app/src/main/AndroidManifest.xml`, `app/android/app/proguard-rules.pro` | **edited by script** `reference/tools/canary_edits.js` (never by hand) | 1 | -| `app/pubspec.yaml`, `app/pubspec.lock` | `flutter pub add …` | 1 | -| `contracts/contracts/NoSusCanary.sol`, `contracts/test/NoSusCanary.test.ts`, `contracts/scripts/deploy-canary.ts`, `contracts/scripts/canary-relayers.ts` | copy | 2 | -| `app/supabase/migrations/20260919090000_nosus_canary.sql` | copy | 3 | -| `app/supabase/functions/canary/index.ts` | copy | 4 | -| `app/supabase/config.toml` | append 2 lines | 4 | -| `.gitignore` | append 2 lines | 0 | -| `AGENTS.md`, `app/AGENTS.md`, `docs/STATUS.md` | small documented edits | 0 / 7 | - ---- - -## 5. Phases - -### Phase 0 — Preflight (15 min) - -**0.1 Check location and state** (Git Bash or PowerShell): -```bash -cd /c/Users/shubh/_Active_Projects/NO_SUS/nosus-monad -git status --short | head -20 -git branch --show-current -``` -DONE WHEN: you are in `nosus-monad`, and the branch is `codex/flutter-monad-integration` or `feat/nosus-canary`. - -**0.2 Create the work branch.** `-c` carries the uncommitted work along; nothing is lost: -```bash -git switch -c feat/nosus-canary -``` -DONE WHEN: `git branch --show-current` prints `feat/nosus-canary`. - -**0.3 Ignore rules.** Append these two lines to `nosus-monad/.gitignore`. The first stops the -Supabase CLI temp files (the pooler URL and bootstrap SQL) from being committed. The second keeps -the relayer key file out of git. -``` -app/supabase/.temp/ -*.local.json -``` -DONE WHEN: `git check-ignore -v app/supabase/.temp/project-ref contracts/.canary-relayers.local.json` prints a rule for both paths. (The second file does not exist yet; `check-ignore` still reports the matching rule.) - -**0.4 [OWNER APPROVAL] Baseline commit.** Ask: *"May I commit the current uncommitted work -(including the untracked Flutter `app/`) as a baseline on `feat/nosus-canary`, so the Canary -changes can be reviewed as a clean diff?"* If yes: -```bash -git add -A -git status --short | grep -E "\.env|\.local\.json|supabase/\.temp" && echo "STOP: secret-like file staged" || true -git commit -m "chore: baseline Flutter app before NO SUS Canary" -``` -If the grep prints anything, run `git reset` and stop. DONE WHEN: `git status --short` is empty. - -**0.5 Record the owner decision in `AGENTS.md`.** This lets later agents work on Canary without -being blocked by the older naming and Gate T1 rules. It should already have been done when this plan -was written; check that a section titled `## Current workstream: NO SUS Canary` exists near the -top of `nosus-monad/AGENTS.md`. If it does not, add the section shown in Appendix A. -DONE WHEN: the section exists. - -### Phase 1 — Flutter code (40 min, no approvals needed) - -**1.1 Copy the new Canary files** (Git Bash): -```bash -cd /c/Users/shubh/_Active_Projects/NO_SUS/nosus-monad -cp -r docs/canary/reference/app/lib/features/canary app/lib/features/ -cp docs/canary/reference/app/test/unit/canary_fingerprint_test.dart app/test/unit/ -cp docs/canary/reference/app/test/unit/canary_link_test.dart app/test/unit/ -find app/lib/features/canary -type f | sort -``` -DONE WHEN: the listing shows exactly these 19 files (under `app/lib/features/canary/`): -- `data/`: `canary_api.dart`, `canary_crypto.dart`, `canary_repository.dart`, `canary_store.dart` -- `domain/`: `canary_fingerprint.dart`, `canary_link.dart`, `canary_models.dart` -- `ocr/`: `canary_ocr.dart`, `canary_ocr_mlkit.dart`, `canary_ocr_stub.dart` -- `presentation/`: `canary_composer_screen.dart`, `canary_created_screen.dart`, - `canary_entry_card.dart`, `canary_home_screen.dart`, `canary_leak_check_screen.dart`, - `canary_note_screen.dart`, `canary_providers.dart`, `canary_reader_screen.dart`, `canary_ui.dart` - -**1.2 Apply the edits to existing files with the script. Run it exactly once.** -```bash -cd /c/Users/shubh/_Active_Projects/NO_SUS/nosus-monad/app -node ../docs/canary/reference/tools/canary_edits.js -``` -DONE WHEN: it prints `ALL EDITS APPLIED`. If it prints `ANCHOR NOT FOUND`, the file already -differs from what the script expects. Run `git diff `. If the Canary edit is already -there, the script ran before, so skip this step. Otherwise stop and ask the owner. **Never run the -script twice on the same files.** - -What the script changes (so you can review `git diff`): -- `main.dart`: imports, `extractCanaryToken()`, the standalone reader branch (runs before the - redemption branch), the Android link routing branch, `title: 'NO SUS'`, and the `'/canary'` route. -- `experiment_frame.dart`: banner text → `NO SUS · Monad testnet · use harmless test notes only`. -- `web_links.dart`: `kWebAppOrigin` and `kWebAppBasePath` read `--dart-define`s (`WEB_APP_ORIGIN`, - `WEB_APP_BASE_PATH`) so links minted by the APK point at the deployed web app. -- `screenshot_guard.dart`: with `NOSUS_ALLOW_SCREEN_CAPTURE=true` it calls `disableSecure` and skips - the screenshot popups (for projector mirroring). -- `welcome_screen.dart` and `workspace_tab.dart`: the `MonadEntryCard` is replaced by `CanaryEntryCard`. - (The Monad screen still exists at route `/monad`.) -- `web/index.html` and `web/manifest.json`: names → `NO SUS`. -- `android/app/build.gradle.kts`: `applicationId = "foo.nosus.canary"`. -- `AndroidManifest.xml`: removes the `app.nosus.foo` App Links filter and fixes its comment. -- `proguard-rules.pro`: appends 4 `-dontwarn` rules for ML Kit's optional script recognizers. - Without them, the release APK fails at R8 with "Missing class …ChineseTextRecognizerOptions" - (verified). - -**1.3 Add the packages** (PowerShell): -```powershell -Set-Location C:\Users\shubh\_Active_Projects\NO_SUS\nosus-monad\app -FLUTTER pub add qr_flutter image_picker google_mlkit_text_recognition -``` -DONE WHEN: `pubspec.yaml` lists all three under `dependencies:`. The expected resolved versions are -qr_flutter 4.1.0, image_picker 1.2.3 and google_mlkit_text_recognition 0.17.1. - -**1.4 Check** (PowerShell, in `app`): -```powershell -FLUTTER analyze -FLUTTER test test/unit/canary_fingerprint_test.dart test/unit/canary_link_test.dart test/unit/deep_link_parsing_test.dart test/widget/welcome_screen_test.dart test/widget/monad_screen_test.dart -FLUTTER test -``` -DONE WHEN: analyze prints `No issues found!` and both test commands end with `All tests passed!`. -(The first analyze run takes about 3 minutes.) - -**1.5 [OWNER APPROVAL] Commit:** `git add -A && git commit -m "feat(canary): NO SUS Canary Flutter feature"` - -### Phase 2 — Contract (30 min; deploy and relayers need approval and MON) - -**2.1 Copy and test** (Git Bash): -```bash -cd /c/Users/shubh/_Active_Projects/NO_SUS/nosus-monad -cp docs/canary/reference/contracts/contracts/NoSusCanary.sol contracts/contracts/ -cp docs/canary/reference/contracts/test/NoSusCanary.test.ts contracts/test/ -cp docs/canary/reference/contracts/scripts/deploy-canary.ts contracts/scripts/ -cp docs/canary/reference/contracts/scripts/canary-relayers.ts contracts/scripts/ -cd contracts && npx hardhat test -``` -DONE WHEN: the output shows `11 passing` (6 existing NoSusMonadDrops tests plus 5 NoSusCanary tests) -and prints `sealNote gasUsed≈73833` and `openCopy gasUsed≈78403`. - -**2.2 Owner prepares the deployer wallet (owner does this, not the agent):** -1. Use a **testnet-only** wallet. Get ≥ 10 MON from the Blitz platform (https://blitz.devnads.com, - 50 MON per attendee) or a Monad faucet. -2. Create `nosus-monad/contracts/.env` (git-ignored by the `.env` rule) containing: - ``` - DEPLOYER_PRIVATE_KEY=0x<64 hex> - MONAD_RPC_URL=https://testnet-rpc.monad.xyz - ``` -DONE WHEN: the owner confirms the file exists. The agent must never print it: use -`Test-Path contracts/.env` only. - -**2.3 [OWNER APPROVAL] Deploy** (PowerShell, in `contracts`). The env loader keeps the key out of -command history: -```powershell -Set-Location C:\Users\shubh\_Active_Projects\NO_SUS\nosus-monad\contracts -Get-Content .env | ForEach-Object { if ($_ -match '^\s*([A-Z0-9_]+)\s*=\s*(.+?)\s*$') { Set-Item -Path ("Env:" + $matches[1]) -Value $matches[2] } } -$env:CONFIRM_MONAD_DEPLOY = "1" -npx hardhat run scripts/deploy-canary.ts --network monadTestnet -``` -DONE WHEN: it prints `NoSusCanary deployed at: 0x…`. Save that address as `CANARY_CONTRACT_ADDRESS` -in the Progress log and in `docs/STATUS.md`. Open `https://testnet.monadscan.com/address/
` -to see it. - -**2.4 [OWNER APPROVAL] Relayers.** Relayers are 10 fresh testnet keys, 0.5 MON each: about 5 MON -total, enough for about 320 opens. Same PowerShell session as 2.3: -```powershell -$env:CANARY_CONTRACT_ADDRESS = "0x
" -$env:CANARY_RELAYER_COUNT = "10" -$env:CANARY_RELAYER_FUND_MON = "0.5" -npx hardhat run scripts/canary-relayers.ts --network monadTestnet -``` -DONE WHEN: it prints `relayer ready: 0x…` 10 times and then `10 relayers ready`. The keys are in -`contracts/.canary-relayers.local.json`, which is git-ignored. **Never print or commit it.** It is -safe to re-run: it tops up balances and skips relayers that are already allowed. - -### Phase 3 — Database (10 min; needs approval) - -**3.1 Copy the migration** (Git Bash): -```bash -cd /c/Users/shubh/_Active_Projects/NO_SUS/nosus-monad -cp docs/canary/reference/app/supabase/migrations/20260919090000_nosus_canary.sql app/supabase/migrations/ -``` - -**3.2 [OWNER APPROVAL] Apply it to the experiment project ONLY.** Run from `app` (PowerShell), -and check the project ref first: -```powershell -Set-Location C:\Users\shubh\_Active_Projects\NO_SUS\nosus-monad\app -Get-Content supabase\.temp\project-ref # MUST print ffidvfguojalzpclipzi — otherwise STOP -supabase db query --linked --file supabase/migrations/20260919090000_nosus_canary.sql -``` -DONE WHEN: no error is printed. Then verify: -```powershell -supabase db query --linked "select to_regclass('public.canary_notes') as notes, to_regclass('public.canary_copies') as copies, to_regclass('public.canary_relayer_leases') as leases;" -``` -All three columns must be non-null. Then confirm the public key cannot read the table (Git Bash): -```bash -curl -s "https://ffidvfguojalzpclipzi.supabase.co/rest/v1/canary_copies?select=*&limit=1" \ - -H "apikey: sb_publishable_D_mmlb1jjS9Cl6QCuFwEJw_zPAb6kHS" \ - -H "Authorization: Bearer sb_publishable_D_mmlb1jjS9Cl6QCuFwEJw_zPAb6kHS" -``` -It must return `permission denied` (code 42501) or `[]`, never rows. **Do not** run `supabase db push`. - -### Phase 4 — Edge function (20 min; needs approval) - -**4.1 Copy and configure** (Git Bash): -```bash -cd /c/Users/shubh/_Active_Projects/NO_SUS/nosus-monad -mkdir -p app/supabase/functions/canary -cp docs/canary/reference/app/supabase/functions/canary/index.ts app/supabase/functions/canary/index.ts -printf '\n[functions.canary]\nverify_jwt = false\n' >> app/supabase/config.toml -tail -3 app/supabase/config.toml -``` -DONE WHEN: the tail shows `[functions.canary]` and `verify_jwt = false`. - -**4.2 [OWNER APPROVAL] Secrets** (PowerShell; the values are never printed): -```powershell -Set-Location C:\Users\shubh\_Active_Projects\NO_SUS\nosus-monad\contracts -$keys = node -e "console.log(require('./.canary-relayers.local.json').join(','))" -$salt = node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" -supabase secrets set --project-ref ffidvfguojalzpclipzi "CANARY_CONTRACT_ADDRESS=$env:CANARY_CONTRACT_ADDRESS" "CANARY_RELAYER_KEYS=$keys" "CANARY_TAG_SALT=$salt" "MONAD_RPC_URL=https://testnet-rpc.monad.xyz" -supabase secrets list --project-ref ffidvfguojalzpclipzi -``` -DONE WHEN: the list shows CANARY_CONTRACT_ADDRESS, CANARY_RELAYER_KEYS, CANARY_TAG_SALT and -MONAD_RPC_URL (as digests only). Never change `CANARY_TAG_SALT` after readers have opened copies. - -**4.3 [OWNER APPROVAL] Deploy** (PowerShell, in `app`; `--use-api` avoids Docker): -```powershell -Set-Location C:\Users\shubh\_Active_Projects\NO_SUS\nosus-monad\app -supabase functions deploy canary --project-ref ffidvfguojalzpclipzi --no-verify-jwt --use-api -``` -DONE WHEN: the output says the function was deployed. - -**4.4 Smoke test** (Git Bash). These must return exactly these errors: -```bash -K="sb_publishable_D_mmlb1jjS9Cl6QCuFwEJw_zPAb6kHS"; U="https://ffidvfguojalzpclipzi.supabase.co/functions/v1/canary" -curl -s -X POST "$U" -H "apikey: $K" -H "Content-Type: application/json" -d '{"action":"nope"}' -# -> {"error":"Unknown action"} -curl -s -X POST "$U" -H "apikey: $K" -H "Content-Type: application/json" -d '{"action":"status","note_id":"00000000-0000-4000-8000-000000000000","owner_secret":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}' -# -> {"error":"Note not found."} -curl -s -X POST "$U" -H "apikey: $K" -H "Content-Type: application/json" -d '{"action":"open","note_id":"00000000-0000-4000-8000-000000000000","device_id":"00000000-0000-4000-8000-000000000001","reader_name":"Test"}' -# -> {"error":"This Canary link is not valid."} -``` -If you get `canary is not configured (…)`, a secret is missing (see 4.2). If you get 401, the -function was deployed without `--no-verify-jwt`. - -### Phase 5 — Web build and GitHub Pages (20 min; the public repo needs approval) - -**5.1 Build** (PowerShell): -```powershell -Set-Location C:\Users\shubh\_Active_Projects\NO_SUS\nosus-monad\app -FLUTTER build web --release --base-href /nosus-canary/ -Remove-Item build\web\CNAME -ErrorAction SilentlyContinue -Select-String -Path build\web\index.html -Pattern '' -``` -DONE WHEN: `Select-String` prints the base tag and `build\web\CNAME` no longer exists. - -**5.2 Local check before publishing:** -`FLUTTER run -d chrome --web-port 8686`, then walk through Phase 7 steps 1–6 on -`http://localhost:8686/#/canary`. - -**5.3 [OWNER APPROVAL] First publish.** This creates the **public** repo `https-shubhamsahu/nosus-canary` -(PowerShell): -```powershell -$Web = "C:\Users\shubh\_Active_Projects\NO_SUS\nosus-monad\app\build\web" -$Pub = "C:\Users\shubh\_Active_Projects\NO_SUS\nosus-canary-pages" -if (Test-Path $Pub) { Remove-Item -Recurse -Force $Pub } -New-Item -ItemType Directory -Force $Pub | Out-Null -Copy-Item -Recurse "$Web\*" $Pub -New-Item -ItemType File -Force "$Pub\.nojekyll" | Out-Null -Set-Location $Pub -git init -b main -git add -A -git commit -m "Deploy NO SUS Canary web" -gh repo create nosus-canary --public --source . --push -gh api -X POST repos/https-shubhamsahu/nosus-canary/pages -f "source[branch]=main" -``` -**Later redeploys** (after rebuilding with 5.1), in PowerShell: -```powershell -$Web = "C:\Users\shubh\_Active_Projects\NO_SUS\nosus-monad\app\build\web" -$Pub = "C:\Users\shubh\_Active_Projects\NO_SUS\nosus-canary-pages" -Set-Location $Pub -Get-ChildItem -Force | Where-Object { $_.Name -ne '.git' } | Remove-Item -Recurse -Force -Copy-Item -Recurse "$Web\*" $Pub -Remove-Item "$Pub\CNAME" -ErrorAction SilentlyContinue -New-Item -ItemType File -Force "$Pub\.nojekyll" | Out-Null -git add -A; git commit -m "Redeploy NO SUS Canary web"; git push -``` - -DONE WHEN (within about 3 minutes): `curl -sI https://https-shubhamsahu.github.io/nosus-canary/` -returns `200`, and the page shows NO SUS. - -### Phase 6 — APK (15 min build time) - -**6.1 Build** (PowerShell, one line; do not run other heavy jobs at the same time): -```powershell -Set-Location C:\Users\shubh\_Active_Projects\NO_SUS\nosus-monad\app -FLUTTER build apk --release --target-platform android-arm64 --dart-define=WEB_APP_ORIGIN=https://https-shubhamsahu.github.io --dart-define=WEB_APP_BASE_PATH=/nosus-canary --dart-define=NOSUS_ALLOW_SCREEN_CAPTURE=true -Copy-Item build\app\outputs\flutter-apk\app-release.apk C:\Users\shubh\_Active_Projects\NO_SUS\NO-SUS-Canary.apk -``` -DONE WHEN: `Built build\app\outputs\flutter-apk\app-release.apk` is printed and `NO-SUS-Canary.apk` -exists. Signing falls back to the debug key because there is no `key.properties`. That is fine for -sideloading; **never upload this APK to Play.** - -**6.2 Install** (phone with USB debugging on): -```powershell -& "C:\Users\shubh\AppData\Local\Android\Sdk\platform-tools\adb.exe" install -r build\app\outputs\flutter-apk\app-release.apk -``` -DONE WHEN: it prints `Success` and the phone shows an app called **NO SUS**. The package is -`foo.nosus.canary`. If the Play Store NO SUS is also installed, both icons say NO SUS; for the -demo, uninstall the store one or move it to another screen. - -### Phase 7 — End-to-end acceptance (20 min) - -Use the deployed web app, a laptop and at least two phones. Tick each step: -1. Open `https://https-shubhamsahu.github.io/nosus-canary/#/canary` → **Use the demo note** → - 100 readers → 1 day → **Create Canary link**. The link, the QR code and "Sealed on Monad testnet · - view proof" appear, and the proof opens monadscan. -2. Phone A scans the QR → name "Asha" → **Open my copy** → it shows "Copy N of 100 · made for Asha" - and the proof link works. -3. Phone A refreshes the page and opens again → **same** copy number. -4. Phone B (or an incognito window) → name "Ben" → a **different** copy number. -5. On the laptop, **Who opened it** shows Asha and Ben within about 3 s, each with ✓. -6. Ben selects all his text and copies it → laptop **Check a leak** → paste → **Find the copy** → - "🐤 The canary sang. Copy #… — Ben". -7. Paste the original demo note → "This is your own original text". -8. Paste `the quick brown fox` → "Not enough of the note to tell" (no name). -9. APK: Welcome → **NO SUS Canary** → create a note on the phone → open it from another phone → - take a screenshot of that reader's copy → on the APK, **Check a leak → Read a screenshot** → - the right copy is named. -10. Mirror the APK screen (e.g. scrcpy) → it is **not** black. -11. Record the results and the contract address in `docs/STATUS.md` (Appendix B template). - -### Phase 8 — Demo runbook (peer vote at the event) - -**Setup:** -- Create the demo note on the **presenter phone (APK)** with **100 readers**. Leak checks work - only on the device that created the note. -- Mirror the phone to the projector (for example scrcpy over USB). Only the owner may install - software. -- Show the QR (**Show link & QR**) on the projector. - -**The flow (about 90 s):** -1. "Everyone scan this — it's our team's secret." -2. The Seen-by list fills live. -3. A volunteer screenshots their copy and posts it in a WhatsApp group shown on screen. -4. On the phone, **Check a leak → Read a screenshot** → "🐤 Copy #37 — Priya". -5. One line on Monad: "Which copy is whose was recorded on Monad before anyone could read it, so - nobody can reshuffle the blame afterwards." - -**Fallbacks:** -- If OCR misreads the screenshot, paste the text instead. -- If mirroring fails, create the note on the laptop web app instead and use paste. -- If the venue Wi-Fi is slow, use a phone hotspot for the presenter devices. - -### Phase 9 — After the hackathon -- Delete `docs/canary/reference/` after its files are committed in their real locations. The - constitution says: no duplicate files. -- Stretch goals: an owner link to move leak checks to another device, Google sign-in for readers, - and alerts when a copy is opened. - ---- - -## 6. Troubleshooting - -| Symptom | Cause | Fix | -|---|---|---| -| `--base-href should start and end with /` with `C:/Program Files/Git/...` | Git Bash path conversion | Use PowerShell, or `MSYS_NO_PATHCONV=1` | -| `ANCHOR NOT FOUND` from `canary_edits.js` | The file changed, or the script already ran | `git diff `; do not run it twice (step 1.2) | -| APK build: `Could not start thread DartWorker` | Out of memory or threads | Close other heavy jobs and rebuild | -| APK build fails in `R8Task` / "Missing class com.google.mlkit.vision.text.chinese…" | The ML Kit `-dontwarn` rules are missing | Step 1.2 adds them. Check the end of `android/app/proguard-rules.pro`; `build/app/outputs/mapping/release/missing_rules.txt` lists what R8 wants | -| Phone: "App not installed" | Old APK with the same id but a different signature | `adb uninstall foo.nosus.canary`, then install again | -| Reader: "NO SUS is busy" | All relayer keys have transactions in flight | Tap again. For big rooms add relayers: re-run 2.4 with a higher count, then 4.2 and 4.3 | -| Reader: "Could not record your copy on Monad" | RPC hiccup, or a relayer is out of MON | Retry. Check relayer balances on monadscan and top up with 2.4 | -| Reader: "Every copy of this note has been opened" | All N copies are taken | Create a new note with more readers | -| Function returns 401 | Deployed with JWT verification | Redeploy with `--no-verify-jwt` | -| `canary is not configured (X)` | Secret X is missing | Step 4.2 | -| Contract deploy hangs or fails with network errors | Default RPC `rpc.testnet.monad.xyz` is dead | Set `MONAD_RPC_URL=https://testnet-rpc.monad.xyz` in `contracts/.env` | -| Pages shows 404 or redirects to monad.nosus.foo | `CNAME` was published | Delete `CNAME` from the publish folder and push | -| Screenshot or mirror shows black | Built without `NOSUS_ALLOW_SCREEN_CAPTURE=true` | Rebuild with the define (6.1) | -| Composer: "Found X of the Y swappable words" | Note too short for that many readers | Longer note, fewer readers, or the demo note | -| Leak check names nobody | Too little text, or text edited or mixed from several copies | Paste more of the leak. Working as designed | - -## 7. If time runs out, cut in this order -1. OCR "Read a screenshot" (paste still works). 2. "See the magic". 3. The APK: demo from the -laptop web app plus phone browsers. **Never cut:** the reader flow, Seen by, the leak check by paste. - -## 8. Appendix A — AGENTS.md section (owner decision) -``` -## Current workstream: NO SUS Canary (owner decision, 19 Sep 2026) -- Brand: "NO SUS". Feature: "NO SUS Canary". This supersedes the "NO SUS — Monad Experiment" - naming rule for user-facing text. -- Build plan: docs/canary/NOSUS_CANARY_BUILD_PLAN.md (follow it step by step). -- Canary is server-gated copy delivery, disclosed as such. It does not use Lit, does not change - Gate T1, and does not change monadThresholdVerified. -- Still requires explicit owner approval each time: contract deploys, funding wallets, applying - SQL, setting secrets, deploying functions, creating public repos or Pages, commits and pushes. -``` - -## 8b. Appendix B — STATUS.md entry template -``` -## NO SUS Canary — -- Contract NoSusCanary:
(monadscan link) -- Relayers: , funded MON each -- Migration 20260919090000_nosus_canary.sql applied to ffidvfguojalzpclipzi: -- Edge function `canary` deployed: -- Web: https://shubham-sahu.me/nosus-canary/#/canary -- APK: NO-SUS-Canary.apk (foo.nosus.canary, debug-signed, sideload only) -- Acceptance (Phase 7): steps 1–10 -``` - -## 9. Progress log (tick as you go; add dates, notes and addresses) -- [x] 0.1 location/branch checked -- [x] 0.2 branch `feat/nosus-canary` -- [x] 0.3 .gitignore rules -- [x] 0.4 baseline commit (owner OK) -- [x] 0.5 AGENTS.md section present -- [x] 1.1 Canary files copied -- [x] 1.2 edit script applied once -- [x] 1.3 packages added -- [x] 1.4 analyze clean, tests green -- [x] 1.5 commit (owner OK) -- [x] 2.1 contract tests 11 passing -- [x] 2.2 deployer .env ready (owner) -- [x] 2.3 deployed: CANARY_CONTRACT_ADDRESS = 0xb1a1858866122c84cf97861ca815fb070e010e68 -- [x] 2.4 relayers ready (count 10, 0.5 MON each) -- [x] 3.2 migration applied + verified -- [x] 4.2 secrets set -- [x] 4.3 function deployed -- [x] 4.4 smoke tests pass -- [x] 5.1 web built, CNAME removed -- [x] 5.3 Pages live at https://shubham-sahu.me/nosus-canary/#/canary -- [x] 6.1 APK built → NO-SUS-Canary.apk -- [ ] 6.2 installed on demo phone -- [ ] 7 acceptance 1–10 passed -- [ ] 8 demo rehearsed twice - -Reference-code verification when this plan was written (19 Sep 2026): analyze clean; full test suite -129 passed; web release build OK; arm64 release APK built (34.4 MB, `foo.nosus.canary`); hardhat 5/5 -for NoSusCanary; deno check OK for the edge function. See `VERIFICATION.md`. diff --git a/readme.config.json b/readme.config.json deleted file mode 100644 index 34af3cf..0000000 --- a/readme.config.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "liveUrl": "http://shubham-sahu.me/nosus-canary/", - "repoUrl": "https://github.com/https-shubhamsahu/nosus-canary", - "contractTestnet": "0xb1a1858866122c84cf97861ca815fb070e010e68", - "contractMainnet": "", - "explorerTestnet": "https://testnet.monadscan.com", - "explorerMainnet": "https://monadscan.com", - "verified": true, - "customDomain": true, - "demoVideoUrl": "", - "adVideoUrl": "", - "xPostUrl": "", - "team": [ - "Shubham Sahu" - ], - "event": "SOLANA DEVNET", - "verifiedUrl": "https://sourcify.dev/server/repo-ui/10143/0xb1a1858866122c84cf97861ca815fb070e010e68", - "solanaDevnetTxUrl": "https://explorer.solana.com/tx/2BHqnuCxYyemfegHkncgTsQyMPjpyB9boD1XqYfD1Wtbcf51Fpy3y264UwGhnvRKtcxFKCaSAzHxLrDwFRk512bQ?cluster=devnet" -} \ No newline at end of file diff --git a/supabase/.gitignore b/supabase/.gitignore deleted file mode 100644 index ad9264f..0000000 --- a/supabase/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Supabase -.branches -.temp - -# dotenvx -.env.keys -.env.local -.env.*.local diff --git a/supabase/AGENTS.md b/supabase/AGENTS.md deleted file mode 100644 index 2948056..0000000 --- a/supabase/AGENTS.md +++ /dev/null @@ -1,15 +0,0 @@ -# Supabase scope - -Read root `AGENTS.md` and `README.md` first. - -- This is a separate experiment backend; production NO SUS project IDs, URLs, - keys, migrations, and buckets are forbidden here. -- Create new migrations with the Supabase CLI. Applied migrations are - append-only. -- Enable RLS on every table and deny browser-table access by default. Use - narrow server routes and the server-only service role only when necessary. -- Never place plaintext, decryption keys, Lit session signatures, or secrets in - Postgres, Storage metadata, logs, or database functions. - -Would you like to finalize today's work? If yes, say whether to verify only, -build a target, or deploy a named target. diff --git a/supabase/README.md b/supabase/README.md deleted file mode 100644 index a8e3c69..0000000 --- a/supabase/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# Supabase backend - -This directory is for a **new, isolated** Supabase project for the Monad -experiment. It must never be linked to production NO SUS. - -## Purpose - -The backend stores encrypted payloads, Lit metadata, public receipt metadata, -and event-indexing records. It does not accept, derive, log, or return -plaintext or decryption keys. - -## Entry points - -- `migrations/20260916082811_experiment_drops.sql` — initial RLS-protected - schema and private encrypted-drop storage bucket -- `../web/src/app/api/` — server-only, allow-listed read API for the live wall - and receipt verifier - -## Rules - -- Migrations are append-only. Make a new migration with `supabase migration new - `; never rewrite one that has been applied. -- RLS stays enabled. Browser clients receive only the publishable key; the - service-role key is server-only. -- Do not apply this migration, link a project, create a bucket remotely, or - store real notes until the root finalization gate is explicitly approved. - -## NO SUS Canary (separate schema under `app/supabase/`) - -The shipped NO SUS Canary feature does not use this directory. Its schema and the -`canary` edge function live under `app/supabase/` and are applied only to the -experiment project `ffidvfguojalzpclipzi` (never production `rxfnazmusofikwaggntb`). - -- `app/supabase/migrations/20260919090000_nosus_canary.sql` — `canary_notes`, - `canary_copies`, `canary_relayer_leases`; Monad testnet `seal_tx_hash` / - `open_tx_hash`. -- `app/supabase/migrations/20261010090000_nosus_canary_solana.sql` — adds nullable - `canary_notes.seal_solana_sig` and `canary_copies.open_solana_sig`, and makes - `canary_assign_copy` also return `open_solana_sig` (10 Oct 2026, not yet applied). -- Function secrets: `CANARY_CONTRACT_ADDRESS`, `CANARY_RELAYER_KEYS`, - `CANARY_TAG_SALT`, `MONAD_RPC_URL`; optional `SOLANA_RELAYER_KEYS` (devnet only), - `SOLANA_RPC_URL`, `SOLANA_MEMO_PROGRAM`. With `SOLANA_RELAYER_KEYS` unset, Solana - is off and the function behaves as before. -- Apply SQL with `supabase db query --linked --file …`, never `supabase db push` - (`docs/canary/NOSUS_CANARY_BUILD_PLAN.md`, rule 5). diff --git a/supabase/config.toml b/supabase/config.toml deleted file mode 100644 index b3ce41b..0000000 --- a/supabase/config.toml +++ /dev/null @@ -1,413 +0,0 @@ -# For detailed configuration reference documentation, visit: -# https://supabase.com/docs/guides/local-development/cli/config -# A string used to distinguish different Supabase projects on the same host. Defaults to the -# working directory name when running `supabase init`. -project_id = "nosus-monad" - -[api] -enabled = true -# Port to use for the API URL. -port = 54321 -# Schemas to expose in your API. Tables, views and stored procedures in this schema will get API -# endpoints. `public` and `graphql_public` schemas are included by default. -schemas = ["public", "graphql_public"] -# Extra schemas to add to the search_path of every request. -extra_search_path = ["public", "extensions"] -# The maximum number of rows returns from a view, table, or stored procedure. Limits payload size -# for accidental or malicious requests. -max_rows = 1000 -# Controls whether new tables, views, sequences and functions created in the `public` schema by -# `postgres` are reachable through the Data API roles (`anon`, `authenticated`, `service_role`) -# without explicit GRANTs. Leave unset today to preserve local behaviour. The implicit default -# flips to `false` on 2026-05-30 to match the new cloud default, and the field is removed in -# 2026-10-30 once the always-revoked behaviour is permanent. Set to `false` to opt in early. -# auto_expose_new_tables = false - -[api.tls] -# Enable HTTPS endpoints locally using a self-signed certificate. -enabled = false -# Paths to self-signed certificate pair. -# cert_path = "../certs/my-cert.pem" -# key_path = "../certs/my-key.pem" - -[db] -# Port to use for the local database URL. -port = 54322 -# Port used by db diff command to initialize the shadow database. -shadow_port = 54320 -# Maximum amount of time to wait for health check when starting the local database. -health_timeout = "2m" -# The database major version to use. This has to be the same as your remote database's. Run `SHOW -# server_version;` on the remote database to check. -major_version = 17 - -[db.pooler] -enabled = false -# Port to use for the local connection pooler. -port = 54329 -# Specifies when a server connection can be reused by other clients. -# Configure one of the supported pooler modes: `transaction`, `session`. -pool_mode = "transaction" -# How many server connections to allow per user/database pair. -default_pool_size = 20 -# Maximum number of client connections allowed. -max_client_conn = 100 - -# [db.vault] -# secret_key = "env(SECRET_VALUE)" - -[db.migrations] -# If disabled, migrations will be skipped during a db push or reset. -enabled = true -# Specifies an ordered list of schema files that describe your database. -# Supports glob patterns relative to supabase directory: "./schemas/*.sql" -schema_paths = [] - -[db.seed] -# If enabled, seeds the database after migrations during a db reset. -enabled = true -# Specifies an ordered list of seed files to load during db reset. -# Supports glob patterns relative to supabase directory: "./seeds/*.sql" -sql_paths = ["./seed.sql"] - -[db.network_restrictions] -# Enable management of network restrictions. -enabled = false -# List of IPv4 CIDR blocks allowed to connect to the database. -# Defaults to allow all IPv4 connections. Set empty array to block all IPs. -allowed_cidrs = ["0.0.0.0/0"] -# List of IPv6 CIDR blocks allowed to connect to the database. -# Defaults to allow all IPv6 connections. Set empty array to block all IPs. -allowed_cidrs_v6 = ["::/0"] - -# Uncomment to reject non-secure connections to the database. -# [db.ssl_enforcement] -# enabled = true - -[realtime] -enabled = true -# Bind realtime via either IPv4 or IPv6. (default: IPv4) -# ip_version = "IPv6" -# The maximum length in bytes of HTTP request headers. (default: 4096) -# max_header_length = 4096 - -[studio] -enabled = true -# Port to use for Supabase Studio. -port = 54323 -# External URL of the API server that frontend connects to. -api_url = "http://127.0.0.1" -# OpenAI API Key to use for Supabase AI in the Supabase Studio. -openai_api_key = "env(OPENAI_API_KEY)" - -# Email testing server. Emails sent with the local dev setup are not actually sent - rather, they -# are monitored, and you can view the emails that would have been sent from the web interface. -[inbucket] -enabled = true -# Port to use for the email testing server web interface. -port = 54324 -# Uncomment to expose additional ports for testing user applications that send emails. -# smtp_port = 54325 -# pop3_port = 54326 -# admin_email = "admin@email.com" -# sender_name = "Admin" - -[storage] -enabled = true -# The maximum file size allowed (e.g. "5MB", "500KB"). -file_size_limit = "50MiB" - -# Uncomment to configure local storage buckets -# [storage.buckets.images] -# public = false -# file_size_limit = "50MiB" -# allowed_mime_types = ["image/png", "image/jpeg"] -# objects_path = "./images" - -# Allow connections via S3 compatible clients -[storage.s3_protocol] -enabled = true - -# Image transformation API is available to Supabase Pro plan. -# [storage.image_transformation] -# enabled = true - -# Store analytical data in S3 for running ETL jobs over Iceberg Catalog -# This feature is only available on the hosted platform. -[storage.analytics] -enabled = false -max_namespaces = 5 -max_tables = 10 -max_catalogs = 2 - -# Analytics Buckets is available to Supabase Pro plan. -# [storage.analytics.buckets.my-warehouse] - -# Store vector embeddings in S3 for large and durable datasets -[storage.vector] -enabled = true -max_buckets = 10 -max_indexes = 5 - -# Vector Buckets is available to Supabase Pro plan. -# [storage.vector.buckets.documents-openai] - -[auth] -enabled = true -# The base URL of your website. Used as an allow-list for redirects and for constructing URLs used -# in emails. -site_url = "http://127.0.0.1:3000" -# The public URL that Auth serves on. Defaults to the API external URL with `/auth/v1` appended. -# external_url = "" -# A list of *exact* URLs that auth providers are permitted to redirect to post authentication. -additional_redirect_urls = ["https://127.0.0.1:3000"] -# How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 (1 week). -jwt_expiry = 3600 -# JWT issuer URL. If not set, defaults to auth.external_url. -# jwt_issuer = "" -# Path to JWT signing key. DO NOT commit your signing keys file to git. -# signing_keys_path = "./signing_keys.json" -# If disabled, the refresh token will never expire. -enable_refresh_token_rotation = true -# Allows refresh tokens to be reused after expiry, up to the specified interval in seconds. -# Requires enable_refresh_token_rotation = true. -refresh_token_reuse_interval = 10 -# Allow/disallow new user signups to your project. -enable_signup = true -# Allow/disallow anonymous sign-ins to your project. -enable_anonymous_sign_ins = false -# Allow/disallow testing manual linking of accounts -enable_manual_linking = false -# Passwords shorter than this value will be rejected as weak. Minimum 6, recommended 8 or more. -minimum_password_length = 6 -# Passwords that do not meet the following requirements will be rejected as weak. Supported values -# are: `letters_digits`, `lower_upper_letters_digits`, `lower_upper_letters_digits_symbols` -password_requirements = "" - -# Configure passkey sign-ins. -# [auth.passkey] -# enabled = false - -# Configure WebAuthn relying party settings (required when passkey is enabled). -# [auth.webauthn] -# rp_display_name = "Supabase" -# rp_id = "localhost" -# rp_origins = ["http://127.0.0.1:3000"] - -[auth.rate_limit] -# Number of emails that can be sent per hour. Requires auth.email.smtp to be enabled. -email_sent = 2 -# Number of SMS messages that can be sent per hour. Requires auth.sms to be enabled. -sms_sent = 30 -# Number of anonymous sign-ins that can be made per hour per IP address. Requires enable_anonymous_sign_ins = true. -anonymous_users = 30 -# Number of sessions that can be refreshed in a 5 minute interval per IP address. -token_refresh = 150 -# Number of sign up and sign-in requests that can be made in a 5 minute interval per IP address (excludes anonymous users). -sign_in_sign_ups = 30 -# Number of OTP / Magic link verifications that can be made in a 5 minute interval per IP address. -token_verifications = 30 -# Number of Web3 logins that can be made in a 5 minute interval per IP address. -web3 = 30 - -# Configure one of the supported captcha providers: `hcaptcha`, `turnstile`. -# [auth.captcha] -# enabled = true -# provider = "hcaptcha" -# secret = "" - -[auth.email] -# Allow/disallow new user signups via email to your project. -enable_signup = true -# If enabled, a user will be required to confirm any email change on both the old, and new email -# addresses. If disabled, only the new email is required to confirm. -double_confirm_changes = true -# If enabled, users need to confirm their email address before signing in. -enable_confirmations = false -# If enabled, users will need to reauthenticate or have logged in recently to change their password. -secure_password_change = false -# Controls the minimum amount of time that must pass before sending another signup confirmation or password reset email. -max_frequency = "1s" -# Number of characters used in the email OTP. -otp_length = 6 -# Number of seconds before the email OTP expires (defaults to 1 hour). -otp_expiry = 3600 - -# Use a production-ready SMTP server -# [auth.email.smtp] -# enabled = true -# host = "smtp.sendgrid.net" -# port = 587 -# user = "apikey" -# pass = "env(SENDGRID_API_KEY)" -# admin_email = "admin@email.com" -# sender_name = "Admin" - -# Uncomment to customize email template -# [auth.email.template.invite] -# subject = "You have been invited" -# content_path = "./supabase/templates/invite.html" - -# Uncomment to customize notification email template -# [auth.email.notification.password_changed] -# enabled = true -# subject = "Your password has been changed" -# content_path = "./templates/password_changed_notification.html" - -[auth.sms] -# Allow/disallow new user signups via SMS to your project. -enable_signup = false -# If enabled, users need to confirm their phone number before signing in. -enable_confirmations = false -# Template for sending OTP to users -template = "Your code is {{ `{{ .Code }}` }}" -# Controls the minimum amount of time that must pass before sending another sms otp. -max_frequency = "5s" - -# Use pre-defined map of phone number to OTP for testing. -# [auth.sms.test_otp] -# 4152127777 = "123456" - -# Configure logged in session timeouts. -# [auth.sessions] -# Force log out after the specified duration. -# timebox = "24h" -# Force log out if the user has been inactive longer than the specified duration. -# inactivity_timeout = "8h" - -# This hook runs before a new user is created and allows developers to reject the request based on the incoming user object. -# [auth.hook.before_user_created] -# enabled = true -# uri = "pg-functions://postgres/auth/before-user-created-hook" - -# This hook runs before a token is issued and allows you to add additional claims based on the authentication method used. -# [auth.hook.custom_access_token] -# enabled = true -# uri = "pg-functions:////" - -# Configure one of the supported SMS providers: `twilio`, `twilio_verify`, `messagebird`, `textlocal`, `vonage`. -[auth.sms.twilio] -enabled = false -account_sid = "" -message_service_sid = "" -# DO NOT commit your Twilio auth token to git. Use environment variable substitution instead: -auth_token = "env(SUPABASE_AUTH_SMS_TWILIO_AUTH_TOKEN)" - -# Multi-factor-authentication is available to Supabase Pro plan. -[auth.mfa] -# Control how many MFA factors can be enrolled at once per user. -max_enrolled_factors = 10 - -# Control MFA via App Authenticator (TOTP) -[auth.mfa.totp] -enroll_enabled = false -verify_enabled = false - -# Configure MFA via Phone Messaging -[auth.mfa.phone] -enroll_enabled = false -verify_enabled = false -otp_length = 6 -template = "Your code is {{ `{{ .Code }}` }}" -max_frequency = "5s" - -# Configure MFA via WebAuthn -# [auth.mfa.web_authn] -# enroll_enabled = true -# verify_enabled = true - -# Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`, -# `discord`, `facebook`, `github`, `gitlab`, `google`, `keycloak`, `linkedin_oidc`, `notion`, `twitch`, -# `twitter`, `x`, `slack`, `spotify`, `workos`, `zoom`. -[auth.external.apple] -enabled = false -client_id = "" -# DO NOT commit your OAuth provider secret to git. Use environment variable substitution instead: -secret = "env(SUPABASE_AUTH_EXTERNAL_APPLE_SECRET)" -# Overrides the default auth callback URL derived from auth.external_url. -redirect_uri = "" -# Overrides the default auth provider URL. Used to support self-hosted gitlab, single-tenant Azure, -# or any other third-party OIDC providers. -url = "" -# If enabled, the nonce check will be skipped. Required for local sign in with Google auth. -skip_nonce_check = false -# If enabled, it will allow the user to successfully authenticate when the provider does not return an email address. -email_optional = false - -# Allow Solana wallet holders to sign in to your project via the Sign in with Solana (SIWS, EIP-4361) standard. -# You can configure "web3" rate limit in the [auth.rate_limit] section and set up [auth.captcha] if self-hosting. -[auth.web3.solana] -enabled = false - -# Use Firebase Auth as a third-party provider alongside Supabase Auth. -[auth.third_party.firebase] -enabled = false -# project_id = "my-firebase-project" - -# Use Auth0 as a third-party provider alongside Supabase Auth. -[auth.third_party.auth0] -enabled = false -# tenant = "my-auth0-tenant" -# tenant_region = "us" - -# Use AWS Cognito (Amplify) as a third-party provider alongside Supabase Auth. -[auth.third_party.aws_cognito] -enabled = false -# user_pool_id = "my-user-pool-id" -# user_pool_region = "us-east-1" - -# Use Clerk as a third-party provider alongside Supabase Auth. -[auth.third_party.clerk] -enabled = false -# Obtain from https://clerk.com/setup/supabase -# domain = "example.clerk.accounts.dev" - -# OAuth server configuration -[auth.oauth_server] -# Enable OAuth server functionality -enabled = false -# Path for OAuth consent flow UI -authorization_url_path = "/oauth/consent" -# Allow dynamic client registration -allow_dynamic_registration = false - -[edge_runtime] -enabled = true -# Supported request policies: `oneshot`, `per_worker`. -# `per_worker` (default) — enables hot reload during local development. -# `oneshot` — fallback mode if hot reload causes issues (e.g. in large repos or with symlinks). -policy = "per_worker" -# Port to attach the Chrome inspector for debugging edge functions. -inspector_port = 8083 -# The Deno major version to use. -deno_version = 2 - -# [edge_runtime.secrets] -# secret_key = "env(SECRET_VALUE)" - -[analytics] -enabled = true -port = 54327 -# Configure one of the supported backends: `postgres`, `bigquery`. -backend = "postgres" - -# Experimental features may be deprecated any time -[experimental] -# Configures Postgres storage engine to use OrioleDB (S3) -orioledb_version = "" -# Configures S3 bucket URL, eg. .s3-.amazonaws.com -s3_host = "env(S3_HOST)" -# Configures S3 bucket region, eg. us-east-1 -s3_region = "env(S3_REGION)" -# Configures AWS_ACCESS_KEY_ID for S3 bucket -s3_access_key = "env(S3_ACCESS_KEY)" -# Configures AWS_SECRET_ACCESS_KEY for S3 bucket -s3_secret_key = "env(S3_SECRET_KEY)" - -# [experimental.pgdelta] -# When enabled, pg-delta becomes the active engine for supported schema flows. -# enabled = false -# Directory under `supabase/` where declarative files are written. -# declarative_schema_path = "./database" -# JSON string passed through to pg-delta SQL formatting. -# format_options = "{\"keywordCase\":\"upper\",\"indent\":2,\"maxWidth\":80,\"commaStyle\":\"trailing\"}" diff --git a/supabase/migrations/20260916082811_experiment_drops.sql b/supabase/migrations/20260916082811_experiment_drops.sql deleted file mode 100644 index 175a2f7..0000000 --- a/supabase/migrations/20260916082811_experiment_drops.sql +++ /dev/null @@ -1,69 +0,0 @@ --- NO SUS — Monad Experiment. Separate project only; never apply to production NO SUS. --- The browser never writes these tables directly. Server-side event indexing and --- encrypted-payload persistence use the service role after on-chain validation. - -create table if not exists public.experiment_drops ( - id text primary key check (id ~ '^0x[0-9a-f]{64}$'), - sender_wallet text not null check (sender_wallet ~ '^0x[0-9a-f]{40}$'), - recipient_wallet text check (recipient_wallet is null or recipient_wallet ~ '^0x[0-9a-f]{40}$'), - opener_wallet text check (opener_wallet is null or opener_wallet ~ '^0x[0-9a-f]{40}$'), - ciphertext_digest text not null check (ciphertext_digest ~ '^0x[0-9a-f]{64}$'), - ciphertext_payload text not null, - lit_metadata jsonb not null check (jsonb_typeof(lit_metadata) = 'object'), - storage_path text unique, - expires_at timestamptz, - sealed_tx_hash text unique check (sealed_tx_hash is null or sealed_tx_hash ~ '^0x[0-9a-f]{64}$'), - opened_tx_hash text unique check (opened_tx_hash is null or opened_tx_hash ~ '^0x[0-9a-f]{64}$'), - created_at timestamptz not null default now(), - opened_at timestamptz, - constraint acknowledged_drop_has_opener check ( - (opened_at is null and opener_wallet is null and opened_tx_hash is null) - or (opened_at is not null and opener_wallet is not null and opened_tx_hash is not null) - ) -); - -create table if not exists public.experiment_drop_events ( - id bigint generated always as identity primary key, - drop_id text not null references public.experiment_drops(id) on delete cascade, - event_type text not null check (event_type in ('sealed', 'opened')), - actor_wallet text not null check (actor_wallet ~ '^0x[0-9a-f]{40}$'), - transaction_hash text not null check (transaction_hash ~ '^0x[0-9a-f]{64}$'), - block_number bigint not null check (block_number >= 0), - event_at timestamptz not null default now(), - unique (transaction_hash, event_type) -); - -create index if not exists experiment_drops_created_at_idx - on public.experiment_drops (created_at desc); -create index if not exists experiment_drops_opened_at_idx - on public.experiment_drops (opened_at desc nulls last); -create index if not exists experiment_drop_events_drop_id_idx - on public.experiment_drop_events (drop_id, event_at desc); - -alter table public.experiment_drops enable row level security; -alter table public.experiment_drop_events enable row level security; - --- No anon/authenticated policy is intentional. The only browser-safe reads are --- the explicit, allow-listed Next.js routes; service-role callers bypass RLS. -revoke all on table public.experiment_drops from anon, authenticated; -revoke all on table public.experiment_drop_events from anon, authenticated; - -insert into storage.buckets (id, name, public, file_size_limit, allowed_mime_types) -values ( - 'encrypted-drops', - 'encrypted-drops', - false, - 1048576, - array['application/octet-stream', 'application/json'] -) -on conflict (id) do update set - public = excluded.public, - file_size_limit = excluded.file_size_limit, - allowed_mime_types = excluded.allowed_mime_types; - --- Private by default: no storage.objects policies are created for anon or --- authenticated. The server validates then uses the service role for writes. -comment on table public.experiment_drops is - 'Encrypted-drop metadata for the Monad testnet experiment. Never stores plaintext or decryption keys.'; -comment on table public.experiment_drop_events is - 'Indexed Sealed and OpenAcknowledged events for the public Receipt Wall.'; diff --git a/tool/build-backend-bootstrap.mjs b/tool/build-backend-bootstrap.mjs index 73065f8..ee16177 100644 --- a/tool/build-backend-bootstrap.mjs +++ b/tool/build-backend-bootstrap.mjs @@ -12,7 +12,6 @@ sql = sql.replaceAll('rxfnazmusofikwaggntb.supabase.co', 'ffidvfguojalzpclipzi.s // drops it. Skip only its search_path adjustment when it does not exist. sql = sql.replace('ALTER FUNCTION public.revoke_device(uuid) SET search_path = public;', "DO $bootstrap$ BEGIN IF to_regprocedure('public.revoke_device(uuid)') IS NOT NULL THEN ALTER FUNCTION public.revoke_device(uuid) SET search_path = public; END IF; END $bootstrap$;"); -sql += '\n' + readFileSync(resolve(root, 'supabase/migrations/20260916082811_experiment_drops.sql'), 'utf8'); if (sql.includes('rxfnazmusofikwaggntb.supabase.co')) throw new Error('Production URL in bootstrap'); const output = resolve(root, 'app/supabase/.temp/experiment-bootstrap.sql'); mkdirSync(dirname(output), { recursive: true }); diff --git a/tool/build-readme.mjs b/tool/build-readme.mjs deleted file mode 100644 index 7f0b16a..0000000 --- a/tool/build-readme.mjs +++ /dev/null @@ -1,690 +0,0 @@ -#!/usr/bin/env node -// Builds the retro README (black, paper and orange only) for NO SUS Canary: README.md + animated SVGs. -// -// node tool/build-readme.mjs [config=readme.config.json] [outDir=.] -// -// Edit readme.config.json (live URL, repo URL, contract address, links) and re-run. -// Everything is drawn with shapes (a built-in 5x7 pixel font), because GitHub -// shows SVGs as images: no JavaScript and no external fonts, but CSS animation -// works. Every animation stops under prefers-reduced-motion, and the static -// frame always shows the finished state, so no text is ever hidden. - -import fs from 'node:fs'; -import path from 'node:path'; - -const cfgPath = process.argv[2] ?? 'readme.config.json'; -const outDir = process.argv[3] ?? '.'; -const cfg = JSON.parse(fs.readFileSync(cfgPath, 'utf8')); -const assetDir = path.join(outDir, 'assets', 'readme'); -fs.mkdirSync(assetDir, { recursive: true }); - -// ---------------------------------------------------------------- palette -// Three colours, nothing else: black ink, paper and NO SUS orange. -const INK = '#141414'; -const PAPER = '#FAF6EC'; -const ORANGE = '#F28C28'; - -// ---------------------------------------------------------------- pixel font (5x7, uppercase) -const FONT = { - 'A': ['.###.', '#...#', '#...#', '#####', '#...#', '#...#', '#...#'], - 'B': ['####.', '#...#', '#...#', '####.', '#...#', '#...#', '####.'], - 'C': ['.###.', '#...#', '#....', '#....', '#....', '#...#', '.###.'], - 'D': ['####.', '#...#', '#...#', '#...#', '#...#', '#...#', '####.'], - 'E': ['#####', '#....', '#....', '####.', '#....', '#....', '#####'], - 'F': ['#####', '#....', '#....', '####.', '#....', '#....', '#....'], - 'G': ['.###.', '#...#', '#....', '#.###', '#...#', '#...#', '.####'], - 'H': ['#...#', '#...#', '#...#', '#####', '#...#', '#...#', '#...#'], - 'I': ['.###.', '..#..', '..#..', '..#..', '..#..', '..#..', '.###.'], - 'J': ['..###', '...#.', '...#.', '...#.', '...#.', '#..#.', '.##..'], - 'K': ['#...#', '#..#.', '#.#..', '##...', '#.#..', '#..#.', '#...#'], - 'L': ['#....', '#....', '#....', '#....', '#....', '#....', '#####'], - 'M': ['#...#', '##.##', '#.#.#', '#.#.#', '#...#', '#...#', '#...#'], - 'N': ['#...#', '#...#', '##..#', '#.#.#', '#..##', '#...#', '#...#'], - 'O': ['.###.', '#...#', '#...#', '#...#', '#...#', '#...#', '.###.'], - 'P': ['####.', '#...#', '#...#', '####.', '#....', '#....', '#....'], - 'Q': ['.###.', '#...#', '#...#', '#...#', '#.#.#', '#..#.', '.##.#'], - 'R': ['####.', '#...#', '#...#', '####.', '#.#..', '#..#.', '#...#'], - 'S': ['.####', '#....', '#....', '.###.', '....#', '....#', '####.'], - 'T': ['#####', '..#..', '..#..', '..#..', '..#..', '..#..', '..#..'], - 'U': ['#...#', '#...#', '#...#', '#...#', '#...#', '#...#', '.###.'], - 'V': ['#...#', '#...#', '#...#', '#...#', '#...#', '.#.#.', '..#..'], - 'W': ['#...#', '#...#', '#...#', '#.#.#', '#.#.#', '#.#.#', '.#.#.'], - 'X': ['#...#', '#...#', '.#.#.', '..#..', '.#.#.', '#...#', '#...#'], - 'Y': ['#...#', '#...#', '.#.#.', '..#..', '..#..', '..#..', '..#..'], - 'Z': ['#####', '....#', '...#.', '..#..', '.#...', '#....', '#####'], - '0': ['.###.', '#...#', '#..##', '#.#.#', '##..#', '#...#', '.###.'], - '1': ['..#..', '.##..', '..#..', '..#..', '..#..', '..#..', '.###.'], - '2': ['.###.', '#...#', '....#', '...#.', '..#..', '.#...', '#####'], - '3': ['####.', '....#', '....#', '.###.', '....#', '....#', '####.'], - '4': ['...#.', '..##.', '.#.#.', '#..#.', '#####', '...#.', '...#.'], - '5': ['#####', '#....', '####.', '....#', '....#', '#...#', '.###.'], - '6': ['.###.', '#....', '#....', '####.', '#...#', '#...#', '.###.'], - '7': ['#####', '....#', '...#.', '..#..', '.#...', '.#...', '.#...'], - '8': ['.###.', '#...#', '#...#', '.###.', '#...#', '#...#', '.###.'], - '9': ['.###.', '#...#', '#...#', '.####', '....#', '....#', '.###.'], - ' ': ['.....', '.....', '.....', '.....', '.....', '.....', '.....'], - '.': ['.....', '.....', '.....', '.....', '.....', '.##..', '.##..'], - ',': ['.....', '.....', '.....', '.....', '.##..', '..#..', '.#...'], - ':': ['.....', '.##..', '.##..', '.....', '.##..', '.##..', '.....'], - '-': ['.....', '.....', '.....', '.###.', '.....', '.....', '.....'], - '!': ['..#..', '..#..', '..#..', '..#..', '..#..', '.....', '..#..'], - '?': ['.###.', '#...#', '....#', '...#.', '..#..', '.....', '..#..'], - '/': ['....#', '....#', '...#.', '..#..', '.#...', '#....', '#....'], - '#': ['.#.#.', '.#.#.', '#####', '.#.#.', '#####', '.#.#.', '.#.#.'], - '>': ['.#...', '..#..', '...#.', '....#', '...#.', '..#..', '.#...'], - '<': ['...#.', '..#..', '.#...', '#....', '.#...', '..#..', '...#.'], - '(': ['...#.', '..#..', '.#...', '.#...', '.#...', '..#..', '...#.'], - ')': ['.#...', '..#..', '...#.', '...#.', '...#.', '..#..', '.#...'], - '+': ['.....', '..#..', '..#..', '#####', '..#..', '..#..', '.....'], - '=': ['.....', '.....', '#####', '.....', '#####', '.....', '.....'], - '~': ['.....', '.....', '.#...', '#.#.#', '...#.', '.....', '.....'], - '*': ['.....', '#.#.#', '.###.', '#####', '.###.', '#.#.#', '.....'], - "'": ['..#..', '..#..', '.#...', '.....', '.....', '.....', '.....'], - '|': ['..#..', '..#..', '..#..', '..#..', '..#..', '..#..', '..#..'], - '^': ['#....', '##...', '###..', '####.', '###..', '##...', '#....'], // play triangle - '`': ['.....', '#####', '#####', '.###.', '.###.', '..#..', '.....'], // "next" triangle -}; - -const textW = (s, px) => s.length * 6 * px - px; - -function pixelText(str, x, y, px, fill, attrs = '') { - let rects = ''; - [...String(str).toUpperCase()].forEach((ch, i) => { - const glyph = FONT[ch] ?? FONT['?']; - const ox = x + i * 6 * px; - glyph.forEach((row, ry) => { - let start = -1; - for (let cx = 0; cx <= 5; cx++) { - const on = cx < 5 && row[cx] === '#'; - if (on && start < 0) start = cx; - if (!on && start >= 0) { - rects += ``; - start = -1; - } - } - }); - }); - return `${rects}`; -} - -function sprite(rows, pal, x, y, px, attrs = '') { - let out = ''; - rows.forEach((row, ry) => { - let cx = 0; - while (cx < row.length) { - const c = row[cx]; - if (c === '.') { cx++; continue; } - let end = cx; - while (end < row.length && row[end] === c) end++; - out += ``; - cx = end; - } - }); - return `${out}`; -} - -function wrap(text, max) { - const lines = []; - let cur = ''; - for (const word of text.split(' ')) { - const next = cur ? `${cur} ${word}` : word; - if (next.length > max && cur) { - lines.push(cur); - cur = word; - } else { - cur = next; - } - } - if (cur) lines.push(cur); - return lines; -} - -// ---------------------------------------------------------------- sprites -// Three colours only: INK, PAPER and ORANGE. -const CANARY_PAL = { K: INK, Y: ORANGE, y: PAPER, W: PAPER, O: INK }; -const CANARY_A = [ - '.....KKKKK......', - '...KKYYYYYKK....', - '..KYYYYYYYWWK...', - '..KYYYYYYYWKK...', - '.KYYYYYYYYYYKOO.', - '.KYYYYYYYYYYKOOO', - '.KYyyyyYYYYYK...', - 'KYYyyyyyYYYYK...', - 'KYYYyyyyYYYK....', - '.KYYYyyYYYYK....', - '..KYYYYYYYK.....', - '...KKKKKKK......', - '....K...K.......', - '...KK..KK.......', -]; -const CANARY_B = [ - '.....KKKKK......', - '...KKYYYYYKK....', - '..KYYYYYYYWWK...', - '..KYYYYYYYWKK...', - '.KYYyyYYYYYYKOO.', - '.KYyyyyYYYYYKOOO', - '.KYYyyyYYYYYK...', - 'KYYYYYYYYYYYK...', - 'KYYYYYYYYYYK....', - '.KYYYYYYYYYK....', - '..KYYYYYYYK.....', - '...KKKKKKK......', - '....K...K.......', - '...KK..KK.......', -]; -const PHONE_PAL = { K: INK, P: INK, W: PAPER, Y: ORANGE }; -const PHONE = [ - '.KKKKKKKK.', - 'KPPPPPPPPK', - 'KPWWWWWWPK', - 'KPWYYYYWPK', - 'KPWWWWWWPK', - 'KPWYYYWWPK', - 'KPWWWWWWPK', - 'KPWYYYYWPK', - 'KPWWWWWWPK', - 'KPWWWWWWPK', - 'KPPPPPPPPK', - 'KPPPWWPPPK', - '.KKKKKKKK.', -]; -const ENV_PAL = { K: INK, W: PAPER, Y: ORANGE }; -const ENVELOPE = [ - 'KKKKKKKKKKKKKK', - 'KYYWWWWWWWWYYK', - 'KWYYWWWWWWYYWK', - 'KWWYYWWWWYYWWK', - 'KWWWYYWWYYWWWK', - 'KWWWWYYYYWWWWK', - 'KWWWWWYYWWWWWK', - 'KWWWWWWWWWWWWK', - 'KWWWWWWWWWWWWK', - 'KKKKKKKKKKKKKK', -]; -const LENS_PAL = { K: INK, L: PAPER, H: ORANGE }; -const MAGNIFIER = [ - '..KKKK......', - '.KLLLLK.....', - 'KLLKLLLK....', - 'KLKLLLLK....', - 'KLLLLLLK....', - 'KLLLLLLK....', - '.KLLLLK.....', - '..KKKKHH....', - '......HHH...', - '.......HHH..', - '........HHH.', - '.........HH.', -]; -// A sneaky leaked page with eyes: the "wild LEAK". -const LEAK_PAL = { K: INK, W: PAPER, R: ORANGE, L: INK }; -const LEAK = [ - '..KKKKKKKKKK....', - '..KWWWWWWWWKK...', - '..KWWWWWWWWWKK..', - '..KWRRWWWRRWWK..', - '..KWRKWWWRKWWK..', - '..KWWWWWWWWWWK..', - '..KWLLLLLLLWWK..', - '..KWWWWWWWWWWK..', - '..KWLLLLLLWWWK..', - '..KWWWWKKWWWWK..', - '..KWWWKRRKWWWK..', - '..KWWWWWWWWWWK..', - '..KWLLLLLWWWWK..', - '..KWWWWWWWWWWK..', - '..KKWKKWKKWKKK..', - '...K..K..K..K...', -]; - -// ---------------------------------------------------------------- svg helpers -const esc = (s) => String(s).replace(/&/g, '&').replace(/ -${esc(title)} - -${defs} -${body} - -`; -} - -// A paper card with a thick ink border and a hard orange shadow (bottom-right). -const SH = 8; -const card = (w, h, r = 16) => - ` -`; - -const written = new Set(); -function write(name, content) { - fs.writeFileSync(path.join(assetDir, name), content); - written.add(name); - console.log(` wrote assets/readme/${name} (${(content.length / 1024).toFixed(1)} KB)`); -} - -const blinkCss = `.blink { animation: blink 1.1s linear infinite; } -@keyframes blink { 0%,55% { opacity: 1; } 56%,100% { opacity: 0; } }`; -const flapCss = (s) => `.fa { animation: flapA ${s}s linear infinite; } -.fb { opacity: 0; animation: flapB ${s}s linear infinite; } -@keyframes flapA { 0%,49.9% { opacity: 1; } 50%,100% { opacity: 0; } } -@keyframes flapB { 0%,49.9% { opacity: 0; } 50%,100% { opacity: 1; } }`; -const bird = (x, y, px) => - sprite(CANARY_A, CANARY_PAL, x, y, px, 'class="fa"') + sprite(CANARY_B, CANARY_PAL, x, y, px, 'class="fb"'); - -// One-shot typewriter: each line is revealed by a paper-coloured cover that -// steps to the right, one character per step. Static frame = fully revealed. -function typewriter(lines, x, y0, px, lineGap, colors, cover, clipId, startDelay, cps) { - let body = ''; - let css = ''; - let t = startDelay; - lines.forEach((line, i) => { - const y = y0 + i * lineGap; - const w = textW(line, px) + px * 2; - const n = Math.max(1, line.length); - const dur = n / cps; - body += pixelText(line, x, y, px, colors[Math.min(i, colors.length - 1)]); - body += ``; - css += ` -.cv${i} { transform: translateX(${w}px); animation: cv${i} ${dur.toFixed(2)}s steps(${n}, end) ${t.toFixed(2)}s backwards; } -@keyframes cv${i} { from { transform: translateX(0px); } to { transform: translateX(${w}px); } }`; - t += dur + 0.15; - }); - return { body, css, end: t }; -} - -// ---------------------------------------------------------------- banner -function banner() { - const W = 840, H = 250; - const sparks = [[574, 50, 0], [792, 70, 0.6], [586, 176, 1.2], [800, 168, 1.8]]; - let body = card(W, H); - body += ``; - sparks.forEach(([x, y, d]) => { - body += ``; - }); - body += pixelText('NO SUS', 52, 44, 9, ORANGE); - body += pixelText('NO SUS', 46, 38, 9, INK); - body += pixelText('CANARY', 50, 116, 5, ORANGE); - body += pixelText('EVERY READER GETS THEIR OWN COPY.', 50, 164, 2, INK); - body += `${pixelText('^ PRESS START', 50, 196, 2, ORANGE)}`; - body += pixelText(cfg.event, W - SH - 30 - textW(cfg.event, 2), 196, 2, INK); - body += `${bird(612, 40, 10)}`; - const css = `${blinkCss} -${flapCss(0.5)} -.bob { animation: bob 1.2s ease-in-out infinite alternate; } -@keyframes bob { from { transform: translateY(0); } to { transform: translateY(-8px); } } -.spark { animation: spark 2.4s steps(2, end) infinite; } -@keyframes spark { 0%,100% { opacity: 1; } 50% { opacity: 0; } }`; - write('banner.svg', svgDoc(W, H, 'NO SUS Canary: every reader gets their own copy.', css, body)); -} - -// ---------------------------------------------------------------- buttons -function button(file, label, alt, primary) { - const W = 260, H = 64; - const tw = textW(label, 2); - const body = [ - ``, - ``, - pixelText(label, Math.round((W - 6 - tw) / 2), Math.round((H - 6 - 14) / 2), 2, INK, primary ? 'class="nudge"' : ''), - ].join('\n'); - const css = primary - ? `.nudge { animation: nudge 1.4s ease-in-out infinite; } -@keyframes nudge { 0%,100% { transform: translateX(0); } 50% { transform: translateX(4px); } }` - : ''; - write(file, svgDoc(W, H, alt, css, body)); -} - -// ---------------------------------------------------------------- dialogue box (handheld RPG style) -function dialogue(file, speaker, text, alt) { - const W = 840, px = 3, gap = 34, x0 = 120; - const max = Math.floor((W - x0 - 60) / (6 * px)); - const lines = [speaker, ...wrap(text.toUpperCase(), max)]; - const H = 44 + lines.length * gap + 26; - const inner = { x: 18, y: 18, w: W - SH - 36, h: H - SH - 36 }; - const tw = typewriter(lines, x0, 42, px, gap, [ORANGE, INK], PAPER, 'box', 0.3, 42); - const body = [ - card(W, H), - ``, - `${bird(34, Math.round((H - SH) / 2 - 30), 4)}`, - tw.body, - `${pixelText('`', W - SH - 60, H - SH - 46, 3, INK)}`, - ].join('\n'); - const css = `${flapCss(0.6)} -.bob { animation: bob 1.4s ease-in-out infinite alternate; } -@keyframes bob { from { transform: translateY(0); } to { transform: translateY(-4px); } } -.next { animation: next 0.9s linear ${tw.end.toFixed(2)}s infinite; } -@keyframes next { 0%,55% { opacity: 1; transform: translateY(0); } 56%,100% { opacity: 0.2; transform: translateY(3px); } } -${tw.css}`; - const defs = ``; - write(file, svgDoc(W, H, alt, css, body, defs)); -} - -// ---------------------------------------------------------------- the story (how it works) -function story() { - const W = 840, H = 330, T = 10; - const readers = ['ASHA', 'BEN', 'PRIYA', 'RAJ', 'ZOE']; - const leaker = 2; - const rx = [496, 562, 628, 694, 760]; - const phoneY = 196, envStart = { x: 118, y: 166 }; - let css = ` -.bob { animation: bob 1s ease-in-out infinite alternate; } -@keyframes bob { from { transform: translateY(0); } to { transform: translateY(-5px); } } -${flapCss(0.5)} -.seal { animation: seal ${T}s linear infinite; } -@keyframes seal { 0% { opacity: 0; } 4%,92% { opacity: 1; } 96%,100% { opacity: 0; } } -.pulse { animation: pulse 1s steps(2, end) infinite; } -@keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: 0; } } -.bubble { animation: bubble ${T}s linear infinite; } -@keyframes bubble { 0%,49% { opacity: 0; } 53%,92% { opacity: 1; } 96%,100% { opacity: 0; } } -.leak { opacity: 0; animation: leak ${T}s linear infinite; } -@keyframes leak { 0%,43% { opacity: 0; transform: translate(${rx[leaker] + 1 - 446}px, ${phoneY + 16 - 118}px); } - 44% { opacity: 1; transform: translate(${rx[leaker] + 1 - 446}px, ${phoneY + 16 - 118}px); } - 52% { opacity: 1; transform: translate(0px, 0px); } 55%,100% { opacity: 0; transform: translate(0px, 0px); } } -.mag { animation: mag ${T}s linear infinite; } -@keyframes mag { 0%,54% { opacity: 0; transform: translate(-150px, 0px); } 56% { opacity: 1; transform: translate(-150px, 0px); } - 68% { opacity: 1; transform: translate(0px, 0px); } 72%,100% { opacity: 0; transform: translate(0px, 0px); } } -.win { animation: win ${T}s linear infinite; } -@keyframes win { 0%,69% { opacity: 0; } 70%,73%,77%,81%,92% { opacity: 1; } 71.5%,75%,79% { opacity: 0.2; } 96%,100% { opacity: 0; } } -.who { animation: who ${T}s linear infinite; } -@keyframes who { 0%,73% { opacity: 0; } 76%,92% { opacity: 1; } 96%,100% { opacity: 0; } } -.hl { animation: hl ${T}s linear infinite; } -@keyframes hl { 0%,69% { opacity: 0; } 70%,74%,78%,82%,86%,92% { opacity: 1; } 72%,76%,80%,84% { opacity: 0; } 96%,100% { opacity: 0; } }`; - - let body = card(W, H); - body += ``; - body += ` - -${pixelText('SEALED ON SOLANA', 208, 51, 2, INK)}`; - body += `${bird(40, 188, 5)}`; - body += pixelText('SENDER', 44, 286, 2, ORANGE); - readers.forEach((name, j) => { - body += pixelText(`0${j + 1}`, rx[j] + 4, phoneY - 22, 2, INK); - body += sprite(PHONE, PHONE_PAL, rx[j], phoneY, 3); - const nw = textW(name, 2); - body += pixelText(name, rx[j] + 15 - Math.round(nw / 2), 286, 2, j === leaker ? ORANGE : INK); - }); - readers.forEach((_, j) => { - const fx = rx[j] + 1, fy = phoneY + 16; - const a = 10 + j * 4, b = 22 + j * 4; - css += ` -.env${j} { animation: env${j} ${T}s ease-out infinite; } -@keyframes env${j} { 0%,${a - 0.1}% { opacity: 0; transform: translate(${envStart.x - fx}px, ${envStart.y - fy}px); } - ${a}% { opacity: 1; transform: translate(${envStart.x - fx}px, ${envStart.y - fy}px); } - ${b}% { opacity: 1; transform: translate(0px, 0px); } 92% { opacity: 1; transform: translate(0px, 0px); } 96%,100% { opacity: 0; transform: translate(0px, 0px); } }`; - body += sprite(ENVELOPE, ENV_PAL, fx, fy, 2, `class="env${j}"`); - }); - body += ` -${pixelText('LEAKED!', 342, 106, 3, ORANGE)} - -`; - body += sprite(ENVELOPE, ENV_PAL, 446, 118, 2, 'class="leak"'); - body += sprite(MAGNIFIER, LENS_PAL, 470, 110, 3, 'class="mag"'); - body += ``; - body += `${pixelText('THE CANARY SANG!', 150, 212, 3, ORANGE)}`; - body += `${pixelText(`COPY 0${leaker + 1} = ${readers[leaker]}`, 150, 242, 2, INK)}`; - write('story.svg', svgDoc(W, H, - "Animation: the sender seals a note on Solana, five readers each receive a different copy, Priya's copy leaks, NO SUS scans it and the canary sings: copy 03 is Priya's.", - css, body)); -} - -// ---------------------------------------------------------------- the catch (battle text scene) -function battle() { - const W = 840, H = 390, T = 12, cps = 24, px = 3; - const lines = ['A WILD LEAK APPEARED!', 'CANARY USED FINGERPRINT!', "IT'S SUPER EFFECTIVE!", "IT WAS PRIYA'S COPY! #03"]; - const windows = [[0, 22], [25, 47], [50, 72], [75, 95]]; - const box = { x: 20, y: 290, w: W - SH - 40, h: 76 }; - let css = ` -${flapCss(0.6)} -.foe { animation: foe ${T}s linear infinite; } -@keyframes foe { - 0%,29% { transform: translate(0px, 0px); opacity: 1; } - 30%,32%,34%,36% { opacity: .15; } - 31%,33%,35%,37% { opacity: 1; } - 50% { transform: translate(0px, 0px); } - 51% { transform: translate(-8px, 0px); } - 52% { transform: translate(8px, 0px); } - 53% { transform: translate(-8px, 0px); } - 54%,76% { transform: translate(0px, 0px); opacity: 1; } - 82%,95% { transform: translate(0px, 40px); opacity: 0; } - 96%,100% { transform: translate(0px, 0px); opacity: 1; } } -.hp { transform-box: fill-box; transform-origin: 0% 50%; transform: scaleX(0.06); animation: hp ${T}s linear infinite; } -@keyframes hp { 0%,50% { transform: scaleX(1); } 58%,95% { transform: scaleX(0.06); } 100% { transform: scaleX(1); } } -.xpup { opacity: 0; animation: xpup ${T}s linear infinite; } -@keyframes xpup { 0%,78% { opacity: 0; transform: translate(0px, 0px); } 81% { opacity: 1; } 93% { opacity: 1; transform: translate(0px, -18px); } 96%,100% { opacity: 0; } } -.next { animation: next 0.9s linear infinite; } -@keyframes next { 0%,55% { opacity: 1; } 56%,100% { opacity: 0.2; } }`; - - const infoBox = (x, y, w, name, lv, bar) => ` -${pixelText(name, x + 18, y + 14, 3, INK)} -${pixelText(lv, x + w - 18 - textW(lv, 2), y + 18, 2, INK)} -${pixelText('HP', x + 18, y + 50, 2, ORANGE)} - -`; - - let body = card(W, H, 18); - body += ``; - body += ``; - body += infoBox(36, 30, 330, 'LEAK', 'LV3', 'hp'); - body += `${sprite(LEAK, LEAK_PAL, 560, 50, 8)}`; - body += bird(160, 156, 8); - body += infoBox(466, 200, 340, 'CANARY', 'LV99', ''); - body += `${pixelText('+500 XP', 560, 166, 3, ORANGE)}`; - body += ``; - body += ``; - lines.forEach((line, i) => { - const [a, b] = windows[i]; - const n = line.length; - const w = textW(line, px) + px * 2; - const d = ((n / cps) / T) * 100; - const last = i === lines.length - 1; - css += ` -.bl${i} { opacity: ${last ? 1 : 0}; animation: bl${i} ${T}s linear infinite; } -@keyframes bl${i} { 0%,${(a - 0.01).toFixed(2)}% { opacity: 0; } ${a}%,${b}% { opacity: 1; } ${(b + 0.01).toFixed(2)}%,100% { opacity: 0; } } -.bc${i} { transform: translateX(${w}px); animation: bc${i} ${T}s linear infinite; } -@keyframes bc${i} { 0%,${a}% { transform: translateX(0px); animation-timing-function: steps(${n}, end); } ${(a + d).toFixed(2)}%,100% { transform: translateX(${w}px); } }`; - body += `${pixelText(line, 50, 318, px, INK)}`; - }); - body += `${pixelText('`', box.x + box.w - 50, 334, 3, INK)}`; - const defs = ``; - write('battle.svg', svgDoc(W, H, - "Battle text: A wild LEAK appeared! Canary used FINGERPRINT! It's super effective! It was Priya's copy, number 03.", - css, body, defs)); -} - -// ---------------------------------------------------------------- footer -function gameOver() { - const W = 840, H = 100; - const a = 'GAME OVER?', b = '^ PLAY AGAIN AT THE LIVE APP'; - let body = card(W, H); - body += pixelText(a, Math.round((W - SH - textW(a, 3)) / 2), 22, 3, ORANGE); - body += `${pixelText(b, Math.round((W - SH - textW(b, 2)) / 2), 58, 2, INK)}`; - write('game-over.svg', svgDoc(W, H, 'Game over? Play again at the live app.', blinkCss, body)); -} - -// ---------------------------------------------------------------- README -const zeroAddr = /^0x0{40}$/i; -const has = (v) => typeof v === 'string' && v.trim() !== '' && !zeroAddr.test(v); - -function readme() { - const live = cfg.liveUrl; - const liveText = live.replace(/^https?:\/\//, '').replace(/#.*$/, ''); - const repo = cfg.repoUrl; - const repoName = repo.split('/').pop(); - const testnet = has(cfg.contractTestnet) ? cfg.contractTestnet : null; - const mainnet = has(cfg.contractMainnet) ? cfg.contractMainnet : null; - const testnetUrl = testnet ? `${cfg.explorerTestnet}/address/${testnet}` : null; - const mainnetUrl = mainnet ? `${cfg.explorerMainnet}/address/${mainnet}` : null; - const link = (url, text) => (url ? `[${text}](${url})` : '_soon_'); - const ok = (b) => (b ? '**Done**' : 'Soon'); - const team = (cfg.team ?? []).join(' · '); - const buildInPublic = [cfg.xPostUrl, cfg.demoVideoUrl, cfg.adVideoUrl].some(Boolean); - // Solana devnet memo log: an Explorer link once the first devnet signature is recorded - // in readme.config.json (solanaDevnetTxUrl), a visible pending marker until then. - const solanaTx = has(cfg.solanaDevnetTxUrl) ? cfg.solanaDevnetTxUrl : null; - const solanaMd = solanaTx ? `[View on Solana Explorer](${solanaTx})` : '``'; - - const solanaState = solanaTx ? '**Done**' : 'In progress'; - - const checklist = [ - `| ${ok(!!live)} | Live app | [${liveText}](${live}) |`, - `| ${solanaState} | Solana devnet memo log | ${solanaMd} |`, - `| ${solanaState} | Live transaction in the demo | Every seal and every **Open my copy** tap |`, - `| **Done** | Public repo you can run | [Run it yourself](#more) |`, - `| ${ok(buildInPublic)} | Build in public | ${link(cfg.xPostUrl, 'X post')} · ${link(cfg.demoVideoUrl, 'demo')} · ${link(cfg.adVideoUrl, 'ad')} |`, - `| ${ok(!!cfg.customDomain)} | Bonus: custom domain | ${cfg.customDomain ? `[${liveText.split('/')[0]}](${live})` : '_soon_'} |`, - ].join('\n'); - - // The Monad testnet prototype gets one line, no more. Mainnet is listed - // only if a mainnet address is ever configured. - const monadLinks = [ - testnet ? `[contract](${testnetUrl})` : null, - cfg.verified && testnet ? `[verified source](${cfg.verifiedUrl || testnetUrl})` : null, - mainnet ? `[mainnet](${mainnetUrl})` : null, - ].filter(Boolean).join(', '); - const monadLine = `Earlier prototype: the same flow on Monad testnet${monadLinks ? ` (${monadLinks})` : ''}, still in the repo behind the \`CANARY_MONAD\` build flag.`; - - return ` - -

- NO SUS Canary: every reader gets their own copy. -

- -

- Play live -   - Judge checklist -

- -

Prof. Canary: Share one link. Every reader gets a secretly different copy. If it leaks, I tell you whose copy it was.

- -## Step 1: Watch - -

Animation: the sender seals a note on Solana, five readers each receive a different copy, Priya's copy leaks, NO SUS scans it and the canary sings: copy 03 is Priya's.

- -## Step 2: Try it - -**60 seconds. No wallet. No install.** - -1. **Make a note.** Open the [live app](${live}) → **PLAY CANARY** → **Create a Canary link** → **Use the demo note** → **Create Canary link**. -2. **Be a reader.** Open that link in a private window, type any name, tap **Open my copy**. -3. **Catch the leak.** Copy the reader's text → **Check a leak** → paste. It names the reader. - -

Battle text: A wild LEAK appeared! Canary used FINGERPRINT! It's super effective! It was Priya's copy, number 03.

- -## Step 3: Why Solana - -- **One memo per seal and per open.** Sealing a note and every **Open my copy** each write one Memo-program transaction on Solana devnet. -- **Hashes only.** A memo carries a hashed note id, one hash of all copies and an anonymous reader tag. Never the text, the key or a name. -- **A link on every chip.** Each record has its own Solana Explorer link in the app. -- **No wallet for readers.** A relayer pays the fee, about **0.000005 SOL** per memo. - -## Judge checklist - -| | What | Where | -|---|---|---| -${checklist} - -${monadLine} - -> **Honest limits:** it names *whose copy* leaked, not *who shared it*. It doesn't stop screenshots. It makes them traceable. - -## More - -
-How the fingerprint works - -- **Write once.** NO SUS swaps safe word twins (\`don't\` / \`do not\`, \`five\` / \`5\`) to make up to **100 copies**. Each looks normal, each is unique. -- **Seal it.** Copies are encrypted in your browser. The key lives only in the link's \`#fragment\`. A seal memo puts one hash of all copies on Solana devnet before anyone reads. -- **Share it.** Each reader gets the next unused copy. An open memo records it on Solana with an anonymous tag, never the name. -- **Catch it.** Paste a leak into **Check a leak**. Matching runs on your device. If too little text survived, it names nobody. -
- -
-Run it yourself - -You need Flutter 3.44+ and Node 22+. - -\`\`\`bash -git clone ${repo}.git -cd ${repoName} - -# App (web) -cd app -flutter pub get -flutter run -d chrome - -# Edge function checks (offline) -cd .. -npx -y deno@2 check app/supabase/functions/canary/index.ts -npx -y deno@2 test app/supabase/functions/canary/gating_test.ts -\`\`\` - -Own backend: see [\`docs/canary/NOSUS_CANARY_BUILD_PLAN.md\`](docs/canary/NOSUS_CANARY_BUILD_PLAN.md). -
- -
-Architecture - -\`\`\`mermaid -%%{init: {'theme':'base','themeVariables':{'primaryColor':'${PAPER}','primaryTextColor':'${INK}','primaryBorderColor':'${INK}','lineColor':'${ORANGE}','fontFamily':'monospace'}}}%% -flowchart LR - S["Sender app"] -- "encrypted copies" --> F["canary function"] - F -- "seal memo" --> M[("Memo program on Solana devnet")] - R["Reader"] -- "open + name" --> F - F -- "open memo" --> M - F -- "their copy" --> R -\`\`\` - -- **Chain:** hashes and anonymous tags only. -- **Server:** encrypted copies it can't read. -- **Sender's device:** the key and every copy's fingerprint. -
- -
-Test results - -Fingerprint test harness, 15-slot demo note: - -| Leak type | Right copy | Wrong copy | -|---|---|---| -| Full copy, marker removed | 300 / 300 | 0 | -| OCR-style (caps, no punctuation) | 300 / 300 | 0 | -| 2% random typos | 300 / 300 | 0 | -| Partial excerpts (30–70%) | named only when sure | 0 / 600 | -
- -Full technical write-up (setup, deployment and relayers): [\`docs/TECHNICAL_README.md\`](docs/TECHNICAL_README.md) - ---- - -${team ? `**Team:** ${team} · ` : ''}Part of **NO SUS** - -

Game over? Play again at the live app.

-`; -} - -// ---------------------------------------------------------------- run -console.log('Building NO SUS Canary README…'); -banner(); -button('btn-play.svg', '^ PLAY LIVE', 'Play live', true); -button('btn-judge.svg', 'JUDGE CHECKLIST', 'Judge checklist', false); -dialogue('say-hello.svg', 'PROF. CANARY:', 'Share one link. Every reader gets a secretly different copy. If it leaks, I tell you whose copy it was.', - 'Prof. Canary: Share one link. Every reader gets a secretly different copy. If it leaks, I tell you whose copy it was.'); -story(); -battle(); -gameOver(); -// Remove assets from older versions of this README. -for (const f of fs.readdirSync(assetDir)) { - if (f.endsWith('.svg') && !written.has(f)) { - fs.rmSync(path.join(assetDir, f)); - console.log(` removed stale assets/readme/${f}`); - } -} -fs.writeFileSync(path.join(outDir, 'README.md'), readme()); -console.log(' wrote README.md'); -console.log('Done.'); diff --git a/tool/check-repository.mjs b/tool/check-repository.mjs deleted file mode 100644 index 481817d..0000000 --- a/tool/check-repository.mjs +++ /dev/null @@ -1,55 +0,0 @@ -import { existsSync, readFileSync, readdirSync, statSync } from "node:fs"; -import { join, relative } from "node:path"; - -const root = process.cwd(); -const required = [ - "AGENTS.md", - "CLAUDE.md", - "README.md", - "docs/STATUS.md", - "docs/CURSOR_HANDOFF.md", - "docs/ARCHITECTURE.md", - "docs/LIT_MONAD_SPIKE.md", - "web/src/lib/lit-conditions.ts", - "tool/threshold-spike/conditions.mjs", - "contracts/README.md", - "contracts/AGENTS.md", - "web/README.md", - "web/AGENTS.md", - "supabase/README.md", - "supabase/AGENTS.md", - ".cursor/rules/00-project.mdc", - ".cursor/rules/10-contracts.mdc", - ".cursor/rules/20-web.mdc", -]; - -const failures = required.filter((file) => !existsSync(join(root, file))).map( - (file) => `Missing required navigation file: ${file}`, -); - -const rootRules = readFileSync(join(root, "AGENTS.md"), "utf8"); -if (!rootRules.includes("Would you like to finalize today's work?")) { - failures.push("AGENTS.md lacks the required finalization prompt."); -} - -function visit(directory) { - for (const item of readdirSync(directory)) { - if ([".git", "node_modules", ".next", "artifacts", "cache"].includes(item)) continue; - const fullPath = join(directory, item); - if (statSync(fullPath).isDirectory()) visit(fullPath); - else if (item.endsWith(".mdc")) { - const contents = readFileSync(fullPath, "utf8"); - if (!contents.startsWith("---\n")) { - failures.push(`Cursor rule lacks front matter: ${relative(root, fullPath)}`); - } - } - } -} -visit(join(root, ".cursor")); - -if (failures.length) { - console.error(failures.join("\n")); - process.exit(1); -} - -console.log("Repository navigation and Cursor handoff checks passed."); diff --git a/tool/threshold-spike/README.md b/tool/threshold-spike/README.md deleted file mode 100644 index c08a1a5..0000000 --- a/tool/threshold-spike/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# Gate T1 runner - -This runner is the first proof for the product promise. It uses three controlled -test wallets: a sender seals a harmless probe for the recipient, the recipient -is denied before acknowledgement, decrypts after acknowledgement, and a stranger -is denied. It never prints the plaintext probe. - -Dry-run the Lit `canDecrypt` condition without enabling the product. - -```sh -npm install -npm run check -npm run dry-run -``` - -`npm run connect` handshakes Lit naga-dev and attempts a client-side encrypt. That still -does not prove decryption, does not deploy the contract, and does not flip the product -gate. `npm run live` additionally requires `THRESHOLD_SPIKE_RUN=1`, a deployed -`NoSusMonadDrops` address, and three controlled test wallets. Set -`THRESHOLD_SPIKE_CHECK_EXPIRY=1` to wait for and verify expiry in the same run. - -A successful live run still does not flip `web/src/lib/threshold.ts` until every case in -`docs/LIT_MONAD_SPIKE.md` is recorded in `docs/STATUS.md`. diff --git a/tool/threshold-spike/conditions.mjs b/tool/threshold-spike/conditions.mjs deleted file mode 100644 index 61c8117..0000000 --- a/tool/threshold-spike/conditions.mjs +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Canonical Lit access-control condition for Gate T1. - * Keep this aligned with web/src/lib/lit-conditions.ts. - */ - -export const LIT_ACC_CHAIN = "monadTestnet"; -export const CAN_DECRYPT_ABI = { - name: "canDecrypt", - type: "function", - stateMutability: "view", - inputs: [ - { name: "id", type: "bytes32" }, - { name: "account", type: "address" }, - ], - outputs: [{ name: "", type: "bool", internalType: "bool" }], -}; - -export function buildCanDecryptConditions(contractAddress, dropId) { - return [ - { - contractAddress, - chain: LIT_ACC_CHAIN, - functionName: "canDecrypt", - functionParams: [dropId, ":userAddress"], - functionAbi: CAN_DECRYPT_ABI, - returnValueTest: { - key: "", - comparator: "=", - value: "true", - }, - }, - ]; -} diff --git a/tool/threshold-spike/conditions.test.mjs b/tool/threshold-spike/conditions.test.mjs deleted file mode 100644 index 846f05f..0000000 --- a/tool/threshold-spike/conditions.test.mjs +++ /dev/null @@ -1,32 +0,0 @@ -import assert from "node:assert/strict"; -import { readFileSync } from "node:fs"; -import { dirname, join } from "node:path"; -import { fileURLToPath } from "node:url"; -import test from "node:test"; - -import { buildCanDecryptConditions, LIT_ACC_CHAIN } from "./conditions.mjs"; - -const root = join(dirname(fileURLToPath(import.meta.url)), "..", ".."); -const webSource = readFileSync(join(root, "web/src/lib/lit-conditions.ts"), "utf8"); - -test("the condition binds canDecrypt to the authenticated wallet on monadTestnet", () => { - const dropId = `0x${"11".repeat(32)}`; - const contract = "0x0000000000000000000000000000000000000001"; - const [condition] = buildCanDecryptConditions(contract, dropId); - - assert.equal(LIT_ACC_CHAIN, "monadTestnet"); - assert.equal(condition.chain, "monadTestnet"); - assert.equal(condition.functionName, "canDecrypt"); - assert.deepEqual(condition.functionParams, [dropId, ":userAddress"]); - assert.equal(condition.returnValueTest.value, "true"); - const serialized = JSON.stringify(condition); - assert.doesNotMatch(serialized, /plaintext|privateKey|salt/i); - assert.equal(condition.functionParams.includes(":userAddress"), true); -}); - -test("the web module uses the same chain, predicate, and user-address binding", () => { - assert.match(webSource, /export const LIT_ACC_CHAIN = "monadTestnet"/); - assert.match(webSource, /functionName: "canDecrypt"/); - assert.match(webSource, /:userAddress/); - assert.match(webSource, /value: "true"/); -}); diff --git a/tool/threshold-spike/package-lock.json b/tool/threshold-spike/package-lock.json deleted file mode 100644 index c796958..0000000 --- a/tool/threshold-spike/package-lock.json +++ /dev/null @@ -1,13776 +0,0 @@ -{ - "name": "@nosus-monad/threshold-spike", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "@nosus-monad/threshold-spike", - "version": "0.1.0", - "dependencies": { - "@lit-protocol/auth": "8.2.3", - "@lit-protocol/lit-client": "8.3.1", - "@lit-protocol/networks": "8.4.1", - "viem": "2.38.3" - } - }, - "node_modules/@adraffy/ens-normalize": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.1.tgz", - "integrity": "sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==", - "license": "MIT" - }, - "node_modules/@assemblyscript/loader": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.9.4.tgz", - "integrity": "sha512-HazVq9zwTVwGmqdwYzu7WyQ6FQVZ7SwET0KKQuKm55jD0IfUpZgN0OPIiZG3zV1iSrVYcN0bdwLRXI/VNCYsUA==", - "license": "Apache-2.0" - }, - "node_modules/@babel/code-frame": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", - "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.29.7", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", - "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", - "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.7", - "@babel/helper-compilation-targets": "^7.29.7", - "@babel/helper-module-transforms": "^7.29.7", - "@babel/helpers": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/template": "^7.29.7", - "@babel/traverse": "^7.29.7", - "@babel/types": "^7.29.7", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", - "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.8", - "@babel/types": "^7.29.8", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", - "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.29.7", - "@babel/helper-validator-option": "^7.29.7", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", - "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", - "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", - "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7", - "@babel/traverse": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", - "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", - "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", - "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", - "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", - "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", - "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.8" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", - "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", - "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", - "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", - "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", - "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.8", - "@babel/helper-globals": "^7.29.7", - "@babel/parser": "^7.29.8", - "@babel/template": "^7.29.7", - "@babel/types": "^7.29.8", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", - "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@ethersproject/abi": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", - "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", - "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0" - } - }, - "node_modules/@ethersproject/abstract-provider/node_modules/@ethersproject/transactions": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", - "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0" - } - }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", - "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0" - } - }, - "node_modules/@ethersproject/address": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", - "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/rlp": "^5.8.0" - } - }, - "node_modules/@ethersproject/base64": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", - "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0" - } - }, - "node_modules/@ethersproject/basex": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", - "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/properties": "^5.8.0" - } - }, - "node_modules/@ethersproject/bignumber": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", - "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/@ethersproject/bytes": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", - "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/constants": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", - "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0" - } - }, - "node_modules/@ethersproject/contracts": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", - "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0" - } - }, - "node_modules/@ethersproject/hash": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", - "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "node_modules/@ethersproject/hdnode": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", - "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" - } - }, - "node_modules/@ethersproject/hdnode/node_modules/@ethersproject/transactions": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", - "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0" - } - }, - "node_modules/@ethersproject/json-wallets": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", - "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "node_modules/@ethersproject/json-wallets/node_modules/@ethersproject/transactions": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", - "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0" - } - }, - "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "license": "MIT" - }, - "node_modules/@ethersproject/keccak256": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", - "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@ethersproject/logger": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", - "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT" - }, - "node_modules/@ethersproject/networks": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", - "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", - "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/sha2": "^5.8.0" - } - }, - "node_modules/@ethersproject/properties": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", - "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/providers": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.0.tgz", - "integrity": "sha512-+TTrrINMzZ0aXtlwO/95uhAggKm4USLm1PbeCBR/3XZ7+Oey+3pMyddzZEyRhizHpy1HXV0FRWRMI1O3EGYibA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "node_modules/@ethersproject/random": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", - "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/rlp": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", - "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/sha2": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", - "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/signing-key": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", - "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "bn.js": "^5.2.1", - "elliptic": "6.6.1", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/solidity": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", - "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "node_modules/@ethersproject/strings": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", - "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" - } - }, - "node_modules/@ethersproject/units": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", - "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/wallet": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", - "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/json-wallets": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" - } - }, - "node_modules/@ethersproject/wallet/node_modules/@ethersproject/transactions": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", - "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0" - } - }, - "node_modules/@ethersproject/web": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", - "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "node_modules/@ethersproject/wordlists": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", - "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", - "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/diff-sequences": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", - "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/environment": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.2.0.tgz", - "integrity": "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==", - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "jest-mock": "30.2.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.2.0.tgz", - "integrity": "sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==", - "license": "MIT", - "dependencies": { - "expect": "30.2.0", - "jest-snapshot": "30.2.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.2.0.tgz", - "integrity": "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==", - "license": "MIT", - "dependencies": { - "@jest/get-type": "30.1.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.2.0.tgz", - "integrity": "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==", - "license": "MIT", - "dependencies": { - "@jest/types": "30.2.0", - "@sinonjs/fake-timers": "^13.0.0", - "@types/node": "*", - "jest-message-util": "30.2.0", - "jest-mock": "30.2.0", - "jest-util": "30.2.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/get-type": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", - "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.2.0.tgz", - "integrity": "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==", - "license": "MIT", - "dependencies": { - "@jest/environment": "30.2.0", - "@jest/expect": "30.2.0", - "@jest/types": "30.2.0", - "jest-mock": "30.2.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/pattern": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", - "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-regex-util": "30.0.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/schemas": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", - "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/snapshot-utils": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz", - "integrity": "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==", - "license": "MIT", - "dependencies": { - "@jest/types": "30.2.0", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "natural-compare": "^1.4.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.2.0.tgz", - "integrity": "sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.27.4", - "@jest/types": "30.2.0", - "@jridgewell/trace-mapping": "^0.3.25", - "babel-plugin-istanbul": "^7.0.1", - "chalk": "^4.1.2", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.2.0", - "jest-regex-util": "30.0.1", - "jest-util": "30.2.0", - "micromatch": "^4.0.8", - "pirates": "^4.0.7", - "slash": "^3.0.0", - "write-file-atomic": "^5.0.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/types": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz", - "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==", - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.5", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", - "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@lit-protocol/access-control-conditions": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@lit-protocol/access-control-conditions/-/access-control-conditions-8.0.2.tgz", - "integrity": "sha512-5F5fA6QZL4+hYmF0knePoPzyfZLvEudKdf/4Sn3ioHn5jivgnr9QoYL//eHwry7G9kdgeFSJz8rbxdj/d6WjeQ==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@ethersproject/contracts": "5.8.0", - "@ethersproject/providers": "5.7.0", - "@lit-protocol/access-control-conditions-schemas": "8.0.2", - "@lit-protocol/constants": "8.0.2", - "@lit-protocol/contracts": "0.5.3", - "@lit-protocol/logger": "8.0.2", - "@lit-protocol/schemas": "8.0.2", - "@lit-protocol/types": "8.0.2", - "@openagenda/verror": "^3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ethers": "^5.7.1", - "pino": "^9.6.0", - "siwe": "^2.3.2", - "tslib": "^2.8.1", - "typechain": "8.3.2", - "viem": "2.29.4", - "zod": "3.24.3", - "zod-validation-error": "3.4.0" - } - }, - "node_modules/@lit-protocol/access-control-conditions-schemas": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@lit-protocol/access-control-conditions-schemas/-/access-control-conditions-schemas-8.0.2.tgz", - "integrity": "sha512-aMElsRHLfjOM/S5cEwta6G2+OblSnIve51lv9HGjpb5Lamru4qqVTA8yQwlh7Wh5Sk4/1vZyZc1Mwp3fLxK+Aw==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@lit-protocol/constants": "8.0.2", - "@lit-protocol/contracts": "0.5.3", - "@openagenda/verror": "^3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ethers": "^5.7.1", - "tslib": "^2.8.1", - "typechain": "8.3.2", - "viem": "2.29.4", - "zod": "3.24.3" - } - }, - "node_modules/@lit-protocol/access-control-conditions-schemas/node_modules/@ethersproject/contracts": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", - "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "^5.8.0", - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0" - } - }, - "node_modules/@lit-protocol/access-control-conditions-schemas/node_modules/@ethersproject/providers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", - "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0", - "bech32": "1.1.4", - "ws": "8.18.0" - } - }, - "node_modules/@lit-protocol/access-control-conditions-schemas/node_modules/@ethersproject/transactions": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", - "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0" - } - }, - "node_modules/@lit-protocol/access-control-conditions-schemas/node_modules/@lit-protocol/constants": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@lit-protocol/constants/-/constants-8.0.2.tgz", - "integrity": "sha512-2jw9PNmU2w/DVRn86+hQmoiW5uCl9bNCPZv/4eS13fiPhi4VERys5lC9zxn4uUyLeCUivDlPnuP1LO0ElyfXxA==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@lit-protocol/contracts": "0.5.3", - "@openagenda/verror": "^3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ethers": "^5.7.1", - "tslib": "^2.8.1", - "typechain": "8.3.2", - "viem": "2.29.4", - "zod": "3.24.3" - } - }, - "node_modules/@lit-protocol/access-control-conditions-schemas/node_modules/@lit-protocol/contracts": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@lit-protocol/contracts/-/contracts-0.5.3.tgz", - "integrity": "sha512-s5q/X0iGLdJYY8dGUJi8EmVkfVJRxMfsVXAb4t/8YEWvOC1oQHuO069nqTPmCqkJO8OcDUknaSSkuxuDIvp2oQ==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "peerDependencies": { - "typescript": "^5.0.0" - } - }, - "node_modules/@lit-protocol/access-control-conditions-schemas/node_modules/@noble/curves": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", - "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.7.2" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/access-control-conditions-schemas/node_modules/@noble/hashes": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", - "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/access-control-conditions-schemas/node_modules/@scure/bip32": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.6.2.tgz", - "integrity": "sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw==", - "license": "MIT", - "dependencies": { - "@noble/curves": "~1.8.1", - "@noble/hashes": "~1.7.1", - "@scure/base": "~1.2.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/access-control-conditions-schemas/node_modules/@scure/bip39": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.5.4.tgz", - "integrity": "sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.7.1", - "@scure/base": "~1.2.4" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/access-control-conditions-schemas/node_modules/ethers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", - "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "5.8.0", - "@ethersproject/abstract-provider": "5.8.0", - "@ethersproject/abstract-signer": "5.8.0", - "@ethersproject/address": "5.8.0", - "@ethersproject/base64": "5.8.0", - "@ethersproject/basex": "5.8.0", - "@ethersproject/bignumber": "5.8.0", - "@ethersproject/bytes": "5.8.0", - "@ethersproject/constants": "5.8.0", - "@ethersproject/contracts": "5.8.0", - "@ethersproject/hash": "5.8.0", - "@ethersproject/hdnode": "5.8.0", - "@ethersproject/json-wallets": "5.8.0", - "@ethersproject/keccak256": "5.8.0", - "@ethersproject/logger": "5.8.0", - "@ethersproject/networks": "5.8.0", - "@ethersproject/pbkdf2": "5.8.0", - "@ethersproject/properties": "5.8.0", - "@ethersproject/providers": "5.8.0", - "@ethersproject/random": "5.8.0", - "@ethersproject/rlp": "5.8.0", - "@ethersproject/sha2": "5.8.0", - "@ethersproject/signing-key": "5.8.0", - "@ethersproject/solidity": "5.8.0", - "@ethersproject/strings": "5.8.0", - "@ethersproject/transactions": "5.8.0", - "@ethersproject/units": "5.8.0", - "@ethersproject/wallet": "5.8.0", - "@ethersproject/web": "5.8.0", - "@ethersproject/wordlists": "5.8.0" - } - }, - "node_modules/@lit-protocol/access-control-conditions-schemas/node_modules/viem": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.29.4.tgz", - "integrity": "sha512-Dhyae+w1LKKpYVXypGjBnZ3WU5EHl/Uip5RtVwVRYSVxD5VvHzqKzIfbFU1KP4vnnh3++ZNgLjBY/kVT/tPrrg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@noble/curves": "1.8.2", - "@noble/hashes": "1.7.2", - "@scure/bip32": "1.6.2", - "@scure/bip39": "1.5.4", - "abitype": "1.0.8", - "isows": "1.0.7", - "ox": "0.6.9", - "ws": "8.18.1" - }, - "peerDependencies": { - "typescript": ">=5.0.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/access-control-conditions-schemas/node_modules/viem/node_modules/abitype": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.8.tgz", - "integrity": "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/wevm" - }, - "peerDependencies": { - "typescript": ">=5.0.4", - "zod": "^3 >=3.22.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/access-control-conditions-schemas/node_modules/viem/node_modules/ox": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/ox/-/ox-0.6.9.tgz", - "integrity": "sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@adraffy/ens-normalize": "^1.10.1", - "@noble/curves": "^1.6.0", - "@noble/hashes": "^1.5.0", - "@scure/bip32": "^1.5.0", - "@scure/bip39": "^1.4.0", - "abitype": "^1.0.6", - "eventemitter3": "5.0.1" - }, - "peerDependencies": { - "typescript": ">=5.4.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/access-control-conditions-schemas/node_modules/viem/node_modules/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/access-control-conditions-schemas/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/access-control-conditions/node_modules/@ethersproject/contracts": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", - "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "^5.8.0", - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0" - } - }, - "node_modules/@lit-protocol/access-control-conditions/node_modules/@ethersproject/transactions": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", - "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0" - } - }, - "node_modules/@lit-protocol/access-control-conditions/node_modules/@lit-protocol/constants": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@lit-protocol/constants/-/constants-8.0.2.tgz", - "integrity": "sha512-2jw9PNmU2w/DVRn86+hQmoiW5uCl9bNCPZv/4eS13fiPhi4VERys5lC9zxn4uUyLeCUivDlPnuP1LO0ElyfXxA==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@lit-protocol/contracts": "0.5.3", - "@openagenda/verror": "^3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ethers": "^5.7.1", - "tslib": "^2.8.1", - "typechain": "8.3.2", - "viem": "2.29.4", - "zod": "3.24.3" - } - }, - "node_modules/@lit-protocol/access-control-conditions/node_modules/@lit-protocol/contracts": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@lit-protocol/contracts/-/contracts-0.5.3.tgz", - "integrity": "sha512-s5q/X0iGLdJYY8dGUJi8EmVkfVJRxMfsVXAb4t/8YEWvOC1oQHuO069nqTPmCqkJO8OcDUknaSSkuxuDIvp2oQ==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "peerDependencies": { - "typescript": "^5.0.0" - } - }, - "node_modules/@lit-protocol/access-control-conditions/node_modules/@lit-protocol/schemas": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@lit-protocol/schemas/-/schemas-8.0.2.tgz", - "integrity": "sha512-SdbYcm8nGg7HDyIgp/LK3d9wDZ9jpzZdPiRJeBHfoKfVq5qf44hugy/BO3IJXROVb+6TqrsEbsUS1rlqbqi/0A==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@lit-protocol/access-control-conditions-schemas": "8.0.2", - "@lit-protocol/constants": "8.0.2", - "@lit-protocol/contracts": "0.5.3", - "@openagenda/verror": "^3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ethers": "^5.7.1", - "siwe": "^2.3.2", - "tslib": "^2.8.1", - "typechain": "8.3.2", - "viem": "2.29.4", - "zod": "3.24.3", - "zod-validation-error": "3.4.0" - } - }, - "node_modules/@lit-protocol/access-control-conditions/node_modules/@lit-protocol/types": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@lit-protocol/types/-/types-8.0.2.tgz", - "integrity": "sha512-IDppgwcAPiIBmzVhfgK5h/5WLhJPFnlEhKqq/6X24M+sD8JL/rfac9P99+lHYMienki8rj4L9+zIUDIotFZCLw==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@lit-protocol/access-control-conditions-schemas": "8.0.2", - "@lit-protocol/constants": "8.0.2", - "@lit-protocol/contracts": "0.5.3", - "@lit-protocol/schemas": "8.0.2", - "@openagenda/verror": "^3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ethers": "^5.7.1", - "siwe": "^2.3.2", - "tslib": "^2.8.1", - "typechain": "8.3.2", - "viem": "2.29.4", - "zod": "3.24.3", - "zod-validation-error": "3.4.0" - } - }, - "node_modules/@lit-protocol/access-control-conditions/node_modules/@noble/curves": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", - "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.7.2" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/access-control-conditions/node_modules/@noble/hashes": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", - "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/access-control-conditions/node_modules/@scure/bip32": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.6.2.tgz", - "integrity": "sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw==", - "license": "MIT", - "dependencies": { - "@noble/curves": "~1.8.1", - "@noble/hashes": "~1.7.1", - "@scure/base": "~1.2.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/access-control-conditions/node_modules/@scure/bip39": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.5.4.tgz", - "integrity": "sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.7.1", - "@scure/base": "~1.2.4" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/access-control-conditions/node_modules/ethers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", - "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "5.8.0", - "@ethersproject/abstract-provider": "5.8.0", - "@ethersproject/abstract-signer": "5.8.0", - "@ethersproject/address": "5.8.0", - "@ethersproject/base64": "5.8.0", - "@ethersproject/basex": "5.8.0", - "@ethersproject/bignumber": "5.8.0", - "@ethersproject/bytes": "5.8.0", - "@ethersproject/constants": "5.8.0", - "@ethersproject/contracts": "5.8.0", - "@ethersproject/hash": "5.8.0", - "@ethersproject/hdnode": "5.8.0", - "@ethersproject/json-wallets": "5.8.0", - "@ethersproject/keccak256": "5.8.0", - "@ethersproject/logger": "5.8.0", - "@ethersproject/networks": "5.8.0", - "@ethersproject/pbkdf2": "5.8.0", - "@ethersproject/properties": "5.8.0", - "@ethersproject/providers": "5.8.0", - "@ethersproject/random": "5.8.0", - "@ethersproject/rlp": "5.8.0", - "@ethersproject/sha2": "5.8.0", - "@ethersproject/signing-key": "5.8.0", - "@ethersproject/solidity": "5.8.0", - "@ethersproject/strings": "5.8.0", - "@ethersproject/transactions": "5.8.0", - "@ethersproject/units": "5.8.0", - "@ethersproject/wallet": "5.8.0", - "@ethersproject/web": "5.8.0", - "@ethersproject/wordlists": "5.8.0" - } - }, - "node_modules/@lit-protocol/access-control-conditions/node_modules/ethers/node_modules/@ethersproject/providers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", - "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0", - "bech32": "1.1.4", - "ws": "8.18.0" - } - }, - "node_modules/@lit-protocol/access-control-conditions/node_modules/ethers/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/access-control-conditions/node_modules/viem": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.29.4.tgz", - "integrity": "sha512-Dhyae+w1LKKpYVXypGjBnZ3WU5EHl/Uip5RtVwVRYSVxD5VvHzqKzIfbFU1KP4vnnh3++ZNgLjBY/kVT/tPrrg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@noble/curves": "1.8.2", - "@noble/hashes": "1.7.2", - "@scure/bip32": "1.6.2", - "@scure/bip39": "1.5.4", - "abitype": "1.0.8", - "isows": "1.0.7", - "ox": "0.6.9", - "ws": "8.18.1" - }, - "peerDependencies": { - "typescript": ">=5.0.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/access-control-conditions/node_modules/viem/node_modules/abitype": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.8.tgz", - "integrity": "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/wevm" - }, - "peerDependencies": { - "typescript": ">=5.0.4", - "zod": "^3 >=3.22.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/access-control-conditions/node_modules/viem/node_modules/ox": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/ox/-/ox-0.6.9.tgz", - "integrity": "sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@adraffy/ens-normalize": "^1.10.1", - "@noble/curves": "^1.6.0", - "@noble/hashes": "^1.5.0", - "@scure/bip32": "^1.5.0", - "@scure/bip39": "^1.4.0", - "abitype": "^1.0.6", - "eventemitter3": "5.0.1" - }, - "peerDependencies": { - "typescript": ">=5.4.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/access-control-conditions/node_modules/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/accs-schemas": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/@lit-protocol/accs-schemas/-/accs-schemas-0.0.24.tgz", - "integrity": "sha512-sjUfMAc8kj/Tj/GAFnlrbvs9PzoSK5wR3L1hK4kFI6lifq31LsDGqNLWmIEDXRubE/YusK5QaY30h+WPgk8RFQ==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "ajv": "^8.12.0" - } - }, - "node_modules/@lit-protocol/auth": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/@lit-protocol/auth/-/auth-8.2.3.tgz", - "integrity": "sha512-T7RaUhw0VbKyHivcUhTsaAGpPJSjWe0tSsu3ZluRNIPcerpNzX/jdVp4lVoozEKx491Ah2+lwAtWjYW6MiTXYQ==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@ethersproject/contracts": "5.7.0", - "@ethersproject/providers": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@jest/globals": "30.2.0", - "@lit-protocol/access-control-conditions": "8.0.2", - "@lit-protocol/access-control-conditions-schemas": "8.0.2", - "@lit-protocol/auth-helpers": "8.2.0", - "@lit-protocol/constants": "9.0.1", - "@lit-protocol/contracts": "0.9.1", - "@lit-protocol/crypto": "8.1.0", - "@lit-protocol/lit-client": "8.3.1", - "@lit-protocol/logger": "8.0.2", - "@lit-protocol/nacl": "7.1.1", - "@lit-protocol/networks": "8.4.1", - "@lit-protocol/schemas": "8.0.3", - "@lit-protocol/types": "8.0.3", - "@lit-protocol/uint8arrays": "7.1.1", - "@lit-protocol/wasm": "8.1.0", - "@noble/curves": "1.8.1", - "@noble/hashes": "1.8.0", - "@openagenda/verror": "3.1.4", - "@simplewebauthn/browser": "7.2.0", - "@simplewebauthn/typescript-types": "7.0.0", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "@wagmi/core": "2.22.1", - "ajv": "8.12.0", - "base64url": "3.0.1", - "bs58": "6.0.0", - "cbor-web": "9.0.2", - "depd": "2.0.0", - "elysia": "1.2.25", - "ethers": "5.7.2", - "jose": "4.14.4", - "pako": "2.1.0", - "pino": "9.6.0", - "pino-caller": "4.0.0", - "siwe": "2.3.2", - "siwe-recap": "0.0.2-alpha.0", - "stytch": "12.4.0", - "typechain": "8.3.2", - "typestub-ipfs-only-hash": "4.0.0", - "zod": "3.24.3", - "zod-validation-error": "3.4.0" - }, - "peerDependencies": { - "tslib": "2.8.1", - "viem": "2.38.3" - } - }, - "node_modules/@lit-protocol/auth-helpers": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@lit-protocol/auth-helpers/-/auth-helpers-8.2.0.tgz", - "integrity": "sha512-gIT123rGzP52iQ68WSAn/Ewq33bFy9VI10xhjLqa9kndYG7uuXoQTh95R5ORsQIvpZP+zVAVcEukMPAFq7G5pg==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@ethersproject/contracts": "5.7.0", - "@ethersproject/providers": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@lit-protocol/access-control-conditions": "8.0.2", - "@lit-protocol/access-control-conditions-schemas": "8.0.2", - "@lit-protocol/constants": "9.0.0", - "@lit-protocol/contracts": "0.9.0", - "@lit-protocol/logger": "8.0.2", - "@lit-protocol/schemas": "8.0.2", - "@lit-protocol/types": "8.0.2", - "@openagenda/verror": "3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "@wagmi/core": "2.22.1", - "ethers": "5.7.2", - "pino": "9.6.0", - "siwe": "2.3.2", - "siwe-recap": "0.0.2-alpha.0", - "tslib": "2.8.1", - "typechain": "8.3.2", - "zod": "3.24.3", - "zod-validation-error": "3.4.0" - }, - "peerDependencies": { - "viem": "2.38.3" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT" - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@lit-protocol/constants": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@lit-protocol/constants/-/constants-9.0.0.tgz", - "integrity": "sha512-/BfZH2K351FQePsaUDPGtb6EDvi34Tkqg5wRZBrs9sh/WQB+1xXfbId3WHHSszV47adFS2n5Rk6dlEgUQSpWuA==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@lit-protocol/contracts": "0.9.0", - "@openagenda/verror": "3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ethers": "5.7.2", - "tslib": "2.8.1", - "typechain": "8.3.2", - "viem": "2.38.3", - "zod": "3.24.3" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@lit-protocol/contracts": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@lit-protocol/contracts/-/contracts-0.9.0.tgz", - "integrity": "sha512-roswC9kJaMvKWqRrw9/ROKWpG3S+vPtlWPqVDS6JOjcPmaEEitMtfsAmCM4i3LykGKkbrW4MCvIatglByRu/Xw==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "peerDependencies": { - "typescript": "5.8.3", - "viem": "2.38.3" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@lit-protocol/schemas": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@lit-protocol/schemas/-/schemas-8.0.2.tgz", - "integrity": "sha512-SdbYcm8nGg7HDyIgp/LK3d9wDZ9jpzZdPiRJeBHfoKfVq5qf44hugy/BO3IJXROVb+6TqrsEbsUS1rlqbqi/0A==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@lit-protocol/access-control-conditions-schemas": "8.0.2", - "@lit-protocol/constants": "8.0.2", - "@lit-protocol/contracts": "0.5.3", - "@openagenda/verror": "^3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ethers": "^5.7.1", - "siwe": "^2.3.2", - "tslib": "^2.8.1", - "typechain": "8.3.2", - "viem": "2.29.4", - "zod": "3.24.3", - "zod-validation-error": "3.4.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@lit-protocol/schemas/node_modules/@lit-protocol/constants": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@lit-protocol/constants/-/constants-8.0.2.tgz", - "integrity": "sha512-2jw9PNmU2w/DVRn86+hQmoiW5uCl9bNCPZv/4eS13fiPhi4VERys5lC9zxn4uUyLeCUivDlPnuP1LO0ElyfXxA==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@lit-protocol/contracts": "0.5.3", - "@openagenda/verror": "^3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ethers": "^5.7.1", - "tslib": "^2.8.1", - "typechain": "8.3.2", - "viem": "2.29.4", - "zod": "3.24.3" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@lit-protocol/schemas/node_modules/@lit-protocol/contracts": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@lit-protocol/contracts/-/contracts-0.5.3.tgz", - "integrity": "sha512-s5q/X0iGLdJYY8dGUJi8EmVkfVJRxMfsVXAb4t/8YEWvOC1oQHuO069nqTPmCqkJO8OcDUknaSSkuxuDIvp2oQ==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "peerDependencies": { - "typescript": "^5.0.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@lit-protocol/schemas/node_modules/viem": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.29.4.tgz", - "integrity": "sha512-Dhyae+w1LKKpYVXypGjBnZ3WU5EHl/Uip5RtVwVRYSVxD5VvHzqKzIfbFU1KP4vnnh3++ZNgLjBY/kVT/tPrrg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@noble/curves": "1.8.2", - "@noble/hashes": "1.7.2", - "@scure/bip32": "1.6.2", - "@scure/bip39": "1.5.4", - "abitype": "1.0.8", - "isows": "1.0.7", - "ox": "0.6.9", - "ws": "8.18.1" - }, - "peerDependencies": { - "typescript": ">=5.0.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@lit-protocol/schemas/node_modules/viem/node_modules/abitype": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.8.tgz", - "integrity": "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/wevm" - }, - "peerDependencies": { - "typescript": ">=5.0.4", - "zod": "^3 >=3.22.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@lit-protocol/schemas/node_modules/viem/node_modules/ox": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/ox/-/ox-0.6.9.tgz", - "integrity": "sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@adraffy/ens-normalize": "^1.10.1", - "@noble/curves": "^1.6.0", - "@noble/hashes": "^1.5.0", - "@scure/bip32": "^1.5.0", - "@scure/bip39": "^1.4.0", - "abitype": "^1.0.6", - "eventemitter3": "5.0.1" - }, - "peerDependencies": { - "typescript": ">=5.4.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@lit-protocol/schemas/node_modules/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@lit-protocol/types": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@lit-protocol/types/-/types-8.0.2.tgz", - "integrity": "sha512-IDppgwcAPiIBmzVhfgK5h/5WLhJPFnlEhKqq/6X24M+sD8JL/rfac9P99+lHYMienki8rj4L9+zIUDIotFZCLw==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@lit-protocol/access-control-conditions-schemas": "8.0.2", - "@lit-protocol/constants": "8.0.2", - "@lit-protocol/contracts": "0.5.3", - "@lit-protocol/schemas": "8.0.2", - "@openagenda/verror": "^3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ethers": "^5.7.1", - "siwe": "^2.3.2", - "tslib": "^2.8.1", - "typechain": "8.3.2", - "viem": "2.29.4", - "zod": "3.24.3", - "zod-validation-error": "3.4.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@lit-protocol/types/node_modules/@lit-protocol/constants": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@lit-protocol/constants/-/constants-8.0.2.tgz", - "integrity": "sha512-2jw9PNmU2w/DVRn86+hQmoiW5uCl9bNCPZv/4eS13fiPhi4VERys5lC9zxn4uUyLeCUivDlPnuP1LO0ElyfXxA==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@lit-protocol/contracts": "0.5.3", - "@openagenda/verror": "^3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ethers": "^5.7.1", - "tslib": "^2.8.1", - "typechain": "8.3.2", - "viem": "2.29.4", - "zod": "3.24.3" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@lit-protocol/types/node_modules/@lit-protocol/contracts": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@lit-protocol/contracts/-/contracts-0.5.3.tgz", - "integrity": "sha512-s5q/X0iGLdJYY8dGUJi8EmVkfVJRxMfsVXAb4t/8YEWvOC1oQHuO069nqTPmCqkJO8OcDUknaSSkuxuDIvp2oQ==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "peerDependencies": { - "typescript": "^5.0.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@lit-protocol/types/node_modules/viem": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.29.4.tgz", - "integrity": "sha512-Dhyae+w1LKKpYVXypGjBnZ3WU5EHl/Uip5RtVwVRYSVxD5VvHzqKzIfbFU1KP4vnnh3++ZNgLjBY/kVT/tPrrg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@noble/curves": "1.8.2", - "@noble/hashes": "1.7.2", - "@scure/bip32": "1.6.2", - "@scure/bip39": "1.5.4", - "abitype": "1.0.8", - "isows": "1.0.7", - "ox": "0.6.9", - "ws": "8.18.1" - }, - "peerDependencies": { - "typescript": ">=5.0.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@lit-protocol/types/node_modules/viem/node_modules/abitype": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.8.tgz", - "integrity": "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/wevm" - }, - "peerDependencies": { - "typescript": ">=5.0.4", - "zod": "^3 >=3.22.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@lit-protocol/types/node_modules/viem/node_modules/ox": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/ox/-/ox-0.6.9.tgz", - "integrity": "sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@adraffy/ens-normalize": "^1.10.1", - "@noble/curves": "^1.6.0", - "@noble/hashes": "^1.5.0", - "@scure/bip32": "^1.5.0", - "@scure/bip39": "^1.4.0", - "abitype": "^1.0.6", - "eventemitter3": "5.0.1" - }, - "peerDependencies": { - "typescript": ">=5.4.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@lit-protocol/types/node_modules/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@noble/curves": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", - "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.7.2" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@noble/hashes": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", - "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@scure/bip32": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.6.2.tgz", - "integrity": "sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw==", - "license": "MIT", - "dependencies": { - "@noble/curves": "~1.8.1", - "@noble/hashes": "~1.7.1", - "@scure/base": "~1.2.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/@scure/bip39": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.5.4.tgz", - "integrity": "sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.7.1", - "@scure/base": "~1.2.4" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "license": "MIT" - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.5", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", - "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", - "license": "MIT" - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/ethers/node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/multiformats": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", - "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==", - "license": "Apache-2.0 OR MIT", - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@lit-protocol/auth-helpers/node_modules/siwe-recap": { - "version": "0.0.2-alpha.0", - "resolved": "https://registry.npmjs.org/siwe-recap/-/siwe-recap-0.0.2-alpha.0.tgz", - "integrity": "sha512-xqFUnvrACWW/Q4s5HQ02avg8IyH2RcgkUzfvN4scYaaHErotLVtTGDZkSS0sn/oNK4MXRt83lTqredsvXgt8iA==", - "license": "MIT", - "dependencies": { - "canonicalize": "^2.0.0", - "multiformats": "^11.0.2", - "siwe": "^2.1.4" - }, - "peerDependencies": { - "ethers": "^5.5.1" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT" - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "license": "MIT" - }, - "node_modules/@lit-protocol/auth/node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/@lit-protocol/auth/node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.5", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", - "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", - "license": "MIT" - }, - "node_modules/@lit-protocol/auth/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/ethers/node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "node_modules/@lit-protocol/auth/node_modules/multiformats": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", - "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==", - "license": "Apache-2.0 OR MIT", - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@lit-protocol/auth/node_modules/siwe-recap": { - "version": "0.0.2-alpha.0", - "resolved": "https://registry.npmjs.org/siwe-recap/-/siwe-recap-0.0.2-alpha.0.tgz", - "integrity": "sha512-xqFUnvrACWW/Q4s5HQ02avg8IyH2RcgkUzfvN4scYaaHErotLVtTGDZkSS0sn/oNK4MXRt83lTqredsvXgt8iA==", - "license": "MIT", - "dependencies": { - "canonicalize": "^2.0.0", - "multiformats": "^11.0.2", - "siwe": "^2.1.4" - }, - "peerDependencies": { - "ethers": "^5.5.1" - } - }, - "node_modules/@lit-protocol/constants": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@lit-protocol/constants/-/constants-9.0.1.tgz", - "integrity": "sha512-gaCMUPvQw9a/Eb6kpTJOMpEYXU5jyca88yB35CFuJ+hUkcfO/QkzKVAMwP+tpgLV8NIvYhpRyxIhKdfLWXbmYw==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@lit-protocol/contracts": "0.9.1", - "@openagenda/verror": "3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ethers": "5.7.2", - "tslib": "2.8.1", - "typechain": "8.3.2", - "viem": "2.38.3", - "zod": "3.24.3" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT" - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/constants/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "license": "MIT" - }, - "node_modules/@lit-protocol/constants/node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/@lit-protocol/constants/node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.5", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", - "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", - "license": "MIT" - }, - "node_modules/@lit-protocol/constants/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/@lit-protocol/contracts": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@lit-protocol/contracts/-/contracts-0.9.1.tgz", - "integrity": "sha512-nbc46P++OBouzIxTT6O30byZmOvfi7ORpT/vZCdW7a39+tMDd2dWWaKfcFRMP/4oqGPppGnvFHLVKNuaPtriwA==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "peerDependencies": { - "typescript": "5.8.3", - "viem": "2.38.3" - } - }, - "node_modules/@lit-protocol/crypto": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@lit-protocol/crypto/-/crypto-8.1.0.tgz", - "integrity": "sha512-Ae2+sM6I6jB6r8VGKlnyU1+lhZ/rsJqassqWY3PRjOwgIVTZpu9AGFByQh5IqkLQ+s6BJXmksL64367cV5Zs3A==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@jest/globals": "30.2.0", - "@lit-protocol/access-control-conditions-schemas": "8.0.2", - "@lit-protocol/constants": "9.0.0", - "@lit-protocol/contracts": "0.9.0", - "@lit-protocol/nacl": "7.1.1", - "@lit-protocol/schemas": "8.0.2", - "@lit-protocol/types": "8.0.2", - "@lit-protocol/uint8arrays": "7.1.1", - "@lit-protocol/wasm": "8.1.0", - "@noble/curves": "1.8.1", - "@noble/hashes": "1.8.0", - "@openagenda/verror": "3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ajv": "8.12.0", - "ethers": "5.7.2", - "pako": "2.1.0", - "siwe": "2.3.2", - "tslib": "2.8.1", - "typechain": "8.3.2", - "viem": "2.38.3", - "zod": "3.24.3", - "zod-validation-error": "3.4.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT" - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/constants": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@lit-protocol/constants/-/constants-9.0.0.tgz", - "integrity": "sha512-/BfZH2K351FQePsaUDPGtb6EDvi34Tkqg5wRZBrs9sh/WQB+1xXfbId3WHHSszV47adFS2n5Rk6dlEgUQSpWuA==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@lit-protocol/contracts": "0.9.0", - "@openagenda/verror": "3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ethers": "5.7.2", - "tslib": "2.8.1", - "typechain": "8.3.2", - "viem": "2.38.3", - "zod": "3.24.3" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/contracts": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@lit-protocol/contracts/-/contracts-0.9.0.tgz", - "integrity": "sha512-roswC9kJaMvKWqRrw9/ROKWpG3S+vPtlWPqVDS6JOjcPmaEEitMtfsAmCM4i3LykGKkbrW4MCvIatglByRu/Xw==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "peerDependencies": { - "typescript": "5.8.3", - "viem": "2.38.3" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/schemas": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@lit-protocol/schemas/-/schemas-8.0.2.tgz", - "integrity": "sha512-SdbYcm8nGg7HDyIgp/LK3d9wDZ9jpzZdPiRJeBHfoKfVq5qf44hugy/BO3IJXROVb+6TqrsEbsUS1rlqbqi/0A==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@lit-protocol/access-control-conditions-schemas": "8.0.2", - "@lit-protocol/constants": "8.0.2", - "@lit-protocol/contracts": "0.5.3", - "@openagenda/verror": "^3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ethers": "^5.7.1", - "siwe": "^2.3.2", - "tslib": "^2.8.1", - "typechain": "8.3.2", - "viem": "2.29.4", - "zod": "3.24.3", - "zod-validation-error": "3.4.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/schemas/node_modules/@lit-protocol/constants": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@lit-protocol/constants/-/constants-8.0.2.tgz", - "integrity": "sha512-2jw9PNmU2w/DVRn86+hQmoiW5uCl9bNCPZv/4eS13fiPhi4VERys5lC9zxn4uUyLeCUivDlPnuP1LO0ElyfXxA==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@lit-protocol/contracts": "0.5.3", - "@openagenda/verror": "^3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ethers": "^5.7.1", - "tslib": "^2.8.1", - "typechain": "8.3.2", - "viem": "2.29.4", - "zod": "3.24.3" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/schemas/node_modules/@lit-protocol/contracts": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@lit-protocol/contracts/-/contracts-0.5.3.tgz", - "integrity": "sha512-s5q/X0iGLdJYY8dGUJi8EmVkfVJRxMfsVXAb4t/8YEWvOC1oQHuO069nqTPmCqkJO8OcDUknaSSkuxuDIvp2oQ==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "peerDependencies": { - "typescript": "^5.0.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/schemas/node_modules/@noble/curves": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", - "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.7.2" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/schemas/node_modules/@noble/hashes": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", - "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/schemas/node_modules/viem": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.29.4.tgz", - "integrity": "sha512-Dhyae+w1LKKpYVXypGjBnZ3WU5EHl/Uip5RtVwVRYSVxD5VvHzqKzIfbFU1KP4vnnh3++ZNgLjBY/kVT/tPrrg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@noble/curves": "1.8.2", - "@noble/hashes": "1.7.2", - "@scure/bip32": "1.6.2", - "@scure/bip39": "1.5.4", - "abitype": "1.0.8", - "isows": "1.0.7", - "ox": "0.6.9", - "ws": "8.18.1" - }, - "peerDependencies": { - "typescript": ">=5.0.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/schemas/node_modules/viem/node_modules/abitype": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.8.tgz", - "integrity": "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/wevm" - }, - "peerDependencies": { - "typescript": ">=5.0.4", - "zod": "^3 >=3.22.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/schemas/node_modules/viem/node_modules/ox": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/ox/-/ox-0.6.9.tgz", - "integrity": "sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@adraffy/ens-normalize": "^1.10.1", - "@noble/curves": "^1.6.0", - "@noble/hashes": "^1.5.0", - "@scure/bip32": "^1.5.0", - "@scure/bip39": "^1.4.0", - "abitype": "^1.0.6", - "eventemitter3": "5.0.1" - }, - "peerDependencies": { - "typescript": ">=5.4.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/schemas/node_modules/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/types": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@lit-protocol/types/-/types-8.0.2.tgz", - "integrity": "sha512-IDppgwcAPiIBmzVhfgK5h/5WLhJPFnlEhKqq/6X24M+sD8JL/rfac9P99+lHYMienki8rj4L9+zIUDIotFZCLw==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@lit-protocol/access-control-conditions-schemas": "8.0.2", - "@lit-protocol/constants": "8.0.2", - "@lit-protocol/contracts": "0.5.3", - "@lit-protocol/schemas": "8.0.2", - "@openagenda/verror": "^3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ethers": "^5.7.1", - "siwe": "^2.3.2", - "tslib": "^2.8.1", - "typechain": "8.3.2", - "viem": "2.29.4", - "zod": "3.24.3", - "zod-validation-error": "3.4.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/types/node_modules/@lit-protocol/constants": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@lit-protocol/constants/-/constants-8.0.2.tgz", - "integrity": "sha512-2jw9PNmU2w/DVRn86+hQmoiW5uCl9bNCPZv/4eS13fiPhi4VERys5lC9zxn4uUyLeCUivDlPnuP1LO0ElyfXxA==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@lit-protocol/contracts": "0.5.3", - "@openagenda/verror": "^3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ethers": "^5.7.1", - "tslib": "^2.8.1", - "typechain": "8.3.2", - "viem": "2.29.4", - "zod": "3.24.3" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/types/node_modules/@lit-protocol/contracts": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@lit-protocol/contracts/-/contracts-0.5.3.tgz", - "integrity": "sha512-s5q/X0iGLdJYY8dGUJi8EmVkfVJRxMfsVXAb4t/8YEWvOC1oQHuO069nqTPmCqkJO8OcDUknaSSkuxuDIvp2oQ==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "peerDependencies": { - "typescript": "^5.0.0" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/types/node_modules/@noble/curves": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", - "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.7.2" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/types/node_modules/@noble/hashes": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", - "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/types/node_modules/viem": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.29.4.tgz", - "integrity": "sha512-Dhyae+w1LKKpYVXypGjBnZ3WU5EHl/Uip5RtVwVRYSVxD5VvHzqKzIfbFU1KP4vnnh3++ZNgLjBY/kVT/tPrrg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@noble/curves": "1.8.2", - "@noble/hashes": "1.7.2", - "@scure/bip32": "1.6.2", - "@scure/bip39": "1.5.4", - "abitype": "1.0.8", - "isows": "1.0.7", - "ox": "0.6.9", - "ws": "8.18.1" - }, - "peerDependencies": { - "typescript": ">=5.0.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/types/node_modules/viem/node_modules/abitype": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.8.tgz", - "integrity": "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/wevm" - }, - "peerDependencies": { - "typescript": ">=5.0.4", - "zod": "^3 >=3.22.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/types/node_modules/viem/node_modules/ox": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/ox/-/ox-0.6.9.tgz", - "integrity": "sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@adraffy/ens-normalize": "^1.10.1", - "@noble/curves": "^1.6.0", - "@noble/hashes": "^1.5.0", - "@scure/bip32": "^1.5.0", - "@scure/bip39": "^1.4.0", - "abitype": "^1.0.6", - "eventemitter3": "5.0.1" - }, - "peerDependencies": { - "typescript": ">=5.4.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@lit-protocol/types/node_modules/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@scure/bip32": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.6.2.tgz", - "integrity": "sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw==", - "license": "MIT", - "dependencies": { - "@noble/curves": "~1.8.1", - "@noble/hashes": "~1.7.1", - "@scure/base": "~1.2.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@scure/bip32/node_modules/@noble/hashes": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", - "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@scure/bip39": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.5.4.tgz", - "integrity": "sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.7.1", - "@scure/base": "~1.2.4" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/@scure/bip39/node_modules/@noble/hashes": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", - "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "license": "MIT" - }, - "node_modules/@lit-protocol/crypto/node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/@lit-protocol/crypto/node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.5", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", - "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", - "license": "MIT" - }, - "node_modules/@lit-protocol/crypto/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@lit-protocol/lit-client/-/lit-client-8.3.1.tgz", - "integrity": "sha512-3OyeB/j4iXhI47QCFtos8zyNCQWqpuEfv170PMs/chq+v1m+LT+ackm6MGv1XrAipGqAxcgCoDOLXkR9n0N6Ew==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@ethersproject/contracts": "5.7.0", - "@ethersproject/providers": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@jest/globals": "30.2.0", - "@lit-protocol/access-control-conditions": "8.0.2", - "@lit-protocol/access-control-conditions-schemas": "8.0.2", - "@lit-protocol/auth-helpers": "8.2.0", - "@lit-protocol/constants": "9.0.1", - "@lit-protocol/contracts": "0.9.1", - "@lit-protocol/crypto": "8.1.0", - "@lit-protocol/logger": "8.0.2", - "@lit-protocol/nacl": "7.1.1", - "@lit-protocol/networks": "8.4.1", - "@lit-protocol/schemas": "8.0.3", - "@lit-protocol/types": "8.0.3", - "@lit-protocol/uint8arrays": "7.1.1", - "@lit-protocol/wasm": "8.1.0", - "@noble/curves": "1.8.1", - "@noble/hashes": "1.8.0", - "@openagenda/verror": "3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "@wagmi/core": "2.22.1", - "ajv": "8.12.0", - "bs58": "6.0.0", - "elysia": "1.2.25", - "ethers": "5.7.2", - "pako": "2.1.0", - "pino": "9.6.0", - "pino-caller": "4.0.0", - "siwe": "2.3.2", - "siwe-recap": "0.0.2-alpha.0", - "tslib": "2.8.1", - "typechain": "8.3.2", - "typestub-ipfs-only-hash": "^4.0.0", - "zod": "3.24.3", - "zod-validation-error": "3.4.0" - }, - "peerDependencies": { - "viem": "2.38.3" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT" - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "license": "MIT" - }, - "node_modules/@lit-protocol/lit-client/node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.5", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", - "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", - "license": "MIT" - }, - "node_modules/@lit-protocol/lit-client/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/ethers/node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/multiformats": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", - "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==", - "license": "Apache-2.0 OR MIT", - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@lit-protocol/lit-client/node_modules/siwe-recap": { - "version": "0.0.2-alpha.0", - "resolved": "https://registry.npmjs.org/siwe-recap/-/siwe-recap-0.0.2-alpha.0.tgz", - "integrity": "sha512-xqFUnvrACWW/Q4s5HQ02avg8IyH2RcgkUzfvN4scYaaHErotLVtTGDZkSS0sn/oNK4MXRt83lTqredsvXgt8iA==", - "license": "MIT", - "dependencies": { - "canonicalize": "^2.0.0", - "multiformats": "^11.0.2", - "siwe": "^2.1.4" - }, - "peerDependencies": { - "ethers": "^5.5.1" - } - }, - "node_modules/@lit-protocol/logger": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@lit-protocol/logger/-/logger-8.0.2.tgz", - "integrity": "sha512-261xUbpHs3UbCRnaardxn4IKe49fT5U1XeNkFWxyQqwF5XM6L/ldH+a3C3hM/Jr/Mm84vyqFsMqKFCQajjMEOQ==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "dependencies": { - "pino": "^9.6.0", - "tslib": "1.14.1" - } - }, - "node_modules/@lit-protocol/logger/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@lit-protocol/nacl": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@lit-protocol/nacl/-/nacl-7.1.1.tgz", - "integrity": "sha512-uuaHcVFnf3G4zRGYN2CrhSVHWXNcCY+VGG2uGS+pSk4EtyRvf9aw8mctQinItua02mTTj6SfFs508VSJ1imWsw==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "tslib": "1.14.1" - } - }, - "node_modules/@lit-protocol/nacl/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@lit-protocol/networks": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@lit-protocol/networks/-/networks-8.4.1.tgz", - "integrity": "sha512-36uuhCtAghXQAR/1oqlx/QK0nuYuMPMvpeQ4Yx9aoI3V7c3HAmtP1F+93Th7Y5twcI8nVIoB56XntKwXHNrv7g==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@ethersproject/contracts": "5.7.0", - "@ethersproject/providers": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@jest/globals": "30.2.0", - "@lit-protocol/access-control-conditions": "8.0.2", - "@lit-protocol/access-control-conditions-schemas": "8.0.2", - "@lit-protocol/auth-helpers": "8.2.0", - "@lit-protocol/constants": "9.0.1", - "@lit-protocol/contracts": "0.9.1", - "@lit-protocol/crypto": "8.1.0", - "@lit-protocol/logger": "8.0.2", - "@lit-protocol/nacl": "7.1.1", - "@lit-protocol/schemas": "8.0.3", - "@lit-protocol/types": "8.0.3", - "@lit-protocol/uint8arrays": "7.1.1", - "@lit-protocol/wasm": "8.1.0", - "@noble/curves": "1.8.1", - "@noble/hashes": "^1.8.0", - "@openagenda/verror": "3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "@wagmi/core": "2.22.1", - "ajv": "8.12.0", - "bs58": "6.0.0", - "elysia": "1.2.25", - "ethers": "5.7.2", - "node-localstorage": "3.0.5", - "pako": "2.1.0", - "pino": "9.6.0", - "pino-caller": "4.0.0", - "siwe": "2.3.2", - "siwe-recap": "0.0.2-alpha.0", - "tslib": "^2.8.1", - "typechain": "8.3.2", - "zod": "3.24.3", - "zod-validation-error": "3.4.0" - }, - "peerDependencies": { - "viem": "2.38.3" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT" - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "license": "MIT" - }, - "node_modules/@lit-protocol/networks/node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/@lit-protocol/networks/node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.5", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", - "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", - "license": "MIT" - }, - "node_modules/@lit-protocol/networks/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/ethers/node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "node_modules/@lit-protocol/networks/node_modules/multiformats": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", - "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==", - "license": "Apache-2.0 OR MIT", - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@lit-protocol/networks/node_modules/siwe-recap": { - "version": "0.0.2-alpha.0", - "resolved": "https://registry.npmjs.org/siwe-recap/-/siwe-recap-0.0.2-alpha.0.tgz", - "integrity": "sha512-xqFUnvrACWW/Q4s5HQ02avg8IyH2RcgkUzfvN4scYaaHErotLVtTGDZkSS0sn/oNK4MXRt83lTqredsvXgt8iA==", - "license": "MIT", - "dependencies": { - "canonicalize": "^2.0.0", - "multiformats": "^11.0.2", - "siwe": "^2.1.4" - }, - "peerDependencies": { - "ethers": "^5.5.1" - } - }, - "node_modules/@lit-protocol/schemas": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@lit-protocol/schemas/-/schemas-8.0.3.tgz", - "integrity": "sha512-0ZB1JXaiWRNoTL+Dci5weiT3MEq4SFcq1g5tLIx7cWTjLY8KHypfVnd5hFs/KX7yUQl9DS0BLRlSUUGzS9l0eQ==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@lit-protocol/access-control-conditions-schemas": "8.0.2", - "@lit-protocol/constants": "9.0.1", - "@lit-protocol/contracts": "0.9.1", - "@openagenda/verror": "3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ethers": "5.7.2", - "siwe": "2.3.2", - "tslib": "2.8.1", - "typechain": "8.3.2", - "viem": "2.38.3", - "zod": "3.24.3", - "zod-validation-error": "3.4.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT" - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "license": "MIT" - }, - "node_modules/@lit-protocol/schemas/node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/@lit-protocol/schemas/node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.5", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", - "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", - "license": "MIT" - }, - "node_modules/@lit-protocol/schemas/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/@lit-protocol/types": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@lit-protocol/types/-/types-8.0.3.tgz", - "integrity": "sha512-6Y2RZrJ6n/s3FmhbtK2ccYrfGuapRajEklsVxj21sqHzOx0Q2/rIP4QiEw/k85YjTWLCCWAaiuR23ntdbtXDhg==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@lit-protocol/access-control-conditions-schemas": "8.0.2", - "@lit-protocol/constants": "9.0.1", - "@lit-protocol/contracts": "0.9.1", - "@lit-protocol/schemas": "8.0.3", - "@openagenda/verror": "3.1.4", - "@t3-oss/env-core": "0.13.8", - "@typechain/ethers-v6": "0.5.1", - "ethers": "5.7.2", - "siwe": "2.3.2", - "tslib": "2.8.1", - "typechain": "8.3.2", - "viem": "2.38.3", - "zod": "3.24.3", - "zod-validation-error": "3.4.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT" - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@lit-protocol/types/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "license": "MIT" - }, - "node_modules/@lit-protocol/types/node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/@lit-protocol/types/node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.5", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", - "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", - "license": "MIT" - }, - "node_modules/@lit-protocol/types/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/@lit-protocol/uint8arrays": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@lit-protocol/uint8arrays/-/uint8arrays-7.1.1.tgz", - "integrity": "sha512-9EycDdx3WQSH97DwIXUVhJXblVR1iJZCSa7watNzt+j2Au7CikO/DiBpIHfBe7ULVLkCI7li5hAnVB9vDfDEtQ==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "5.7.0", - "@lit-protocol/accs-schemas": "^0.0.24", - "@lit-protocol/constants": "7.1.1", - "@lit-protocol/contracts": "^0.0.74", - "@lit-protocol/types": "7.1.1", - "@openagenda/verror": "^3.1.4", - "depd": "^2.0.0", - "ethers": "^5.7.1", - "siwe": "^2.3.2", - "tslib": "1.14.1" - } - }, - "node_modules/@lit-protocol/uint8arrays/node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "node_modules/@lit-protocol/uint8arrays/node_modules/@ethersproject/contracts": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", - "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "^5.8.0", - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0" - } - }, - "node_modules/@lit-protocol/uint8arrays/node_modules/@ethersproject/contracts/node_modules/@ethersproject/abstract-provider": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", - "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0" - } - }, - "node_modules/@lit-protocol/uint8arrays/node_modules/@ethersproject/providers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", - "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0", - "bech32": "1.1.4", - "ws": "8.18.0" - } - }, - "node_modules/@lit-protocol/uint8arrays/node_modules/@ethersproject/providers/node_modules/@ethersproject/abstract-provider": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", - "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0" - } - }, - "node_modules/@lit-protocol/uint8arrays/node_modules/@ethersproject/transactions": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", - "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0" - } - }, - "node_modules/@lit-protocol/uint8arrays/node_modules/@lit-protocol/constants": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@lit-protocol/constants/-/constants-7.1.1.tgz", - "integrity": "sha512-wJY5r8D0FdvtkQtcjx5JfPC3Qeb5SZ1m72HTcvJdqaJaBgaPP4eg2JSUg9uNJ+knOCyfdiBPl47XlWTGqe1X4Q==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "5.7.0", - "@lit-protocol/accs-schemas": "^0.0.24", - "@lit-protocol/contracts": "^0.0.74", - "@lit-protocol/types": "7.1.1", - "@openagenda/verror": "^3.1.4", - "depd": "^2.0.0", - "ethers": "^5.7.1", - "siwe": "^2.3.2", - "tslib": "1.14.1" - } - }, - "node_modules/@lit-protocol/uint8arrays/node_modules/@lit-protocol/contracts": { - "version": "0.0.74", - "resolved": "https://registry.npmjs.org/@lit-protocol/contracts/-/contracts-0.0.74.tgz", - "integrity": "sha512-8uV038gzBp7ew7a4884SVt9Zhu8CtiTb+A8dKNnByxVoT1kFt4O4DmsaniV8p9AGjNR13IWfpU1NFChmPHVIpQ==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "peerDependencies": { - "typescript": "^5.0.0" - } - }, - "node_modules/@lit-protocol/uint8arrays/node_modules/@lit-protocol/types": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@lit-protocol/types/-/types-7.1.1.tgz", - "integrity": "sha512-oOtUOEA+5o6vb6xOx7x0vDG5IDsHANbWgB1nc23Ah7SctbITQM7F8VZNaCwRsSj8UxKjWD13eGsMHvMPxoFXdg==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "5.7.0", - "@lit-protocol/accs-schemas": "^0.0.24", - "depd": "^2.0.0", - "ethers": "^5.7.1", - "siwe": "^2.3.2", - "tslib": "1.14.1" - } - }, - "node_modules/@lit-protocol/uint8arrays/node_modules/ethers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", - "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "5.8.0", - "@ethersproject/abstract-provider": "5.8.0", - "@ethersproject/abstract-signer": "5.8.0", - "@ethersproject/address": "5.8.0", - "@ethersproject/base64": "5.8.0", - "@ethersproject/basex": "5.8.0", - "@ethersproject/bignumber": "5.8.0", - "@ethersproject/bytes": "5.8.0", - "@ethersproject/constants": "5.8.0", - "@ethersproject/contracts": "5.8.0", - "@ethersproject/hash": "5.8.0", - "@ethersproject/hdnode": "5.8.0", - "@ethersproject/json-wallets": "5.8.0", - "@ethersproject/keccak256": "5.8.0", - "@ethersproject/logger": "5.8.0", - "@ethersproject/networks": "5.8.0", - "@ethersproject/pbkdf2": "5.8.0", - "@ethersproject/properties": "5.8.0", - "@ethersproject/providers": "5.8.0", - "@ethersproject/random": "5.8.0", - "@ethersproject/rlp": "5.8.0", - "@ethersproject/sha2": "5.8.0", - "@ethersproject/signing-key": "5.8.0", - "@ethersproject/solidity": "5.8.0", - "@ethersproject/strings": "5.8.0", - "@ethersproject/transactions": "5.8.0", - "@ethersproject/units": "5.8.0", - "@ethersproject/wallet": "5.8.0", - "@ethersproject/web": "5.8.0", - "@ethersproject/wordlists": "5.8.0" - } - }, - "node_modules/@lit-protocol/uint8arrays/node_modules/ethers/node_modules/@ethersproject/abstract-provider": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", - "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0" - } - }, - "node_modules/@lit-protocol/uint8arrays/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@lit-protocol/uint8arrays/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@lit-protocol/wasm": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@lit-protocol/wasm/-/wasm-8.1.0.tgz", - "integrity": "sha512-V1EIJHdwoTdxdFoq6N9msatXBNBWZ8cIoa1RvnmerO2QcwAZmq+dYntVK9+F6lFN9p9YL6AI1PW5349WTxg1Zg==", - "deprecated": "This package targets a retired Lit Protocol network and is no longer maintained. See https://developer.litprotocol.com for the current SDK.", - "dependencies": { - "@jest/globals": "30.2.0", - "ethers": "^5.7.1", - "pako": "^2.1.0", - "tslib": "1.14.1" - } - }, - "node_modules/@lit-protocol/wasm/node_modules/@ethersproject/contracts": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", - "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "^5.8.0", - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0" - } - }, - "node_modules/@lit-protocol/wasm/node_modules/@ethersproject/providers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", - "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0", - "bech32": "1.1.4", - "ws": "8.18.0" - } - }, - "node_modules/@lit-protocol/wasm/node_modules/@ethersproject/transactions": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", - "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0" - } - }, - "node_modules/@lit-protocol/wasm/node_modules/ethers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", - "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "5.8.0", - "@ethersproject/abstract-provider": "5.8.0", - "@ethersproject/abstract-signer": "5.8.0", - "@ethersproject/address": "5.8.0", - "@ethersproject/base64": "5.8.0", - "@ethersproject/basex": "5.8.0", - "@ethersproject/bignumber": "5.8.0", - "@ethersproject/bytes": "5.8.0", - "@ethersproject/constants": "5.8.0", - "@ethersproject/contracts": "5.8.0", - "@ethersproject/hash": "5.8.0", - "@ethersproject/hdnode": "5.8.0", - "@ethersproject/json-wallets": "5.8.0", - "@ethersproject/keccak256": "5.8.0", - "@ethersproject/logger": "5.8.0", - "@ethersproject/networks": "5.8.0", - "@ethersproject/pbkdf2": "5.8.0", - "@ethersproject/properties": "5.8.0", - "@ethersproject/providers": "5.8.0", - "@ethersproject/random": "5.8.0", - "@ethersproject/rlp": "5.8.0", - "@ethersproject/sha2": "5.8.0", - "@ethersproject/signing-key": "5.8.0", - "@ethersproject/solidity": "5.8.0", - "@ethersproject/strings": "5.8.0", - "@ethersproject/transactions": "5.8.0", - "@ethersproject/units": "5.8.0", - "@ethersproject/wallet": "5.8.0", - "@ethersproject/web": "5.8.0", - "@ethersproject/wordlists": "5.8.0" - } - }, - "node_modules/@lit-protocol/wasm/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@lit-protocol/wasm/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@multiformats/base-x": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", - "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==", - "license": "MIT" - }, - "node_modules/@noble/ciphers": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", - "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/curves": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz", - "integrity": "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.7.1" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/curves/node_modules/@noble/hashes": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz", - "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@openagenda/verror": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@openagenda/verror/-/verror-3.1.4.tgz", - "integrity": "sha512-+V7QuD6v5sMWez7cu+5DXoXMim+iQssOcspoNgbWDW8sEyC54Mdo5VuIkcIjqhPmQYOzBWo5qlbzNGEpD6PzMA==", - "license": "MIT", - "dependencies": { - "assertion-error": "^1.1.0", - "depd": "^2.0.0", - "inherits": "^2.0.4", - "sprintf-js": "^1.1.2" - } - }, - "node_modules/@pkgr/core": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.3.6.tgz", - "integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==", - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", - "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.1.tgz", - "integrity": "sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.1.tgz", - "integrity": "sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==", - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.2.tgz", - "integrity": "sha512-pa0vFRuws4wkvaXKK1uXZMAwAX4/t8ANaJo45iw/oQHNQ9q5xUzwgFmVJGXiga2BeN+zpX7Vf9vmsiIa2J+MUw==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.2.tgz", - "integrity": "sha512-b1UQwcEZ4yCnMCD8DAL1VlbvBJE9/IX4FTIp7BG1xYpf29SLazLSrqUkj4w7Y5y7cCVP6E5tcqqcI0xemPkHug==", - "license": "BSD-3-Clause" - }, - "node_modules/@scure/base": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", - "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", - "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", - "license": "MIT", - "dependencies": { - "@noble/curves": "~1.9.0", - "@noble/hashes": "~1.8.0", - "@scure/base": "~1.2.5" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32/node_modules/@noble/curves": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", - "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.8.0" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip39": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", - "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.8.0", - "@scure/base": "~1.2.5" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@simplewebauthn/browser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@simplewebauthn/browser/-/browser-7.2.0.tgz", - "integrity": "sha512-HHIvRPpqKy0UV/BsGAmx4rQRZuZTUFYLLH65FwpSOslqHruiHx3Ql/bq7A75bjWuJ296a+4BIAq3+SPaII01TQ==", - "license": "MIT", - "dependencies": { - "@simplewebauthn/typescript-types": "*" - } - }, - "node_modules/@simplewebauthn/typescript-types": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@simplewebauthn/typescript-types/-/typescript-types-7.0.0.tgz", - "integrity": "sha512-bV+xACCFTsrLR/23ozHO06ZllHZaxC8LlI5YCo79GvU2BrN+rePDU2yXwZIYndNWcMQwRdndRdAhpafOh9AC/g==", - "deprecated": "This package has been renamed to @simplewebauthn/types. Please install @simplewebauthn/types instead to ensure you receive future updates.", - "license": "MIT" - }, - "node_modules/@sinclair/typebox": { - "version": "0.34.52", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.52.tgz", - "integrity": "sha512-XiMQh7qqVlxZzcVD+kkGMNGMzcTrDMLWI7S4x7z1MkCkbDPrekpZXEUK0eZqZFMuHQg2a2DZOcDIh9o5v3Gonw==", - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "13.0.5", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", - "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1" - } - }, - "node_modules/@spruceid/siwe-parser": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@spruceid/siwe-parser/-/siwe-parser-2.1.2.tgz", - "integrity": "sha512-d/r3S1LwJyMaRAKQ0awmo9whfXeE88Qt00vRj91q5uv5ATtWIQEGJ67Yr5eSZw5zp1/fZCXZYuEckt8lSkereQ==", - "license": "Apache-2.0", - "dependencies": { - "@noble/hashes": "^1.1.2", - "apg-js": "^4.3.0", - "uri-js": "^4.4.1", - "valid-url": "^1.0.9" - } - }, - "node_modules/@stablelib/binary": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", - "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", - "license": "MIT", - "dependencies": { - "@stablelib/int": "^1.0.1" - } - }, - "node_modules/@stablelib/int": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", - "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==", - "license": "MIT" - }, - "node_modules/@stablelib/random": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", - "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", - "license": "MIT", - "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/wipe": "^1.0.1" - } - }, - "node_modules/@stablelib/wipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", - "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==", - "license": "MIT" - }, - "node_modules/@t3-oss/env-core": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/@t3-oss/env-core/-/env-core-0.13.8.tgz", - "integrity": "sha512-L1inmpzLQyYu4+Q1DyrXsGJYCXbtXjC4cICw1uAKv0ppYPQv656lhZPU91Qd1VS6SO/bou1/q5ufVzBGbNsUpw==", - "license": "MIT", - "peerDependencies": { - "arktype": "^2.1.0", - "typescript": ">=5.0.0", - "valibot": "^1.0.0-beta.7 || ^1.0.0", - "zod": "^3.24.0 || ^4.0.0-beta.0" - }, - "peerDependenciesMeta": { - "arktype": { - "optional": true - }, - "typescript": { - "optional": true - }, - "valibot": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, - "node_modules/@typechain/ethers-v6": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz", - "integrity": "sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - }, - "peerDependencies": { - "ethers": "6.x", - "typechain": "^8.3.2", - "typescript": ">=4.7.0" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", - "license": "MIT" - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.20.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.3.tgz", - "integrity": "sha512-DZmzkmwHzXrLPAXPyKNDzlIwMMUZCVacoD25ywdy5YTKGbOx/2ld+Q38Im2zJ0vBuZP5Prd3VZutKZyXwkOS8A==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "license": "MIT" - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "license": "MIT" - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "license": "MIT" - }, - "node_modules/@types/yargs": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", - "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "license": "MIT" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.4.0.tgz", - "integrity": "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==", - "license": "ISC" - }, - "node_modules/@wagmi/core": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/@wagmi/core/-/core-2.22.1.tgz", - "integrity": "sha512-cG/xwQWsBEcKgRTkQVhH29cbpbs/TdcUJVFXCyri3ZknxhMyGv0YEjTcrNpRgt2SaswL1KrvslSNYKKo+5YEAg==", - "license": "MIT", - "dependencies": { - "eventemitter3": "5.0.1", - "mipd": "0.0.7", - "zustand": "5.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/wevm" - }, - "peerDependencies": { - "@tanstack/query-core": ">=5.0.0", - "typescript": ">=5.0.4", - "viem": "2.x" - }, - "peerDependenciesMeta": { - "@tanstack/query-core": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/abitype": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.1.0.tgz", - "integrity": "sha512-6Vh4HcRxNMLA0puzPjM5GBgT4aAcFGKZzSgAXvuZ27shJP6NEpielTuqbBmZILR5/xd0PizkBGy5hReKz9jl5A==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/wevm" - }, - "peerDependencies": { - "typescript": ">=5.0.4", - "zod": "^3.22.0 || ^4.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, - "node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "license": "MIT", - "peer": true - }, - "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/apg-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/apg-js/-/apg-js-4.4.0.tgz", - "integrity": "sha512-fefmXFknJmtgtNEXfPwZKYkMFX4Fyeyz+fNF6JWp87biGOPslJbCBVU158zvKRZfHBKnJDy8CMM40oLFGkXT8Q==", - "license": "BSD-2-Clause" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/argparse/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause" - }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/atomic-sleep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", - "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", - "license": "BSD-3-Clause", - "workspaces": [ - "test/babel-8" - ], - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-instrument": "^6.0.2", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", - "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" - }, - "peerDependencies": { - "@babel/core": "^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/base-x": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.1.tgz", - "integrity": "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/baseline-browser-mapping": { - "version": "2.11.24", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.24.tgz", - "integrity": "sha512-hYrgxie335U08WqICoGqKRzV1HFXv6zdxwJE4ekCb80CM9a0SVVsN4QPwT67RraRo+9h8IATk6uxHJw7QSkdOg==", - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.cjs" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "license": "MIT" - }, - "node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "license": "MIT", - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "license": "MIT" - }, - "node_modules/bn.js": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.5.tgz", - "integrity": "sha512-Vq886eXykuP5E6HcKSSStP3bJgrE6In5WKxVUvJ8XGpWWYs2xZHWqUwzCtGgEtBcxyd57KBFDPFoUfNzdaHCNg==", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.21", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", - "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "license": "MIT" - }, - "node_modules/browserslist": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.0.tgz", - "integrity": "sha512-3GSvyjvDI4Dur1Meg2BekJquu5uF+9R9a1+5M1Mde192eZoXbeXjzgOsgqPS2V8D5wrrip0gR5Hf/GhWQ9ZzaA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "baseline-browser-mapping": "^2.11.23", - "caniuse-lite": "^1.0.30001810", - "electron-to-chromium": "^1.5.427", - "node-releases": "^2.0.55", - "update-browserslist-db": "^1.3.3" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs58": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", - "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", - "license": "MIT", - "dependencies": { - "base-x": "^5.0.0" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "license": "MIT", - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001810", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", - "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/canonicalize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-2.1.0.tgz", - "integrity": "sha512-F705O3xrsUtgt98j7leetNhTWPe+5S72rlL5O4jA1pKqBVQ/dT1O1D6PFxmSXvc0SUOinWS57DKx0I3CHrXJHQ==", - "license": "Apache-2.0", - "bin": { - "canonicalize": "bin/canonicalize.js" - } - }, - "node_modules/cbor-web": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/cbor-web/-/cbor-web-9.0.2.tgz", - "integrity": "sha512-N6gU2GsJS8RR5gy1d9wQcSPgn9FGJFY7KNvdDRlwHfz6kCxrQr2TDnrjXHmr6TFSl6Fd0FC4zRnityEldjRGvQ==", - "license": "MIT", - "engines": { - "node": ">=16" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ci-info": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", - "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cids": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/cids/-/cids-1.1.9.tgz", - "integrity": "sha512-l11hWRfugIcbGuTZwAM5PwpjPPjyb6UZOGwlHSnOBV5o07XhQ4gNpBN67FbODvpjyHtd+0Xs6KNvUcGBiDRsdg==", - "deprecated": "This module has been superseded by the multiformats module", - "license": "MIT", - "dependencies": { - "multibase": "^4.0.1", - "multicodec": "^3.0.1", - "multihashes": "^4.0.1", - "uint8arrays": "^3.0.0" - }, - "engines": { - "node": ">=4.0.0", - "npm": ">=3.0.0" - } - }, - "node_modules/cids/node_modules/uint8arrays": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", - "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", - "license": "MIT", - "dependencies": { - "multiformats": "^9.4.2" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "license": "MIT", - "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "license": "MIT", - "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/command-line-usage/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-usage/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/command-line-usage/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/command-line-usage/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/command-line-usage/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "license": "MIT" - }, - "node_modules/cookie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", - "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "license": "MIT", - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.430", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.430.tgz", - "integrity": "sha512-e1QEj72Y4zd8RlNZVmoTg+iCOSVwpk05IOiiQwdrkwCSVlZfPthevErhE+nckGd2YbsXfp1SkisznhGVIXP2NQ==", - "license": "ISC" - }, - "node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.5", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", - "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", - "license": "MIT" - }, - "node_modules/elysia": { - "version": "1.2.25", - "resolved": "https://registry.npmjs.org/elysia/-/elysia-1.2.25.tgz", - "integrity": "sha512-WsdQpORJvb4uszzeqYT0lg97knw1iBW1NTzJ1Jm57tiHg+DfAotlWXYbjmvQ039ssV0fYELDHinLLoUazZkEHg==", - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.27", - "cookie": "^1.0.2", - "memoirist": "^0.3.0", - "openapi-types": "^12.1.3" - }, - "peerDependencies": { - "@sinclair/typebox": ">= 0.34.0", - "openapi-types": ">= 12.0.0", - "typescript": ">= 5.0.0" - }, - "peerDependenciesMeta": { - "openapi-types": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==", - "license": "MIT" - }, - "node_modules/error-ex": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", - "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ethers": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.17.0.tgz", - "integrity": "sha512-BpyrpIPJ3ydEVow8zGaz1DuPS7YU8DcWxuBnY9a0UA/lvAPwrMr+EPXsfrul628SRaekPNeIM4UFh/91GWZang==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@adraffy/ens-normalize": "1.11.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "22.7.5", - "aes-js": "4.0.0-beta.5", - "tslib": "2.7.0", - "ws": "8.21.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/ethers/node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/hashes": "1.3.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ethers/node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ethers/node_modules/@types/node": { - "version": "22.7.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", - "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/ethers/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "license": "0BSD", - "peer": true - }, - "node_modules/ethers/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "license": "MIT", - "peer": true - }, - "node_modules/ethers/node_modules/ws": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", - "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "license": "MIT" - }, - "node_modules/expect": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz", - "integrity": "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==", - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "30.2.0", - "@jest/get-type": "30.1.0", - "jest-matcher-utils": "30.2.0", - "jest-message-util": "30.2.0", - "jest-mock": "30.2.0", - "jest-util": "30.2.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" - }, - "node_modules/fast-redact": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", - "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "license": "MIT", - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/hamt-sharding": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hamt-sharding/-/hamt-sharding-2.0.1.tgz", - "integrity": "sha512-vnjrmdXG9dDs1m/H4iJ6z0JFI2NtgsW5keRkTcM85NGak69Mkf5PHUqBz+Xs0T4sg0ppvj9O5EGAJo40FTxmmA==", - "license": "MIT", - "dependencies": { - "sparse-array": "^1.3.1", - "uint8arrays": "^3.0.0" - }, - "engines": { - "node": ">=10.0.0", - "npm": ">=6.0.0" - } - }, - "node_modules/hamt-sharding/node_modules/uint8arrays": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", - "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", - "license": "MIT", - "dependencies": { - "multiformats": "^9.4.2" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hasown": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", - "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "license": "MIT", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "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.", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/interface-ipld-format": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/interface-ipld-format/-/interface-ipld-format-1.0.1.tgz", - "integrity": "sha512-WV/ar+KQJVoQpqRDYdo7YPGYIUHJxCuOEhdvsRpzLqoOIVCqPKdMMYmsLL1nCRsF3yYNio+PAJbCKiv6drrEAg==", - "deprecated": "This module has been superseded by the multiformats module", - "license": "(Apache-2.0 AND MIT)", - "dependencies": { - "cids": "^1.1.6", - "multicodec": "^3.0.1", - "multihashes": "^4.0.2" - } - }, - "node_modules/ipfs-only-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ipfs-only-hash/-/ipfs-only-hash-4.0.0.tgz", - "integrity": "sha512-TE1DZCvfw8i3gcsTq3P4TFx3cKFJ3sluu/J3XINkJhIN9OwJgNMqKA+WnKx6ByCb1IoPXsTp1KM7tupElb6SyA==", - "license": "MIT", - "dependencies": { - "ipfs-unixfs-importer": "^7.0.1", - "meow": "^9.0.0" - }, - "bin": { - "ipfs-only-hash": "cli.js" - } - }, - "node_modules/ipfs-unixfs": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-4.0.3.tgz", - "integrity": "sha512-hzJ3X4vlKT8FQ3Xc4M1szaFVjsc1ZydN+E4VQ91aXxfpjFn9G2wsMo1EFdAXNq/BUnN5dgqIOMP5zRYr3DTsAw==", - "license": "MIT", - "dependencies": { - "err-code": "^3.0.1", - "protobufjs": "^6.10.2" - }, - "engines": { - "node": ">=14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/ipfs-unixfs-importer": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ipfs-unixfs-importer/-/ipfs-unixfs-importer-7.0.3.tgz", - "integrity": "sha512-qeFOlD3AQtGzr90sr5Tq1Bi8pT5Nr2tSI8z310m7R4JDYgZc6J1PEZO3XZQ8l1kuGoqlAppBZuOYmPEqaHcVQQ==", - "license": "MIT", - "dependencies": { - "bl": "^5.0.0", - "cids": "^1.1.5", - "err-code": "^3.0.1", - "hamt-sharding": "^2.0.0", - "ipfs-unixfs": "^4.0.3", - "ipld-dag-pb": "^0.22.2", - "it-all": "^1.0.5", - "it-batch": "^1.0.8", - "it-first": "^1.0.6", - "it-parallel-batch": "^1.0.9", - "merge-options": "^3.0.4", - "multihashing-async": "^2.1.0", - "rabin-wasm": "^0.1.4", - "uint8arrays": "^2.1.2" - }, - "engines": { - "node": ">=14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/ipld-dag-pb": { - "version": "0.22.3", - "resolved": "https://registry.npmjs.org/ipld-dag-pb/-/ipld-dag-pb-0.22.3.tgz", - "integrity": "sha512-dfG5C5OVAR4FEP7Al2CrHWvAyIM7UhAQrjnOYOIxXGQz5NlEj6wGX0XQf6Ru6or1na6upvV3NQfstapQG8X2rg==", - "deprecated": "This module has been superseded by @ipld/dag-pb and multiformats", - "license": "MIT", - "dependencies": { - "cids": "^1.0.0", - "interface-ipld-format": "^1.0.0", - "multicodec": "^3.0.1", - "multihashing-async": "^2.0.0", - "protobufjs": "^6.10.2", - "stable": "^0.1.8", - "uint8arrays": "^2.0.5" - }, - "engines": { - "node": ">=6.0.0", - "npm": ">=3.0.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "license": "MIT" - }, - "node_modules/is-core-module": { - "version": "2.16.2", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", - "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/isows": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.7.tgz", - "integrity": "sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/it-all": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/it-all/-/it-all-1.0.6.tgz", - "integrity": "sha512-3cmCc6Heqe3uWi3CVM/k51fa/XbMFpQVzFoDsV0IZNHSQDyAXl3c4MjHkFX5kF3922OGj7Myv1nSEUgRtcuM1A==", - "license": "ISC" - }, - "node_modules/it-batch": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/it-batch/-/it-batch-1.0.9.tgz", - "integrity": "sha512-7Q7HXewMhNFltTsAMdSz6luNhyhkhEtGGbYek/8Xb/GiqYMtwUmopE1ocPSiJKKp3rM4Dt045sNFoUu+KZGNyA==", - "license": "ISC" - }, - "node_modules/it-first": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/it-first/-/it-first-1.0.7.tgz", - "integrity": "sha512-nvJKZoBpZD/6Rtde6FXqwDqDZGF1sCADmr2Zoc0hZsIvnE449gRFnGctxDf09Bzc/FWnHXAdaHVIetY6lrE0/g==", - "license": "ISC" - }, - "node_modules/it-parallel-batch": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/it-parallel-batch/-/it-parallel-batch-1.0.11.tgz", - "integrity": "sha512-UWsWHv/kqBpMRmyZJzlmZeoAMA0F3SZr08FBdbhtbe+MtoEBgr/ZUAKrnenhXCBrsopy76QjRH2K/V8kNdupbQ==", - "license": "ISC", - "dependencies": { - "it-batch": "^1.0.9" - } - }, - "node_modules/jest-diff": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", - "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", - "license": "MIT", - "dependencies": { - "@jest/diff-sequences": "30.0.1", - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "pretty-format": "30.2.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.2.0.tgz", - "integrity": "sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==", - "license": "MIT", - "dependencies": { - "@jest/types": "30.2.0", - "@types/node": "*", - "anymatch": "^3.1.3", - "fb-watchman": "^2.0.2", - "graceful-fs": "^4.2.11", - "jest-regex-util": "30.0.1", - "jest-util": "30.2.0", - "jest-worker": "30.2.0", - "micromatch": "^4.0.8", - "walker": "^1.0.8" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.3" - } - }, - "node_modules/jest-matcher-utils": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz", - "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==", - "license": "MIT", - "dependencies": { - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "jest-diff": "30.2.0", - "pretty-format": "30.2.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.2.0.tgz", - "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.2.0", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "pretty-format": "30.2.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-mock": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.2.0.tgz", - "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==", - "license": "MIT", - "dependencies": { - "@jest/types": "30.2.0", - "@types/node": "*", - "jest-util": "30.2.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-regex-util": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", - "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.2.0.tgz", - "integrity": "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.27.4", - "@babel/generator": "^7.27.5", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1", - "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.2.0", - "@jest/get-type": "30.1.0", - "@jest/snapshot-utils": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "babel-preset-current-node-syntax": "^1.2.0", - "chalk": "^4.1.2", - "expect": "30.2.0", - "graceful-fs": "^4.2.11", - "jest-diff": "30.2.0", - "jest-matcher-utils": "30.2.0", - "jest-message-util": "30.2.0", - "jest-util": "30.2.0", - "pretty-format": "30.2.0", - "semver": "^7.7.2", - "synckit": "^0.11.8" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-util": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz", - "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==", - "license": "MIT", - "dependencies": { - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", - "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/jest-worker": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.2.0.tgz", - "integrity": "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@ungap/structured-clone": "^1.3.0", - "jest-util": "30.2.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.1.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jose": { - "version": "4.14.4", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", - "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "license": "MIT" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.2.tgz", - "integrity": "sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "license": "MIT" - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "license": "Apache-2.0" - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/memoirist": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memoirist/-/memoirist-0.3.1.tgz", - "integrity": "sha512-lmk4Z45IuVZPT67nxAdD3rAsNExxMEBFXgCeJGJnoLkYOjmZnJ8Hmi+MGdl9oLKtAENFAAgG8FvV3Z8BNiqy8w==", - "license": "MIT" - }, - "node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "license": "MIT", - "dependencies": { - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT" - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "license": "MIT" - }, - "node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "license": "MIT", - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minimist-options/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mipd": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mipd/-/mipd-0.0.7.tgz", - "integrity": "sha512-aAPZPNDQ3uMTdKbuO2YmAw2TxLHO0moa4YKAyETM/DTj5FloZo+a+8tU+iv4GmW+sOxKLSRwcSFuczk+Cpt6fg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wagmi-dev" - } - ], - "license": "MIT", - "peerDependencies": { - "typescript": ">=5.0.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/multibase": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.6.tgz", - "integrity": "sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==", - "deprecated": "This module has been superseded by the multiformats module", - "license": "MIT", - "dependencies": { - "@multiformats/base-x": "^4.0.1" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=6.0.0" - } - }, - "node_modules/multicodec": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.2.1.tgz", - "integrity": "sha512-+expTPftro8VAW8kfvcuNNNBgb9gPeNYV9dn+z1kJRWF2vih+/S79f2RVeIwmrJBUJ6NT9IUPWnZDQvegEh5pw==", - "deprecated": "This module has been superseded by the multiformats module", - "license": "MIT", - "dependencies": { - "uint8arrays": "^3.0.0", - "varint": "^6.0.0" - } - }, - "node_modules/multicodec/node_modules/uint8arrays": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", - "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", - "license": "MIT", - "dependencies": { - "multiformats": "^9.4.2" - } - }, - "node_modules/multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", - "license": "(Apache-2.0 AND MIT)" - }, - "node_modules/multihashes": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.3.tgz", - "integrity": "sha512-0AhMH7Iu95XjDLxIeuCOOE4t9+vQZsACyKZ9Fxw2pcsRmlX4iCn1mby0hS0bb+nQOVpdQYWPpnyusw4da5RPhA==", - "license": "MIT", - "dependencies": { - "multibase": "^4.0.1", - "uint8arrays": "^3.0.0", - "varint": "^5.0.2" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=6.0.0" - } - }, - "node_modules/multihashes/node_modules/uint8arrays": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", - "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", - "license": "MIT", - "dependencies": { - "multiformats": "^9.4.2" - } - }, - "node_modules/multihashes/node_modules/varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "license": "MIT" - }, - "node_modules/multihashing-async": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/multihashing-async/-/multihashing-async-2.1.4.tgz", - "integrity": "sha512-sB1MiQXPSBTNRVSJc2zM157PXgDtud2nMFUEIvBrsq5Wv96sUclMRK/ecjoP1T/W61UJBqt4tCTwMkUpt2Gbzg==", - "license": "MIT", - "dependencies": { - "blakejs": "^1.1.0", - "err-code": "^3.0.0", - "js-sha3": "^0.8.0", - "multihashes": "^4.0.1", - "murmurhash3js-revisited": "^3.0.0", - "uint8arrays": "^3.0.0" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=6.0.0" - } - }, - "node_modules/multihashing-async/node_modules/uint8arrays": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", - "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", - "license": "MIT", - "dependencies": { - "multiformats": "^9.4.2" - } - }, - "node_modules/murmurhash3js-revisited": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.0.tgz", - "integrity": "sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g==", - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "license": "MIT" - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "license": "MIT" - }, - "node_modules/node-localstorage": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-3.0.5.tgz", - "integrity": "sha512-GCwtK33iwVXboZWYcqQHu3aRvXEBwmPkAMRBLeaX86ufhqslyUkLGsi4aW3INEfdQYpUB5M9qtYf3eHvAk2VBg==", - "license": "MIT", - "dependencies": { - "write-file-atomic": "^5.0.1" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/node-releases": { - "version": "2.0.55", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.55.tgz", - "integrity": "sha512-mIrE/Cw9y+9Au6dS5vDKDhQza9YvG6w+ZrS6X+ZzA7yFW/soAeaups4Qzn1bL6g5FVy8WtP79+0j82oPIbqRjQ==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/on-exit-leak-free": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", - "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/openapi-types": { - "version": "12.1.3", - "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", - "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", - "license": "MIT" - }, - "node_modules/ox": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/ox/-/ox-0.9.6.tgz", - "integrity": "sha512-8SuCbHPvv2eZLYXrNmC0EC12rdzXQLdhnOMlHDW2wiCPLxBrOOJwX5L5E61by+UjTPOryqQiRSnjIKCI+GykKg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@adraffy/ens-normalize": "^1.11.0", - "@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.0.9", - "eventemitter3": "5.0.1" - }, - "peerDependencies": { - "typescript": ">=5.4.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/ox/node_modules/@noble/curves": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", - "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.8.0" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", - "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", - "license": "(MIT AND Zlib)" - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pino": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-9.6.0.tgz", - "integrity": "sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==", - "license": "MIT", - "dependencies": { - "atomic-sleep": "^1.0.0", - "fast-redact": "^3.1.1", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^2.0.0", - "pino-std-serializers": "^7.0.0", - "process-warning": "^4.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^4.0.1", - "thread-stream": "^3.0.0" - }, - "bin": { - "pino": "bin.js" - } - }, - "node_modules/pino-abstract-transport": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", - "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", - "license": "MIT", - "dependencies": { - "split2": "^4.0.0" - } - }, - "node_modules/pino-caller": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pino-caller/-/pino-caller-4.0.0.tgz", - "integrity": "sha512-z0i/iYp4zH02uIQG8LwFK5dMKTdAYgwZM9LSzoOATJ0H5LTeJ3OZeNBpGget9DpnNaewIt5NkN5YGNvkCZ+JbQ==", - "license": "MIT", - "dependencies": { - "source-map-support": "^0.5.13" - }, - "engines": { - "node": ">6.0.0" - } - }, - "node_modules/pino-std-serializers": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", - "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", - "license": "MIT" - }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/pretty-format": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", - "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.5", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process-warning": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.1.tgz", - "integrity": "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "MIT" - }, - "node_modules/protobufjs": { - "version": "6.11.6", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.6.tgz", - "integrity": "sha512-k8BHqgPBOtrlougZZqF2uUk5Z7bN8f0wj+3e8M3hvtSv0NBAz4VBy5f6R5Nxq/l+i7mRFTgNZb2trxqTpHNY/A==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "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/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/quick-format-unescaped": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/rabin-wasm": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/rabin-wasm/-/rabin-wasm-0.1.5.tgz", - "integrity": "sha512-uWgQTo7pim1Rnj5TuWcCewRDTf0PEFTSlaUjWP4eY9EbLV9em08v89oCz/WO+wRxpYuO36XEHp4wgYQnAgOHzA==", - "license": "MIT", - "dependencies": { - "@assemblyscript/loader": "^0.9.4", - "bl": "^5.0.0", - "debug": "^4.3.1", - "minimist": "^1.2.5", - "node-fetch": "^2.6.1", - "readable-stream": "^3.6.0" - }, - "bin": { - "rabin-wasm": "cli/bin.js" - } - }, - "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "license": "MIT", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "license": "ISC" - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/real-require": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", - "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "license": "MIT", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.12", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", - "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-stable-stringify": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", - "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/siwe": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/siwe/-/siwe-2.3.2.tgz", - "integrity": "sha512-aSf+6+Latyttbj5nMu6GF3doMfv2UYj83hhwZgUF20ky6fTS83uVhkQABdIVnEuS8y1bBdk7p6ltb9SmlhTTlA==", - "license": "Apache-2.0", - "dependencies": { - "@spruceid/siwe-parser": "^2.1.2", - "@stablelib/random": "^1.0.1", - "uri-js": "^4.4.1", - "valid-url": "^1.0.9" - }, - "peerDependencies": { - "ethers": "^5.6.8 || ^6.0.8" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/sonic-boom": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", - "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", - "license": "MIT", - "dependencies": { - "atomic-sleep": "^1.0.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sparse-array": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/sparse-array/-/sparse-array-1.3.2.tgz", - "integrity": "sha512-ZT711fePGn3+kQyLuv1fpd3rNSkNF8vd5Kv2D+qnOANeyKs3fx6bUMGWRPvgTTcYV64QMqZKZwcuaQSP3AZ0tg==", - "license": "ISC" - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", - "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", - "license": "CC0-1.0" - }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "license": "ISC", - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "license": "BSD-3-Clause" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "license": "MIT" - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "license": "WTFPL OR MIT" - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "license": "MIT", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/stytch": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/stytch/-/stytch-12.4.0.tgz", - "integrity": "sha512-jyYIfirVnhy3gAtGLEIK5c5tSp5bhi9tUE0JRzItJlwISBW/StMMOvP0hhPUb831EGjV2l1S4YRPg/NqJ+eYNg==", - "license": "MIT", - "dependencies": { - "jose": "^5.6.3", - "undici": "^6.19.5" - }, - "engines": { - "node": ">= 18.0.0" - } - }, - "node_modules/stytch/node_modules/jose": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", - "integrity": "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/synckit": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz", - "integrity": "sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==", - "license": "MIT", - "dependencies": { - "@pkgr/core": "^0.3.6" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/synckit" - } - }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "license": "MIT", - "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/thread-stream": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.2.0.tgz", - "integrity": "sha512-zLBvqpwr4Esa0kRjcrzGU6zL25lePWaCLMx0RQFrmteozIfeNdaMLpG5U7PeHzvlFkAWaRKA9/KVW4F60iB+qw==", - "license": "MIT", - "dependencies": { - "real-require": "^0.2.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "license": "BSD-3-Clause" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-command-line-args": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", - "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", - "license": "ISC", - "dependencies": { - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" - }, - "bin": { - "write-markdown": "dist/write-markdown.js" - } - }, - "node_modules/ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "license": "MIT", - "peerDependencies": { - "typescript": ">=3.7.0" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typechain": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", - "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", - "license": "MIT", - "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", - "fs-extra": "^7.0.0", - "glob": "7.1.7", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "bin": { - "typechain": "dist/cli/cli.js" - }, - "peerDependencies": { - "typescript": ">=4.3.0" - } - }, - "node_modules/typechain/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typestub-ipfs-only-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typestub-ipfs-only-hash/-/typestub-ipfs-only-hash-4.0.0.tgz", - "integrity": "sha512-HKLePX0XiPiyqoueSfvCLL9SIzvKBXjASaRoR0yk/gUbbK7cqejU6/tjhihwmzBCvWbx5aMQ2LYsYIpMK7Ikpg==", - "license": "BSD-2-Clause", - "dependencies": { - "ipfs-only-hash": "^4.0.0" - } - }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "license": "MIT", - "dependencies": { - "multiformats": "^9.4.2" - } - }, - "node_modules/undici": { - "version": "6.28.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.1.tgz", - "integrity": "sha512-zWpdTVD54H48CIybL0rWQ3ukpb9d23wM7eH5RtfdmeP70cWHNjtfo7P4vZX+5CoDcO53J4Pu5uXp7lNfjc6DRA==", - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz", - "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", - "license": "MIT" - }, - "node_modules/viem": { - "version": "2.38.3", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.38.3.tgz", - "integrity": "sha512-By2TutLv07iNHHtWqHHzjGipevYsfGqT7KQbGEmqLco1qTJxKnvBbSviqiu6/v/9REV6Q/FpmIxf2Z7/l5AbcQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@noble/curves": "1.9.1", - "@noble/hashes": "1.8.0", - "@scure/bip32": "1.7.0", - "@scure/bip39": "1.6.0", - "abitype": "1.1.0", - "isows": "1.0.7", - "ox": "0.9.6", - "ws": "8.18.3" - }, - "peerDependencies": { - "typescript": ">=5.0.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/viem/node_modules/@noble/curves": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", - "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.8.0" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/viem/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "license": "MIT", - "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "license": "ISC" - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/zod": { - "version": "3.24.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.3.tgz", - "integrity": "sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-validation-error": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.4.0.tgz", - "integrity": "sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==", - "license": "MIT", - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "zod": "^3.18.0" - } - }, - "node_modules/zustand": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.0.tgz", - "integrity": "sha512-LE+VcmbartOPM+auOjCCLQOsQ05zUTp8RkgwRzefUk+2jISdMMFnxvyTjA4YNWr5ZGXYbVsEMZosttuxUBkojQ==", - "license": "MIT", - "engines": { - "node": ">=12.20.0" - }, - "peerDependencies": { - "@types/react": ">=18.0.0", - "immer": ">=9.0.6", - "react": ">=18.0.0", - "use-sync-external-store": ">=1.2.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "immer": { - "optional": true - }, - "react": { - "optional": true - }, - "use-sync-external-store": { - "optional": true - } - } - } - } -} diff --git a/tool/threshold-spike/package.json b/tool/threshold-spike/package.json deleted file mode 100644 index c7589e4..0000000 --- a/tool/threshold-spike/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "@nosus-monad/threshold-spike", - "private": true, - "version": "0.1.0", - "type": "module", - "scripts": { - "check": "node conditions.test.mjs", - "dry-run": "node run.mjs", - "connect": "node run.mjs --connect", - "live": "node run.mjs --live" - }, - "dependencies": { - "@lit-protocol/auth": "8.2.3", - "@lit-protocol/lit-client": "8.3.1", - "@lit-protocol/networks": "8.4.1", - "viem": "2.38.3" - } -} diff --git a/tool/threshold-spike/run.mjs b/tool/threshold-spike/run.mjs deleted file mode 100644 index a723831..0000000 --- a/tool/threshold-spike/run.mjs +++ /dev/null @@ -1,231 +0,0 @@ -import { existsSync } from "node:fs"; -import { dirname, join } from "node:path"; -import { fileURLToPath } from "node:url"; - -import { - createPublicClient, - createWalletClient, - http, - keccak256, - parseAbi, - stringToHex, -} from "viem"; -import { privateKeyToAccount } from "viem/accounts"; - -import { buildCanDecryptConditions, LIT_ACC_CHAIN } from "./conditions.mjs"; - -const spikeRoot = dirname(fileURLToPath(import.meta.url)); -const live = process.argv.includes("--live") || process.env.THRESHOLD_SPIKE_RUN === "1"; -const connectOnly = process.argv.includes("--connect"); -const contractAddress = process.env.DROPS_CONTRACT_ADDRESS; -const dropId = process.env.SPIKE_DROP_ID ?? `0x${"ab".repeat(32)}`; -const senderKey = process.env.SENDER_PRIVATE_KEY; -const recipientKey = process.env.RECIPIENT_PRIVATE_KEY; -const strangerKey = process.env.STRANGER_PRIVATE_KEY; -const rpcUrl = process.env.MONAD_RPC_URL ?? "https://rpc.testnet.monad.xyz"; -const expirySeconds = BigInt(process.env.SPIKE_EXPIRY_SECONDS ?? "300"); -const checkExpiry = process.env.THRESHOLD_SPIKE_CHECK_EXPIRY === "1"; -const probe = "gate-t1-probe"; - -const monadTestnet = { - id: 10143, - name: "Monad Testnet", - nativeCurrency: { name: "MON", symbol: "MON", decimals: 18 }, - rpcUrls: { default: { http: [rpcUrl] } }, -}; - -const dropsAbi = parseAbi([ - "function seal(bytes32 id, bytes32 ciphertextDigest, address recipient, uint64 expiresAt)", - "function acknowledgeOpen(bytes32 id)", - "function canDecrypt(bytes32 id, address account) view returns (bool)", -]); - -const missing = []; -if (!contractAddress) missing.push("DROPS_CONTRACT_ADDRESS"); -if (!senderKey) missing.push("SENDER_PRIVATE_KEY"); -if (!recipientKey) missing.push("RECIPIENT_PRIVATE_KEY"); -if (!strangerKey) missing.push("STRANGER_PRIVATE_KEY"); - -const conditionContract = contractAddress ?? "0x0000000000000000000000000000000000000001"; -const conditions = buildCanDecryptConditions(conditionContract, dropId); - -console.log("NO SUS — Monad Experiment / Gate T1"); -console.log("Lit ACC chain:", LIT_ACC_CHAIN); -console.log("Selected SDK: @lit-protocol/lit-client 8.3.1, @lit-protocol/networks 8.4.1, @lit-protocol/auth 8.2.3 on naga-dev"); -console.log("Condition:"); -console.log(JSON.stringify(conditions, null, 2)); - -if (!live && !connectOnly) { - console.log("\nDry run only. This does not connect to Lit or Monad and does not enable the product gate."); - console.log("Use --connect for a Lit handshake. The full proof requires THRESHOLD_SPIKE_RUN=1, a deployed contract, and three controlled test wallets."); - process.exit(0); -} - -if (!existsSync(join(spikeRoot, "node_modules", "@lit-protocol", "lit-client"))) { - console.error("Lit client is not installed. Run npm install in tool/threshold-spike."); - process.exit(1); -} - -const [{ createLitClient }, networks, auth] = await Promise.all([ - import("@lit-protocol/lit-client"), - import("@lit-protocol/networks"), - import("@lit-protocol/auth"), -]); - -const network = networks.nagaDev ?? networks.nagaTest; -if (!network) { - console.error("The installed @lit-protocol/networks package does not export nagaDev or nagaTest."); - process.exit(1); -} - -const client = await createLitClient({ network }); -console.log("Connected to Lit naga-dev."); - -let encrypted; -try { - encrypted = await client.encrypt({ - dataToEncrypt: new TextEncoder().encode(probe), - evmContractConditions: conditions, - chain: LIT_ACC_CHAIN, - }); - console.log("Lit encrypt accepted the Monad canDecrypt condition."); - console.log("Returned fields:", Object.keys(encrypted)); -} catch (error) { - console.error("Lit encrypt against monadTestnet failed. Record this as Gate T1 evidence, not a product claim."); - console.error(error instanceof Error ? error.message : error); - await client.disconnect?.(); - process.exit(1); -} - -if (connectOnly && !live) { - await client.disconnect?.(); - console.log("Handshake and encrypt-only completed. Product gate remains spike-required."); - process.exit(0); -} - -if (missing.length) { - await client.disconnect?.(); - console.error(`Live proof refused. Missing ${missing.join(", ")}.`); - process.exit(1); -} - -const sender = privateKeyToAccount(senderKey); -const recipient = privateKeyToAccount(recipientKey); -const stranger = privateKeyToAccount(strangerKey); -const publicClient = createPublicClient({ chain: monadTestnet, transport: http(rpcUrl) }); -const senderClient = createWalletClient({ account: sender, chain: monadTestnet, transport: http(rpcUrl) }); -const recipientClient = createWalletClient({ account: recipient, chain: monadTestnet, transport: http(rpcUrl) }); - -const code = await publicClient.getCode({ address: contractAddress }); -if (!code || code === "0x") { - await client.disconnect?.(); - console.error("Live proof refused: DROPS_CONTRACT_ADDRESS has no deployed bytecode on the configured Monad RPC."); - process.exit(1); -} - -const authManager = auth.createAuthManager({ - storage: auth.storagePlugins.localStorageNode({ - appName: "nosus-monad-threshold-spike", - networkName: "naga-dev", - storagePath: join(spikeRoot, ".lit-auth"), - }), -}); - -async function authContextFor(account) { - return authManager.createEoaAuthContext({ - config: { account }, - litClient: client, - authConfig: { - domain: "localhost", - statement: "NO SUS Monad Gate T1 two-wallet test", - }, - }); -} - -async function decryptAs(account) { - return client.decrypt({ - data: encrypted, - evmContractConditions: conditions, - chain: LIT_ACC_CHAIN, - authContext: await authContextFor(account), - }); -} - -async function expectDenied(label, account) { - try { - await decryptAs(account); - } catch { - console.log(`PASS: ${label} was denied.`); - return; - } - throw new Error(`${label} unexpectedly decrypted the probe.`); -} - -async function waitForSuccess(hash) { - const receipt = await publicClient.waitForTransactionReceipt({ hash }); - if (receipt.status !== "success") throw new Error(`Transaction reverted: ${hash}`); - return receipt; -} - -async function waitUntilExpired(expiresAt) { - while ((await publicClient.getBlock()).timestamp < expiresAt) { - await new Promise((resolve) => setTimeout(resolve, 5_000)); - } -} - -try { - const existing = await publicClient.readContract({ - address: contractAddress, - abi: dropsAbi, - functionName: "canDecrypt", - args: [dropId, recipient.address], - }); - if (existing) throw new Error("SPIKE_DROP_ID already grants access. Use a fresh random 32-byte drop ID."); - - await expectDenied("recipient before acknowledgement", recipient); - - const ciphertextDigest = keccak256(stringToHex(encrypted.ciphertext)); - const now = (await publicClient.getBlock()).timestamp; - const sealHash = await senderClient.writeContract({ - address: contractAddress, - abi: dropsAbi, - functionName: "seal", - args: [dropId, ciphertextDigest, recipient.address, now + expirySeconds], - gas: 190_000n, - }); - await waitForSuccess(sealHash); - console.log("PASS: sender sealed the ciphertext digest."); - - const acknowledgeHash = await recipientClient.writeContract({ - address: contractAddress, - abi: dropsAbi, - functionName: "acknowledgeOpen", - args: [dropId], - gas: 100_000n, - }); - await waitForSuccess(acknowledgeHash); - console.log("PASS: named recipient acknowledged the drop."); - - const recipientResult = await decryptAs(recipient); - const recovered = new TextDecoder().decode(recipientResult.decryptedData); - if (recovered !== probe) throw new Error("Recipient decrypt returned unexpected bytes."); - console.log("PASS: acknowledged recipient decrypted the probe."); - - await expectDenied("stranger after acknowledgement", stranger); - - if (checkExpiry) { - console.log("Waiting for the configured expiry before the final denial check."); - await waitUntilExpired(now + expirySeconds); - await expectDenied("recipient after expiry", recipient); - } else { - console.log("Expiry denial is not included. Re-run with THRESHOLD_SPIKE_CHECK_EXPIRY=1 to record it."); - } - - console.log("Gate T1 live proof completed. Record transaction hashes and results in docs/STATUS.md before changing the product gate."); -} catch (error) { - console.error("Gate T1 live proof failed. Product gate remains spike-required."); - console.error(error instanceof Error ? error.message : error); - process.exitCode = 1; -} finally { - await client.disconnect?.(); -} diff --git a/web/AGENTS.md b/web/AGENTS.md deleted file mode 100644 index ae39b6f..0000000 --- a/web/AGENTS.md +++ /dev/null @@ -1,25 +0,0 @@ -# Web scope - -Read the repository-root `AGENTS.md` first. This folder owns the browser -experience only. - -- Keep plaintext and decryption keys out of logs, URLs, local fixtures, and - server routes. -- Do not fake a threshold unlock. The UI must retain its blocked state until - the Lit–Monad testnet gate in `src/lib/threshold.ts` is verified. -- Wallet writes use Monad testnet, an estimated explicit gas limit, and a - visible transaction link. Never add a payment flow. -- Use semantic controls, keyboard focus, strong contrast, and reduced-motion - alternatives. Every screen carries the experiment label. - -Would you like to finalize today's work? If yes, say whether to verify only, build a target, or deploy a named target. - - - -# This is NOT the Next.js you know - -This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` (resolved from this file's directory; in monorepos the `next` package may not be visible from the repo root) before writing any code. Heed deprecation notices. - -This block is written and re-added by `next dev` — verify at `node_modules/next/dist/server/lib/generate-agent-files.js`. Removing it from a diff only re-creates the uncommitted change; committing it with your work keeps the tree clean. - - diff --git a/web/README.md b/web/README.md deleted file mode 100644 index dd7801d..0000000 --- a/web/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# web - -The web experience for **NO SUS — Monad Experiment**. It is a testnet-only -recipient acknowledgement and threshold-decrypt experiment. - -## Entry points - -- `src/app/page.tsx` — sender console and live Receipt Wall -- `src/app/d/[id]/page.tsx` — recipient acknowledgement page -- `src/app/verify/[id]/page.tsx` — public receipt verifier -- `src/lib/monad.ts` — Monad chain and contract ABI -- `src/lib/threshold.ts` — the explicit Lit–Monad technical gate -- `src/lib/lit-conditions.ts` — `canDecrypt` access-control condition; unused for encrypt/decrypt until Gate T1 is verified -- `src/app/globals.css` — local design tokens and the flat NO SUS visual system - -## Public contract - -No screen may claim a note can decrypt until `threshold.ts` is changed from -`spike-required` to `verified` with the two-wallet test evidence recorded in -`../docs/STATUS.md`. The UI must show the experimental/test-data label. - -## Allowed dependencies - -Browser components may import `@/lib/*` and other components. They may not -read server-only environment variables or use the Supabase service-role key. -Only `src/lib/server/*` and route handlers may use it. - -## Visual system - -Read [`../docs/DESIGN_SYSTEM.md`](../docs/DESIGN_SYSTEM.md) before visual work. -Use the local Geist assets and semantic tokens in `globals.css`; do not copy -production NO SUS Burn components or reintroduce gradient/glow styling. - -## Checks - -Run `npm run check` for TypeScript. Run `npm run check` in `../tool/threshold-spike` for the -condition-shape test. Use `npm run dev` for a local preview. -Run `npm run build` only through the finalization gate in the root `AGENTS.md`. diff --git a/web/next-env.d.ts b/web/next-env.d.ts deleted file mode 100644 index a419cbe..0000000 --- a/web/next-env.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/// -/// -import "./.next/dev/types/routes.d.ts"; -import "./.next/dev/types/root-params.d.ts"; - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/web/next.config.ts b/web/next.config.ts deleted file mode 100644 index 2f6491c..0000000 --- a/web/next.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { NextConfig } from "next"; - -const nextConfig: NextConfig = { - reactStrictMode: true, -}; - -export default nextConfig; diff --git a/web/package-lock.json b/web/package-lock.json deleted file mode 100644 index 273ed07..0000000 --- a/web/package-lock.json +++ /dev/null @@ -1,1714 +0,0 @@ -{ - "name": "nosus-monad-web", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "nosus-monad-web", - "version": "0.1.0", - "dependencies": { - "@supabase/supabase-js": "2.116.0", - "next": "16.3.5", - "react": "19.3.0", - "react-dom": "19.3.0", - "viem": "2.56.5" - }, - "devDependencies": { - "@types/node": "25.3.5", - "@types/react": "19.2.14", - "@types/react-dom": "19.2.3", - "typescript": "7.0.2" - } - }, - "node_modules/@adraffy/ens-normalize": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.1.tgz", - "integrity": "sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==", - "license": "MIT" - }, - "node_modules/@emnapi/runtime": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", - "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@img/colour": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", - "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.35.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.4.tgz", - "integrity": "sha512-Uhfl4V4lhP2nbUVF9+hyH1+luj86f1gUFeo8ALYxFoULoU+G87D43BfeMP8XHsk9boxAnCY/bf2EHwhA7MuGsA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.3.3" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.35.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.4.tgz", - "integrity": "sha512-hWniXY3bG5qKpkKrAwPe4y+VTPmf086YQAnkxWh7uA1YrlRouWGa0M0Mxj3ZjnXFkv7/TD1bTy9lGUK26vRvWw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.3.3" - } - }, - "node_modules/@img/sharp-freebsd-wasm32": { - "version": "0.35.4", - "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.4.tgz", - "integrity": "sha512-lIsKw/BU+kjB4eZjxrYrZmwOJYi3Ajrv66iAlBmUPyKc3HpnloevB1g3wxGD9P/5BbQ1brBGl65VRRrCvQDEqA==", - "license": "Apache-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "dependencies": { - "@img/sharp-wasm32": "0.35.4" - }, - "engines": { - "node": ">=20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.3.tgz", - "integrity": "sha512-suTBPTDGrI9WodccaDdwZItTSaBYASlBk1NSfElSHrUfzu3szG6lvIF58+WiFvnfzuK8ZBFS5zE00PxqxnRiPg==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.3.tgz", - "integrity": "sha512-FVJZ5mITMobmXIz/hPDTw0EintTW5H3WfrxwLqEqjiIihlu+hVRyGrFQ60xl0Lxn7Bt3zdpevPaQi0HEzqz9fw==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.3.tgz", - "integrity": "sha512-3rbU4vqXXc3hY/OiXdl52xZvT0F1yEngWfvqudtPJg/KkyiaQw2DRsFrNzpmLvfavbwOq3qXn36GP8obHRULQA==", - "cpu": [ - "arm" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.3.tgz", - "integrity": "sha512-0DaL0A6Xu6sQSQFwe4iVCrKWU2cCTItnRsYsCdxAMm9NF6twAA9BKnoqy4hqz4+azQ0JHuA26qiUKsf1XJ/v5A==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.3.tgz", - "integrity": "sha512-cdn1OvUBwsXhbC0zSzJnNzf5MZ/mTrobawDvNXBTxe8VtqKAm0sRuEY2Evzovb/w9JMk4TvRxqt1mekSuJz64w==", - "cpu": [ - "ppc64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-riscv64": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.3.tgz", - "integrity": "sha512-HjPVx7yKz+0lqdhDlTw1tt90wamBoxhiXpvl1XZpJLiHH4RCJ5yDTqH+VlYPv2fwFs89JFw4c1IexYOcQUi4IQ==", - "cpu": [ - "riscv64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.3.tgz", - "integrity": "sha512-neWLh+3yCNThxnfy3c4BbVBeGgt9aftno+XbT56iK28RgeDs3UOFWviLWlUu0bArYVYJaFDK+RRohbicUNCm8Q==", - "cpu": [ - "s390x" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.3.tgz", - "integrity": "sha512-4vKmvAst9nrowcqquKFAyZJUDolUaIp8uRiN0mWFguJ1IplC9/pitXtlnnlU4aa/eJw3J7i67V+pwUL+wZGdsA==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.3.tgz", - "integrity": "sha512-Y9kQaLMuNoB0bPYOOdcZMaseNrFpPodIWWMrx+CZyydf2xn68j9WYc6sWWRrDwNkzCQjKYfc68L7jKjGlHMibw==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.3.tgz", - "integrity": "sha512-fj8Mv0HHfD1Rr+4I68+3agJynxDWtBFgicTbSOb9Bke6pIwzGcJ+RX/yHjmiEGFMCavY/dxvem7MyNaJF+wDiw==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.35.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.4.tgz", - "integrity": "sha512-7OAS8gI0EReKGVN2HssHlM6umJgxF5VI3xN0p9FA91p/YO+ou5hiNghLdZ5BEHztwaaK5+bLKRf8x/o2L2nk9A==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.3.3" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.35.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.4.tgz", - "integrity": "sha512-De4jpEnAU8Hd5oT0j1G3uL4ZvTuipVMn7YC6vPaJhy6/7EwEae0SVAoBrUMYQbkLGDm85taVWwuPc1a44LTzCQ==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.3.3" - } - }, - "node_modules/@img/sharp-linux-ppc64": { - "version": "0.35.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.4.tgz", - "integrity": "sha512-2oYZJeIl4kCcMGk4ouZVjnkCtFrpQFlNEtJ6GbxzhHQchwH0NH/qEb9ykmOl29dqwMq+JhFdZn+1ak2FKhI9fQ==", - "cpu": [ - "ppc64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-ppc64": "1.3.3" - } - }, - "node_modules/@img/sharp-linux-riscv64": { - "version": "0.35.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.4.tgz", - "integrity": "sha512-cPbNChoRURAWdebDIHSenxRpgEdy7JkPydSnUxRm9VvKD7m0/xVaR/8Fzlu81pk5nHEvHH87UZUA7cTtwnbJSA==", - "cpu": [ - "riscv64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-riscv64": "1.3.3" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.35.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.4.tgz", - "integrity": "sha512-RY0JFY8Fd6RonCBtHz+DvadaPkXDSI1AUn6yWL9TipqkZ1vY8w8evqdgyDFnkm4/K1ve1TvZiaePP5oSd4+WVQ==", - "cpu": [ - "s390x" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.3.3" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.35.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.4.tgz", - "integrity": "sha512-9qvvEAuk8k89TfWUoX2htWjbAMX8p+NxCppjpcg5k6xMsjhBQPTsoIh36h9Qde4WRuGpJeYnOjdosDn/cnv+OA==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.3.3" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.35.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.4.tgz", - "integrity": "sha512-KB5jxpfWQTr0nc3xdHtWChdbifHrBGsd2SM62Eyxrl8afikm+f5qGBU75SJIZBT/S1MC8XyacdlXBMSWq6OURA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.3.3" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.35.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.4.tgz", - "integrity": "sha512-f+eZJZIQNEEd26RPSW+76chwOf1XtA2Y/O+5ocVyLliHkeih3e+jhLVBdNTd2rS3IbNXK8+ug93Vf5ZXtF5Lxg==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.3.3" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.35.4", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.4.tgz", - "integrity": "sha512-zQnl4Kwp7Q6NHsENtU2T/00Zi+w3AQNwz3+UaTyVBy2FpXrzXzGjndpK61onhZjRtRpQXxCTeqw19bVyXOh7jA==", - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.11.3" - }, - "engines": { - "node": ">=20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-webcontainers-wasm32": { - "version": "0.35.4", - "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.4.tgz", - "integrity": "sha512-ESfNkywmCfPNyaZjxooddJQiQ+l/nTpGEOGthxiLnIHXC/CmcBixnfwUleX9mCz9ovrUUvKMap/pm8RYbzfwaA==", - "cpu": [ - "wasm32" - ], - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@img/sharp-wasm32": "0.35.4" - }, - "engines": { - "node": ">=20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-arm64": { - "version": "0.35.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.4.tgz", - "integrity": "sha512-iNdlBX9gLVvqe2I3uIJSIKTq6wckP/DYxZtcqxm09x5Gi24DnFBmPAWZmr60ZyYMG0xlzo6goG3670ar+RXvRw==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.35.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.4.tgz", - "integrity": "sha512-kqRsbaa5CS6KHlpxnN7WhE6vAAugXyZButpRdvDWetlv6Qv4N9WTcrWzF7tXfB9T7MsoadqdI8hmwLq6UlLvtw==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.35.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.4.tgz", - "integrity": "sha512-XtmnYhBcrORsJ4XJngyzr/EWP0hRZLAZRFaApdKuviyqF78+ylxh2y06ZmtULAMOnObJ3ucpN0AcwSWnMowTRg==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@next/env": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/@next/env/-/env-16.3.5.tgz", - "integrity": "sha512-NWEXVDMqoEo0ktmU6u0sE2Vg0LOcsD7NnOTJNo3/fEaTfsg+F1bMIxuDmQbda4e3yTIQwVdUREF2yIuMOusKtg==", - "license": "MIT" - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.3.5.tgz", - "integrity": "sha512-pMmGgETfKvElucLHtVaeiMRbp2zUbvKx7b1yGko0liBz3cw1mKSggWN/Rp/wPz8z+E1O82u3r4L1Co+ZS5hokQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.3.5.tgz", - "integrity": "sha512-76VaGYvf6HPa5/w12yLkE3dXTn9AfdEviI79oEL3aZoAmRLc9rWitjWqyjViVysK/ht/y9YKzFkBrUdi/wGkow==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.3.5.tgz", - "integrity": "sha512-zKDELJ5jSQMHeO/hmXUQsAzagX4bQD4OiMi3pQ5FbUj+yK506oLVHnKA2YXMlbg1EHHqJYtyePOgByIDXD1lqw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.3.5.tgz", - "integrity": "sha512-7Vql0pgzCoHagv6+FNOZoqmJqA52c6zeVbhtS/47qFozO1MSx4ms7x7GHiciY8R5CDsSMKMQjJEryoJLcsBIbA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.3.5.tgz", - "integrity": "sha512-NH/xzehyHEFWE2nlcZon7TB/0+H4shfWCi7S1zka815XCOhJDYZhoeJtOYy0dh0WVRWACVXSyGNFFytoMxUhRg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.3.5.tgz", - "integrity": "sha512-lV4+EhWMfS8jcC+EH2nn/Cm5cn6XsgbE07bU9tMH8fCo0tNAqhyzi1b5wQ/Tn6NGFTvKDY65w3ZH95EjwBRAnQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.3.5.tgz", - "integrity": "sha512-/wKzAREX2RF++MhicjDbg8tGn2AiBIM0+EFeTFKoUEUbW5D6amCJehd5Z5G1H5/gxNdgnwoXMcHz24H/c2tGkQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.3.5.tgz", - "integrity": "sha512-LNdCHzgLFc+UeqMS84LzXPaeBRKyqDN9OMyFAr1OrB0XrNw78IRrEVtZvvA7245W/HsaoeVOQX9jPjPk8jojwA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@noble/ciphers": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", - "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/curves": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", - "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.8.0" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/base": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", - "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", - "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", - "license": "MIT", - "dependencies": { - "@noble/curves": "~1.9.0", - "@noble/hashes": "~1.8.0", - "@scure/base": "~1.2.5" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip39": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", - "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.8.0", - "@scure/base": "~1.2.5" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@supabase/auth-js": { - "version": "2.116.0", - "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.116.0.tgz", - "integrity": "sha512-Cmosty12gyKGK9N3bQb+lMmuAFev5nmUzaR1AsmZHqKOAGzqX1VQzmp49CNPwOx/pw0H9Qqk4rs9yhwTlKpfDg==", - "license": "MIT", - "dependencies": { - "tslib": "2.8.1" - }, - "engines": { - "node": ">=22.0.0" - } - }, - "node_modules/@supabase/functions-js": { - "version": "2.116.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.116.0.tgz", - "integrity": "sha512-E+VOc2QDcni/fySqkBFiZhnoB3SGydEdZgFI6/dEAGAHx6yEhB46TN9qb2wXs+E+RSzOBV0R6dasiSlw4xlZAA==", - "license": "MIT", - "dependencies": { - "tslib": "2.8.1" - }, - "engines": { - "node": ">=22.0.0" - } - }, - "node_modules/@supabase/phoenix": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@supabase/phoenix/-/phoenix-0.4.5.tgz", - "integrity": "sha512-aAn9H9ovVyeApKy11OWOrrOGq8DV68yWeH4ud2lN9fzn4aO8Zb5GLL9m1pUg9nLqIcT+ZDfAcsZe0E/nqdv2lw==", - "license": "MIT" - }, - "node_modules/@supabase/postgrest-js": { - "version": "2.116.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-2.116.0.tgz", - "integrity": "sha512-kGpVZTDHxFTJS3tu+rU0iTAZ+4U0bcLVjxwCk8f3gRhjw3qdCZjTBlgYvc4kGH2XccmAzbkKwXL/mrNHMGSc+A==", - "license": "MIT", - "dependencies": { - "tslib": "2.8.1" - }, - "engines": { - "node": ">=22.0.0" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.116.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.116.0.tgz", - "integrity": "sha512-MHAnlXxi2s6yiJsZsQMfs2B3RFxeVfQWxerqYhIMqcCQV/FuY3LIeouPEkXw/ah7wUWMLYwempF9MOCUScyddg==", - "license": "MIT", - "dependencies": { - "@supabase/phoenix": "0.4.5", - "tslib": "2.8.1" - }, - "engines": { - "node": ">=22.0.0" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.116.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.116.0.tgz", - "integrity": "sha512-6/3hR6vccBP6oGM5B6RfbwZcTCKmQOodd/ZWQdsw8yJsU5zO/a//oBL6yLnmgxcjnHSrelW8rsO7hL5DPybyUQ==", - "license": "MIT", - "dependencies": { - "iceberg-js": "^0.8.1", - "tslib": "2.8.1" - }, - "engines": { - "node": ">=22.0.0" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.116.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.116.0.tgz", - "integrity": "sha512-YyWmKXt2NspV9iO8FPnlswUFJIRnrLd3oTCb+3ZyYRuKZtBH0xCUDgnUqoyA0fGUxpM/UhfwDjYf/dht/9bp7g==", - "license": "MIT", - "dependencies": { - "@supabase/auth-js": "2.116.0", - "@supabase/functions-js": "2.116.0", - "@supabase/postgrest-js": "2.116.0", - "@supabase/realtime-js": "2.116.0", - "@supabase/storage-js": "2.116.0" - }, - "engines": { - "node": ">=22.0.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - } - } - }, - "node_modules/@swc/helpers": { - "version": "0.5.23", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz", - "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@types/node": { - "version": "25.3.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.5.tgz", - "integrity": "sha512-oX8xrhvpiyRCQkG1MFchB09f+cXftgIXb3a7UUa4Y3wpmZPw5tyZGTLWhlESOLq1Rq6oDlc8npVU2/9xiCuXMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/react": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", - "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", - "dev": true, - "license": "MIT", - "dependencies": { - "csstype": "^3.2.2" - } - }, - "node_modules/@types/react-dom": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", - "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@types/react": "^19.2.0" - } - }, - "node_modules/@typescript/typescript-aix-ppc64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz", - "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-darwin-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz", - "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-darwin-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz", - "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-freebsd-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz", - "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-freebsd-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz", - "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-arm": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz", - "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz", - "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-loong64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz", - "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-mips64el": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz", - "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-ppc64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz", - "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-riscv64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz", - "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-s390x": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz", - "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz", - "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-netbsd-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz", - "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-netbsd-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz", - "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-openbsd-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz", - "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-openbsd-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz", - "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-sunos-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz", - "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-win32-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz", - "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-win32-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz", - "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/abitype": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.2.3.tgz", - "integrity": "sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/wevm" - }, - "peerDependencies": { - "typescript": ">=5.0.4", - "zod": "^3.22.0 || ^4.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, - "node_modules/baseline-browser-mapping": { - "version": "2.11.24", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.24.tgz", - "integrity": "sha512-hYrgxie335U08WqICoGqKRzV1HFXv6zdxwJE4ekCb80CM9a0SVVsN4QPwT67RraRo+9h8IATk6uxHJw7QSkdOg==", - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.cjs" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001810", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", - "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", - "license": "MIT" - }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "license": "Apache-2.0", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "license": "MIT" - }, - "node_modules/iceberg-js": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/iceberg-js/-/iceberg-js-0.8.1.tgz", - "integrity": "sha512-1dhVQZXhcHje7798IVM+xoo/1ZdVfzOMIc8/rgVSijRK38EDqOJoGula9N/8ZI5RD8QTxNQtK/Gozpr+qUqRRA==", - "license": "MIT", - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/isows": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.7.tgz", - "integrity": "sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/nanoid": { - "version": "3.3.19", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", - "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/next": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/next/-/next-16.3.5.tgz", - "integrity": "sha512-MdtsTgzyfCPRLC6uJ1mN8ao7lyJ4BB0U6Inhnx3gta1UcCIdHK3yxLG0E8OWQteWD8/Q0qb8A5o7wJaL8M9y2w==", - "license": "MIT", - "dependencies": { - "@next/env": "16.3.5", - "@swc/helpers": "0.5.23", - "baseline-browser-mapping": "^2.9.19", - "caniuse-lite": "^1.0.30001579", - "postcss": "8.5.23", - "styled-jsx": "5.1.6" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=20.9.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "16.3.5", - "@next/swc-darwin-x64": "16.3.5", - "@next/swc-linux-arm64-gnu": "16.3.5", - "@next/swc-linux-arm64-musl": "16.3.5", - "@next/swc-linux-x64-gnu": "16.3.5", - "@next/swc-linux-x64-musl": "16.3.5", - "@next/swc-win32-arm64-msvc": "16.3.5", - "@next/swc-win32-x64-msvc": "16.3.5", - "sharp": "^0.35.4" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.51.1", - "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "@playwright/test": { - "optional": true - }, - "babel-plugin-react-compiler": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/ox": { - "version": "0.14.44", - "resolved": "https://registry.npmjs.org/ox/-/ox-0.14.44.tgz", - "integrity": "sha512-O54qXXHEk4ySamMSyBpI0AeBegS5frxU6+LA6Jb9Sf6kMOxcTNaxYmwZfpOu22DIQsdKfgQxHq8EsAGaoBQScA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@adraffy/ens-normalize": "^1.11.0", - "@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", - "eventemitter3": "5.0.1" - }, - "peerDependencies": { - "typescript": ">=5.4.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/ox/node_modules/@noble/curves": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", - "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.8.0" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/postcss": { - "version": "8.5.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.23.tgz", - "integrity": "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.16", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/react": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", - "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.0.tgz", - "integrity": "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==", - "license": "MIT", - "dependencies": { - "scheduler": "^0.28.0" - }, - "peerDependencies": { - "react": "^19.3.0" - } - }, - "node_modules/scheduler": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz", - "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sharp": { - "version": "0.35.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.4.tgz", - "integrity": "sha512-n++8XWcj+jCOr2IOl7h8LbKnGBDY4aPbmprMONBNFdn0ImXqpGVv5zliDs0V9HbmbCQLpbuo2ej9rAoOQTvMDA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@img/colour": "^1.1.0", - "detect-libc": "^2.1.2", - "semver": "^7.8.5" - }, - "engines": { - "node": ">=20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.35.4", - "@img/sharp-darwin-x64": "0.35.4", - "@img/sharp-freebsd-wasm32": "0.35.4", - "@img/sharp-libvips-darwin-arm64": "1.3.3", - "@img/sharp-libvips-darwin-x64": "1.3.3", - "@img/sharp-libvips-linux-arm": "1.3.3", - "@img/sharp-libvips-linux-arm64": "1.3.3", - "@img/sharp-libvips-linux-ppc64": "1.3.3", - "@img/sharp-libvips-linux-riscv64": "1.3.3", - "@img/sharp-libvips-linux-s390x": "1.3.3", - "@img/sharp-libvips-linux-x64": "1.3.3", - "@img/sharp-libvips-linuxmusl-arm64": "1.3.3", - "@img/sharp-libvips-linuxmusl-x64": "1.3.3", - "@img/sharp-linux-arm": "0.35.4", - "@img/sharp-linux-arm64": "0.35.4", - "@img/sharp-linux-ppc64": "0.35.4", - "@img/sharp-linux-riscv64": "0.35.4", - "@img/sharp-linux-s390x": "0.35.4", - "@img/sharp-linux-x64": "0.35.4", - "@img/sharp-linuxmusl-arm64": "0.35.4", - "@img/sharp-linuxmusl-x64": "0.35.4", - "@img/sharp-webcontainers-wasm32": "0.35.4", - "@img/sharp-win32-arm64": "0.35.4", - "@img/sharp-win32-ia32": "0.35.4", - "@img/sharp-win32-x64": "0.35.4" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/styled-jsx": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", - "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", - "license": "MIT", - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/typescript": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz", - "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==", - "devOptional": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc" - }, - "engines": { - "node": ">=16.20.0" - }, - "optionalDependencies": { - "@typescript/typescript-aix-ppc64": "7.0.2", - "@typescript/typescript-darwin-arm64": "7.0.2", - "@typescript/typescript-darwin-x64": "7.0.2", - "@typescript/typescript-freebsd-arm64": "7.0.2", - "@typescript/typescript-freebsd-x64": "7.0.2", - "@typescript/typescript-linux-arm": "7.0.2", - "@typescript/typescript-linux-arm64": "7.0.2", - "@typescript/typescript-linux-loong64": "7.0.2", - "@typescript/typescript-linux-mips64el": "7.0.2", - "@typescript/typescript-linux-ppc64": "7.0.2", - "@typescript/typescript-linux-riscv64": "7.0.2", - "@typescript/typescript-linux-s390x": "7.0.2", - "@typescript/typescript-linux-x64": "7.0.2", - "@typescript/typescript-netbsd-arm64": "7.0.2", - "@typescript/typescript-netbsd-x64": "7.0.2", - "@typescript/typescript-openbsd-arm64": "7.0.2", - "@typescript/typescript-openbsd-x64": "7.0.2", - "@typescript/typescript-sunos-x64": "7.0.2", - "@typescript/typescript-win32-arm64": "7.0.2", - "@typescript/typescript-win32-x64": "7.0.2" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/viem": { - "version": "2.56.5", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.56.5.tgz", - "integrity": "sha512-GuEf/oee0PHgy4D6JIA8u0rY1g+sM5nF+p7HyMHO3vjlHC5G/ljfrgnUOnrES9m5Ny/P3RwWCHjDuN2T6HUWzQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "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", - "isows": "1.0.7", - "ox": "0.14.44", - "ws": "8.21.0" - }, - "peerDependencies": { - "typescript": ">=5.0.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/viem/node_modules/@noble/curves": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", - "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.8.0" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ws": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", - "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - } - } -} diff --git a/web/package.json b/web/package.json deleted file mode 100644 index 52360b4..0000000 --- a/web/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "nosus-monad-web", - "version": "0.1.0", - "private": true, - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "check": "tsc --noEmit", - "test:notes": "node --experimental-strip-types --test tests/private-notes.test.ts" - }, - "dependencies": { - "@supabase/supabase-js": "2.116.0", - "next": "16.3.5", - "react": "19.3.0", - "react-dom": "19.3.0", - "viem": "2.56.5" - }, - "devDependencies": { - "@types/node": "25.3.5", - "@types/react": "19.2.14", - "@types/react-dom": "19.2.3", - "typescript": "7.0.2" - } -} diff --git a/web/src/app/api/drops/[id]/route.ts b/web/src/app/api/drops/[id]/route.ts deleted file mode 100644 index e5003cb..0000000 --- a/web/src/app/api/drops/[id]/route.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { NextResponse } from "next/server"; - -import { isDropId } from "@/lib/drop-id"; -import { BackendNotConfiguredError, getExperimentAdmin } from "@/lib/server/supabase"; - -export const dynamic = "force-dynamic"; - -export async function GET(_request: Request, context: { params: Promise<{ id: string }> }) { - const { id } = await context.params; - if (!isDropId(id)) { - return NextResponse.json({ error: "Invalid drop identifier." }, { status: 400 }); - } - - try { - const { data, error } = await getExperimentAdmin() - .from("experiment_drops") - .select("id,sender_wallet,recipient_wallet,opener_wallet,ciphertext_digest,expires_at,sealed_tx_hash,opened_tx_hash,created_at,opened_at") - .eq("id", id.toLowerCase()) - .maybeSingle(); - if (error) throw error; - if (!data) return NextResponse.json({ error: "Drop not found." }, { status: 404 }); - - return NextResponse.json({ - id: data.id, - senderWallet: data.sender_wallet, - recipientWallet: data.recipient_wallet, - openerWallet: data.opener_wallet, - ciphertextDigest: data.ciphertext_digest, - expiresAt: data.expires_at, - sealedTxHash: data.sealed_tx_hash, - openedTxHash: data.opened_tx_hash, - createdAt: data.created_at, - openedAt: data.opened_at, - }); - } catch (error) { - const message = - error instanceof BackendNotConfiguredError - ? error.message - : "The verifier backend is temporarily unavailable."; - return NextResponse.json({ error: message }, { status: 503 }); - } -} diff --git a/web/src/app/api/wall/route.ts b/web/src/app/api/wall/route.ts deleted file mode 100644 index a199631..0000000 --- a/web/src/app/api/wall/route.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { NextResponse } from "next/server"; - -import { BackendNotConfiguredError, getExperimentAdmin } from "@/lib/server/supabase"; - -export const dynamic = "force-dynamic"; - -export async function GET() { - try { - const { data, error } = await getExperimentAdmin() - .from("experiment_drops") - .select("id,sender_wallet,recipient_wallet,opener_wallet,sealed_tx_hash,opened_tx_hash,created_at,opened_at") - .order("created_at", { ascending: false }) - .limit(40); - - if (error) throw error; - return NextResponse.json({ - items: (data ?? []).map((drop) => ({ - id: drop.id, - senderWallet: drop.sender_wallet, - recipientWallet: drop.recipient_wallet, - openerWallet: drop.opener_wallet, - sealedTxHash: drop.sealed_tx_hash, - openedTxHash: drop.opened_tx_hash, - createdAt: drop.created_at, - openedAt: drop.opened_at, - })), - }); - } catch (error) { - const message = - error instanceof BackendNotConfiguredError - ? error.message - : "The Receipt Wall is temporarily unavailable."; - return NextResponse.json({ error: message }, { status: 503 }); - } -} diff --git a/web/src/app/d/[id]/page.tsx b/web/src/app/d/[id]/page.tsx deleted file mode 100644 index e901eee..0000000 --- a/web/src/app/d/[id]/page.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import { RecipientConsole } from "@/components/recipient-console"; - -export default async function RecipientPage({ params }: { params: Promise<{ id: string }> }) { - const { id } = await params; - return ; -} diff --git a/web/src/app/error.tsx b/web/src/app/error.tsx deleted file mode 100644 index 3b2da57..0000000 --- a/web/src/app/error.tsx +++ /dev/null @@ -1,17 +0,0 @@ -"use client"; - -import { useEffect } from "react"; - -export default function GlobalError({ reset }: { error: Error; reset: () => void }) { - useEffect(() => { - // Error contents may include wallet/provider data, so they are deliberately not logged. - }, []); - - return ( -
-

SAFE FAILURE

-

The experiment paused before handling any note.

- -
- ); -} diff --git a/web/src/app/fonts/fonts.css b/web/src/app/fonts/fonts.css deleted file mode 100644 index f75451a..0000000 --- a/web/src/app/fonts/fonts.css +++ /dev/null @@ -1,11 +0,0 @@ -@font-face{font-family:"Geist";font-style:normal;font-weight:100 900;font-display:swap;src:url(./geist-fef07dbb0973bf53.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F} -@font-face{font-family:"Geist";font-style:normal;font-weight:100 900;font-display:swap;src:url(./geist-8a480f0b521d4e75.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116} -@font-face{font-family:"Geist";font-style:normal;font-weight:100 900;font-display:swap;src:url(./geist-53b9e256198e5412.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB} -@font-face{font-family:"Geist";font-style:normal;font-weight:100 900;font-display:swap;src:url(./geist-7178b3e590c64307.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF} -@font-face{font-family:"Geist";font-style:normal;font-weight:100 900;font-display:swap;src:url(./geist-caa3a2e1cccd8315.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD} -@font-face{font-family:"Geist Mono";font-style:normal;font-weight:100 900;font-display:swap;src:url(./geist-mono-5ce348bf30bf5439.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F} -@font-face{font-family:"Geist Mono";font-style:normal;font-weight:100 900;font-display:swap;src:url(./geist-mono-4fa387ec64143e14.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116} -@font-face{font-family:"Geist Mono";font-style:normal;font-weight:100 900;font-display:swap;src:url(./geist-mono-6306c77e7c8268e4.woff2)format("woff2");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F} -@font-face{font-family:"Geist Mono";font-style:normal;font-weight:100 900;font-display:swap;src:url(./geist-mono-7d817b4c03b0c5f1.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB} -@font-face{font-family:"Geist Mono";font-style:normal;font-weight:100 900;font-display:swap;src:url(./geist-mono-bbc41e54d2fcbd21.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF} -@font-face{font-family:"Geist Mono";font-style:normal;font-weight:100 900;font-display:swap;src:url(./geist-mono-797e433ab948586e.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD} diff --git a/web/src/app/fonts/geist-53b9e256198e5412.woff2 b/web/src/app/fonts/geist-53b9e256198e5412.woff2 deleted file mode 100644 index 0bcca1b23700da8d9f4d9f5e8378c3f9df09f574..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7968 zcmV+*AK&12Pew8T0RR9103RR#6951J08A_Z03NUa0RR9100000000000000000000 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 TPb<(HPz|J?I^UK|(rW+!@A<h*83f(n7*;nUZ zy!r)lht%6}F5E4|3zN4CG~|IexYeJJS(OjOqnwVd(*=41$0v-)eqwVv$HykgE!fm63X z>7>L?+A5xuTv;(nJbi!9&fR^VzEEP#Bo=5;kbvLgbF03fp>4$5*4)OncfZShuM_B* zKc|2CM==>Q+K^zOJ4i!_8A%8)O0dVZ&%A(nll;9a3QMGpRfS7-_cNX@@0NgFg$2?r z7H%@c^@Flz_pR+`>mX{G(0C-Gc`2kuX#Pd@&R2MN99thRm5?aOYvXN0Y9yLOnx1IB zbc=J!pOsvIT8T6MqzNJb0e0A+cK|qwf}&shw12j<^$uw31tpOE!iJ>&pKovO1$eUo z1O=>OqoQmg2~;Zbgp6?_|EFr%&W94Y5u4|t;XJ;IMR}pJD|h8^z<@wVcr_2SVCA>}H7adkRh|SEFDHS|?oQrPMih?)xg-91#d8KwFH^h6td`$k?eJXe`d~G((2|hvCWJodz%feYvmY*(&U?ow`n%>Y)Fq zi?L07t)Le?Lan5g&9YUUS`w3!RJ(@1zg!FI)}E{9H+VxZ$_%T8PiHKxWwtDRla0?< zGbP($`v=5_=7-UN8eQ?1e05gLCXorbP|zuJXWH}$f3n71-Jw0z=J5QH9-Gew!EmDQ z4W0>Rf_8w5w3v(xkv9s)M{O3*;UXqQ9}#VG`-IQX1&WF%i>GXXVPY9R&1d)%zMziQ zv+5I-AS&`ip3EQQDKRUaiUm;=5|SkOcC4K?aGGTQR_qjh6{bN05XfggOiVs%dVagp z>jxB<5G2J2b6i1?00{X19LB_?00R0kF9E=2GC%;Cq}4LE?`&HE<)4#>_Q105p{=`N z*?;4aeNYYqAVvhVvIhlv+YN{ILEeq)BrE`y1Kex{0XW#j*9j1xp_`!jO(;5#YF7x| zGh=Y7Nwh#F(@45lJePj^;qRu;rZXv?oJp4&!%9ywB-?_Y6@9ElNzap^omx0){n9B%j(mikNIViT-CCQ7Ya|pLXC5ULH@}v z5vk7xAOQ@?K_F?VF(BJh%t9ma3GK?nr#Y45JsCUBr`4Kbmh%j~*+#qJ6wtC3QOiOU zL~NEGw_O4+rEL4?*c3;d#>Lx+0HD*`Hi56}B}mNrBNaIGL*!8UA}R#+;Ki*2*krEO z-rmSoRe4bZ(h>}y3L)@YITJqYJPV72I%>nEIA;`4Gbg3dJcSvTZewYvj;krZ7;U$# z5#9D?!V|87g_~K!G@r=mX>HjULwN|&7QUFdr|th4OzRf1untl1(HtVE1HtyNi?Yy+ zJ{-axwxSIGz#4L(VZ-ZIjG#4yFou^wLW0VW!Wll!%7*7)Jxtl&s1n+qEt1xT@caZI z61Gro61@C)Rca}Ph3V9Z(Mzaj(m<`~d5cQ1&bx4Id^byM7SU+u&5)P``EwXbG=t5K z`2bK_?YG2qy%w~&i-(UwAj(tXi%_5?z;>WHT=$?L00^|{b=>PyQh~;W9kBs!o`pwm zU#Nv|hfHo0^@XvuE@r}9zP~3J3jBh|EEnur`#zzGS#{F-hKsazFpjY1vBaFk&aP>AE*bK%L*#DA3gcskxeEvo%ab;U?fS7Nnb+MN@Po-x&(kMW1(V z8<@-XHF(LS-}-mt{J6}&M%(WJC~OVCjHvsreKRM^9oz6@;k4?72z`D0C;v4>U$l?o zKFz-pyne9iZ0=XV&Cs0)+MzY1?1?cHrfqT7hWNd;UfwoDFQlvpO;+B$9h7Ekf2k$z zo09fhIpi}zE>c)8W$%b3G($B^&X>hw-0w45MLlFIX1Wxp&PGWn9trp@mB8((94u^% zY0p`Q);b*$Og5;AujAuQP|fyQlodl==OVD#Y5YOk6#w+Rd?n2YPD5Zx&sKVKq1{YK z_kq1`!@R|Q-ZYFWH#NI=egC5C-6GWD&obdsojgU*cPi{y*9F^d?X z!&KvUzS*(c%sAdxVV&)JMF;e$pT4(=JznUKX<7Ls!lBs6_Ko{t*00R93y}AF#|!lzSfc$&es_T23YHTbGY3wx&s|_A8wj%rUb_oHMaK>wib~X$dpxR@2F-#^mhk! z3e6-WG(d03t`l5nXNCl>rAQv;$)S-VO+#SRQju^fvJfFJQLj^-v_u8|F|5XhPhEvn@he^W?U#0VPQ`_DsQ7Yace z1injc;R$~i5fBpPZQj33AnpI8VYL&SfSUhw;XK}v2KZE=7(WfaSe{H@6rNXJ{lqKE zw5+SrV~RDbef+U{H)pT%Ch4>!!AC=?sVHgh_M*`VFt$$X(V8l12~~V4iA_BYiMNIV zF~6Vvg)l?%8bcyg5tfv%UM-|bPZiFG>ugmvZ@gNi>aj9GH`Zq`}wZ(M=rKr%wF8}X6UUSzT+Kw^wNvNcV4;i${knUzS42E?OOc$&Wrbs z9KF$Xo4R`Y?YnP3HG0$N?W0eRel|v2-*fNbdyn3G{N76;R|pCTp+TTTsRZxslb6Xp zxkYxW|12fdh#J=oy=Ig2G@iMIE=Sr}H{TBiOW<9A4HtX}Wb+NJ7=E4lO8~&VzwJlv z+R%;zQ;_QdyQc!m445@*8)Cpt+iC#&_!rleR8Nws+Aj9i+~q6Yjcsrh%R?o4|NJ=s z->ggv@HAl?w}BS(kiIP3bAd_7%@#rLxoO7{1OVT^<{3fCK@eDYM6@7y#r0VO0)Qs5 z1!#{=Ver5-c_3YCp!y&HDlgC|=3-CM8MiU# zf7CfxB4{icJj}~NMF^&In@7FTJ-*%lG=EX41k2`t&2+oRyveuuANO{;YA^rP|4PIL zUjpYQsJ)Qh72n?W5MYiAZ2$Lur^op@04!v;RDnivN-AnH5Dm5pwc_*)j7-W{IXIPb zsT2|xQ70;T12&qiA!kLCZ)%qAr_=zM%}vf>eH`7rvWYw z5lMwQ=!~ENjG!P0q>yW8>tyTFGq0fqTX0m>JuP83g|UJw?BX#KqGv|1hNCP(6BA4 z=nkfdB7H>hh^d7mR*M|jE~zk#i4iJTQ(#49ZIMr5BpX&1kD2q}kPMPa9 z{nZB{;u@*BWu5QX5hbmvDQ9b%CQ&=(JZ`Gq+j6~BB4s2vjs-G_;TT_2VtyRM2~CgF z1SXTxQXV90#>}qqZnl+UQk!eD=bCQ8)mVvRz@2f79V(n9RF!1dEtj&5w!tjNOm8+q zGGsI)t4C54jUCt(ADb|I3R=$C>W=aD%4p{hbyPXFzKjwKE;BetDQ>yu7<;!DBv*YDdQ0Zna!K1 z*2_N8RJf)&=unJyDXY3z)n!6Xu~cH|Z0(m*=bhwdH_QGr8gKb$Gz1(xj7$F*Q{E+} zNU%n^gkl+KkxOZ~^t)y!$s5MCXiOmtWD6bQ&T?IF_b;^hi3aJ5k^lA_WHQ`|lz&wb zgCR2E#TFqL2dscR5pwmu6N%w7vE}*uPg=$*r=hEfdrDOI(bv1nG{j_-{V!b{(-MM}b z-HtN^HJ!XH8dw4NJ0#=R5>M3V`%T-yX288~FvhymiV+-Zv*6t|5H4^2T&O$E#-=am z55h$Exk5U8Ck(zwnAA|**T%JoUWE*;I5ouR>M1dOp(6}*yAY{`59O?UgP?0qtte=% zS*t`U4x*~vO2ij!QH^Dh-^D-!MuL(qFGykh3S*Vs`iHG}#Xv zSaQv>U~g~GjBBFNCu<&E{QSHD*H=I)$`M7yUr}8mh~npZ!lrmjxzLtFT81hN&MsZ0 z>F(vb6e!zV;c=7N7ITV3LQXW4#WK0rg5x zbWEQ`s0geXn#e>3t$4R9OfO6B?aKVNy@=RbLcF%8{>g1iE_JuJ_RQ*(k9ZYEvLfnC za$MeHh+w8bb&}82BzQzfGxh$m^t2O}X|hz1&$ep1$!f{^N~R(+y4z~bU}&Iuq}SQ% zpPsLM`JLo%Cwk$plbn;r)5kIJT*3=FK`*OHonkK36L=zYtK9Pep+FeF?T7oJWd5G` zE4k57Ki=@3yJW2kbTzMZ>&St-RZp>gDFZ8i=yd{T`j?SmM}SwMM9OREjux-MH|*=W zWlkdoiCAoCLej*826IE57#A8J1hE{?RvR|m*@^AmYWIw99$%QE=nJ$yt6dRR)Q?eA z{b(3gxI*4}CW<~!r|le)0cZL$(ejzo{wn7Sxi+ujwHi~+J%~jIAk0T#N`qE_i(`B7|d^u>#32n3Kr#n0KySLdxVWl=3 z8`FMV$c(nYqEU(xjkPFHgp^qtqx??~IMe@sSGR{05`U@&+n3j}5658`!XbPgz;aCe zQdOL;w$p=r1TU+vRxX7~i#{eHHxWdHDX9LK%qG@JDp<5k+M3uzNw~Y z1}j7vwuLQ?9IU3PnMw)3SBKssa*6jkK+gE)&wb&uD^ITse(sqGh0hnAF9Pq&I=oti z0@IT@7mDE~s9E&GC0phKw8Ke-V;!M)7|-V@Q9*8YXmmgH;AE6X<_fV^e(3*{s~B@vO_ROSPFEQrJ7#NYZZb%f zL&T68<-kvwv4b>$|E%OXxzm8L;t`>`2?IN&|4B7%?X|m0o z8UX7a#3*35#A>-ASkz?i0Y3Q>;YxKewnm*|^(KoRaEJaGZn*4Rjj zWuEa}NC@1AJ|{j0iOH!3V%tplYA27r$@J|YV{d+$oa4`j4K3BRe${{EA6i6?i||D| zsv2sT6L9YBWp#8k*%SBPjSDSPRNlGn>eNd{s#CqI{K?b!Y2dg;f_=TKdyi4crYkmn=)vF+t9Dj*; zskgr))Y>2Iz3Imm^^DitHL97%Y;t_20cc zuxyRg9Odcf-Msopz6pK)byA2Fe4b|%n|rd^(94h-^<0nPNTTrg z48R#nlH^%=-;ZEOD$Og^$$}#BFU0-_mwwQ)RQ1-WiNxl!m1l|MSQ4ya5R7mC$ohuZ z_DdG1zZwQvGj;fzERf8Xpt4cxY|5)tyv;6OF7%@Q>XRkqE`>ajveL7mq~0rcG6ia` z2o}OwxiY#zE>X4H0nQ+H{JNc*Z3w2bv;M1FGct3tuejF4C(tE%q=3CM$snG5xy&5> zRt9iJ{E>4s;;uXW@;#3@_xj7zZrJ=s+k@Yu1nQWNwIxHHuau9EHgbWl_9nUL_}Onqne|679tXQK{$2nn^LX{< zVvZiVPFxosswz2p?%)pv48mDI^#1T9@#K#ak4i6qF?*+n-F2Dezkn9#N_6IC+?z4(3ih2J;0NgjMeFe5N+KIRCWnB zZK8KGrD$9s86>`cI-IW^{>Nwn+tq%lU7#_3+-ec^$=PN8{<6E&g8?SDx zhj=`wZJwJWAh@F0b}`jk>T)!H*_TCF3mv>iso*F;t+lx?aMVN7*tbF1{>+oNh+E)C zbP0MWJ>X8Yk?Ap8Ao%pO!QsYnZ5#9s4+fb|#ynSBbDqh%P(9swaDkHQV27rpqPS#n ziN>LY0eg$z<|ifBOn|kPCmg|E30Y(}&U6u4C9?rKa`r=24NOE?hG6g&Nbj&*g!~Rz z0s*M_IE(yMC_cg0!B3Q6SaXxFtHx#UnUC?EVTlDkPkHR)=c#f4C6RTBgdu}MT+#o+ znb+uKjl+17s0qsgxd|1b{#5ijECp=Jx%;04ZyrZKcK`WytZ+ALmi1l7*vB49U1NC1 zDuxbwF=K} za-=>*0oXfjC)20-qA#ql0lM;A<0ySPEg&zDI>hOCCVgT42HKk@Sj#))X75hjzuPd< z6_UOo(5U0N^6In|Mi+KQh%!uNR(1ir*U<0eA1Pre33qJgwMHYlu35a%dhFgL6)jJ9r#I6r z$FL@!@;PQKS_`t+T70MYOYur^wPbL8Sy|SV>&lzuopMT1SH3Dy?W%gJRn_OKA6LJx z{$2gIno&i>>N;4D*5~RQjYz6*vW>I3tGS=6aw2~^U&&+nu_)=2W4p$NT6ddmsrJcE z+XcH+XY20je$xH9d%1hiFYRM}e?QUxy#H%|bC58W!84==-C!FML;o-_j11$WDRvth zV;^A8vOlmR?s4vO+^ZbLKg6HqH}UuKd->Cfxr&{N?TT}XtBO_O2BAr?31OjM*d&|~ zt_eg6uF@kQ5QFeV#D^ZwBv5D|=m4#Io9R0b#F`tcnZyFDsj{Imc<^~&!3d)7MgKRo zL_AsBVY@2*^Pl12@5`mb8CZa%NtWTpY_(p+FJXi*GCqX(1S7XcMj<1~1i&bzi_DhW zBvBysp0il;Er8awnNk-kk$ZSrOq7R6+awVJyI6lVGM=+(0vUL8@KM%Lma^L%8L; zc9bL>*ap+3<~56JUM-NQ${4}C_I8(%f%COQFC3+7L^v6E)X2+(7==OT+@@UylZ?y3-Ca%e(RI9vu8^86Sxfx5QF(*&>CVN^%3C2w)FKyFGPkcd9XQi75= zT6l5WupqLkp3$_Ejzy7ZVua`CB7!kZ9u-8rV5}5P%Nryos!#4}mG(ps3P+&x5cGm- z;#6ZsD)53ArA1Q}0?WEJqgt$Fhz}B=RH9VGbVf|5s0YHpQCjS?h6DSIikzBJUvD#s z*TLT4-eucFffUT(MYeD%Z^W<#w!~zc-f+Z@Ef;yKyT=M)WO1Rf7#w1muFl_Rx6p8J zC!)OB5HvYPQlUpCQRue%oxJW!-2fKJXq1d$@k+8coYWI&B-9aM|CX-x25moD+FD{l zzxPc)z7w)LR1oU+^#*Y#CXsi?+l=^E?}r(8V?cyMR#M%B%9Yj7%tNUV7fq~epZ z0@(t8p23dL&H&gp7~_`2K%0{;a|L|-_okyUP2M96QiN12h5Un$f&a8baWMs*SRY%@%9LYKIg3hA|hIyt7q|2Z2KtXxVkpV3=mw2JIwA z)vPNn=2db?E?1)gy^B3-LtX-c($NN9loZO)6fXJwjZ2MlIszc|s4@WK7XZRn2sZP1 z?qU*1NmSPRc30|mwZxzKhdH)2huuM9}*n4Gy=xW`qZur}DkFQsV zuZ5%J(D0VpDAroKq7&o&SKBEn446Twc)BJTgE#jI9N0<{qZsBHJU!-$pRBRj%qA_W zmxCa<`NU@-$)&|MT9k7yA?0c|G_VaJbfF0)h%&72r{ajI0X+JsMcgQAL9@>?{+RyZ zS?HFIw})}Y|Gy@JeV*UFc-r0K z5Mfc&)_3}X2L!F#9XC^Adt0+Vku;Xs%u1S7eW7C50rT)O zziW1-u-&~1#en9}5L$S6wyGI8=!-Sf=MN^c9^3}@kW7e&NP#7spMf1J?os@n*-~7f zG4xPx?=YUL508tx_p%Mc-t8aCEZ^he5~EiN_6w{@e-ZCqfj+ zFEIx(h%Nc|(~_a44Mh-ype#%2q9o$Dwb(J2tSx653^8FKIqCx;{apwJ4KTHa8N_nZ zLbgudYBlBXJFHbAtcqO5wQKEe;&m`}Ia5>a4G>CBCe;@(mzyTuR2sl2!^2MCfJ16} zNtJ`n!4HJ={c4@Qk?9-`47VS0YRX*-evc^d!M^(SAV>0t&l#WyW5TF1Jc;WV$wLUl z_3l4czP_TD%)qG<;79(SAIJz1Bn->wc&2$*`A}u$A^*(=nS%hcX)U{g^BAgSmv}Av zWN5UQNoRcIp&*JDNgV&^&bPLDzqo(2+vNdEM(u?R+?-9lkfF<`J~Q>~vj_&t=zuvY z(-8rqyMvpe1S3Nu2P(>NwBP$z`~UdrKiN3G-`%a`H*@&}OZf{#HqUW>sZZS}Ij zXBrMxx*EVYI>(-X7eC6efz7Z1RV6K0yN+oklstSb=N;M7l{cvf^s2*QNU-xUu zsd>m)wysVinwL+N(hkpWPBLeYWlc)Sc&fj_RFiYQzy5-fudJxefNKoI5?a90#p-SNRp)teLcy0fHTB{u$(IaQxi?TBEmE%E2Cdv5P5`-#3@!uo%#N8RHd#==|M}M~ zIf=4RZiBril;Ik{0e7$g6YVU<&@}}+xb9ZG_g~| zsxVyQS&iCav&?*XsLyBky!a6g16}s4B3flFPmkX<`m{YdKN3J~pY?(A@)p=#8#0xd zR9TqITw5itWpcTyIwB{lxzX~Kg4#hLeQ{;Tle8ZIqZLXS%!g5U7imCrO-Ni93sYp} z`_Wo&;02K0z+NPb7-=L(lJyZqI_vVk+`OVyB?@L9$RY_^IV1#vDg+@YrPvFISPkzj zPX%{cg4u^yHi7E^4o_HcZdZrEBGywCgz@R2Q-%6?VrIt~@)(>4=aaH0^U&zQ=QoV? zKn7$|NvKBEQpnvk8Wh8dX4^Bm=GJ*m>(|n=Z^H}H*6xh!8Y2S_d`$6$Qrt#|J&~Ki zi&e@BU|AFTg4=At7OG4?9|u#Ldn!waD1_MN5qu=g2h`b3ACE-9XlWJ{E5`A$Jcp55 z7H|$;*m4XnW9*4YV_G+Vj6K}3_+9?!3J@w#GZ}0P|HkF$l@F znRFPqKDF`AC)OIUhHSRGB%n6o09~tFVM}fUHBckVTGsspJxhkZnH+^%9$AaQZ~@3{ zTnL50X*W2{bzwr+St7nK#lgQlj0CEknxT6*(l~V z$rV{PYWLrq8+kIM9=AB>m9m&?^Vy?*>)bC*zI_q-iXVA%UB%g!F@umks_NOEPJS-yRgEWMz=^)<_&ECHHyCnBgbDD?A#G4e~Nf6nq zMRRy6>`Jg;_+6=F)qGLZ6Dkjfo1qa}-BI5ev6P37Z?MeudfFFi1^u>b0eiCFLsWhpB9bWs0Xn92R5QNM@@7xiRoz{(h6WfMfxj*X#!gmhKTKp--+rZecv1 zByG!-7#zv$cz;P?oJ{mx-{HQcZOP0FCDuwg`YIWEpxjazEejHu|6vp^l(~fE;f zWB503x5XDvE70hR#au4&{E6;xyIIQ67Hbf9^;~zBVLeCdhcT7IvijYiOc}b3;E^N@ z?Pgn}C2x5T;$9p8iV3=qb5GYKs!kg1blZx`w(FQU_7S|t(PDE0CmN$U27Q$jDhhPkH2PS=0YAtUhiyJnW@sUbYvM_j)AOWeQgJOHOy z{*U-C-PUGi8d_UhU#~SqBMGrt!>^vv_Te?o#9S?N+J68p$_g2NF26M^H()gtn3;qM z9(46g+L^I&8WDC@aMJkb!J1^f&*}8lZ%rgZ6~*YTy%6|X_YKe|c8n*-u0xXUys}%T zrmozQ0ZRx&*k7=$(_MYwb@c8ANqV?;{*ZE0#AlvRaatg?ee62TB6-Z z7xvBqHzya_DE>d;B!*sHh}fLtg*q98 zBd7k{HIE1U)nLC5TL{AKJC-@zZjA;gx6i6HwAyvEUX$Utl#y`MGDH$Dd0hOZ_}l(M z>G#nAgBl+2NoLyxqE*m6yO{yNBIH7ITF?W%`Kts0TgcGk{w)OMEd9mP10gM}GCCZ%UWb`1zPL1pyv|sBylxCPJ6oeshXQOTwf=%u$;yPP zP&w?ivdh;B9jk2{x*@4K@NE|!ebh9!@jrdRBa$EY#abC?^N%vtkXZ_?MG#Gj5Y1VW zWWB{+vFP6<#2ZE6R0LKH&R7tI;h2ogfmy`zXc7lT-j`7rb;Vobt!hoL(U2MfV&-Qr zwMf%^BR}_UBhv`qh=8GOp8lf`xKW55YW@D4vAydlKP3J%0i;8aY-67X*G^To3LQ3#}BjE#hlB%Bsu>M9Qv*1%fXh6bYIcu|o1 z+@#yq_0~X<`i4|2O)JZ~ST9N|WwT{`ohFcEE{HieZ_W&{ahQK}4K3mRa_*YsZD=9`1io9r$sry9BBTAry8OCsIR6 z7m$35zeWO5{~H+HK?JuC-Gw#L;z52h3OtyCI-N@%{K)|T4+d6Lpm-9C*Mv0qH2ep8 zm@9s=3Y=x5{v{4DBt(_@;Wiu^J_}Z`pA}=QpHLKTuCKaQZ+212*4d!aVyC@i+1NBN4Y9>{rg8bxm5M?^Dxj`^9X*3{Di?YNx;HzHoz4IXrXODjymQWb{brm(q2(AMOz9p+r-Wy)J3fVLB2gxq&dyB@vC#idIG#^0)42r)88lpwYBgpsc z@#&7@3k^9w{^ObSs{KfohfYr~%0#&`&=J+t!2r%4WzYf7Kz?S-vr(r557ExOw0q}& z{%Zc8oj9IH=fU))_k@`8CHRYUXfOmqzC;%(EJi7__GCy0_tyvk7WV#vQP2}@8}3ft z&fS+(fj;;Wd~Hp)yf0ePH$1e_Sh&wznW!@fQt>J2@P0IDnnFk}L~fu4Vaj~yow6`# zLBc`Ye6E(3P?4#8Y1)DIgeF1?ulI5*zbLwf`EkP?DW zE6bT?KY?032QkpBS63XW#}F*ki6hN%U2$;NR59gFvlMZg6n!EWL<<^*VNVu?7G1f} zArEWm59443J0%u`9wNgF!)Y<>O@2bP-9(D4wC5-TM7YIEF?2LX4+pEOkmul~%GJP2 zOFbbpH_C>81){i%`O@MKm3a-I4|a`J5lv@LrgKS%k6&h0`9a)~&#+l3c9b3-zIIHV zL$Gv)%2~xsgQ&>88>n6X*9R>+|0R5v0DNCd9V7tc~MG@J(! zX=_4^D8ndlaxT?LT*?)@m&efq(gPH(+zx#aQt{V0gp`OZr!6MgJQJeO4|0V1OqdTE zy6u;rwsFGe>xJdyPZG(|do^8Log5R@*7S;p4YzlF8U$$>{akK&y+Og#P6?0HW3hO; zJmL(C&e1_V&rZ?{&=yL13}M>>AF~}~DdjDfAX0h6XBK^^qp9#$n)Fv_;>5+3dTTO2 zqkGZ1V>#6&qX$VyTP1CMMFe3u*r$N^6{wIkbN=1BQ%Wb~9oi?jEs z{RyOLE$I4iUmU7byMeuSyCw=S7M*Wkr9qU`_zWQrjS+{bf!ruhnM&}64;1QyU`(5f z=X&EP@Q{FaGD?jyB?wcr*aG1|JH-s#*G!bolk*T?hb zQ_-Il;JN|ve`eXt#tVH?f!ydW2*t*@sVIg}U^JUkkqZT@vZj-Ff&nTxi&`dCc~x)v zaP9h_d?w<4H=Wyyg`z+>$}h*hymWV4X(et?laO){mbQ8Zcl1DHNWIO%O#1u>v<;HZ zy+E_I!s;69&EEA(XmvcLB$Aq5_8E+vB|Cv#bV*Cmdk4D1RJ6;x1Rd@{P~XyK3&Xb8 zup9Q5pzI>U)H|)d_ttOdO;!JUV@y43OE|XIAk22J(vsX5mjC07uwpGCfX(_y{Q^dMMHlJqQR8 z1Aq-9Do+?c$U=L9)hCI|mlO1@czmSwz?*oMppA*_m4D;C*}9DD+4Fyzd>8&MhHo(E zo(7YsilUm@#h1x6l_-g?^nN3gUY&6dghuHHpL=)Ry0L?~LL~`KTD)QGvG53vTl}fB z_@I?G8uxYl&}BB%^kn+R*|l%PrXbNhpNxyR4K7%~A~T!8B){C%EPre*+mg~|B%%@0 z8HC}%wMZ4SihF858xJ~l9KV{7$bU;4n5LEpLmE>pEgdr61SkMXLWCbDe@*W1nk3je zC{BT|lEnL3+{WmaMyxx9yl>KqfkM zod+&Y;+C$0v2DJ)AJFw#RzJub%q1vf%S<*-w!CEQt4X zHT+=UN)s}m=`v1Zo|8jff#)-G#Z@jmVYBx#)UNy_Dy8LcoLk{87Wn7;RoI@)r#)ye zLpIVYX>2At(US;5J7*TzHwVz1AI6&itIqX|{1XCjniFz$qk~YROMjX@o0tvaQUG2u zT`LHrv4TPyDk1_iBpAB+rxWA*4o80rO=z+`5P()`5g-&5CBitJ3cRSXm=+Br(2nVB%mRCUlh&Nr<7JV1`anGbmtONbG*KgDGV7jxLAJ697;|AZc z$wO8#Zp%uRg8uF_z#`{_f`gNbn}>IT|Hx_~VKGfqG_>B32s)UN9Nt{X z5G7erHQg{R+u?YHpj4?fTAkitG?^`BR-4`7EO%8@x;KTs8{uBi=$BX!YOJdvzV zfyluWlvLC-5GXAjJp&BR$i$3bL9(*3qc}LZxOsT__yq)oghhgSqFTkoB_yS^X;0AY z2=#>KbpNOTWC>oQgdngN;7qncy;UM|1e_j7mI>VotO1o0VFP|%X5=6+BikTTg253; zj7ASMR7Rzh5{zEH10Cjp#F30>Gdx#RoDmKJdx6bl3lwGu0&W2$%T{zN5}H*Igbnz4 zS&@UljO<75H9;^q0*TS+friScv{Hi6%XgTwJdik&5p4!nQb^@knwZGfcMJM-`Y*0q m;;+W)55Ro>^4CaStPZF5>u5rscB&HF=lW)+|J?Ax^$P%;T&%(X diff --git a/web/src/app/fonts/geist-caa3a2e1cccd8315.woff2 b/web/src/app/fonts/geist-caa3a2e1cccd8315.woff2 deleted file mode 100644 index 8f01e7630ba2f88ffa1acd90d69f67efb5bd3092..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29288 zcmV)3K+C^(Pew8T0RR910CH#m6951J0RZp-0CDvI0RR9100000000000000000000 z0000Qh6NjepB@~COg~6gK~jfXKTTFaQalD=KT}jeRDn1Eg%B@(5eN$QXx<|WghBu? zfv9K!HUcCAi2wv31&A64i%A*rLC^&{RVoJ5KIPACa7QwWMyNP)DtmUL!VUz?Ugv}2dx$6#3Io} z%A}!$vzaT^U$_H7t6_>}fS*0gwYU?B^Iii*TYqwd#92KC9T_@2AS>MdF`tRU^#3R8 zDO9h9w$R$wB|S;b3CV5vVVVBWc?RSWryTL^rb&-)w@idK{aMQB7r|{N&wJaXJ2+_a zVOAP~_+F-)Gr*l3sUs44XszC=*F8PE`+-6Tb3sR}fECe!kRf0f`%i{cSUBMMd46tx z?t5?bmTY5;F~+0DV8IwTQY2cKQ3w+;3X!rwk&mPOSdGz$Q5c0v8%>n)%L=}qUqJkm zfAQ71{XT#dBQT>B&8!e9hJ&0&4^O)J4<%YbjSLk9!b&z|kGsnycS-Ip$>lOhAd@u| z9J2)n{<;<&+E#5#$9DfMbj*Qvum5?c)?d4pn>v7X9Vp_?WPm7({I_R6@oUez$^xJN z2LzcC1ST;>Qe@c{SO}J6;6po1L2XbfGVtGn+gN!1xp%j*UV8xliD^I`Pt$-kfA@0E z^YMPulfDEr=5P8#ZhgK00TM!ls1YRK6Een#ewVGd%~H3^sXg}E(~9_49Y-N)6O8Un z+2#`gyDKo!8auzT+538WW_K1?{7*-MBNO_dO#4T3!m4)<9EMhydlhVo0O8&Ner@N3$0p9q3r9|G2(Pct$w|F>*WS$ z0yF{Y2b#d9uKJFD%BkNQlx8FgY#CT}pp^D65gm?uIdo(%U#@$(eC8A>`DHg?JC1Nf z|H$n@1c~HrSqnqC?H9m5JpA9gKXx2>Cy`LQz1j!?uf4B-x2l`KOjS2ob$tSP>;#iN z(=}4}7rs{2f%!a>WE08zMG&=>on^FE=T>FI)Gr{XLQ5vWjd{FS4O7aQp69>6_vJI| zrFt{(#oDco?1Xl6O3`F3q~WT`Fm5X(*FQLXmDJEBlD?spKCvN&tPq=U7RsK zy6`gF{TmS45K;pmXBth;r~ztc8!|H=5N`yMV+e3G22#K|V-3%_50Ja}NlB-cnOltZ zj5F!1&im|w@RHm|@deS;1<}<6VRoSnlJoz6nX~ie=AXA2%I2r`PZ;PzE(+X4IBX;? z$?TrV&&y;eZ4z2rdQYb`S*pdADm-1G1w!Kgx7Mef-rW$fa72!EPK3gq`>MJcKlDs? zV1a2~*VOc+KP*rf)J6i4(UI}?_h0u_zyUfLAyf!*H&3#5Ta2MS#4nIgkS7#?XW~!$ zJQAe`qGc7~7$f}kO26~nsJ{B?9J{xFu0{$eLLniDNN_{GD>WyWQB!FhXxW_$9R(k+ z9$V33&2RII}H((nGPym7du+s&=As7U>?_Sot06%{M zcL4#ICqDNbd?Nu92(hsg;99F?LZjJgCZzq+dFAs8qiXbdW6C&coG>mLkD9Y) z(wsMsT3(Q_rmZbz1^0^kDfc-K?|FM8_jf%g?T?zvxBpSok4GqX{nLM`kdjp$hnbb)I&>@q73CoBNIy;MwzAY<5-AujAfqA)5C`GdZL;z5>~=Vc;3ugdWn~N+GEm? zQdaRXd^$B?e==r``Q_z+bbJcCmUn&1AGM()s+(1&q(+n*rnD%~z zHQN9X1A>l0W`ubJTItsk0!$V?Og?BM=pg;l#So$sKu8!gp$8>2VLBWL0k^DvLV$!} zkAQF-0SHBK2_Zan$!z4Nsi|IK|8Z0~EtU0h#e^nU*aS@=frF4Fgh$QG6QIM3iB+vj5>o*=*(cl6*}S(JuzSwdp7L+9=4@$7N%UldaMN&T#S7k7ta;0CDQ^-bcrY5_x zA*Bz0epaO`ZQYr8+o0&9t8s~}XF&k{=>|1G@uy z$?$_Xdd2X8-8G1m2UG5B->SaGz{@S3Oc8c-FX|-gI*R7II`V!*|5!!TIUay z^h#R>3pwlZA(v{))(u(9$*o&zurz z6x8OECT2%9Qcn&UIq35PL27;F;>4$YTL>ow>pcQdSjfWldu4-bP$3thIWDyhiE-SI7K0Ryw@u? zTTI!dx~O#6|M>DD@?zam)K^uN!r^7{!LCn*Ejj<~a`Q@$1-@a8o~SuYuFhhxYl*fI&>#He)s1s3fpzPvvMJ3XM`lSbWBuD6&0`w zBNGQ8n$_^-`zT^Ia##vKrr^$=k_GO7flUbG$?#z@GC3NqoB{@A3=LKnoj{*N9$js= z6mE7l*@#k$E5PJpgpvI*I!T7B$SM&bcorzmkVxC4@r*c&o%2)=7~1dm>v*HRASE*{NqqYnnMx!lq6 zc06^#4Y^nS{=OFbnS`^A_UZV06w|&v!tHt9^rN>M#-={<@&SCMq;!4e*pcFtAPF?I zcb(4R=0`Bv?b@Deb>isM_Ow*@{McKeYSs1=2&KQ%_jzrj;o@Y0PI+%r0<_r~rPCTui2Mj=lE5`lV0qbVvy_2j_h@OXkCGerR8h?% zx6R06fP4U^2aX?V$3GesU{QYmm~J^e8ADy1vhLOM z5iylrP`A%1=+1Qhct6XhkZ*BKenUVyvrGzWWMx05%bV_<rx6Bu~yVC3ygj!wcFACHI-cQJgW1q^Ir#IC?&>RVw& zd|0vvSgV3prD7s+D1Wl(5QzvtV-h8pk&Y5VS7x7TPxb19w04=#0#epLovr6Ma+4Fx z9qCk`|D{k(wLSruXB2oLfL!lW0GJ1oA^<&;7-51K>3KjHij_Iyw&(f?`oH>=aTxEM z9j~piDb&$d4eIC~W0TqYOSP}jd)GHmk1holKx34TpX-@q< zH){0bC6mJ!?}PRjx8-nM&P73i+9( z+uRiM6z0v!Zh+#J6!000c!R81G~+ChNO@3mM_FY*ZEUiY;WO{^o|GE93+H1wiC2gc zjGeO@Mpao9kEW%xMdeLWY)WBM+rx5nosh6t5nvl1sj{U9Uq)B!^b!?2G6yBS4e2HD8Bri5U7o-`4q6GiFRY0}dfoVU6l+X@-N23Z(6XH^&SlwNLbTx0EV;usrU?WkzdoWKEWCd_#jCun2C(2U)!(B}!4f zsNOJ`1Gf^ecEBHb$;Wt9xv?o2&&Eo!)z@0D#1Dk-9j^(3C8dIBqS0Z9wR&;C~ex6ugo{w0DXBM+fj4s=}TdB9sY4hS%D z?8JOFVqg3S6Z~J7s(1dO=?TWsrk$j3%`dq$6KSRQqP6`P=i>=~StE9dQA5Auu21|c zg=j#D54V}w!KdkLs%Jh*!MMm`mY#e6H}6_&MIRm8Y-WGDl+dqt z8DZ?L{$_xZR0fX)FcX{-z3DS6`rI4p;>W8>G#B+JZ<%S<9(21{@qhi8Xg#P78kQn? zTRGobM#bx9-m(QhqQXXbKnUu;Fd-C0kC~id|J|#<^NJ^rA(|ySP zpU!vY2z8YNzPe!LVSXw~Vw7Svnc`*EzR+eIt(&Lerua1HrZua7bVC){W5n0lJp zxQ=xnRzsFJdf{cgD$j4hh(9G;H*QVkmu$+);G_6Fe&fxd}Y_J8LhoizB2wz$M-*?xjzjuNdHGZ zt|P7)IY$2XrvWbcw}qnc>n-%yTKNkSLl8$t-#*xxhzj!lyVr!Fa<_V$f6GyP>n#T% zXFnc+XoA5Z{mYBH-=7dS2pERsDXfb5#~FhMNw3|gK;ODhg;lPpQ>K19pi_-A*Xk<}e ziyBO1UvltdmnE&m!k4jeKrxa@{nQ(SYQ()VE{Tro=(oDr{qS`u@{^RhPqnV-tU z@>Qo0O0CFrIGLSrSfvUJtETTIcU)w0K8t~7mzAlD2(z=Nz*d=2SlO1du1j6W-E`e? zo2_@q7L#l@lYNfF5_RHRMN(J0*lSEJ+n4Y&UIb9!M8eB(i8)Zfsp3uuGxL$LpY68V z3j3U{4So8l+$m}3mD0(EqBeCfMP_N#0|!%Ka@L+={Erw9VWA_D5H=1R7Z<|AgX0rJ ztXacJ*g@p%NhvsBqc}mFdBCY@AX-{D9Ua7zC!C%hkC$PXjC^tU@ngkb0IooRB!Yw^ zM2LVyN`Nsj5gKI_%xIG!iIRvVONN-4S({=inpAUO=9-IUo_UZoX)yE6N0TlcW`PBe z3>o+`EyS?MVk}E6A+pqREV**o$g`4AzI=SE6i_HsNM^OwJXu(HD^kRuSTT(fCDcll zk||ThOSy6$Dpb(9<~o5JZn9OUj=(Lq*tz2lM@^czY0<(}t5zy^-R0n(dnotar}e}W zdhI$0bn4`+OBWa2x;g97!$q%Na((*Pd*KDSmtL~>%4<&Ecth#E_uLH_;N$P$K*EfH zFwwEFFpx-GY#ahyTsR&cdwe1cVq)&BStCi&c+k-^Nj6`e+e5{sF~)Q8_`=(mVIHr=i%i;YSS()BP%Dbpi9sG z9Q%c7ZRik@rK;T_5YbdsRaI4OZT$9<&UKD0qc;95K>(U8DIyqX2KBuriHF)WyYwuUpJULrF)OVC*gFiAf*e&X_I z;(U}JEDQv^ ztWxYU++&f+M@V#GrN*7ci0yFOo95diEvk~w$~!&k)lwobAy_Ny>~x6+csT@$lmO`$ znEQT(TY~fZlMMO|!CnkMer-HVS78QSIgejv86Z1<_H=f{L|EyVjm{q<&r}Uc)g;3Y zLq(ADi4P(VPn_N<7-WsjpbWu}g$@WM5)KhUbd>aJ*wHQafHRQ4vM{~ZG4PSqY<8ox zM+@dX9Ry4PGj@!E9K(;qS?uiFok{3~mTbgDsD7+XBufa51H_Yz9BD-TxC=(gNYK&q zNO)q7Ho$NiamX(O(lEn(Yscu#ax|ETN-8T9WKFHcm_`r*K}bq;Lg^TZRs;nTj%;I) zeC)x4P@I@ePD(hzpJo+=+5mFE=1p9`ee+P{;fKrf@X^@|rO_O)w7)27QVQ|M@Ds+6 z8>wgWmI&LkbAb`ykL4Q>LAfxcyQN;q$Omd^v z3~}5{goOnh2r2(h)51awL`OJy5Sb{Mmql`zrOKeQP?qIq|MDan*)k=XXS@{ijnDcp z9}E~0XBQKel-7^p&W3ZCU>87sITYNgECR7~){uA!XTXGEz$Wg&5Gb(Iq_7bS^v|Pl zwPa~wNFdCV?{XG#!3_cjT;3ECNmiK3(^AV=8E337U0upi8XUj^y(N}ZQq1gci)A>K zG{I~k;PK#q^8q^pHu;0UFZgKg3&0!hiJLio3u|ws{thU;n=AKI{S4GR2M=F|hIi8V zUAXeW|4H|!%U}r*fS2rE9JoLAK=4rSVf^Ik%if#*I_loQx@*Il{2BfS0$WH4M}_x=QE{O>E2rdT`EmIrbyu!wa&BdvipX2%eNOjxb@q|zT32Z&HCNn-}A#AKRo=y z^FMCdyma%fpSnWJLxQ;`^WZ8sTX!waSUaEA8mJt2p=6i$&ZpI}1n< z-~ulV0PrTx(q794!>g_2sicqG@=CKmL%6VH7#zqX^8&}y5kQBiH(a- z%$kG^IRyt4N6yr=bUf*KG4kcdU!dn&wPhbXN{S#6B1Ma3GRkOUBuZvBMT%5&rI{~X zhD?hrw!~7op8D!pB5=uV-~FZEfN$RA5bv$hn<#w9VLk=mZD(T3Pu^VhMjDa^F0W=l}FypAZW1%)a$&ElC5{O)G2>D2@ptND)tQSzJneGgqF*{bpvM zGUOrCDVOKRQlHrp_iN94+AswWOb=O;uHR%S>vfD_+BrhYe{T8G{Vev>c6-q_NpaS0 z#^F!RkV=mwIymW`4V)d<^F}@rC1DpyN# zsth_Q*KmlBk(`|wn6X&NsB5@Eb6-L`K&t%#hWd@>X%+{`nto4@?ck;rrPn=%76-~i zOLCmfkRyOVD`3mgI=5&d6r-k~Rp>tn6@&R&FuJN@*PxgGO8lc{V;S{+vhIrVx}5@6 zac|WqvmEvskO*<`2X*2=oUf6P$x7W(vHZN%qAi#^uEWb$Atk9pFZQ{jJ4eIdIeOXQ z5p_8_he8j^p`EI2XCa3OTLSGllh(>|E89gGRrB2R$pXDQSB#CrQNxiaIT5y!g9D7E zFxrr}LHgX5Ywcn3Kiw4Ha|4t~X4qkn-(AD@2R^|<6fd5Jds2Ls=83utY9dGY@IQg` ziPLKBqfl^L(j2({5Zjk8`mIODfL6n_Y*bNUolkBA=yp^6fvi7~4oQ5`(d{%x)M4!2 zRC7sAU#{$y*=Ipt?v0-JZb4){1Is7uF7`$5YVHB$@a_2Hf~QahwzkV!S*6QMLH3)l zgF9p9{Pq{wh0?2Jv3_?nk|0RfzAbZ8D{x{U}w#)Nw>8)uqOs$DGQ$QBF9cu3>8#wGQpk4sE`gTWLvn7HxHP6=YrI z5K&Wq89B&9px?iDJ)6qjtr3dG6ur}}rsj?6Bc9uQ-Mde>X@Q%Z!^SY?IKV)Vv@PY> zM``o9zm8#KYzRj>?0?S+g63RD>d>zu258`_f;%;FnG~&RoTvRHy7Rle{TLQ?)zKcN zrB11q_bzq+szGJ^>g4!<>;4yFw1G;qXbeB+zj`d(>-I zpP5RWulUZKC-)npM;jF4HFCgs`tzwvPy74xsGA$QEvQl3mp_vxod_TTyNT6o*ZiJ*&>DwL45W|srT5o|C77${ z`LHSZGU-kN1$k|{Q2u@D{T#Uri|z~u!1*wXT&P9u->x~#_jBobwa|ZKR`9+!wNmQk zf`Q~R#V*H^+7@vIXH&U>|4z`qtkH%!X$=zXqjmD;Y(2}8^sO}G!CW+h5WVakVWq#0 z5^6Bi0lLOGxH*E`)lmCbYvBBecnjIM7BJMB-evHcD`2R&#Q8gwQ;gl_^5jewH-LN7 zs#co(&-&}pagTY2?q7-6qkwY_MB!ksHdR&rZ2Bd#9#`PfkImfcDi4gOOKqvw z8Y@&%R*p5(g_0BjauXR$zd0Nw!;!GXfx`+bs+KLijnQJeZn(ofPor7LMs6@ZD2gf_NvBCMV=jnAEb8-7tkJ6zYOQn>;$P}SBR43IG+Xb^@?8CCL_LYNm{%D;4__(Q zfshYLmI=+^9%^?6D#M}{XD1!*{sY!KwZ(yCQxxY`r=7K#RVjak-g@}LOK^jewBjDi z2#fnH#T5Ku0!Xq(KQ?bU&uU=G??#;SPLZELsF^`K{GvM>Cd5x+cq?C1hNGldJc^%5 zCVRMeiSxf@)0oSoLmd1KXcjX~93&SRSVqB}tXR65g)Mm?H|WC$+dAxf@)3yUf9U*Tr^$N3@{fx)xO6^V*Eiassb{5OON(0fUp8R8Skd_G8XR_jp>+t&@21ZrtkaB@BNg#_j;e(=B?cJp>qf-|6X4-;S}@< z@sm-e_M6cJs9b;Lcj5lT958=I(WjrR7YBa~tB_S7G5y2ljq!|B;KcYUR=lH)Xy4er z>Pm1LBTRZdVa2BDTZo`hqo=g~TR=BEwI@QJ8XhK3?}?_i-neyXe~h)*(;ki@dBm_K z7Bg(l!$@ncZDAnBTIlr*Z?J>J^xFp?I5&0oy=PDE3U1rDaohHtqBVMYgMZQ;pCkf_ z&j#pwKi>{ap;KD}Tc?tslbyXWg`e*3_MF+>mJO}4Ae{>xQPx5v%EbLyQhL45FWZvy zkhZv9k(&SXT}{Exy8ZIMU_2=X=4mGS;N=ISj6$p3x+3Z{;Ig5dRo@TXVHQ~J3Of*Y zEA#Aj#IGC4+6cC3x3={zRSEZX{_2lszs&G&ncBTu+?o#y9~9Os0sl$f@YCY+5bKit z1I+Z6NG1yg*txwC->KnY-|4;4TwXNQt$8XX%LVZcShqPA({1TMaEvw9+1$(`(9bUH zY4x1$?ZfXxN*1V5b0K$v#y_zJte*wwJG1%a`=1Pw1-E(&9aL@Yz)7NjE4Kz|)t0;) zB&Pq)n!y}mO82YCyDB^Gq9_=4P@Cv3u<8&!d$DNZyP)CH{y5H?bTQ&xgxqOr6$eIYa+-cpMh155ms^k{wuUL3>!P zC@U+&D4s#-T;bq0e8`CDN`GaWLhRC*^|4MRM)VsUx%u`eD<+08o(A$+RSnn3db~Wc zw8Pv?s;stHzZ|?BdWT*@zcU0P?7$kEeZ>DP(^QkKVHnk?+DAqu)}SHzR^iP;5?lcv zT(C#>k$cJXe`ad*dUo-)D1bjpK5fsRt9`6C`)TT0E`OmRWPm@Hzulhym&eTO;zl5k ztY6VjztB9%Y@@-urGYjNf{;FjeX$X?I&8XcE=T4q#)lHIeD_f9t@3BtOL6&<67IBI zxUZcdIb2MG3k7I1f2uCJqk-oJ@0XG}w@WW|cpFY#tOBtn1krtRG%}Cv8H|T>{eAr_ z4vbg>=@tQY65$G9Ma|UG$E3A_i5b+>0~oQpg96+VIki2US>7Azkk_Xi~GzaU}heD#^#|I~2UuQhw>u@NXQf}C4 z=0*@1P?X|5uxSHLo7VRrxFsnz`6t4xF-)(;{2hq|Ol)*byArYq6O)tycBwN9Yu1NC zr0LHerzYGS`HPd4U?2p6L3nU z@bAMIWP;sp8Yk*L;Fu?8@CF=IoixOG7U#WT)+0|^++Kr`5d{@$xWi!__IM3Lc?YDA zsH$n|E2}P2km8FFe-ilTaS22$MZL*DfJg#rnilPw{MoruY#@}vm?=bCd|FIz_xW%$ z7+p@61L6=aS@}x?mlmRLxXB;S3q>^p&%fWP&)@TNp?3nDlisRM)A1!hAjR9C3g4XZ zhj%^eXcRgbPYL|Z#{1xgW`j>Eh}uIm?AEz;yi6@5x6l@sf;90m99U+dl59JAOAT5p zvJe`6OdmSWR4jwag%-k#*A=B$Z*`)OrWnI|U>u@N8)|M6qeevK)hY+%p*xA9!AFe= zvxUt1k(Nso?(CVVCm#;hYhLbF`wxX|73Q4$OhodPBOG^4Bn4fc$(BMn^WQ|6e z%6tY=F#PJCH*}DW6H{uyL3*7QHo#RY@W#Pdz;#k?#%^|5Q7$jYcYi~ zs7>C`y~a-2N!nr;cX>I+X0qApv}t4)tY(+n@e?R_BMx*PUCjNx!HY|0a2XE%EM&4P z8KSK|t=nL8Q7$uGPTergwntI$+P|$5$1ZMWf<18Mb{nogzwvzR>1{Zl7`?95`?v2O zAp0--Tv2*rX4_2mvAO?Rl-~Es{#QW$5N@eCk#4B{&-}#A=MTI4ze-;_s{!6LG3>-o z?mzxv988X?|B|!}8Tyts7S-1L>I%&rBlI>mhQb>cO)Mxe*MD1DS=&&T?t9xPSjk%+ zC_6M-RvrW|j1uuAMM;D3#Z#n;ymrxfwd#UMd{If?l7Kw4A^6Y}(VhDw!`aNnC~|6O z2synm#)Mh3XxKcJ5;MU>=HSjm^A;MiT1Znju`~V;MsR8ILEJ3($R%%#v)0tQ5!g>hvK40N2i)DRIsCBi>8zd8U*c!m2ksxk`6Lum2x%38=(}cjN zNo8>90h=A^V=5f6c@O`rjwW}5Ti`0F;C4DYE#`ilunqK^UC{x*W`8zXec0C5VX>hK zj3;)f6nw8sqEtA=JdZ-jcf$gpX8VVu)>A`6*3-i=e}KjLLrKyUmgujcRh}{TVlydE3qs?zK=UhM%!<)M&7U0ssnE~)SBfh{=UneU3SSPomR+kiRJDqY+x zzIS+P?Gu{Z*O!GT0sF{tgUp2dj^vo;IeFgQIe6p$fL|y%f>Lyj{>)OGl zjS48Y#=fR&RXDn!E(LrK!93InuHA6OJrUFYOP%K{6aPyIvVu-#zRG#$4Oe~`p?*0v&NrM5gpkzy0cZvX*C;mY1h>+o$fb8;|m zJ2SHGB$OUJ6OP~7OUc#-5uNl@%SV?Kj+!PD)gtn1VRdiPZr9+_L&xSNF!l=-uJUE0 zRVqVwvemhD8H-=l0>u-RQ+K$SHF6~ji&+&?yI_kwO&(?XRYPl24W#?C? z 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 b8!pPm;9xHet}Nue;WfOmfZz)$T2MUu_`HMY diff --git a/web/src/app/fonts/geist-fef07dbb0973bf53.woff2 b/web/src/app/fonts/geist-fef07dbb0973bf53.woff2 deleted file mode 100644 index 7ab581f7b347b642702d806e03391499013b6462..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7252 zcmV-a9INAZPew8T0RR91031{R6951J05Svs02|@}0RR9100000000000000000000 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 diff --git a/web/src/app/fonts/geist-mono-4fa387ec64143e14.woff2 b/web/src/app/fonts/geist-mono-4fa387ec64143e14.woff2 deleted file mode 100644 index 4fc15d1f2063f9d57fa838a4b574b5bce2c5c543..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12872 zcmV-OGPlilPew8T0RR9105V7b6951J09*_J05R790RR9100000000000000000000 z0000Qf+HJ;8XPD;NLE2of2Y~YU(Tqe08wU_5yO;g{x8%l{ z+5uwy83>9+%j1c$!)_zkO`pU79LItNaV?I+k=`!cE_AG#-*!Cja>rdi_4 z01-e&31o;20H|)SNmY+jxcF^UT)}>~)NW^hJFIAm(|`Uw`(OJcP1DpVmC1Bq_lg?n zl3x!1ho^1+V~&lb{u?U;qd>}?N*yRi-vi`?$00`y5Sy47GuN#@BG<*wsQJ&${x61)|3CM!-}~JArU9_P z1C9f0MFGW>YWjz9C^!30sAt8f7%Q%)@5g^THl4M@^&d^1DQlLcG^I2^5@JM=Nt^_N z{d`WX_w_;26Byzk6ez>l6v$;S;f?sVr)5iW7Kn~RkPbrXna#E?;S|tG9fK^(0-k;XuWhi>28L`A%vOsbWwY4A`QcpOOwyV+$v+^HOhN^g!I;+Ww+BG#ED&0`oP0nz z`d&>!PgUjz;kucVnO~A`KV3F4s(RcZ5D0EgAPj@^N=XY1zCdKibqNTX=l{3Xr|rA7 zy}LzB5YLmtC^~w`1v^`tx Hy& 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

1pOCS}( zV?poBug5YC9b+_kZpb)%xBdGwsp_w=R{uf1$l?G~sYTS95|Yd9=c3oeSXLs~2e}bi zE{1mJQ#@$WH;5X~Fv@f&Zmkh285?L!rXy?{(tOsrHlW%RN?HbDlhc9#vm0^LCshA{ z#PK}S4vu_7%hP#?*q4NUKqJ|9Z9Bm1rd(>cc!4f##F4AcQIj?j#Ew4qLPR+X_=E+}tAPWu(=D zpypcTmK{G)TE0aRT2mV^jeB8Orvr`7eH^JE$}+RY>U`$IyOpxts#g{rlC@Uk`LJ=> zm==G;r~|b)?Jo}+?1H^@n`Ni%@8*|PwJ~TO`3f!8txUISHl5|);*!5<ab*JCK=-A~ zByN`BDgPZ>tyQaGDIdBPxS;0@T`W-9ea<`Cq*JMuOY#UN(Hq2-2zO4-dq*3J*YL5R z*REG#HoJcd5c@XI+(RS~BILW zYTe;shZc(xpp*V-<5A+GEJ++orHnU-t*T0+lNY-^S?vv^SkFji>Vo0+@%){Z(wpY$ z{+?k_Z#;5d1Z2mqnC#k-8OcxO8+kCU#Eni5M3GF+{LXhq{p~Ln`ODwr0{Z6JkrO>K zadl#X6aPre=MU^--<->6Fge2fuJZtLbWeQ3CiBD88&^iv!yq80&1pXxi7(0#e;Q&d zHHU3US|u@s!Y~NQRs8(BxgLlinU3271%850Zq-YL_*lNjpC(H z1xALXfv91K$1g~7&4Q}QV|b5cNIcI=hImo^wc>Ysl1J<>ct%0A1fnug5G@uDF^d*S-K2C6;W(Tkl9HN2 z&h{FOzNT22Euq(-)zQ3cOTJsi<=bWWB}pdc2vrtnYHgJiJ5Uq}kNdn;DMMN(UN-Dd zp;ize9GhF4+jR{Pg0Z{l?Wp-de9a}PgnWeai*v^d!&C;dk6i#+SY{DP5b4;f{5{!M zT2+Lil+!)?Ghb}qFV3XnW{W+W&=KKv=Lbtr!igL5!z*v3K0V&lbRe`a$?i;mAbw`~ zOJ&DyZBei`yO>%OfGuASLAUM(mQvzMz(oRgmf^i@G9@EmnM-Da-1G3kZWiZN#PLuG zaRp&1S?+RomFhsj-E2Amii9Ip8JcCWVU{K5Q1hNL6TI^u4)&hm-T?Ij?w-Q!=$s-P z_~MH{+w2EV9MG=Y%(B}a+g%p#2}$&FH4i4^#a=dc_>1NqH=K^X8}r2pQ}$%JKmF|E zcm5P_dea!+X1HG)udOU#5A1fdGdvj1%6J~#W0*?VDLfQwgKMGqhFF{GN-^J$JZ*Tf zEGOW)p5)ZM4saZ8MvX;XQ}$*CZA%f(YI|)#Cy53Go4md@sybogJZdNr@)^<*ygfYqM4aDj{31@=zRoE|!He9wHYrPFoXbuD!>}O@S;2Q!PY)PJN~+ zorcj`Cf73yBr2=AJ%EKGIFqc)Kk!Icc`- z!FJPaR?D7v&GFLMly63^v60cPNT^Rt;5_Zj)qPf*PU76Rt1~Kl$?U{CvmCkT(?wl9 zKk>cPgrdSVKXJ5nGRd4t5v&~E>lzb8(6!YXxU2VGj810;>t-P?!x`h8L(4dkBaxof z_&bVJL_w>@@NVUlQwCA1fbKUx_N$j*deMM>oZH+Z%5=QC#Gs1v%5g4Q9Sm8Try`>G z)#<;~A8Je#+R(s{EREqAK3cbrpM>zUFv`HbcDB;Ha7{h?f9@0Di9V(Lzb6JTGA zGlKKzt4OVmG`q6^c~Z&~9W4NIRkzNQ=Ymh@E4dbNr1=STtcieRvoYuIe?P=?rX$$J z-e-cC*}rKM#E%|HFmwz-Vw(hedt8BmB)e}B z>PfuJ4a;{UiHsniF-;E54CEa&cpS`<+iFP^v%;~rkukh25|*VFB6c+yT1c;wg!mc? zoRi*3OI1)9fst&7QoCYdcYtvN)rcG;kx(gZHC?utstKn?-`XIPA_esZJm(A07tE$n zP&=eMAvI^i1a{A!ci#-ZH}rhl<9?|}_4=Pu9gie|2!!hF)t|4SoTy#Y8yL zgD}ZMXqeVSIRyP1Fp)@L7-a?jIWi;kJejzdN?iGnEFl1N^GE1bZpOUa@^4~_`vL%; z7Osi_z-L>d2VZ)$HRBxx5WoNc1pFj}I-6cu6y8G>*|4Q2zd)d8l79!*RYhn)Lzu^N zdC3|ISkUC+T%??4@8~k>UA_aGkKZ{y6u<-iU`wclz~OsWMM`d7=-gbO!r?BDjROJr zm>mk7$b~e70FGbdW;-Zg0GnS&5G-ga5!{bMLyrO0X(DJ?U~u&WzEe<0s~RN_e3u(R zJHuT_BjqYwzEuwg=$&Q*IOoa$?}Sgk>~C7c!paWZe1JrIU5BmWo}Ub}rpT;r1)^ z)5wYxFQ&b2J1X74WTJo+Zzr2OqqBpV*!xa{Q%W4(h@nx9$q9{POZeRrbIKN zn3kEk|6+|Ch>qFh++D13xbBF|@M(!$Makz2t7F=8rYcRy1kC&x7uY{zOv=t?nX&-8zIrwgPu!PvJgkcCC0V{FP zu@kTsw>7auv@)uon2I`PJd6mzO082$7)~H6$<|bg66Kg;_Lv3$SZJlR28NGy#3P6NpN(HI<@7Ii{FBYRDadNKsk?&SIk- m`C=kpeGB|B|EFCs{)gp1A@%$GkC;Bo=KOy7JO6Teiva+TYQseU diff --git a/web/src/app/fonts/geist-mono-5ce348bf30bf5439.woff2 b/web/src/app/fonts/geist-mono-5ce348bf30bf5439.woff2 deleted file mode 100644 index c7700cdf138beb733715d1183c3ee7e133e74b34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6204 zcmV-C7{ljxPew8T0RR9102n*~6951J04gj102j^x0RR9100000000000000000000 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°O<=j*_oSH8PV;rt4KE!7;hA0N* zH`BS@JyEPwd-YCH%%wIrGc};KoH1G&q&=awCxPB;=;7lsnj-Pz6m}5Q9oOlub>$G#l@`l#9axSm=HWGRKm}SX0f-z4uur`9Sz78H_r|k*#hNI;Dx9NA-uSmP1Ca76REtuENAK(a+1 zg{3pzJYZOo25(i{o0r^6+qqqxnt%0Eflma73fMy>^eQ zS>0@R8cD?kh0)`?=!l{>$Q7{5s^mdgWk)y+b4yRGZhk%b4aa?DSJ$08t1C;9xtZAr zNN3C`ii>wshvTXMYXaa{GAGJZmL!bbeaDv#d7T)y51hoQ*okD-eKHb-DoEXf-T@=Z zMP{`cy7%eS1~MNY17EoaN=1+(C`;ShtRLnUwVVd4wK2t3h;xfvZ)FUutddRUx^**( ztOpLI3)1zICnV{uyM)D1%Ndpqa(IoxY!)V9Udin#ajE38pC+9njds!%wpJ?DosZ?G zr!48TC2n7Z69gU#Q3%OahX=>dtWs5Xh21Kn<+RMk<;zcGM@MA^({4aw(o+sxXDKq} z?YDVn0|P{EEeYMs#pm$(#6gT{quVm{)x!SLOf%Qaiup_)rnNay1XiOrTb&q-;@0M3 zzE}a=1HGB;y*kk~CzDx(ja|b~wIZNogk^9&Jt~{|9Y~|DG}`UC+>|geB_Z-q%BX}S zDRl6=c=ggOGFG`8N}oTU7P84qSq4pxjZ$G>G#B+u` zBN08clw2!{`<0;F%`O(}2o-qq{|24N8Vz7dSg$sAkLX3ZTOC$a=oaXpfwH&7a|F~p zs0kGbcXbh4FbWsqA1=65<7%Z*pWmqht=*`EBGKq{N{XsvOjH;ubtIH72?E!Ip^#y~ z$!VR(b&Uq=OyD%7o}mOwSWgzZp9U6DvKi&|h%w$G2#_aVd!Ee|0(6!SZ?zwRuRdQ1 z_-2?RWnH4IoOTCR6aWIRBm*@X(f%sO?!1T#`pU0I^UsljUZi0WCUn`H1E;iup#vFf zWSZlkWUrOYTBfa`R~DFimyj6G{~!YLaS{juN$yG=K)+?Pio#?$T1Ao}A*P-eUcdz8Z2Z{oc8zQ3dgnMrZgyV+!+}#+Kv`jmypzY8365#us6c zCX}L@Cg#MXNyT!z$t*i_rQ`(q?btGBTbn~W^QJWmS}e64_@XOh2ZnZJtH<2EHr(BV zqb8?rZQq=Fdw77w>2A>u;LZcx0g0{3F;428N1_Xh;wbHuvU`Nv>4z&;s~z1t&vZxd zj`q$IM1xj2vh9eGpo8LTcFFEKP%hV!?YK)pf0;rahR7 z$h7AY10VI;FWq(DU+8t~9Es=eupHZvCZt#)huPt!^KvY-`fjdcS-7D7CeX1X*@DX) z{JeCE#cln6@B=|J{VbEbMn*KURO&Dpp9F|iY+@IOI3-YmBv?WuRKn~bK#&k&B1DN1 zCqa@FX)sijFe4VtuQpOM&Mu_1{exP-{VdMB@Qt``PR4uTb-)RjQV zE2UCb8l|la$}08XXM=xM7EY>M@)9L;rOcoP(Qry{rJ^*IX6aUj<&aaW@-0`Hj%k9< awzfZMVB=5F{)G6DAGB=rXVBz$4gdgfi0_vG diff --git a/web/src/app/fonts/geist-mono-6306c77e7c8268e4.woff2 b/web/src/app/fonts/geist-mono-6306c77e7c8268e4.woff2 deleted file mode 100644 index 29dd20f51912fa953d41ebf851e1d5c646492198..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5892 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 YgWs1D-3E0oZf-)~mPRfr9*IT%3nKF?aR2}S diff --git a/web/src/app/fonts/geist-mono-797e433ab948586e.woff2 b/web/src/app/fonts/geist-mono-797e433ab948586e.woff2 deleted file mode 100644 index cf24126b086f12217076c4902c7c6d58e4f52c75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23108 zcmV(_K-9l?Pew8T0RR9109r%<6951J0H*u^09n!i0RR9100000000000000000000 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 diff --git a/web/src/app/fonts/geist-mono-7d817b4c03b0c5f1.woff2 b/web/src/app/fonts/geist-mono-7d817b4c03b0c5f1.woff2 deleted file mode 100644 index 873f580e33dec394e6f16a87d07dc0000e50cb17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7728 zcmV-09?#)-Pew8T0RR9103I*^6951J07qZ|03E&n0RR9100000000000000000000 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 diff --git a/web/src/app/fonts/geist-mono-bbc41e54d2fcbd21.woff2 b/web/src/app/fonts/geist-mono-bbc41e54d2fcbd21.woff2 deleted file mode 100644 index 751a04d2f91922f3ef1510562505dcbb2a461521..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14712 zcmV-;Ifuq~Pew8T0RR9106BO76951J0D80l067N$0RR9100000000000000000000 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 GVXpzs(o^pM diff --git a/web/src/app/globals.css b/web/src/app/globals.css deleted file mode 100644 index b0251f9..0000000 --- a/web/src/app/globals.css +++ /dev/null @@ -1,191 +0,0 @@ -@import "./fonts/fonts.css"; - -:root { - /* Raw palette — components use the semantic aliases below. */ - --black: #080808; - --gray-dark: #141414; - --gray: #1e1e1e; - --gray-light: #888888; - --white: #ffffff; - --danger: #ff8a7a; - --page: var(--black); - --surface: var(--gray-dark); - --surface-raised: var(--gray); - --text: var(--white); - --text-muted: var(--gray-light); - --line: rgb(255 255 255 / 18%); - --line-strong: rgb(255 255 255 / 48%); - --focus: var(--white); - --button-primary-bg: var(--white); - --button-primary-text: var(--black); - --radius: 2px; - --sans: "Geist", Arial, sans-serif; - --mono: "Geist Mono", "SFMono-Regular", Consolas, monospace; -} - -* { box-sizing: border-box; } -html { background: var(--page); } -body { margin: 0; background: var(--page); color: var(--text); font-family: var(--sans); font-size: 15px; line-height: 1.5; } -button, input, textarea { font: inherit; } -button { cursor: pointer; } -a { color: inherit; } -button:focus-visible, a:focus-visible, input:focus-visible, textarea:focus-visible { outline: 2px solid var(--focus); outline-offset: 3px; } -.app-shell { min-height: 100vh; overflow: hidden; } -.page-shell { min-height: 100vh; } - -.topbar { align-items: center; border-bottom: 1px solid var(--line); display: flex; height: 64px; justify-content: space-between; padding: 0 clamp(18px, 4vw, 68px); } -.wordmark { align-items: center; display: inline-flex; font-family: var(--mono); font-size: 12px; font-weight: 600; gap: 9px; letter-spacing: .08em; text-decoration: none; } -.wordmark-mark { align-items: center; background: var(--white); color: var(--black); display: inline-flex; font-family: var(--sans); font-size: 12px; font-weight: 800; height: 20px; justify-content: center; width: 20px; } -.topbar-actions, .hero-actions, .inline-actions, .footer-links { align-items: center; display: flex; flex-wrap: wrap; gap: 10px; } -.text-link { color: var(--text-muted); font-family: var(--mono); font-size: 11px; letter-spacing: .06em; text-decoration: none; text-transform: uppercase; } -.text-link:hover { color: var(--text); } -.wallet-button, .primary-button, .secondary-button, .icon-button { border: 1px solid var(--line-strong); border-radius: var(--radius); font-family: var(--mono); font-size: 11px; font-weight: 600; letter-spacing: .06em; min-height: 38px; padding: 0 14px; text-transform: uppercase; transition: background-color 160ms ease, color 160ms ease, border-color 160ms ease; } -.wallet-button, .secondary-button, .icon-button { background: transparent; color: var(--white); } -.wallet-button:hover, .secondary-button:hover, .icon-button:hover { background: var(--white); border-color: var(--white); color: var(--black); } -.primary-button { background: var(--button-primary-bg); border-color: var(--white); color: var(--button-primary-text); } -.primary-button:hover { background: var(--gray-light); border-color: var(--gray-light); } -.primary-button:disabled, .secondary-button:disabled, .wallet-button:disabled { cursor: not-allowed; opacity: .42; } - -.page-grid { margin: 0 auto; max-width: 1440px; padding: clamp(28px, 5vw, 76px) clamp(18px, 4vw, 68px) 56px; } -.eyebrow, .panel-kicker, .field-label, .step-index, .metric-label, .footer-label, .orb-status { color: var(--text-muted); font-family: var(--mono); font-size: 10px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; } -.experiment-badge { align-items: center; border: 1px solid var(--line); color: var(--text-muted); display: inline-flex; font-family: var(--mono); font-size: 10px; gap: 8px; letter-spacing: .09em; padding: 7px 9px; text-transform: uppercase; } -.experiment-badge::before { background: var(--white); content: ""; display: block; height: 5px; width: 5px; } - -.hero { border-bottom: 1px solid var(--line); display: grid; gap: clamp(34px, 6vw, 92px); grid-template-columns: minmax(0, 1.08fr) minmax(290px, .92fr); padding-bottom: clamp(42px, 7vw, 92px); } -.hero-copy { align-self: center; max-width: 730px; } -.hero h1, .section-heading h2, .page-title { font-size: clamp(44px, 6.3vw, 96px); font-weight: 500; letter-spacing: -.065em; line-height: .93; margin: 18px 0 25px; } -.hero-lede, .section-lede, .page-lede { color: var(--text-muted); font-size: clamp(16px, 1.55vw, 20px); line-height: 1.48; margin: 0; max-width: 570px; } -.hero-actions { margin-top: 31px; } -.trust-line, .gate-note { border-left: 1px solid var(--white); color: var(--text-muted); font-family: var(--mono); font-size: 11px; line-height: 1.65; margin: 31px 0 0; max-width: 570px; padding-left: 13px; } -.honesty-line { border-left: 1px solid var(--white); color: var(--text-muted); font-family: var(--mono); font-size: 11px; line-height: 1.65; margin: 31px 0 0; max-width: 570px; padding-left: 13px; } -.hero-visual { align-items: center; display: flex; justify-content: center; min-height: 400px; } -.hero-orb-wrap { align-items: center; background: var(--surface); border: 1px solid var(--line); display: flex; height: min(34vw, 470px); justify-content: center; min-height: 340px; overflow: hidden; position: relative; width: min(34vw, 470px); } -.hero-grid { border-bottom: 1px solid var(--line); display: grid; gap: clamp(34px, 6vw, 92px); grid-template-columns: minmax(0, 1.08fr) minmax(290px, .92fr); padding: clamp(28px, 5vw, 76px) clamp(18px, 4vw, 68px) clamp(42px, 7vw, 92px); } -.hero-orb-wrap::before, .hero-orb-wrap::after { background: var(--line); content: ""; position: absolute; } -.hero-orb-wrap::before { height: 1px; inset: 50% 0 auto; } -.hero-orb-wrap::after { inset: 0 auto 0 50%; width: 1px; } -.orb-caption { bottom: 15px; color: var(--text-muted); display: flex; font-family: var(--mono); font-size: 10px; gap: 12px; left: 15px; letter-spacing: .08em; position: absolute; text-transform: uppercase; } - -.lock-orb { align-items: center; border: 1px solid var(--line-strong); border-radius: 50%; display: flex; height: 238px; justify-content: center; position: relative; width: 238px; z-index: 1; } -.orb-axis { background: var(--line); position: absolute; } -.orb-axis-horizontal { height: 1px; left: -31px; right: -31px; } -.orb-axis-vertical { bottom: -31px; top: -31px; width: 1px; } -.orb-ring { border: 1px dashed var(--line-strong); border-radius: 50%; inset: 17px; position: absolute; } -.lock-shackle { border: 12px solid var(--white); border-bottom: 0; border-radius: 32px 32px 0 0; height: 64px; left: 50%; position: absolute; top: 58px; transform: translateX(-50%); width: 86px; } -.lock-body { align-items: center; background: var(--white); display: flex; height: 82px; justify-content: center; margin-top: 34px; position: relative; width: 112px; } -.lock-keyhole { background: var(--black); border-radius: 50%; display: block; height: 17px; position: relative; width: 17px; } -.lock-keyhole::after { background: var(--black); content: ""; height: 25px; left: 5px; position: absolute; top: 10px; width: 7px; } -.lock-orb.unlocked .lock-shackle { transform: translateX(-50%) rotate(-23deg) translate(12px, -8px); transform-origin: bottom right; } -.lock-orb.unlocked .lock-body { background: var(--gray-light); } -.orb-status { bottom: 23px; left: 50%; position: absolute; transform: translateX(-50%); } - -.signal-strip { border-bottom: 1px solid var(--line); display: grid; grid-template-columns: repeat(3, 1fr); } -.signal-strip span { border-right: 1px solid var(--line); font-family: var(--mono); font-size: 11px; padding: 16px 18px; } -.signal-strip span:last-child { border-right: 0; } -.signal-strip b { color: var(--text-muted); font-weight: 500; margin-right: 6px; } -.signal-item { border-right: 1px solid var(--line); padding: 16px 18px; } -.signal-item:last-child { border-right: 0; } -.signal-item strong { display: block; font-family: var(--mono); font-size: 11px; font-weight: 500; margin-top: 5px; } -.section { border-bottom: 1px solid var(--line); padding: clamp(54px, 8vw, 104px) 0; } -.section-heading { display: grid; gap: 25px; grid-template-columns: minmax(0, 1fr) minmax(260px, .65fr); margin-bottom: 32px; } -.section-heading h2 { font-size: clamp(34px, 4.8vw, 68px); margin: 0; } -.console-grid, .two-column-grid { display: grid; gap: 16px; grid-template-columns: repeat(2, minmax(0, 1fr)); } -.workspace-grid { display: grid; gap: 16px; grid-template-columns: minmax(0, 1.05fr) minmax(300px, .95fr); padding: clamp(54px, 8vw, 104px) clamp(18px, 4vw, 68px); } -.console-card, .receipt-wall, .drop-panel, .verifier-card { background: var(--surface); border: 1px solid var(--line); padding: clamp(20px, 3vw, 32px); } -.glass-panel { background: var(--surface); border: 1px solid var(--line); padding: clamp(20px, 3vw, 32px); } -.console-card-wide { grid-column: span 2; } -.panel-header, .card-heading, .receipt-row, .metric-row, .field-row { align-items: center; display: flex; justify-content: space-between; } -.panel-header { border-bottom: 1px solid var(--line); margin-bottom: 25px; padding-bottom: 14px; } -.panel-title, .card-title { font-size: 20px; font-weight: 500; letter-spacing: -.03em; margin: 0; } -.panel-heading, .wall-topline { align-items: flex-start; border-bottom: 1px solid var(--line); display: flex; gap: 18px; justify-content: space-between; margin-bottom: 22px; padding-bottom: 15px; } -.panel-heading h2, .wall-topline h2 { font-size: clamp(25px, 3vw, 39px); font-weight: 500; letter-spacing: -.05em; line-height: 1; margin: 7px 0 0; } -.panel-copy { color: var(--text-muted); font-size: 14px; line-height: 1.58; margin: 0 0 24px; } -.step-list, .form-stack, .metric-list { display: grid; } -.form-stack { gap: 18px; } -.step-item { border-top: 1px solid var(--line); display: grid; gap: 16px; grid-template-columns: 34px 1fr auto; padding: 17px 0; } -.step-item:last-child, .metric-row:last-child, .field-row:last-child, .receipt-row:last-child { border-bottom: 1px solid var(--line); } -.step-title { font-size: 14px; font-weight: 500; margin: 0; } -.step-detail, .help-text, .muted-copy { color: var(--text-muted); font-size: 12px; line-height: 1.6; margin: 4px 0 0; } -.status-chip { border: 1px solid var(--line-strong); color: var(--text-muted); font-family: var(--mono); font-size: 9px; letter-spacing: .1em; padding: 5px 7px; text-transform: uppercase; white-space: nowrap; } -.status-chip.ready, .status-chip.opened { background: var(--white); border-color: var(--white); color: var(--black); } -.status-chip.blocked, .status-chip.expired, .status-chip.error { border-color: var(--danger); color: var(--danger); } -.field-label { display: block; margin-bottom: 8px; } -.seal-form label { display: block; font-family: var(--mono); font-size: 10px; font-weight: 600; letter-spacing: .1em; margin-bottom: 8px; text-transform: uppercase; } -.seal-form textarea { background: var(--black); border: 1px solid var(--line-strong); border-radius: var(--radius); color: var(--white); display: block; min-height: 128px; padding: 12px; resize: vertical; width: 100%; } -.seal-form textarea::placeholder { color: var(--text-muted); } -.form-footer { align-items: center; color: var(--text-muted); display: flex; font-family: var(--mono); font-size: 11px; justify-content: space-between; margin-top: 12px; } -.text-input, .text-area { background: var(--black); border: 1px solid var(--line-strong); border-radius: var(--radius); color: var(--text); min-height: 42px; padding: 11px 12px; width: 100%; } -.text-area { min-height: 125px; resize: vertical; } -.text-input::placeholder, .text-area::placeholder { color: var(--text-muted); } -.gate-note { margin: 18px 0 0; } -.receipt-wall { min-height: 384px; } -.wall-status { color: var(--text-muted); font-family: var(--mono); font-size: 12px; line-height: 1.6; margin: 0; } -.receipt-list { display: grid; margin-top: 18px; } -.receipt-list { list-style: none; padding: 0; } -.receipt-list li { align-items: center; border-top: 1px solid var(--line); display: grid; font-family: var(--mono); font-size: 11px; gap: 10px; grid-template-columns: auto 1fr auto; padding: 14px 0; } -.receipt-state { border: 1px solid var(--line-strong); font-size: 9px; letter-spacing: .09em; padding: 4px 6px; } -.receipt-state.opened { background: var(--white); border-color: var(--white); color: var(--black); } -.empty-wall { align-items: center; border: 1px dashed var(--line-strong); color: var(--text-muted); display: flex; flex-direction: column; font-family: var(--mono); font-size: 12px; justify-content: center; margin-top: 20px; min-height: 206px; padding: 26px; text-align: center; } -.empty-wall p { line-height: 1.6; max-width: 290px; } -.empty-glyph { color: var(--white); font-size: 30px; } -.receipt-row { border-top: 1px solid var(--line); gap: 14px; padding: 15px 0; } -.receipt-id, .hash-value, .mono-value { font-family: var(--mono); font-size: 11px; overflow-wrap: anywhere; } -.receipt-meta { color: var(--text-muted); font-family: var(--mono); font-size: 10px; margin-top: 3px; } -.live-indicator { align-items: center; color: var(--text-muted); display: inline-flex; font-family: var(--mono); font-size: 10px; gap: 7px; letter-spacing: .08em; text-transform: uppercase; } -.live-indicator i { animation: signal 1.4s steps(2, end) infinite; background: var(--white); display: inline-block; height: 6px; width: 6px; } -.page-header { border-bottom: 1px solid var(--line); margin-bottom: 32px; padding-bottom: 32px; } -.page-title { font-size: clamp(40px, 5.5vw, 78px); margin-bottom: 18px; } -.metric-row, .field-row { border-top: 1px solid var(--line); gap: 20px; padding: 14px 0; } -.metric-value { font-family: var(--mono); font-size: 12px; text-align: right; } -.empty-state { border: 1px dashed var(--line-strong); color: var(--text-muted); font-family: var(--mono); font-size: 12px; padding: 28px; text-align: center; } -.site-footer { color: var(--text-muted); display: flex; font-family: var(--mono); font-size: 10px; justify-content: space-between; letter-spacing: .06em; padding: 24px clamp(18px, 4vw, 68px); text-transform: uppercase; } -.text-button { color: var(--white); font-family: var(--mono); font-size: 11px; letter-spacing: .04em; text-underline-offset: 4px; } -.text-button:hover { color: var(--text-muted); } -.muted { color: var(--text-muted); } -.inline-error { border-left: 1px solid var(--danger); color: var(--danger); font-family: var(--mono); font-size: 11px; line-height: 1.6; margin: 16px 0 0; padding-left: 12px; } -.small-note { color: var(--text-muted); font-family: var(--mono); font-size: 11px; line-height: 1.6; margin: 16px 0 0; } -.wallet-control { align-items: end; display: flex; flex-direction: column; gap: 5px; } -.wallet-pulse { color: var(--danger); font-family: var(--mono); font-size: 10px; } -.recipient-page, .verifier-page, .simple-page { margin: 0 auto; max-width: 1240px; min-height: 100vh; padding: clamp(28px, 5vw, 76px) clamp(18px, 4vw, 68px); } -.recipient-grid { align-items: center; border-bottom: 1px solid var(--line); display: grid; gap: clamp(30px, 8vw, 120px); grid-template-columns: minmax(0, 1fr) minmax(280px, .7fr); padding: 28px 0 58px; } -.recipient-copy h1, .verifier-page h1, .simple-page h1 { font-size: clamp(40px, 5.5vw, 78px); font-weight: 500; letter-spacing: -.06em; line-height: .94; margin: 14px 0 22px; } -.recipient-copy > p:not(.eyebrow):not(.inline-error):not(.small-note), .verifier-lede { color: var(--text-muted); font-size: 17px; line-height: 1.55; max-width: 560px; } -.recipient-orb { align-items: center; background: var(--surface); border: 1px solid var(--line); display: flex; justify-content: center; min-height: 360px; } -.receipt-facts { border-top: 1px solid var(--line); margin: 27px 0; } -.receipt-facts div { border-bottom: 1px solid var(--line); display: grid; gap: 15px; grid-template-columns: 105px 1fr; padding: 12px 0; } -.receipt-facts dt, .verifier-grid dt { color: var(--text-muted); font-family: var(--mono); font-size: 10px; letter-spacing: .08em; text-transform: uppercase; } -.receipt-facts dd, .verifier-grid dd { font-family: var(--mono); font-size: 11px; margin: 0; overflow-wrap: anywhere; } -.blocked-decrypt { margin-top: 18px; } -.blocked-decrypt h2 { font-size: 26px; font-weight: 500; letter-spacing: -.04em; margin: 8px 0; } -.blocked-decrypt p:not(.eyebrow) { color: var(--text-muted); max-width: 720px; } -.receipt-card { background: var(--surface); border: 1px solid var(--line); margin-top: 30px; padding: clamp(20px, 3vw, 32px); } -.receipt-card-header { align-items: center; border-bottom: 1px solid var(--line); display: flex; gap: 16px; justify-content: space-between; padding-bottom: 14px; } -.receipt-card-header code { font-family: var(--mono); font-size: 10px; overflow-wrap: anywhere; text-align: right; } -.verifier-grid { display: grid; gap: 0 28px; grid-template-columns: repeat(2, minmax(0, 1fr)); margin: 18px 0; } -.verifier-grid div { border-top: 1px solid var(--line); padding: 13px 0; } -.verifier-grid dd { margin-top: 6px; } -.receipt-links { display: flex; flex-wrap: wrap; gap: 18px; } -.loading-line { color: var(--text-muted); font-family: var(--mono); font-size: 12px; } -@keyframes signal { 50% { opacity: .24; } } - -@media (max-width: 800px) { - .topbar { height: auto; min-height: 64px; padding-bottom: 12px; padding-top: 12px; } - .hero, .hero-grid, .section-heading, .console-grid, .two-column-grid, .workspace-grid, .recipient-grid { grid-template-columns: 1fr; } - .hero { padding-bottom: 48px; } - .hero-visual { min-height: 300px; order: -1; } - .hero-orb-wrap { height: min(78vw, 400px); min-height: 290px; width: min(78vw, 400px); } - .console-card-wide { grid-column: auto; } - .signal-strip { grid-template-columns: 1fr; } - .signal-item, .signal-strip span { border-bottom: 1px solid var(--line); border-right: 0; } - .signal-item:last-child, .signal-strip span:last-child { border-bottom: 0; } - .step-item { grid-template-columns: 28px 1fr; } - .step-item .status-chip { grid-column: 2; justify-self: start; } - .site-footer { flex-direction: column; gap: 12px; } - .verifier-grid { grid-template-columns: 1fr; } - .receipt-list li { align-items: start; grid-template-columns: auto 1fr; } - .receipt-list li > span:last-child { grid-column: 2; } -} - -@media (prefers-reduced-motion: reduce) { - *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; scroll-behavior: auto !important; transition-duration: .01ms !important; } -} diff --git a/web/src/app/layout.tsx b/web/src/app/layout.tsx deleted file mode 100644 index a50e240..0000000 --- a/web/src/app/layout.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import type { Metadata } from "next"; - -import "./globals.css"; - -export const metadata: Metadata = { - title: "NO SUS — Monad Experiment", - description: "Private notes with wallet acceptance receipts. An experimental Monad Testnet experience.", -}; - -export default function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) { - return ( - - {children} - - ); -} diff --git a/web/src/app/not-found.tsx b/web/src/app/not-found.tsx deleted file mode 100644 index 31ffdc5..0000000 --- a/web/src/app/not-found.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import Link from "next/link"; - -import { ExperimentBadge } from "@/components/experiment-badge"; - -export default function NotFound() { - return ( -

- -

404 / DROP NOT FOUND

-

This link does not identify a recorded experiment drop.

- Back to the experiment -
- ); -} diff --git a/web/src/app/operator/page.tsx b/web/src/app/operator/page.tsx deleted file mode 100644 index d6869b2..0000000 --- a/web/src/app/operator/page.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import Link from "next/link"; -import { HomeDashboard } from "@/components/home-dashboard"; - -export default function OperatorPage() { - return <>
Developer setup · Back to private notes
; -} diff --git a/web/src/app/page.tsx b/web/src/app/page.tsx deleted file mode 100644 index 923f663..0000000 --- a/web/src/app/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { ConsumerHome } from "@/features/private-notes/consumer-home"; - -export default function HomePage() { - return ; -} diff --git a/web/src/app/preview/page.tsx b/web/src/app/preview/page.tsx deleted file mode 100644 index 5feaa66..0000000 --- a/web/src/app/preview/page.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import { SampleJourney } from "@/features/private-notes/sample-journey"; - -export default function PreviewPage() { return ; } diff --git a/web/src/app/verify/[id]/page.tsx b/web/src/app/verify/[id]/page.tsx deleted file mode 100644 index 66a1c6d..0000000 --- a/web/src/app/verify/[id]/page.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import { ReceiptVerifier } from "@/components/receipt-verifier"; - -export default async function VerifyPage({ params }: { params: Promise<{ id: string }> }) { - const { id } = await params; - return ; -} diff --git a/web/src/components/experiment-badge.tsx b/web/src/components/experiment-badge.tsx deleted file mode 100644 index 962f91c..0000000 --- a/web/src/components/experiment-badge.tsx +++ /dev/null @@ -1,12 +0,0 @@ -type ExperimentBadgeProps = { - compact?: boolean; -}; - -export function ExperimentBadge({ compact = false }: ExperimentBadgeProps) { - return ( -

- - Experimental · Monad Testnet · Personal test data only -

- ); -} diff --git a/web/src/components/home-dashboard.tsx b/web/src/components/home-dashboard.tsx deleted file mode 100644 index 9d16e54..0000000 --- a/web/src/components/home-dashboard.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import Link from "next/link"; - -import { ExperimentBadge } from "@/components/experiment-badge"; -import { LiveReceiptWall } from "@/components/live-receipt-wall"; -import { LockOrb } from "@/components/lock-orb"; -import { SealConsole } from "@/components/seal-console"; -import { WalletControl } from "@/components/wallet-control"; - -export function HomeDashboard() { - return ( -
- - -
-
- -

One acknowledgement. One chance.

-

The lock only listens after the chain does.

-

- A recipient wallet can request a one-time decrypt only after its acknowledgement is - recorded on Monad Testnet. -

-
- Explore the flow - View receipt verifier -
-

- An on-chain receipt records a wallet action — not human comprehension, identity, - screenshot prevention, or legal proof. -

-
-
- -
MONAD TESTNETTHRESHOLD GATE: T1
-
-
- -
- 01 Encrypt in browser - 02 Seal digest on Monad - 03 Recipient acknowledges - 04 Lit checks access -
- -
- - -
-
- ); -} diff --git a/web/src/components/live-receipt-wall.tsx b/web/src/components/live-receipt-wall.tsx deleted file mode 100644 index e91cc3b..0000000 --- a/web/src/components/live-receipt-wall.tsx +++ /dev/null @@ -1,82 +0,0 @@ -"use client"; - -import { useEffect, useState } from "react"; - -type ReceiptWallItem = { - id: string; - senderWallet: string; - recipientWallet: string | null; - openerWallet: string | null; - sealedTxHash: string | null; - openedTxHash: string | null; - createdAt: string; - openedAt: string | null; -}; - -function abbreviated(value: string | null) { - if (!value) return "Open recipient"; - return `${value.slice(0, 6)}…${value.slice(-4)}`; -} - -export function LiveReceiptWall() { - const [items, setItems] = useState([]); - const [status, setStatus] = useState("Waiting for the isolated backend."); - - useEffect(() => { - let stopped = false; - async function refresh() { - try { - const response = await fetch("/api/wall", { cache: "no-store" }); - if (!response.ok) { - const body = (await response.json()) as { error?: string }; - if (!stopped) setStatus(body.error ?? "Receipt Wall is not configured."); - return; - } - const body = (await response.json()) as { items: ReceiptWallItem[] }; - if (!stopped) { - setItems(body.items); - setStatus(body.items.length ? "Streaming the latest recorded receipts." : "No recorded receipts yet."); - } - } catch { - if (!stopped) setStatus("Receipt Wall cannot reach the local backend yet."); - } - } - void refresh(); - const timer = window.setInterval(refresh, 12_000); - return () => { - stopped = true; - window.clearInterval(timer); - }; - }, []); - - return ( -
-
-
-

Live receipt wall / 02

-

A signal, not surveillance.

-
-