Notarize AT Protocol records on Ethereum using EAS (experiment)

add basic tests

+2 -1
.gitignore
··· 2 2 .DS_Store 3 3 node_modules 4 4 bun.lock 5 - dist 5 + dist 6 + coverage
+8 -2
package.json
··· 20 20 "scripts": { 21 21 "build": "tsc", 22 22 "dev": "tsx src/cli.ts", 23 - "prepublishOnly": "npm run build" 23 + "prepublishOnly": "npm run build", 24 + "test": "vitest", 25 + "test:ui": "vitest --ui", 26 + "test:coverage": "vitest --coverage", 27 + "test:run": "vitest run" 24 28 }, 25 29 "dependencies": { 26 30 "@atproto/api": "^0.12.29", ··· 29 33 }, 30 34 "devDependencies": { 31 35 "@types/node": "^20.19.21", 36 + "@vitest/coverage-v8": "^3.2.4", 32 37 "chalk": "^5.6.2", 33 38 "commander": "^11.1.0", 34 39 "dotenv": "^16.6.1", 35 40 "ora": "^8.2.0", 36 41 "tsx": "^4.20.6", 37 - "typescript": "^5.9.3" 42 + "typescript": "^5.9.3", 43 + "vitest": "^3.2.4" 38 44 }, 39 45 "keywords": [ 40 46 "atproto",
+998
pnpm-lock.yaml
··· 21 21 '@types/node': 22 22 specifier: ^20.19.21 23 23 version: 20.19.21 24 + '@vitest/coverage-v8': 25 + specifier: ^3.2.4 26 + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@20.19.21)(tsx@4.20.6)) 24 27 chalk: 25 28 specifier: ^5.6.2 26 29 version: 5.6.2 ··· 39 42 typescript: 40 43 specifier: ^5.9.3 41 44 version: 5.9.3 45 + vitest: 46 + specifier: ^3.2.4 47 + version: 3.2.4(@types/debug@4.1.12)(@types/node@20.19.21)(tsx@4.20.6) 42 48 43 49 packages: 44 50 ··· 48 54 '@adraffy/ens-normalize@1.11.1': 49 55 resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==} 50 56 57 + '@ampproject/remapping@2.3.0': 58 + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 59 + engines: {node: '>=6.0.0'} 60 + 51 61 '@atproto/api@0.12.29': 52 62 resolution: {integrity: sha512-PyzPLjGWR0qNOMrmj3Nt3N5NuuANSgOk/33Bu3j+rFjjPrHvk9CI6iQPU6zuDaDCoyOTRJRafw8X/aMQw+ilgw==} 53 63 ··· 68 78 69 79 '@atproto/xrpc@0.5.0': 70 80 resolution: {integrity: sha512-swu+wyOLvYW4l3n+VAuJbHcPcES+tin2Lsrp8Bw5aIXIICiuFn1YMFlwK9JwVUzTH21Py1s1nHEjr4CJeElJog==} 81 + 82 + '@babel/helper-string-parser@7.27.1': 83 + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 84 + engines: {node: '>=6.9.0'} 85 + 86 + '@babel/helper-validator-identifier@7.27.1': 87 + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} 88 + engines: {node: '>=6.9.0'} 89 + 90 + '@babel/parser@7.28.4': 91 + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} 92 + engines: {node: '>=6.0.0'} 93 + hasBin: true 94 + 95 + '@babel/types@7.28.4': 96 + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} 97 + engines: {node: '>=6.9.0'} 98 + 99 + '@bcoe/v8-coverage@1.0.2': 100 + resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} 101 + engines: {node: '>=18'} 71 102 72 103 '@esbuild/aix-ppc64@0.25.10': 73 104 resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==} ··· 305 336 resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} 306 337 engines: {node: '>=14'} 307 338 339 + '@isaacs/cliui@8.0.2': 340 + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 341 + engines: {node: '>=12'} 342 + 343 + '@istanbuljs/schema@0.1.3': 344 + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 345 + engines: {node: '>=8'} 346 + 347 + '@jridgewell/gen-mapping@0.3.13': 348 + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 349 + 350 + '@jridgewell/resolve-uri@3.1.2': 351 + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 352 + engines: {node: '>=6.0.0'} 353 + 354 + '@jridgewell/sourcemap-codec@1.5.5': 355 + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 356 + 357 + '@jridgewell/trace-mapping@0.3.31': 358 + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 359 + 308 360 '@metamask/abi-utils@2.0.4': 309 361 resolution: {integrity: sha512-StnIgUB75x7a7AgUhiaUZDpCsqGp7VkNnZh2XivXkJ6mPkE83U8ARGQj5MbRis7VJY8BC5V1AbB1fjdh0hupPQ==} 310 362 engines: {node: '>=16.0.0'} ··· 450 502 '@openzeppelin/merkle-tree@1.0.8': 451 503 resolution: {integrity: sha512-E2c9/Y3vjZXwVvPZKqCKUn7upnvam1P1ZhowJyZVQSkzZm5WhumtaRr+wkUXrZVfkIc7Gfrl7xzabElqDL09ow==} 452 504 505 + '@pkgjs/parseargs@0.11.0': 506 + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 507 + engines: {node: '>=14'} 508 + 509 + '@rollup/rollup-android-arm-eabi@4.52.4': 510 + resolution: {integrity: sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==} 511 + cpu: [arm] 512 + os: [android] 513 + 514 + '@rollup/rollup-android-arm64@4.52.4': 515 + resolution: {integrity: sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==} 516 + cpu: [arm64] 517 + os: [android] 518 + 519 + '@rollup/rollup-darwin-arm64@4.52.4': 520 + resolution: {integrity: sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==} 521 + cpu: [arm64] 522 + os: [darwin] 523 + 524 + '@rollup/rollup-darwin-x64@4.52.4': 525 + resolution: {integrity: sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==} 526 + cpu: [x64] 527 + os: [darwin] 528 + 529 + '@rollup/rollup-freebsd-arm64@4.52.4': 530 + resolution: {integrity: sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==} 531 + cpu: [arm64] 532 + os: [freebsd] 533 + 534 + '@rollup/rollup-freebsd-x64@4.52.4': 535 + resolution: {integrity: sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==} 536 + cpu: [x64] 537 + os: [freebsd] 538 + 539 + '@rollup/rollup-linux-arm-gnueabihf@4.52.4': 540 + resolution: {integrity: sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==} 541 + cpu: [arm] 542 + os: [linux] 543 + 544 + '@rollup/rollup-linux-arm-musleabihf@4.52.4': 545 + resolution: {integrity: sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==} 546 + cpu: [arm] 547 + os: [linux] 548 + 549 + '@rollup/rollup-linux-arm64-gnu@4.52.4': 550 + resolution: {integrity: sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==} 551 + cpu: [arm64] 552 + os: [linux] 553 + 554 + '@rollup/rollup-linux-arm64-musl@4.52.4': 555 + resolution: {integrity: sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==} 556 + cpu: [arm64] 557 + os: [linux] 558 + 559 + '@rollup/rollup-linux-loong64-gnu@4.52.4': 560 + resolution: {integrity: sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==} 561 + cpu: [loong64] 562 + os: [linux] 563 + 564 + '@rollup/rollup-linux-ppc64-gnu@4.52.4': 565 + resolution: {integrity: sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==} 566 + cpu: [ppc64] 567 + os: [linux] 568 + 569 + '@rollup/rollup-linux-riscv64-gnu@4.52.4': 570 + resolution: {integrity: sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==} 571 + cpu: [riscv64] 572 + os: [linux] 573 + 574 + '@rollup/rollup-linux-riscv64-musl@4.52.4': 575 + resolution: {integrity: sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==} 576 + cpu: [riscv64] 577 + os: [linux] 578 + 579 + '@rollup/rollup-linux-s390x-gnu@4.52.4': 580 + resolution: {integrity: sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==} 581 + cpu: [s390x] 582 + os: [linux] 583 + 584 + '@rollup/rollup-linux-x64-gnu@4.52.4': 585 + resolution: {integrity: sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==} 586 + cpu: [x64] 587 + os: [linux] 588 + 589 + '@rollup/rollup-linux-x64-musl@4.52.4': 590 + resolution: {integrity: sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==} 591 + cpu: [x64] 592 + os: [linux] 593 + 594 + '@rollup/rollup-openharmony-arm64@4.52.4': 595 + resolution: {integrity: sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==} 596 + cpu: [arm64] 597 + os: [openharmony] 598 + 599 + '@rollup/rollup-win32-arm64-msvc@4.52.4': 600 + resolution: {integrity: sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==} 601 + cpu: [arm64] 602 + os: [win32] 603 + 604 + '@rollup/rollup-win32-ia32-msvc@4.52.4': 605 + resolution: {integrity: sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==} 606 + cpu: [ia32] 607 + os: [win32] 608 + 609 + '@rollup/rollup-win32-x64-gnu@4.52.4': 610 + resolution: {integrity: sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==} 611 + cpu: [x64] 612 + os: [win32] 613 + 614 + '@rollup/rollup-win32-x64-msvc@4.52.4': 615 + resolution: {integrity: sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==} 616 + cpu: [x64] 617 + os: [win32] 618 + 453 619 '@scure/base@1.1.9': 454 620 resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} 455 621 ··· 508 674 '@types/bn.js@5.2.0': 509 675 resolution: {integrity: sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==} 510 676 677 + '@types/chai@5.2.2': 678 + resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} 679 + 511 680 '@types/debug@4.1.12': 512 681 resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} 682 + 683 + '@types/deep-eql@4.0.2': 684 + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} 685 + 686 + '@types/estree@1.0.8': 687 + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 513 688 514 689 '@types/lru-cache@5.1.1': 515 690 resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} ··· 529 704 '@types/secp256k1@4.0.7': 530 705 resolution: {integrity: sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw==} 531 706 707 + '@vitest/coverage-v8@3.2.4': 708 + resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==} 709 + peerDependencies: 710 + '@vitest/browser': 3.2.4 711 + vitest: 3.2.4 712 + peerDependenciesMeta: 713 + '@vitest/browser': 714 + optional: true 715 + 716 + '@vitest/expect@3.2.4': 717 + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} 718 + 719 + '@vitest/mocker@3.2.4': 720 + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} 721 + peerDependencies: 722 + msw: ^2.4.9 723 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 724 + peerDependenciesMeta: 725 + msw: 726 + optional: true 727 + vite: 728 + optional: true 729 + 730 + '@vitest/pretty-format@3.2.4': 731 + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} 732 + 733 + '@vitest/runner@3.2.4': 734 + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} 735 + 736 + '@vitest/snapshot@3.2.4': 737 + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} 738 + 739 + '@vitest/spy@3.2.4': 740 + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} 741 + 742 + '@vitest/utils@3.2.4': 743 + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} 744 + 532 745 abitype@1.1.0: 533 746 resolution: {integrity: sha512-6Vh4HcRxNMLA0puzPjM5GBgT4aAcFGKZzSgAXvuZ27shJP6NEpielTuqbBmZILR5/xd0PizkBGy5hReKz9jl5A==} 534 747 peerDependencies: ··· 582 795 resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 583 796 engines: {node: '>=8'} 584 797 798 + ansi-styles@6.2.3: 799 + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} 800 + engines: {node: '>=12'} 801 + 585 802 anymatch@3.1.3: 586 803 resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 587 804 engines: {node: '>= 8'} ··· 589 806 argparse@2.0.1: 590 807 resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 591 808 809 + assertion-error@2.0.1: 810 + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 811 + engines: {node: '>=12'} 812 + 813 + ast-v8-to-istanbul@0.3.5: 814 + resolution: {integrity: sha512-9SdXjNheSiE8bALAQCQQuT6fgQaoxJh7IRYrRGZ8/9nv8WhJeC1aXAwN8TbaOssGOukUvyvnkgD9+Yuykvl1aA==} 815 + 592 816 available-typed-arrays@1.0.7: 593 817 resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 594 818 engines: {node: '>= 0.4'} ··· 654 878 resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} 655 879 engines: {node: '>= 0.8'} 656 880 881 + cac@6.7.14: 882 + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 883 + engines: {node: '>=8'} 884 + 657 885 call-bind-apply-helpers@1.0.2: 658 886 resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} 659 887 engines: {node: '>= 0.4'} ··· 670 898 resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 671 899 engines: {node: '>=10'} 672 900 901 + chai@5.3.3: 902 + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} 903 + engines: {node: '>=18'} 904 + 673 905 chalk@2.4.2: 674 906 resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 675 907 engines: {node: '>=4'} ··· 682 914 resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} 683 915 engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 684 916 917 + check-error@2.1.1: 918 + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 919 + engines: {node: '>= 16'} 920 + 685 921 chokidar@3.6.0: 686 922 resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 687 923 engines: {node: '>= 8.10.0'} ··· 756 992 create-hmac@1.1.7: 757 993 resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} 758 994 995 + cross-spawn@7.0.6: 996 + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 997 + engines: {node: '>= 8'} 998 + 759 999 debug@4.4.3: 760 1000 resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 761 1001 engines: {node: '>=6.0'} ··· 769 1009 resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} 770 1010 engines: {node: '>=10'} 771 1011 1012 + deep-eql@5.0.2: 1013 + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 1014 + engines: {node: '>=6'} 1015 + 772 1016 define-data-property@1.1.4: 773 1017 resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 774 1018 engines: {node: '>= 0.4'} ··· 789 1033 resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 790 1034 engines: {node: '>= 0.4'} 791 1035 1036 + eastasianwidth@0.2.0: 1037 + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 1038 + 792 1039 elliptic@6.6.1: 793 1040 resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} 794 1041 ··· 797 1044 798 1045 emoji-regex@8.0.0: 799 1046 resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1047 + 1048 + emoji-regex@9.2.2: 1049 + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 800 1050 801 1051 enquirer@2.4.1: 802 1052 resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} ··· 814 1064 resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 815 1065 engines: {node: '>= 0.4'} 816 1066 1067 + es-module-lexer@1.7.0: 1068 + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} 1069 + 817 1070 es-object-atoms@1.1.1: 818 1071 resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 819 1072 engines: {node: '>= 0.4'} ··· 834 1087 escape-string-regexp@4.0.0: 835 1088 resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 836 1089 engines: {node: '>=10'} 1090 + 1091 + estree-walker@3.0.3: 1092 + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 837 1093 838 1094 ethereum-cryptography@0.1.3: 839 1095 resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} ··· 869 1125 evp_bytestokey@1.0.3: 870 1126 resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} 871 1127 1128 + expect-type@1.2.2: 1129 + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} 1130 + engines: {node: '>=12.0.0'} 1131 + 1132 + fdir@6.5.0: 1133 + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 1134 + engines: {node: '>=12.0.0'} 1135 + peerDependencies: 1136 + picomatch: ^3 || ^4 1137 + peerDependenciesMeta: 1138 + picomatch: 1139 + optional: true 1140 + 872 1141 fill-range@7.1.1: 873 1142 resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 874 1143 engines: {node: '>=8'} ··· 897 1166 for-each@0.3.5: 898 1167 resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} 899 1168 engines: {node: '>= 0.4'} 1169 + 1170 + foreground-child@3.3.1: 1171 + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} 1172 + engines: {node: '>=14'} 900 1173 901 1174 fp-ts@1.19.3: 902 1175 resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} ··· 942 1215 resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 943 1216 engines: {node: '>= 6'} 944 1217 1218 + glob@10.4.5: 1219 + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 1220 + hasBin: true 1221 + 945 1222 glob@7.2.0: 946 1223 resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} 947 1224 deprecated: Glob versions prior to v9 are no longer supported ··· 1009 1286 1010 1287 hmac-drbg@1.0.1: 1011 1288 resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} 1289 + 1290 + html-escaper@2.0.2: 1291 + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 1012 1292 1013 1293 http-errors@2.0.0: 1014 1294 resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} ··· 1097 1377 isarray@2.0.5: 1098 1378 resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1099 1379 1380 + isexe@2.0.0: 1381 + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1382 + 1100 1383 iso-datestring-validator@2.2.2: 1101 1384 resolution: {integrity: sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==} 1102 1385 ··· 1105 1388 peerDependencies: 1106 1389 ws: '*' 1107 1390 1391 + istanbul-lib-coverage@3.2.2: 1392 + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} 1393 + engines: {node: '>=8'} 1394 + 1395 + istanbul-lib-report@3.0.1: 1396 + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} 1397 + engines: {node: '>=10'} 1398 + 1399 + istanbul-lib-source-maps@5.0.6: 1400 + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} 1401 + engines: {node: '>=10'} 1402 + 1403 + istanbul-reports@3.2.0: 1404 + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} 1405 + engines: {node: '>=8'} 1406 + 1407 + jackspeak@3.4.3: 1408 + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 1409 + 1108 1410 js-base64@3.7.8: 1109 1411 resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} 1110 1412 1111 1413 js-sha3@0.8.0: 1112 1414 resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} 1415 + 1416 + js-tokens@9.0.1: 1417 + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} 1113 1418 1114 1419 js-yaml@4.1.0: 1115 1420 resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} ··· 1147 1452 resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} 1148 1453 engines: {node: '>=18'} 1149 1454 1455 + loupe@3.2.1: 1456 + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} 1457 + 1458 + lru-cache@10.4.3: 1459 + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1460 + 1150 1461 lru_map@0.3.3: 1151 1462 resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} 1152 1463 1464 + magic-string@0.30.19: 1465 + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} 1466 + 1467 + magicast@0.3.5: 1468 + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} 1469 + 1470 + make-dir@4.0.0: 1471 + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} 1472 + engines: {node: '>=10'} 1473 + 1153 1474 math-intrinsics@1.1.0: 1154 1475 resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 1155 1476 engines: {node: '>= 0.4'} ··· 1180 1501 minimatch@5.1.6: 1181 1502 resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} 1182 1503 engines: {node: '>=10'} 1504 + 1505 + minimatch@9.0.5: 1506 + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1507 + engines: {node: '>=16 || 14 >=14.17'} 1508 + 1509 + minipass@7.1.2: 1510 + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1511 + engines: {node: '>=16 || 14 >=14.17'} 1183 1512 1184 1513 mnemonist@0.38.5: 1185 1514 resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} ··· 1195 1524 multiformats@9.9.0: 1196 1525 resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} 1197 1526 1527 + nanoid@3.3.11: 1528 + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 1529 + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1530 + hasBin: true 1531 + 1198 1532 node-addon-api@2.0.2: 1199 1533 resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} 1200 1534 ··· 1259 1593 resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} 1260 1594 engines: {node: '>=4'} 1261 1595 1596 + package-json-from-dist@1.0.1: 1597 + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1598 + 1262 1599 pako@2.1.0: 1263 1600 resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} 1264 1601 ··· 1274 1611 resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1275 1612 engines: {node: '>=0.10.0'} 1276 1613 1614 + path-key@3.1.1: 1615 + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1616 + engines: {node: '>=8'} 1617 + 1277 1618 path-parse@1.0.7: 1278 1619 resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1279 1620 1621 + path-scurry@1.11.1: 1622 + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1623 + engines: {node: '>=16 || 14 >=14.18'} 1624 + 1625 + pathe@2.0.3: 1626 + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 1627 + 1628 + pathval@2.0.1: 1629 + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} 1630 + engines: {node: '>= 14.16'} 1631 + 1280 1632 pbkdf2@3.1.5: 1281 1633 resolution: {integrity: sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==} 1282 1634 engines: {node: '>= 0.10'} 1283 1635 1636 + picocolors@1.1.1: 1637 + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1638 + 1284 1639 picomatch@2.3.1: 1285 1640 resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1286 1641 engines: {node: '>=8.6'} 1287 1642 1643 + picomatch@4.0.3: 1644 + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 1645 + engines: {node: '>=12'} 1646 + 1288 1647 pony-cause@2.1.11: 1289 1648 resolution: {integrity: sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg==} 1290 1649 engines: {node: '>=12.0.0'} ··· 1293 1652 resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} 1294 1653 engines: {node: '>= 0.4'} 1295 1654 1655 + postcss@8.5.6: 1656 + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 1657 + engines: {node: ^10 || ^12 || >=14} 1658 + 1296 1659 process-nextick-args@2.0.1: 1297 1660 resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} 1298 1661 ··· 1343 1706 1344 1707 rlp@2.2.7: 1345 1708 resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} 1709 + hasBin: true 1710 + 1711 + rollup@4.52.4: 1712 + resolution: {integrity: sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==} 1713 + engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1346 1714 hasBin: true 1347 1715 1348 1716 safe-buffer@5.1.2: ··· 1392 1760 engines: {node: '>= 0.10'} 1393 1761 hasBin: true 1394 1762 1763 + shebang-command@2.0.0: 1764 + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1765 + engines: {node: '>=8'} 1766 + 1767 + shebang-regex@3.0.0: 1768 + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1769 + engines: {node: '>=8'} 1770 + 1771 + siginfo@2.0.0: 1772 + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1773 + 1395 1774 signal-exit@4.1.0: 1396 1775 resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1397 1776 engines: {node: '>=14'} ··· 1400 1779 resolution: {integrity: sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==} 1401 1780 engines: {node: '>=8.0.0'} 1402 1781 hasBin: true 1782 + 1783 + source-map-js@1.2.1: 1784 + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1785 + engines: {node: '>=0.10.0'} 1403 1786 1404 1787 source-map-support@0.5.21: 1405 1788 resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} ··· 1408 1791 resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1409 1792 engines: {node: '>=0.10.0'} 1410 1793 1794 + stackback@0.0.2: 1795 + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1796 + 1411 1797 stacktrace-parser@0.1.11: 1412 1798 resolution: {integrity: sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==} 1413 1799 engines: {node: '>=6'} ··· 1416 1802 resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} 1417 1803 engines: {node: '>= 0.8'} 1418 1804 1805 + std-env@3.9.0: 1806 + resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} 1807 + 1419 1808 stdin-discarder@0.2.2: 1420 1809 resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} 1421 1810 engines: {node: '>=18'} ··· 1424 1813 resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1425 1814 engines: {node: '>=8'} 1426 1815 1816 + string-width@5.1.2: 1817 + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1818 + engines: {node: '>=12'} 1819 + 1427 1820 string-width@7.2.0: 1428 1821 resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} 1429 1822 engines: {node: '>=18'} ··· 1450 1843 resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1451 1844 engines: {node: '>=8'} 1452 1845 1846 + strip-literal@3.1.0: 1847 + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} 1848 + 1453 1849 supports-color@5.5.0: 1454 1850 resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1455 1851 engines: {node: '>=4'} ··· 1462 1858 resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 1463 1859 engines: {node: '>=10'} 1464 1860 1861 + test-exclude@7.0.1: 1862 + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} 1863 + engines: {node: '>=18'} 1864 + 1865 + tinybench@2.9.0: 1866 + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 1867 + 1868 + tinyexec@0.3.2: 1869 + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 1870 + 1871 + tinyglobby@0.2.15: 1872 + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 1873 + engines: {node: '>=12.0.0'} 1874 + 1875 + tinypool@1.1.1: 1876 + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} 1877 + engines: {node: ^18.0.0 || >=20.0.0} 1878 + 1879 + tinyrainbow@2.0.0: 1880 + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} 1881 + engines: {node: '>=14.0.0'} 1882 + 1883 + tinyspy@4.0.4: 1884 + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} 1885 + engines: {node: '>=14.0.0'} 1886 + 1465 1887 tlds@1.260.0: 1466 1888 resolution: {integrity: sha512-78+28EWBhCEE7qlyaHA9OR3IPvbCLiDh3Ckla593TksfFc9vfTsgvH7eS+dr3o9qr31gwGbogcI16yN91PoRjQ==} 1467 1889 hasBin: true ··· 1563 1985 typescript: 1564 1986 optional: true 1565 1987 1988 + vite-node@3.2.4: 1989 + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} 1990 + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1991 + hasBin: true 1992 + 1993 + vite@7.1.9: 1994 + resolution: {integrity: sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==} 1995 + engines: {node: ^20.19.0 || >=22.12.0} 1996 + hasBin: true 1997 + peerDependencies: 1998 + '@types/node': ^20.19.0 || >=22.12.0 1999 + jiti: '>=1.21.0' 2000 + less: ^4.0.0 2001 + lightningcss: ^1.21.0 2002 + sass: ^1.70.0 2003 + sass-embedded: ^1.70.0 2004 + stylus: '>=0.54.8' 2005 + sugarss: ^5.0.0 2006 + terser: ^5.16.0 2007 + tsx: ^4.8.1 2008 + yaml: ^2.4.2 2009 + peerDependenciesMeta: 2010 + '@types/node': 2011 + optional: true 2012 + jiti: 2013 + optional: true 2014 + less: 2015 + optional: true 2016 + lightningcss: 2017 + optional: true 2018 + sass: 2019 + optional: true 2020 + sass-embedded: 2021 + optional: true 2022 + stylus: 2023 + optional: true 2024 + sugarss: 2025 + optional: true 2026 + terser: 2027 + optional: true 2028 + tsx: 2029 + optional: true 2030 + yaml: 2031 + optional: true 2032 + 2033 + vitest@3.2.4: 2034 + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} 2035 + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 2036 + hasBin: true 2037 + peerDependencies: 2038 + '@edge-runtime/vm': '*' 2039 + '@types/debug': ^4.1.12 2040 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 2041 + '@vitest/browser': 3.2.4 2042 + '@vitest/ui': 3.2.4 2043 + happy-dom: '*' 2044 + jsdom: '*' 2045 + peerDependenciesMeta: 2046 + '@edge-runtime/vm': 2047 + optional: true 2048 + '@types/debug': 2049 + optional: true 2050 + '@types/node': 2051 + optional: true 2052 + '@vitest/browser': 2053 + optional: true 2054 + '@vitest/ui': 2055 + optional: true 2056 + happy-dom: 2057 + optional: true 2058 + jsdom: 2059 + optional: true 2060 + 1566 2061 which-typed-array@1.1.19: 1567 2062 resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} 1568 2063 engines: {node: '>= 0.4'} 1569 2064 2065 + which@2.0.2: 2066 + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2067 + engines: {node: '>= 8'} 2068 + hasBin: true 2069 + 2070 + why-is-node-running@2.3.0: 2071 + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 2072 + engines: {node: '>=8'} 2073 + hasBin: true 2074 + 1570 2075 widest-line@3.1.0: 1571 2076 resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} 1572 2077 engines: {node: '>=8'} ··· 1577 2082 wrap-ansi@7.0.0: 1578 2083 resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1579 2084 engines: {node: '>=10'} 2085 + 2086 + wrap-ansi@8.1.0: 2087 + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 2088 + engines: {node: '>=12'} 1580 2089 1581 2090 wrappy@1.0.2: 1582 2091 resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} ··· 1645 2154 '@adraffy/ens-normalize@1.10.1': {} 1646 2155 1647 2156 '@adraffy/ens-normalize@1.11.1': {} 2157 + 2158 + '@ampproject/remapping@2.3.0': 2159 + dependencies: 2160 + '@jridgewell/gen-mapping': 0.3.13 2161 + '@jridgewell/trace-mapping': 0.3.31 1648 2162 1649 2163 '@atproto/api@0.12.29': 1650 2164 dependencies: ··· 1686 2200 dependencies: 1687 2201 '@atproto/lexicon': 0.4.14 1688 2202 zod: 3.25.76 2203 + 2204 + '@babel/helper-string-parser@7.27.1': {} 2205 + 2206 + '@babel/helper-validator-identifier@7.27.1': {} 2207 + 2208 + '@babel/parser@7.28.4': 2209 + dependencies: 2210 + '@babel/types': 7.28.4 2211 + 2212 + '@babel/types@7.28.4': 2213 + dependencies: 2214 + '@babel/helper-string-parser': 7.27.1 2215 + '@babel/helper-validator-identifier': 7.27.1 2216 + 2217 + '@bcoe/v8-coverage@1.0.2': {} 1689 2218 1690 2219 '@esbuild/aix-ppc64@0.25.10': 1691 2220 optional: true ··· 1941 2470 1942 2471 '@fastify/busboy@2.1.1': {} 1943 2472 2473 + '@isaacs/cliui@8.0.2': 2474 + dependencies: 2475 + string-width: 5.1.2 2476 + string-width-cjs: string-width@4.2.3 2477 + strip-ansi: 7.1.2 2478 + strip-ansi-cjs: strip-ansi@6.0.1 2479 + wrap-ansi: 8.1.0 2480 + wrap-ansi-cjs: wrap-ansi@7.0.0 2481 + 2482 + '@istanbuljs/schema@0.1.3': {} 2483 + 2484 + '@jridgewell/gen-mapping@0.3.13': 2485 + dependencies: 2486 + '@jridgewell/sourcemap-codec': 1.5.5 2487 + '@jridgewell/trace-mapping': 0.3.31 2488 + 2489 + '@jridgewell/resolve-uri@3.1.2': {} 2490 + 2491 + '@jridgewell/sourcemap-codec@1.5.5': {} 2492 + 2493 + '@jridgewell/trace-mapping@0.3.31': 2494 + dependencies: 2495 + '@jridgewell/resolve-uri': 3.1.2 2496 + '@jridgewell/sourcemap-codec': 1.5.5 2497 + 1944 2498 '@metamask/abi-utils@2.0.4': 1945 2499 dependencies: 1946 2500 '@metamask/superstruct': 3.2.1 ··· 2082 2636 transitivePeerDependencies: 2083 2637 - supports-color 2084 2638 2639 + '@pkgjs/parseargs@0.11.0': 2640 + optional: true 2641 + 2642 + '@rollup/rollup-android-arm-eabi@4.52.4': 2643 + optional: true 2644 + 2645 + '@rollup/rollup-android-arm64@4.52.4': 2646 + optional: true 2647 + 2648 + '@rollup/rollup-darwin-arm64@4.52.4': 2649 + optional: true 2650 + 2651 + '@rollup/rollup-darwin-x64@4.52.4': 2652 + optional: true 2653 + 2654 + '@rollup/rollup-freebsd-arm64@4.52.4': 2655 + optional: true 2656 + 2657 + '@rollup/rollup-freebsd-x64@4.52.4': 2658 + optional: true 2659 + 2660 + '@rollup/rollup-linux-arm-gnueabihf@4.52.4': 2661 + optional: true 2662 + 2663 + '@rollup/rollup-linux-arm-musleabihf@4.52.4': 2664 + optional: true 2665 + 2666 + '@rollup/rollup-linux-arm64-gnu@4.52.4': 2667 + optional: true 2668 + 2669 + '@rollup/rollup-linux-arm64-musl@4.52.4': 2670 + optional: true 2671 + 2672 + '@rollup/rollup-linux-loong64-gnu@4.52.4': 2673 + optional: true 2674 + 2675 + '@rollup/rollup-linux-ppc64-gnu@4.52.4': 2676 + optional: true 2677 + 2678 + '@rollup/rollup-linux-riscv64-gnu@4.52.4': 2679 + optional: true 2680 + 2681 + '@rollup/rollup-linux-riscv64-musl@4.52.4': 2682 + optional: true 2683 + 2684 + '@rollup/rollup-linux-s390x-gnu@4.52.4': 2685 + optional: true 2686 + 2687 + '@rollup/rollup-linux-x64-gnu@4.52.4': 2688 + optional: true 2689 + 2690 + '@rollup/rollup-linux-x64-musl@4.52.4': 2691 + optional: true 2692 + 2693 + '@rollup/rollup-openharmony-arm64@4.52.4': 2694 + optional: true 2695 + 2696 + '@rollup/rollup-win32-arm64-msvc@4.52.4': 2697 + optional: true 2698 + 2699 + '@rollup/rollup-win32-ia32-msvc@4.52.4': 2700 + optional: true 2701 + 2702 + '@rollup/rollup-win32-x64-gnu@4.52.4': 2703 + optional: true 2704 + 2705 + '@rollup/rollup-win32-x64-msvc@4.52.4': 2706 + optional: true 2707 + 2085 2708 '@scure/base@1.1.9': {} 2086 2709 2087 2710 '@scure/base@1.2.6': {} ··· 2176 2799 dependencies: 2177 2800 '@types/node': 20.19.21 2178 2801 2802 + '@types/chai@5.2.2': 2803 + dependencies: 2804 + '@types/deep-eql': 4.0.2 2805 + 2179 2806 '@types/debug@4.1.12': 2180 2807 dependencies: 2181 2808 '@types/ms': 2.1.0 2809 + 2810 + '@types/deep-eql@4.0.2': {} 2811 + 2812 + '@types/estree@1.0.8': {} 2182 2813 2183 2814 '@types/lru-cache@5.1.1': {} 2184 2815 ··· 2200 2831 dependencies: 2201 2832 '@types/node': 20.19.21 2202 2833 2834 + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@20.19.21)(tsx@4.20.6))': 2835 + dependencies: 2836 + '@ampproject/remapping': 2.3.0 2837 + '@bcoe/v8-coverage': 1.0.2 2838 + ast-v8-to-istanbul: 0.3.5 2839 + debug: 4.4.3(supports-color@8.1.1) 2840 + istanbul-lib-coverage: 3.2.2 2841 + istanbul-lib-report: 3.0.1 2842 + istanbul-lib-source-maps: 5.0.6 2843 + istanbul-reports: 3.2.0 2844 + magic-string: 0.30.19 2845 + magicast: 0.3.5 2846 + std-env: 3.9.0 2847 + test-exclude: 7.0.1 2848 + tinyrainbow: 2.0.0 2849 + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@20.19.21)(tsx@4.20.6) 2850 + transitivePeerDependencies: 2851 + - supports-color 2852 + 2853 + '@vitest/expect@3.2.4': 2854 + dependencies: 2855 + '@types/chai': 5.2.2 2856 + '@vitest/spy': 3.2.4 2857 + '@vitest/utils': 3.2.4 2858 + chai: 5.3.3 2859 + tinyrainbow: 2.0.0 2860 + 2861 + '@vitest/mocker@3.2.4(vite@7.1.9(@types/node@20.19.21)(tsx@4.20.6))': 2862 + dependencies: 2863 + '@vitest/spy': 3.2.4 2864 + estree-walker: 3.0.3 2865 + magic-string: 0.30.19 2866 + optionalDependencies: 2867 + vite: 7.1.9(@types/node@20.19.21)(tsx@4.20.6) 2868 + 2869 + '@vitest/pretty-format@3.2.4': 2870 + dependencies: 2871 + tinyrainbow: 2.0.0 2872 + 2873 + '@vitest/runner@3.2.4': 2874 + dependencies: 2875 + '@vitest/utils': 3.2.4 2876 + pathe: 2.0.3 2877 + strip-literal: 3.1.0 2878 + 2879 + '@vitest/snapshot@3.2.4': 2880 + dependencies: 2881 + '@vitest/pretty-format': 3.2.4 2882 + magic-string: 0.30.19 2883 + pathe: 2.0.3 2884 + 2885 + '@vitest/spy@3.2.4': 2886 + dependencies: 2887 + tinyspy: 4.0.4 2888 + 2889 + '@vitest/utils@3.2.4': 2890 + dependencies: 2891 + '@vitest/pretty-format': 3.2.4 2892 + loupe: 3.2.1 2893 + tinyrainbow: 2.0.0 2894 + 2203 2895 abitype@1.1.0(typescript@5.9.3)(zod@3.25.76): 2204 2896 optionalDependencies: 2205 2897 typescript: 5.9.3 ··· 2242 2934 dependencies: 2243 2935 color-convert: 2.0.1 2244 2936 2937 + ansi-styles@6.2.3: {} 2938 + 2245 2939 anymatch@3.1.3: 2246 2940 dependencies: 2247 2941 normalize-path: 3.0.0 2248 2942 picomatch: 2.3.1 2249 2943 2250 2944 argparse@2.0.1: {} 2945 + 2946 + assertion-error@2.0.1: {} 2947 + 2948 + ast-v8-to-istanbul@0.3.5: 2949 + dependencies: 2950 + '@jridgewell/trace-mapping': 0.3.31 2951 + estree-walker: 3.0.3 2952 + js-tokens: 9.0.1 2251 2953 2252 2954 available-typed-arrays@1.0.7: 2253 2955 dependencies: ··· 2322 3024 2323 3025 bytes@3.1.2: {} 2324 3026 3027 + cac@6.7.14: {} 3028 + 2325 3029 call-bind-apply-helpers@1.0.2: 2326 3030 dependencies: 2327 3031 es-errors: 1.3.0 ··· 2341 3045 2342 3046 camelcase@6.3.0: {} 2343 3047 3048 + chai@5.3.3: 3049 + dependencies: 3050 + assertion-error: 2.0.1 3051 + check-error: 2.1.1 3052 + deep-eql: 5.0.2 3053 + loupe: 3.2.1 3054 + pathval: 2.0.1 3055 + 2344 3056 chalk@2.4.2: 2345 3057 dependencies: 2346 3058 ansi-styles: 3.2.1 ··· 2353 3065 supports-color: 7.2.0 2354 3066 2355 3067 chalk@5.6.2: {} 3068 + 3069 + check-error@2.1.1: {} 2356 3070 2357 3071 chokidar@3.6.0: 2358 3072 dependencies: ··· 2433 3147 safe-buffer: 5.2.1 2434 3148 sha.js: 2.4.12 2435 3149 3150 + cross-spawn@7.0.6: 3151 + dependencies: 3152 + path-key: 3.1.1 3153 + shebang-command: 2.0.0 3154 + which: 2.0.2 3155 + 2436 3156 debug@4.4.3(supports-color@8.1.1): 2437 3157 dependencies: 2438 3158 ms: 2.1.3 ··· 2440 3160 supports-color: 8.1.1 2441 3161 2442 3162 decamelize@4.0.0: {} 3163 + 3164 + deep-eql@5.0.2: {} 2443 3165 2444 3166 define-data-property@1.1.4: 2445 3167 dependencies: ··· 2459 3181 es-errors: 1.3.0 2460 3182 gopd: 1.2.0 2461 3183 3184 + eastasianwidth@0.2.0: {} 3185 + 2462 3186 elliptic@6.6.1: 2463 3187 dependencies: 2464 3188 bn.js: 4.12.2 ··· 2472 3196 emoji-regex@10.5.0: {} 2473 3197 2474 3198 emoji-regex@8.0.0: {} 3199 + 3200 + emoji-regex@9.2.2: {} 2475 3201 2476 3202 enquirer@2.4.1: 2477 3203 dependencies: ··· 2484 3210 2485 3211 es-errors@1.3.0: {} 2486 3212 3213 + es-module-lexer@1.7.0: {} 3214 + 2487 3215 es-object-atoms@1.1.1: 2488 3216 dependencies: 2489 3217 es-errors: 1.3.0 ··· 2522 3250 escape-string-regexp@1.0.5: {} 2523 3251 2524 3252 escape-string-regexp@4.0.0: {} 3253 + 3254 + estree-walker@3.0.3: 3255 + dependencies: 3256 + '@types/estree': 1.0.8 2525 3257 2526 3258 ethereum-cryptography@0.1.3: 2527 3259 dependencies: ··· 2603 3335 md5.js: 1.3.5 2604 3336 safe-buffer: 5.2.1 2605 3337 3338 + expect-type@1.2.2: {} 3339 + 3340 + fdir@6.5.0(picomatch@4.0.3): 3341 + optionalDependencies: 3342 + picomatch: 4.0.3 3343 + 2606 3344 fill-range@7.1.1: 2607 3345 dependencies: 2608 3346 to-regex-range: 5.0.1 ··· 2625 3363 for-each@0.3.5: 2626 3364 dependencies: 2627 3365 is-callable: 1.2.7 3366 + 3367 + foreground-child@3.3.1: 3368 + dependencies: 3369 + cross-spawn: 7.0.6 3370 + signal-exit: 4.1.0 2628 3371 2629 3372 fp-ts@1.19.3: {} 2630 3373 ··· 2679 3422 dependencies: 2680 3423 is-glob: 4.0.3 2681 3424 3425 + glob@10.4.5: 3426 + dependencies: 3427 + foreground-child: 3.3.1 3428 + jackspeak: 3.4.3 3429 + minimatch: 9.0.5 3430 + minipass: 7.1.2 3431 + package-json-from-dist: 1.0.1 3432 + path-scurry: 1.11.1 3433 + 2682 3434 glob@7.2.0: 2683 3435 dependencies: 2684 3436 fs.realpath: 1.0.0 ··· 2793 3545 minimalistic-assert: 1.0.1 2794 3546 minimalistic-crypto-utils: 1.0.1 2795 3547 3548 + html-escaper@2.0.2: {} 3549 + 2796 3550 http-errors@2.0.0: 2797 3551 dependencies: 2798 3552 depd: 2.0.0 ··· 2863 3617 2864 3618 isarray@2.0.5: {} 2865 3619 3620 + isexe@2.0.0: {} 3621 + 2866 3622 iso-datestring-validator@2.2.2: {} 2867 3623 2868 3624 isows@1.0.7(ws@8.18.3): 2869 3625 dependencies: 2870 3626 ws: 8.18.3 2871 3627 3628 + istanbul-lib-coverage@3.2.2: {} 3629 + 3630 + istanbul-lib-report@3.0.1: 3631 + dependencies: 3632 + istanbul-lib-coverage: 3.2.2 3633 + make-dir: 4.0.0 3634 + supports-color: 7.2.0 3635 + 3636 + istanbul-lib-source-maps@5.0.6: 3637 + dependencies: 3638 + '@jridgewell/trace-mapping': 0.3.31 3639 + debug: 4.4.3(supports-color@8.1.1) 3640 + istanbul-lib-coverage: 3.2.2 3641 + transitivePeerDependencies: 3642 + - supports-color 3643 + 3644 + istanbul-reports@3.2.0: 3645 + dependencies: 3646 + html-escaper: 2.0.2 3647 + istanbul-lib-report: 3.0.1 3648 + 3649 + jackspeak@3.4.3: 3650 + dependencies: 3651 + '@isaacs/cliui': 8.0.2 3652 + optionalDependencies: 3653 + '@pkgjs/parseargs': 0.11.0 3654 + 2872 3655 js-base64@3.7.8: {} 2873 3656 2874 3657 js-sha3@0.8.0: {} 3658 + 3659 + js-tokens@9.0.1: {} 2875 3660 2876 3661 js-yaml@4.1.0: 2877 3662 dependencies: ··· 2916 3701 chalk: 5.6.2 2917 3702 is-unicode-supported: 1.3.0 2918 3703 3704 + loupe@3.2.1: {} 3705 + 3706 + lru-cache@10.4.3: {} 3707 + 2919 3708 lru_map@0.3.3: {} 2920 3709 3710 + magic-string@0.30.19: 3711 + dependencies: 3712 + '@jridgewell/sourcemap-codec': 1.5.5 3713 + 3714 + magicast@0.3.5: 3715 + dependencies: 3716 + '@babel/parser': 7.28.4 3717 + '@babel/types': 7.28.4 3718 + source-map-js: 1.2.1 3719 + 3720 + make-dir@4.0.0: 3721 + dependencies: 3722 + semver: 7.7.3 3723 + 2921 3724 math-intrinsics@1.1.0: {} 2922 3725 2923 3726 md5.js@1.3.5: ··· 2944 3747 dependencies: 2945 3748 brace-expansion: 2.0.2 2946 3749 3750 + minimatch@9.0.5: 3751 + dependencies: 3752 + brace-expansion: 2.0.2 3753 + 3754 + minipass@7.1.2: {} 3755 + 2947 3756 mnemonist@0.38.5: 2948 3757 dependencies: 2949 3758 obliterator: 2.0.5 ··· 2974 3783 ms@2.1.3: {} 2975 3784 2976 3785 multiformats@9.9.0: {} 3786 + 3787 + nanoid@3.3.11: {} 2977 3788 2978 3789 node-addon-api@2.0.2: {} 2979 3790 ··· 3044 3855 3045 3856 p-try@1.0.0: {} 3046 3857 3858 + package-json-from-dist@1.0.1: {} 3859 + 3047 3860 pako@2.1.0: {} 3048 3861 3049 3862 path-exists@3.0.0: {} ··· 3052 3865 3053 3866 path-is-absolute@1.0.1: {} 3054 3867 3868 + path-key@3.1.1: {} 3869 + 3055 3870 path-parse@1.0.7: {} 3056 3871 3872 + path-scurry@1.11.1: 3873 + dependencies: 3874 + lru-cache: 10.4.3 3875 + minipass: 7.1.2 3876 + 3877 + pathe@2.0.3: {} 3878 + 3879 + pathval@2.0.1: {} 3880 + 3057 3881 pbkdf2@3.1.5: 3058 3882 dependencies: 3059 3883 create-hash: 1.2.0 ··· 3062 3886 safe-buffer: 5.2.1 3063 3887 sha.js: 2.4.12 3064 3888 to-buffer: 1.2.2 3889 + 3890 + picocolors@1.1.1: {} 3065 3891 3066 3892 picomatch@2.3.1: {} 3067 3893 3894 + picomatch@4.0.3: {} 3895 + 3068 3896 pony-cause@2.1.11: {} 3069 3897 3070 3898 possible-typed-array-names@1.1.0: {} 3899 + 3900 + postcss@8.5.6: 3901 + dependencies: 3902 + nanoid: 3.3.11 3903 + picocolors: 1.1.1 3904 + source-map-js: 1.2.1 3071 3905 3072 3906 process-nextick-args@2.0.1: {} 3073 3907 ··· 3130 3964 dependencies: 3131 3965 bn.js: 5.2.2 3132 3966 3967 + rollup@4.52.4: 3968 + dependencies: 3969 + '@types/estree': 1.0.8 3970 + optionalDependencies: 3971 + '@rollup/rollup-android-arm-eabi': 4.52.4 3972 + '@rollup/rollup-android-arm64': 4.52.4 3973 + '@rollup/rollup-darwin-arm64': 4.52.4 3974 + '@rollup/rollup-darwin-x64': 4.52.4 3975 + '@rollup/rollup-freebsd-arm64': 4.52.4 3976 + '@rollup/rollup-freebsd-x64': 4.52.4 3977 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.4 3978 + '@rollup/rollup-linux-arm-musleabihf': 4.52.4 3979 + '@rollup/rollup-linux-arm64-gnu': 4.52.4 3980 + '@rollup/rollup-linux-arm64-musl': 4.52.4 3981 + '@rollup/rollup-linux-loong64-gnu': 4.52.4 3982 + '@rollup/rollup-linux-ppc64-gnu': 4.52.4 3983 + '@rollup/rollup-linux-riscv64-gnu': 4.52.4 3984 + '@rollup/rollup-linux-riscv64-musl': 4.52.4 3985 + '@rollup/rollup-linux-s390x-gnu': 4.52.4 3986 + '@rollup/rollup-linux-x64-gnu': 4.52.4 3987 + '@rollup/rollup-linux-x64-musl': 4.52.4 3988 + '@rollup/rollup-openharmony-arm64': 4.52.4 3989 + '@rollup/rollup-win32-arm64-msvc': 4.52.4 3990 + '@rollup/rollup-win32-ia32-msvc': 4.52.4 3991 + '@rollup/rollup-win32-x64-gnu': 4.52.4 3992 + '@rollup/rollup-win32-x64-msvc': 4.52.4 3993 + fsevents: 2.3.3 3994 + 3133 3995 safe-buffer@5.1.2: {} 3134 3996 3135 3997 safe-buffer@5.2.1: {} ··· 3173 4035 safe-buffer: 5.2.1 3174 4036 to-buffer: 1.2.2 3175 4037 4038 + shebang-command@2.0.0: 4039 + dependencies: 4040 + shebang-regex: 3.0.0 4041 + 4042 + shebang-regex@3.0.0: {} 4043 + 4044 + siginfo@2.0.0: {} 4045 + 3176 4046 signal-exit@4.1.0: {} 3177 4047 3178 4048 solc@0.7.3(debug@4.4.3): ··· 3189 4059 transitivePeerDependencies: 3190 4060 - debug 3191 4061 4062 + source-map-js@1.2.1: {} 4063 + 3192 4064 source-map-support@0.5.21: 3193 4065 dependencies: 3194 4066 buffer-from: 1.1.2 3195 4067 source-map: 0.6.1 3196 4068 3197 4069 source-map@0.6.1: {} 4070 + 4071 + stackback@0.0.2: {} 3198 4072 3199 4073 stacktrace-parser@0.1.11: 3200 4074 dependencies: ··· 3202 4076 3203 4077 statuses@2.0.1: {} 3204 4078 4079 + std-env@3.9.0: {} 4080 + 3205 4081 stdin-discarder@0.2.2: {} 3206 4082 3207 4083 string-width@4.2.3: ··· 3209 4085 emoji-regex: 8.0.0 3210 4086 is-fullwidth-code-point: 3.0.0 3211 4087 strip-ansi: 6.0.1 4088 + 4089 + string-width@5.1.2: 4090 + dependencies: 4091 + eastasianwidth: 0.2.0 4092 + emoji-regex: 9.2.2 4093 + strip-ansi: 7.1.2 3212 4094 3213 4095 string-width@7.2.0: 3214 4096 dependencies: ··· 3238 4120 3239 4121 strip-json-comments@3.1.1: {} 3240 4122 4123 + strip-literal@3.1.0: 4124 + dependencies: 4125 + js-tokens: 9.0.1 4126 + 3241 4127 supports-color@5.5.0: 3242 4128 dependencies: 3243 4129 has-flag: 3.0.0 ··· 3250 4136 dependencies: 3251 4137 has-flag: 4.0.0 3252 4138 4139 + test-exclude@7.0.1: 4140 + dependencies: 4141 + '@istanbuljs/schema': 0.1.3 4142 + glob: 10.4.5 4143 + minimatch: 9.0.5 4144 + 4145 + tinybench@2.9.0: {} 4146 + 4147 + tinyexec@0.3.2: {} 4148 + 4149 + tinyglobby@0.2.15: 4150 + dependencies: 4151 + fdir: 6.5.0(picomatch@4.0.3) 4152 + picomatch: 4.0.3 4153 + 4154 + tinypool@1.1.1: {} 4155 + 4156 + tinyrainbow@2.0.0: {} 4157 + 4158 + tinyspy@4.0.4: {} 4159 + 3253 4160 tlds@1.260.0: {} 3254 4161 3255 4162 tmp@0.0.33: ··· 3338 4245 - utf-8-validate 3339 4246 - zod 3340 4247 4248 + vite-node@3.2.4(@types/node@20.19.21)(tsx@4.20.6): 4249 + dependencies: 4250 + cac: 6.7.14 4251 + debug: 4.4.3(supports-color@8.1.1) 4252 + es-module-lexer: 1.7.0 4253 + pathe: 2.0.3 4254 + vite: 7.1.9(@types/node@20.19.21)(tsx@4.20.6) 4255 + transitivePeerDependencies: 4256 + - '@types/node' 4257 + - jiti 4258 + - less 4259 + - lightningcss 4260 + - sass 4261 + - sass-embedded 4262 + - stylus 4263 + - sugarss 4264 + - supports-color 4265 + - terser 4266 + - tsx 4267 + - yaml 4268 + 4269 + vite@7.1.9(@types/node@20.19.21)(tsx@4.20.6): 4270 + dependencies: 4271 + esbuild: 0.25.10 4272 + fdir: 6.5.0(picomatch@4.0.3) 4273 + picomatch: 4.0.3 4274 + postcss: 8.5.6 4275 + rollup: 4.52.4 4276 + tinyglobby: 0.2.15 4277 + optionalDependencies: 4278 + '@types/node': 20.19.21 4279 + fsevents: 2.3.3 4280 + tsx: 4.20.6 4281 + 4282 + vitest@3.2.4(@types/debug@4.1.12)(@types/node@20.19.21)(tsx@4.20.6): 4283 + dependencies: 4284 + '@types/chai': 5.2.2 4285 + '@vitest/expect': 3.2.4 4286 + '@vitest/mocker': 3.2.4(vite@7.1.9(@types/node@20.19.21)(tsx@4.20.6)) 4287 + '@vitest/pretty-format': 3.2.4 4288 + '@vitest/runner': 3.2.4 4289 + '@vitest/snapshot': 3.2.4 4290 + '@vitest/spy': 3.2.4 4291 + '@vitest/utils': 3.2.4 4292 + chai: 5.3.3 4293 + debug: 4.4.3(supports-color@8.1.1) 4294 + expect-type: 1.2.2 4295 + magic-string: 0.30.19 4296 + pathe: 2.0.3 4297 + picomatch: 4.0.3 4298 + std-env: 3.9.0 4299 + tinybench: 2.9.0 4300 + tinyexec: 0.3.2 4301 + tinyglobby: 0.2.15 4302 + tinypool: 1.1.1 4303 + tinyrainbow: 2.0.0 4304 + vite: 7.1.9(@types/node@20.19.21)(tsx@4.20.6) 4305 + vite-node: 3.2.4(@types/node@20.19.21)(tsx@4.20.6) 4306 + why-is-node-running: 2.3.0 4307 + optionalDependencies: 4308 + '@types/debug': 4.1.12 4309 + '@types/node': 20.19.21 4310 + transitivePeerDependencies: 4311 + - jiti 4312 + - less 4313 + - lightningcss 4314 + - msw 4315 + - sass 4316 + - sass-embedded 4317 + - stylus 4318 + - sugarss 4319 + - supports-color 4320 + - terser 4321 + - tsx 4322 + - yaml 4323 + 3341 4324 which-typed-array@1.1.19: 3342 4325 dependencies: 3343 4326 available-typed-arrays: 1.0.7 ··· 3348 4331 gopd: 1.2.0 3349 4332 has-tostringtag: 1.0.2 3350 4333 4334 + which@2.0.2: 4335 + dependencies: 4336 + isexe: 2.0.0 4337 + 4338 + why-is-node-running@2.3.0: 4339 + dependencies: 4340 + siginfo: 2.0.0 4341 + stackback: 0.0.2 4342 + 3351 4343 widest-line@3.1.0: 3352 4344 dependencies: 3353 4345 string-width: 4.2.3 ··· 3359 4351 ansi-styles: 4.3.0 3360 4352 string-width: 4.2.3 3361 4353 strip-ansi: 6.0.1 4354 + 4355 + wrap-ansi@8.1.0: 4356 + dependencies: 4357 + ansi-styles: 6.2.3 4358 + string-width: 5.1.2 4359 + strip-ansi: 7.1.2 3362 4360 3363 4361 wrappy@1.0.2: {} 3364 4362
+2 -2
src/lib/notary.ts
··· 77 77 await transaction.wait(); 78 78 79 79 // Return the transaction hash as schema UID placeholder 80 - return transaction.tx?.hash; 80 + return transaction.receipt.hash; 81 81 } 82 82 83 83 /** ··· 201 201 contentHash, 202 202 pds, 203 203 lexicon: collection, 204 - transactionHash: transaction.tx?.hash, 204 + transactionHash: transaction.receipt.hash, 205 205 explorerURL: getExplorerURL(newAttestationUID, this.network), 206 206 }; 207 207 }
+229
tests/integration/notary.test.ts
··· 1 + import { describe, it, expect, vi, beforeEach } from 'vitest'; 2 + import { ATProtocolNotary } from '../../src/lib/notary'; 3 + 4 + // Mock external dependencies 5 + vi.mock('@atproto/api', () => ({ 6 + AtpAgent: vi.fn().mockImplementation(() => ({ 7 + com: { 8 + atproto: { 9 + repo: { 10 + getRecord: vi.fn().mockResolvedValue({ 11 + data: { 12 + value: { text: 'Test post', createdAt: '2024-01-01' }, 13 + cid: 'bafyreiabc123', 14 + }, 15 + }), 16 + }, 17 + }, 18 + }, 19 + })), 20 + })); 21 + 22 + vi.mock('@ethereum-attestation-service/eas-sdk', () => { 23 + const mockEAS = { 24 + connect: vi.fn(), 25 + attest: vi.fn().mockResolvedValue({ 26 + wait: vi.fn().mockResolvedValue('0xattestationuid123'), 27 + receipt: { 28 + hash: '0xtxhash123', 29 + transactionHash: '0xtxhash123', 30 + }, 31 + }), 32 + getAttestation: vi.fn().mockResolvedValue({ 33 + uid: '0xattestationuid123', 34 + attester: '0xattester', 35 + revocationTime: 0n, 36 + data: '0xencodeddata', 37 + }), 38 + }; 39 + 40 + const mockSchemaRegistry = { 41 + connect: vi.fn(), 42 + register: vi.fn().mockResolvedValue({ 43 + wait: vi.fn().mockResolvedValue({ 44 + transactionHash: '0xschemahash', 45 + hash: '0xschemahash', 46 + }), 47 + receipt: { 48 + hash: '0xschemahash', 49 + transactionHash: '0xschemahash', 50 + }, 51 + }), 52 + }; 53 + 54 + return { 55 + default: { 56 + EAS: vi.fn(() => mockEAS), 57 + SchemaRegistry: vi.fn(() => mockSchemaRegistry), 58 + SchemaEncoder: vi.fn().mockImplementation(() => ({ 59 + encodeData: vi.fn().mockReturnValue('0xencodeddata'), 60 + decodeData: vi.fn().mockReturnValue([ 61 + { name: 'recordURI', value: { value: 'at://did:plc:test/app.bsky.feed.post/123' } }, 62 + { name: 'cid', value: { value: 'bafyreiabc123' } }, 63 + { name: 'contentHash', value: { value: '0xhash123' } }, 64 + { name: 'pds', value: { value: 'https://pds.example.com' } }, 65 + { name: 'timestamp', value: { value: 1234567890 } }, 66 + ]), 67 + })), 68 + NO_EXPIRATION: 0n, 69 + }, 70 + }; 71 + }); 72 + 73 + global.fetch = vi.fn(); 74 + 75 + describe('ATProtocolNotary', () => { 76 + beforeEach(() => { 77 + vi.clearAllMocks(); 78 + 79 + // Mock DID resolution 80 + (global.fetch as any).mockResolvedValue({ 81 + ok: true, 82 + json: async () => ({ 83 + service: [ 84 + { 85 + id: '#atproto_pds', 86 + type: 'AtprotoPersonalDataServer', 87 + serviceEndpoint: 'https://pds.example.com', 88 + }, 89 + ], 90 + }), 91 + }); 92 + }); 93 + 94 + describe('constructor', () => { 95 + it('should create instance with valid config', () => { 96 + const notary = new ATProtocolNotary({ 97 + privateKey: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', 98 + schemaUID: '0xschemauid', 99 + }, 'sepolia'); 100 + 101 + expect(notary).toBeInstanceOf(ATProtocolNotary); 102 + expect(notary.getAddress()).toBeTruthy(); 103 + }); 104 + 105 + it('should throw error without private key', () => { 106 + expect(() => { 107 + new ATProtocolNotary({ 108 + privateKey: '', 109 + }); 110 + }).toThrow('Private key is required'); 111 + }); 112 + }); 113 + 114 + describe('resolveDIDtoPDS', () => { 115 + it('should resolve did:plc to PDS', async () => { 116 + const notary = new ATProtocolNotary({ 117 + privateKey: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', 118 + schemaUID: '0xschemauid', 119 + }); 120 + 121 + const pds = await notary.resolveDIDtoPDS('did:plc:test123'); 122 + 123 + expect(pds).toBe('https://pds.example.com'); 124 + expect(global.fetch).toHaveBeenCalledWith('https://plc.directory/did:plc:test123'); 125 + }); 126 + 127 + it('should throw error for unsupported DID method', async () => { 128 + const notary = new ATProtocolNotary({ 129 + privateKey: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', 130 + schemaUID: '0xschemauid', 131 + }); 132 + 133 + await expect(notary.resolveDIDtoPDS('did:unsupported:test')).rejects.toThrow( 134 + 'Unsupported DID method' 135 + ); 136 + }); 137 + 138 + it('should throw error when PDS not found', async () => { 139 + (global.fetch as any).mockResolvedValueOnce({ 140 + ok: true, 141 + json: async () => ({ service: [] }), 142 + }); 143 + 144 + const notary = new ATProtocolNotary({ 145 + privateKey: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', 146 + schemaUID: '0xschemauid', 147 + }); 148 + 149 + await expect(notary.resolveDIDtoPDS('did:plc:test')).rejects.toThrow( 150 + 'No PDS endpoint found' 151 + ); 152 + }); 153 + }); 154 + 155 + describe('fetchRecord', () => { 156 + it('should fetch record from PDS', async () => { 157 + const notary = new ATProtocolNotary({ 158 + privateKey: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', 159 + schemaUID: '0xschemauid', 160 + }); 161 + 162 + const result = await notary.fetchRecord('at://did:plc:test/app.bsky.feed.post/123'); 163 + 164 + expect(result.record.value.text).toBe('Test post'); 165 + expect(result.record.cid).toBe('bafyreiabc123'); 166 + expect(result.pds).toBe('https://pds.example.com'); 167 + }); 168 + }); 169 + 170 + describe('notarizeRecord', () => { 171 + it('should create attestation successfully', async () => { 172 + const notary = new ATProtocolNotary({ 173 + privateKey: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', 174 + schemaUID: '0xschemauid123', 175 + }); 176 + 177 + const result = await notary.notarizeRecord('at://did:plc:test/app.bsky.feed.post/123'); 178 + 179 + expect(result.attestationUID).toBe('0xattestationuid123'); 180 + expect(result.recordURI).toBe('at://did:plc:test/app.bsky.feed.post/123'); 181 + expect(result.cid).toBe('bafyreiabc123'); 182 + expect(result.pds).toBe('https://pds.example.com'); 183 + expect(result.transactionHash).toBeTruthy(); 184 + }); 185 + 186 + it('should throw error without schema UID', async () => { 187 + const notary = new ATProtocolNotary({ 188 + privateKey: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', 189 + }); 190 + 191 + await expect( 192 + notary.notarizeRecord('at://did:plc:test/app.bsky.feed.post/123') 193 + ).rejects.toThrow('Schema UID not set'); 194 + }); 195 + }); 196 + 197 + describe('verifyAttestation', () => { 198 + it('should verify attestation successfully', async () => { 199 + const notary = new ATProtocolNotary({ 200 + privateKey: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', 201 + schemaUID: '0xschemauid', 202 + }); 203 + 204 + const result = await notary.verifyAttestation('0xattestationuid123'); 205 + 206 + expect(result.uid).toBe('0xattestationuid123'); 207 + expect(result.recordURI).toBe('at://did:plc:test/app.bsky.feed.post/123'); 208 + expect(result.cid).toBe('bafyreiabc123'); 209 + expect(result.pds).toBe('https://pds.example.com'); 210 + expect(result.attester).toBe('0xattester'); 211 + expect(result.revoked).toBe(false); 212 + }); 213 + }); 214 + 215 + describe('compareWithCurrent', () => { 216 + it('should detect unchanged content', async () => { 217 + const notary = new ATProtocolNotary({ 218 + privateKey: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', 219 + schemaUID: '0xschemauid', 220 + }); 221 + 222 + const attestation = await notary.verifyAttestation('0xattestationuid123'); 223 + const comparison = await notary.compareWithCurrent(attestation); 224 + 225 + expect(comparison.exists).toBe(true); 226 + expect(comparison.currentHash).toBeTruthy(); 227 + }); 228 + }); 229 + });
+81
tests/unit/utils.test.ts
··· 1 + import { describe, it, expect } from 'vitest'; 2 + import { parseRecordURI, hashContent, getExplorerURL } from '../../src/lib/utils'; 3 + 4 + describe('parseRecordURI', () => { 5 + it('should parse valid AT Protocol URI', () => { 6 + const uri = 'at://did:plc:abc123/app.bsky.feed.post/xyz789'; 7 + const result = parseRecordURI(uri); 8 + 9 + expect(result.did).toBe('did:plc:abc123'); 10 + expect(result.collection).toBe('app.bsky.feed.post'); 11 + expect(result.rkey).toBe('xyz789'); 12 + }); 13 + 14 + it('should handle complex DIDs', () => { 15 + const uri = 'at://did:plc:z72i7hdynmk6r22z27h6tvur/com.whtwnd.blog.entry/abc123'; 16 + const result = parseRecordURI(uri); 17 + 18 + expect(result.did).toBe('did:plc:z72i7hdynmk6r22z27h6tvur'); 19 + expect(result.collection).toBe('com.whtwnd.blog.entry'); 20 + expect(result.rkey).toBe('abc123'); 21 + }); 22 + 23 + it('should throw on invalid URI format', () => { 24 + expect(() => parseRecordURI('invalid-uri')).toThrow('Invalid AT Protocol URI format'); 25 + expect(() => parseRecordURI('https://example.com')).toThrow('Invalid AT Protocol URI format'); 26 + expect(() => parseRecordURI('at://invalid')).toThrow('Invalid AT Protocol URI format'); 27 + }); 28 + }); 29 + 30 + describe('hashContent', () => { 31 + it('should generate consistent SHA-256 hash', () => { 32 + const content = { text: 'Hello World', createdAt: '2024-01-01' }; 33 + const hash1 = hashContent(content); 34 + const hash2 = hashContent(content); 35 + 36 + expect(hash1).toBe(hash2); 37 + expect(hash1).toMatch(/^0x[a-f0-9]{64}$/); 38 + }); 39 + 40 + it('should generate different hashes for different content', () => { 41 + const content1 = { text: 'Hello' }; 42 + const content2 = { text: 'World' }; 43 + 44 + expect(hashContent(content1)).not.toBe(hashContent(content2)); 45 + }); 46 + 47 + it('should be order-sensitive', () => { 48 + const content1 = { a: 1, b: 2 }; 49 + const content2 = { b: 2, a: 1 }; 50 + 51 + // JSON.stringify is order-sensitive 52 + const hash1 = hashContent(content1); 53 + const hash2 = hashContent(content2); 54 + 55 + expect(hash1).toBeTruthy(); 56 + expect(hash2).toBeTruthy(); 57 + }); 58 + }); 59 + 60 + describe('getExplorerURL', () => { 61 + it('should generate correct explorer URL for sepolia', () => { 62 + const uid = '0xabc123'; 63 + const url = getExplorerURL(uid, 'sepolia'); 64 + 65 + expect(url).toBe('https://sepolia.easscan.org/attestation/view/0xabc123'); 66 + }); 67 + 68 + it('should generate correct explorer URL for sepolia', () => { 69 + const uid = '0xabc123'; 70 + const url = getExplorerURL(uid, 'sepolia'); 71 + 72 + expect(url).toBe('https://sepolia.easscan.org/attestation/view/0xabc123'); 73 + }); 74 + 75 + it('should default to sepolia for unknown network', () => { 76 + const uid = '0xabc123'; 77 + const url = getExplorerURL(uid, 'unknown-network'); 78 + 79 + expect(url).toBe('https://sepolia.easscan.org/attestation/view/0xabc123'); 80 + }); 81 + });
+13
vitest.config.ts
··· 1 + import { defineConfig } from 'vitest/config'; 2 + 3 + export default defineConfig({ 4 + test: { 5 + globals: true, 6 + environment: 'node', 7 + coverage: { 8 + provider: 'v8', 9 + reporter: ['text', 'json', 'html'], 10 + exclude: ['dist/**', 'tests/**', '*.config.ts'], 11 + }, 12 + }, 13 + });