+8
-2
package.json
+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
+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
+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
+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
+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
+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
+
});