atproto libraries implementation in ocaml
at main 122 kB view raw
1{ 2 "title": "AT Protocol Compliance Report", 3 "version": "1.0.0", 4 "generated_at": "2026-01-01T22:04:38Z", 5 "repository": "https://github.com/gdiazlo/atproto", 6 "total_tests": 494, 7 "total_passed": 494, 8 "total_failed": 0, 9 "pass_rate": 100, 10 "suites": [ 11 { 12 "name": "Syntax Validation", 13 "spec_url": "https://atproto.com/specs/lexicon#string-formats", 14 "total": 448, 15 "passed": 448, 16 "failed": 0, 17 "pass_rate": 100, 18 "categories": [ 19 { 20 "name": "Handle", 21 "description": "DNS-like user identifiers", 22 "fixture_file": "handle_syntax_valid.txt, handle_syntax_invalid.txt", 23 "total": 119, 24 "passed": 119, 25 "failed": 0, 26 "pass_rate": 100, 27 "results": [ 28 { 29 "input": "A.ISI.EDU", 30 "expected": "valid", 31 "actual": "valid", 32 "passed": true, 33 "error": null 34 }, 35 { 36 "input": "XX.LCS.MIT.EDU", 37 "expected": "valid", 38 "actual": "valid", 39 "passed": true, 40 "error": null 41 }, 42 { 43 "input": "SRI-NIC.ARPA", 44 "expected": "valid", 45 "actual": "valid", 46 "passed": true, 47 "error": null 48 }, 49 { 50 "input": "john.test", 51 "expected": "valid", 52 "actual": "valid", 53 "passed": true, 54 "error": null 55 }, 56 { 57 "input": "jan.test", 58 "expected": "valid", 59 "actual": "valid", 60 "passed": true, 61 "error": null 62 }, 63 { 64 "input": "a234567890123456789.test", 65 "expected": "valid", 66 "actual": "valid", 67 "passed": true, 68 "error": null 69 }, 70 { 71 "input": "john2.test", 72 "expected": "valid", 73 "actual": "valid", 74 "passed": true, 75 "error": null 76 }, 77 { 78 "input": "john-john.test", 79 "expected": "valid", 80 "actual": "valid", 81 "passed": true, 82 "error": null 83 }, 84 { 85 "input": "john.bsky.app", 86 "expected": "valid", 87 "actual": "valid", 88 "passed": true, 89 "error": null 90 }, 91 { 92 "input": "jo.hn", 93 "expected": "valid", 94 "actual": "valid", 95 "passed": true, 96 "error": null 97 }, 98 { 99 "input": "a.co", 100 "expected": "valid", 101 "actual": "valid", 102 "passed": true, 103 "error": null 104 }, 105 { 106 "input": "a.org", 107 "expected": "valid", 108 "actual": "valid", 109 "passed": true, 110 "error": null 111 }, 112 { 113 "input": "joh.n", 114 "expected": "valid", 115 "actual": "valid", 116 "passed": true, 117 "error": null 118 }, 119 { 120 "input": "j0.h0", 121 "expected": "valid", 122 "actual": "valid", 123 "passed": true, 124 "error": null 125 }, 126 { 127 "input": "jaymome-johnber123456.test", 128 "expected": "valid", 129 "actual": "valid", 130 "passed": true, 131 "error": null 132 }, 133 { 134 "input": "jay.mome-johnber123456.test", 135 "expected": "valid", 136 "actual": "valid", 137 "passed": true, 138 "error": null 139 }, 140 { 141 "input": "john.test.bsky.app", 142 "expected": "valid", 143 "actual": "valid", 144 "passed": true, 145 "error": null 146 }, 147 { 148 "input": "shoooort.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.test", 149 "expected": "valid", 150 "actual": "valid", 151 "passed": true, 152 "error": null 153 }, 154 { 155 "input": "short.ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.test", 156 "expected": "valid", 157 "actual": "valid", 158 "passed": true, 159 "error": null 160 }, 161 { 162 "input": "john.t", 163 "expected": "valid", 164 "actual": "valid", 165 "passed": true, 166 "error": null 167 }, 168 { 169 "input": "laptop.local", 170 "expected": "valid", 171 "actual": "valid", 172 "passed": true, 173 "error": null 174 }, 175 { 176 "input": "laptop.arpa", 177 "expected": "valid", 178 "actual": "valid", 179 "passed": true, 180 "error": null 181 }, 182 { 183 "input": "xn--ls8h.test", 184 "expected": "valid", 185 "actual": "valid", 186 "passed": true, 187 "error": null 188 }, 189 { 190 "input": "xn--bcher-kva.tld", 191 "expected": "valid", 192 "actual": "valid", 193 "passed": true, 194 "error": null 195 }, 196 { 197 "input": "xn--3jk.com", 198 "expected": "valid", 199 "actual": "valid", 200 "passed": true, 201 "error": null 202 }, 203 { 204 "input": "xn--w3d.com", 205 "expected": "valid", 206 "actual": "valid", 207 "passed": true, 208 "error": null 209 }, 210 { 211 "input": "xn--vqb.com", 212 "expected": "valid", 213 "actual": "valid", 214 "passed": true, 215 "error": null 216 }, 217 { 218 "input": "xn--ppd.com", 219 "expected": "valid", 220 "actual": "valid", 221 "passed": true, 222 "error": null 223 }, 224 { 225 "input": "xn--cs9a.com", 226 "expected": "valid", 227 "actual": "valid", 228 "passed": true, 229 "error": null 230 }, 231 { 232 "input": "xn--8r9a.com", 233 "expected": "valid", 234 "actual": "valid", 235 "passed": true, 236 "error": null 237 }, 238 { 239 "input": "xn--cfd.com", 240 "expected": "valid", 241 "actual": "valid", 242 "passed": true, 243 "error": null 244 }, 245 { 246 "input": "xn--5jk.com", 247 "expected": "valid", 248 "actual": "valid", 249 "passed": true, 250 "error": null 251 }, 252 { 253 "input": "xn--2lb.com", 254 "expected": "valid", 255 "actual": "valid", 256 "passed": true, 257 "error": null 258 }, 259 { 260 "input": "expyuzz4wqqyqhjn.onion", 261 "expected": "valid", 262 "actual": "valid", 263 "passed": true, 264 "error": null 265 }, 266 { 267 "input": "friend.expyuzz4wqqyqhjn.onion", 268 "expected": "valid", 269 "actual": "valid", 270 "passed": true, 271 "error": null 272 }, 273 { 274 "input": "g2zyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion", 275 "expected": "valid", 276 "actual": "valid", 277 "passed": true, 278 "error": null 279 }, 280 { 281 "input": "friend.g2zyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion", 282 "expected": "valid", 283 "actual": "valid", 284 "passed": true, 285 "error": null 286 }, 287 { 288 "input": "friend.g2zyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion", 289 "expected": "valid", 290 "actual": "valid", 291 "passed": true, 292 "error": null 293 }, 294 { 295 "input": "2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion", 296 "expected": "valid", 297 "actual": "valid", 298 "passed": true, 299 "error": null 300 }, 301 { 302 "input": "friend.2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion", 303 "expected": "valid", 304 "actual": "valid", 305 "passed": true, 306 "error": null 307 }, 308 { 309 "input": "12345.test", 310 "expected": "valid", 311 "actual": "valid", 312 "passed": true, 313 "error": null 314 }, 315 { 316 "input": "8.cn", 317 "expected": "valid", 318 "actual": "valid", 319 "passed": true, 320 "error": null 321 }, 322 { 323 "input": "4chan.org", 324 "expected": "valid", 325 "actual": "valid", 326 "passed": true, 327 "error": null 328 }, 329 { 330 "input": "4chan.o-g", 331 "expected": "valid", 332 "actual": "valid", 333 "passed": true, 334 "error": null 335 }, 336 { 337 "input": "blah.4chan.org", 338 "expected": "valid", 339 "actual": "valid", 340 "passed": true, 341 "error": null 342 }, 343 { 344 "input": "thing.a01", 345 "expected": "valid", 346 "actual": "valid", 347 "passed": true, 348 "error": null 349 }, 350 { 351 "input": "120.0.0.1.com", 352 "expected": "valid", 353 "actual": "valid", 354 "passed": true, 355 "error": null 356 }, 357 { 358 "input": "0john.test", 359 "expected": "valid", 360 "actual": "valid", 361 "passed": true, 362 "error": null 363 }, 364 { 365 "input": "9sta--ck.com", 366 "expected": "valid", 367 "actual": "valid", 368 "passed": true, 369 "error": null 370 }, 371 { 372 "input": "99stack.com", 373 "expected": "valid", 374 "actual": "valid", 375 "passed": true, 376 "error": null 377 }, 378 { 379 "input": "0ohn.test", 380 "expected": "valid", 381 "actual": "valid", 382 "passed": true, 383 "error": null 384 }, 385 { 386 "input": "john.t--t", 387 "expected": "valid", 388 "actual": "valid", 389 "passed": true, 390 "error": null 391 }, 392 { 393 "input": "thing.0aa.thing", 394 "expected": "valid", 395 "actual": "valid", 396 "passed": true, 397 "error": null 398 }, 399 { 400 "input": "stack.com", 401 "expected": "valid", 402 "actual": "valid", 403 "passed": true, 404 "error": null 405 }, 406 { 407 "input": "sta-ck.com", 408 "expected": "valid", 409 "actual": "valid", 410 "passed": true, 411 "error": null 412 }, 413 { 414 "input": "sta---ck.com", 415 "expected": "valid", 416 "actual": "valid", 417 "passed": true, 418 "error": null 419 }, 420 { 421 "input": "sta--ck9.com", 422 "expected": "valid", 423 "actual": "valid", 424 "passed": true, 425 "error": null 426 }, 427 { 428 "input": "stack99.com", 429 "expected": "valid", 430 "actual": "valid", 431 "passed": true, 432 "error": null 433 }, 434 { 435 "input": "sta99ck.com", 436 "expected": "valid", 437 "actual": "valid", 438 "passed": true, 439 "error": null 440 }, 441 { 442 "input": "google.com.uk", 443 "expected": "valid", 444 "actual": "valid", 445 "passed": true, 446 "error": null 447 }, 448 { 449 "input": "google.co.in", 450 "expected": "valid", 451 "actual": "valid", 452 "passed": true, 453 "error": null 454 }, 455 { 456 "input": "google.com", 457 "expected": "valid", 458 "actual": "valid", 459 "passed": true, 460 "error": null 461 }, 462 { 463 "input": "maselkowski.pl", 464 "expected": "valid", 465 "actual": "valid", 466 "passed": true, 467 "error": null 468 }, 469 { 470 "input": "m.maselkowski.pl", 471 "expected": "valid", 472 "actual": "valid", 473 "passed": true, 474 "error": null 475 }, 476 { 477 "input": "xn--masekowski-d0b.pl", 478 "expected": "valid", 479 "actual": "valid", 480 "passed": true, 481 "error": null 482 }, 483 { 484 "input": "xn--fiqa61au8b7zsevnm8ak20mc4a87e.xn--fiqs8s", 485 "expected": "valid", 486 "actual": "valid", 487 "passed": true, 488 "error": null 489 }, 490 { 491 "input": "xn--stackoverflow.com", 492 "expected": "valid", 493 "actual": "valid", 494 "passed": true, 495 "error": null 496 }, 497 { 498 "input": "stackoverflow.xn--com", 499 "expected": "valid", 500 "actual": "valid", 501 "passed": true, 502 "error": null 503 }, 504 { 505 "input": "stackoverflow.co.uk", 506 "expected": "valid", 507 "actual": "valid", 508 "passed": true, 509 "error": null 510 }, 511 { 512 "input": "xn--masekowski-d0b.pl", 513 "expected": "valid", 514 "actual": "valid", 515 "passed": true, 516 "error": null 517 }, 518 { 519 "input": "xn--fiqa61au8b7zsevnm8ak20mc4a87e.xn--fiqs8s", 520 "expected": "valid", 521 "actual": "valid", 522 "passed": true, 523 "error": null 524 }, 525 { 526 "input": "did:thing.test", 527 "expected": "invalid", 528 "actual": "invalid", 529 "passed": true, 530 "error": null 531 }, 532 { 533 "input": "did:thing", 534 "expected": "invalid", 535 "actual": "invalid", 536 "passed": true, 537 "error": null 538 }, 539 { 540 "input": "john-.test", 541 "expected": "invalid", 542 "actual": "invalid", 543 "passed": true, 544 "error": null 545 }, 546 { 547 "input": "john.0", 548 "expected": "invalid", 549 "actual": "invalid", 550 "passed": true, 551 "error": null 552 }, 553 { 554 "input": "john.-", 555 "expected": "invalid", 556 "actual": "invalid", 557 "passed": true, 558 "error": null 559 }, 560 { 561 "input": "xn--bcher-.tld", 562 "expected": "invalid", 563 "actual": "invalid", 564 "passed": true, 565 "error": null 566 }, 567 { 568 "input": "john..test", 569 "expected": "invalid", 570 "actual": "invalid", 571 "passed": true, 572 "error": null 573 }, 574 { 575 "input": "jo_hn.test", 576 "expected": "invalid", 577 "actual": "invalid", 578 "passed": true, 579 "error": null 580 }, 581 { 582 "input": "-john.test", 583 "expected": "invalid", 584 "actual": "invalid", 585 "passed": true, 586 "error": null 587 }, 588 { 589 "input": ".john.test", 590 "expected": "invalid", 591 "actual": "invalid", 592 "passed": true, 593 "error": null 594 }, 595 { 596 "input": "jo!hn.test", 597 "expected": "invalid", 598 "actual": "invalid", 599 "passed": true, 600 "error": null 601 }, 602 { 603 "input": "jo%hn.test", 604 "expected": "invalid", 605 "actual": "invalid", 606 "passed": true, 607 "error": null 608 }, 609 { 610 "input": "jo&hn.test", 611 "expected": "invalid", 612 "actual": "invalid", 613 "passed": true, 614 "error": null 615 }, 616 { 617 "input": "jo@hn.test", 618 "expected": "invalid", 619 "actual": "invalid", 620 "passed": true, 621 "error": null 622 }, 623 { 624 "input": "jo*hn.test", 625 "expected": "invalid", 626 "actual": "invalid", 627 "passed": true, 628 "error": null 629 }, 630 { 631 "input": "jo|hn.test", 632 "expected": "invalid", 633 "actual": "invalid", 634 "passed": true, 635 "error": null 636 }, 637 { 638 "input": "jo:hn.test", 639 "expected": "invalid", 640 "actual": "invalid", 641 "passed": true, 642 "error": null 643 }, 644 { 645 "input": "jo/hn.test", 646 "expected": "invalid", 647 "actual": "invalid", 648 "passed": true, 649 "error": null 650 }, 651 { 652 "input": "john💩.test", 653 "expected": "invalid", 654 "actual": "invalid", 655 "passed": true, 656 "error": null 657 }, 658 { 659 "input": "bücher.test", 660 "expected": "invalid", 661 "actual": "invalid", 662 "passed": true, 663 "error": null 664 }, 665 { 666 "input": "john .test", 667 "expected": "invalid", 668 "actual": "invalid", 669 "passed": true, 670 "error": null 671 }, 672 { 673 "input": "john.test.", 674 "expected": "invalid", 675 "actual": "invalid", 676 "passed": true, 677 "error": null 678 }, 679 { 680 "input": "john", 681 "expected": "invalid", 682 "actual": "invalid", 683 "passed": true, 684 "error": null 685 }, 686 { 687 "input": "john.", 688 "expected": "invalid", 689 "actual": "invalid", 690 "passed": true, 691 "error": null 692 }, 693 { 694 "input": ".john", 695 "expected": "invalid", 696 "actual": "invalid", 697 "passed": true, 698 "error": null 699 }, 700 { 701 "input": "john.test.", 702 "expected": "invalid", 703 "actual": "invalid", 704 "passed": true, 705 "error": null 706 }, 707 { 708 "input": ".john.test", 709 "expected": "invalid", 710 "actual": "invalid", 711 "passed": true, 712 "error": null 713 }, 714 { 715 "input": " john.test", 716 "expected": "invalid", 717 "actual": "invalid", 718 "passed": true, 719 "error": null 720 }, 721 { 722 "input": "john.test ", 723 "expected": "invalid", 724 "actual": "invalid", 725 "passed": true, 726 "error": null 727 }, 728 { 729 "input": "joh-.test", 730 "expected": "invalid", 731 "actual": "invalid", 732 "passed": true, 733 "error": null 734 }, 735 { 736 "input": "john.-est", 737 "expected": "invalid", 738 "actual": "invalid", 739 "passed": true, 740 "error": null 741 }, 742 { 743 "input": "john.tes-", 744 "expected": "invalid", 745 "actual": "invalid", 746 "passed": true, 747 "error": null 748 }, 749 { 750 "input": "shoooort.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.test", 751 "expected": "invalid", 752 "actual": "invalid", 753 "passed": true, 754 "error": null 755 }, 756 { 757 "input": "short.oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.test", 758 "expected": "invalid", 759 "actual": "invalid", 760 "passed": true, 761 "error": null 762 }, 763 { 764 "input": "org", 765 "expected": "invalid", 766 "actual": "invalid", 767 "passed": true, 768 "error": null 769 }, 770 { 771 "input": "ai", 772 "expected": "invalid", 773 "actual": "invalid", 774 "passed": true, 775 "error": null 776 }, 777 { 778 "input": "gg", 779 "expected": "invalid", 780 "actual": "invalid", 781 "passed": true, 782 "error": null 783 }, 784 { 785 "input": "io", 786 "expected": "invalid", 787 "actual": "invalid", 788 "passed": true, 789 "error": null 790 }, 791 { 792 "input": "cn.8", 793 "expected": "invalid", 794 "actual": "invalid", 795 "passed": true, 796 "error": null 797 }, 798 { 799 "input": "thing.0aa", 800 "expected": "invalid", 801 "actual": "invalid", 802 "passed": true, 803 "error": null 804 }, 805 { 806 "input": "thing.0aa", 807 "expected": "invalid", 808 "actual": "invalid", 809 "passed": true, 810 "error": null 811 }, 812 { 813 "input": "127.0.0.1", 814 "expected": "invalid", 815 "actual": "invalid", 816 "passed": true, 817 "error": null 818 }, 819 { 820 "input": "192.168.0.142", 821 "expected": "invalid", 822 "actual": "invalid", 823 "passed": true, 824 "error": null 825 }, 826 { 827 "input": "fe80::7325:8a97:c100:94b", 828 "expected": "invalid", 829 "actual": "invalid", 830 "passed": true, 831 "error": null 832 }, 833 { 834 "input": "2600:3c03::f03c:9100:feb0:af1f", 835 "expected": "invalid", 836 "actual": "invalid", 837 "passed": true, 838 "error": null 839 }, 840 { 841 "input": "-notvalid.at-all", 842 "expected": "invalid", 843 "actual": "invalid", 844 "passed": true, 845 "error": null 846 }, 847 { 848 "input": "-thing.com", 849 "expected": "invalid", 850 "actual": "invalid", 851 "passed": true, 852 "error": null 853 }, 854 { 855 "input": "www.masełkowski.pl.com", 856 "expected": "invalid", 857 "actual": "invalid", 858 "passed": true, 859 "error": null 860 } 861 ] 862 }, 863 { 864 "name": "DID", 865 "description": "Decentralized Identifiers", 866 "fixture_file": "did_syntax_valid.txt, did_syntax_invalid.txt", 867 "total": 42, 868 "passed": 42, 869 "failed": 0, 870 "pass_rate": 100, 871 "results": [ 872 { 873 "input": "did:method:val", 874 "expected": "valid", 875 "actual": "valid", 876 "passed": true, 877 "error": null 878 }, 879 { 880 "input": "did:method:VAL", 881 "expected": "valid", 882 "actual": "valid", 883 "passed": true, 884 "error": null 885 }, 886 { 887 "input": "did:method:val123", 888 "expected": "valid", 889 "actual": "valid", 890 "passed": true, 891 "error": null 892 }, 893 { 894 "input": "did:method:123", 895 "expected": "valid", 896 "actual": "valid", 897 "passed": true, 898 "error": null 899 }, 900 { 901 "input": "did:method:val-two", 902 "expected": "valid", 903 "actual": "valid", 904 "passed": true, 905 "error": null 906 }, 907 { 908 "input": "did:method:val_two", 909 "expected": "valid", 910 "actual": "valid", 911 "passed": true, 912 "error": null 913 }, 914 { 915 "input": "did:method:val.two", 916 "expected": "valid", 917 "actual": "valid", 918 "passed": true, 919 "error": null 920 }, 921 { 922 "input": "did:method:val:two", 923 "expected": "valid", 924 "actual": "valid", 925 "passed": true, 926 "error": null 927 }, 928 { 929 "input": "did:method:val%BB", 930 "expected": "valid", 931 "actual": "valid", 932 "passed": true, 933 "error": null 934 }, 935 { 936 "input": "did:method:vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", 937 "expected": "valid", 938 "actual": "valid", 939 "passed": true, 940 "error": null 941 }, 942 { 943 "input": "did:m:v", 944 "expected": "valid", 945 "actual": "valid", 946 "passed": true, 947 "error": null 948 }, 949 { 950 "input": "did:method::::val", 951 "expected": "valid", 952 "actual": "valid", 953 "passed": true, 954 "error": null 955 }, 956 { 957 "input": "did:method:-", 958 "expected": "valid", 959 "actual": "valid", 960 "passed": true, 961 "error": null 962 }, 963 { 964 "input": "did:method:-:_:.:%ab", 965 "expected": "valid", 966 "actual": "valid", 967 "passed": true, 968 "error": null 969 }, 970 { 971 "input": "did:method:.", 972 "expected": "valid", 973 "actual": "valid", 974 "passed": true, 975 "error": null 976 }, 977 { 978 "input": "did:method:_", 979 "expected": "valid", 980 "actual": "valid", 981 "passed": true, 982 "error": null 983 }, 984 { 985 "input": "did:method::.", 986 "expected": "valid", 987 "actual": "valid", 988 "passed": true, 989 "error": null 990 }, 991 { 992 "input": "did:onion:2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid", 993 "expected": "valid", 994 "actual": "valid", 995 "passed": true, 996 "error": null 997 }, 998 { 999 "input": "did:example:123456789abcdefghi", 1000 "expected": "valid", 1001 "actual": "valid", 1002 "passed": true, 1003 "error": null 1004 }, 1005 { 1006 "input": "did:plc:7iza6de2dwap2sbkpav7c6c6", 1007 "expected": "valid", 1008 "actual": "valid", 1009 "passed": true, 1010 "error": null 1011 }, 1012 { 1013 "input": "did:web:example.com", 1014 "expected": "valid", 1015 "actual": "valid", 1016 "passed": true, 1017 "error": null 1018 }, 1019 { 1020 "input": "did:web:localhost%3A1234", 1021 "expected": "valid", 1022 "actual": "valid", 1023 "passed": true, 1024 "error": null 1025 }, 1026 { 1027 "input": "did:key:zQ3shZc2QzApp2oymGvQbzP8eKheVshBHbU4ZYjeXqwSKEn6N", 1028 "expected": "valid", 1029 "actual": "valid", 1030 "passed": true, 1031 "error": null 1032 }, 1033 { 1034 "input": "did:ethr:0xb9c5714089478a327f09197987f16f9e5d936e8a", 1035 "expected": "valid", 1036 "actual": "valid", 1037 "passed": true, 1038 "error": null 1039 }, 1040 { 1041 "input": "did", 1042 "expected": "invalid", 1043 "actual": "invalid", 1044 "passed": true, 1045 "error": null 1046 }, 1047 { 1048 "input": "didmethodval", 1049 "expected": "invalid", 1050 "actual": "invalid", 1051 "passed": true, 1052 "error": null 1053 }, 1054 { 1055 "input": "method:did:val", 1056 "expected": "invalid", 1057 "actual": "invalid", 1058 "passed": true, 1059 "error": null 1060 }, 1061 { 1062 "input": "did:method:", 1063 "expected": "invalid", 1064 "actual": "invalid", 1065 "passed": true, 1066 "error": null 1067 }, 1068 { 1069 "input": "didmethod:val", 1070 "expected": "invalid", 1071 "actual": "invalid", 1072 "passed": true, 1073 "error": null 1074 }, 1075 { 1076 "input": "did:methodval)", 1077 "expected": "invalid", 1078 "actual": "invalid", 1079 "passed": true, 1080 "error": null 1081 }, 1082 { 1083 "input": ":did:method:val", 1084 "expected": "invalid", 1085 "actual": "invalid", 1086 "passed": true, 1087 "error": null 1088 }, 1089 { 1090 "input": "did.method.val", 1091 "expected": "invalid", 1092 "actual": "invalid", 1093 "passed": true, 1094 "error": null 1095 }, 1096 { 1097 "input": "did:method:val:", 1098 "expected": "invalid", 1099 "actual": "invalid", 1100 "passed": true, 1101 "error": null 1102 }, 1103 { 1104 "input": "did:method:val%", 1105 "expected": "invalid", 1106 "actual": "invalid", 1107 "passed": true, 1108 "error": null 1109 }, 1110 { 1111 "input": "DID:method:val", 1112 "expected": "invalid", 1113 "actual": "invalid", 1114 "passed": true, 1115 "error": null 1116 }, 1117 { 1118 "input": "did:METHOD:val", 1119 "expected": "invalid", 1120 "actual": "invalid", 1121 "passed": true, 1122 "error": null 1123 }, 1124 { 1125 "input": "did:m123:val", 1126 "expected": "invalid", 1127 "actual": "invalid", 1128 "passed": true, 1129 "error": null 1130 }, 1131 { 1132 "input": "did:method:val/two", 1133 "expected": "invalid", 1134 "actual": "invalid", 1135 "passed": true, 1136 "error": null 1137 }, 1138 { 1139 "input": "did:method:val?two", 1140 "expected": "invalid", 1141 "actual": "invalid", 1142 "passed": true, 1143 "error": null 1144 }, 1145 { 1146 "input": "did:method:val#two", 1147 "expected": "invalid", 1148 "actual": "invalid", 1149 "passed": true, 1150 "error": null 1151 }, 1152 { 1153 "input": "did:method:val%", 1154 "expected": "invalid", 1155 "actual": "invalid", 1156 "passed": true, 1157 "error": null 1158 }, 1159 { 1160 "input": "did:method:vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", 1161 "expected": "invalid", 1162 "actual": "invalid", 1163 "passed": true, 1164 "error": null 1165 } 1166 ] 1167 }, 1168 { 1169 "name": "NSID", 1170 "description": "Namespaced Identifiers", 1171 "fixture_file": "nsid_syntax_valid.txt, nsid_syntax_invalid.txt", 1172 "total": 52, 1173 "passed": 52, 1174 "failed": 0, 1175 "pass_rate": 100, 1176 "results": [ 1177 { 1178 "input": "com.ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.foo", 1179 "expected": "valid", 1180 "actual": "valid", 1181 "passed": true, 1182 "error": null 1183 }, 1184 { 1185 "input": "com.example.ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1186 "expected": "valid", 1187 "actual": "valid", 1188 "passed": true, 1189 "error": null 1190 }, 1191 { 1192 "input": "com.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.foo", 1193 "expected": "valid", 1194 "actual": "valid", 1195 "passed": true, 1196 "error": null 1197 }, 1198 { 1199 "input": "com.example.fooBar", 1200 "expected": "valid", 1201 "actual": "valid", 1202 "passed": true, 1203 "error": null 1204 }, 1205 { 1206 "input": "com.example.fooBarV2", 1207 "expected": "valid", 1208 "actual": "valid", 1209 "passed": true, 1210 "error": null 1211 }, 1212 { 1213 "input": "net.users.bob.ping", 1214 "expected": "valid", 1215 "actual": "valid", 1216 "passed": true, 1217 "error": null 1218 }, 1219 { 1220 "input": "a.b.c", 1221 "expected": "valid", 1222 "actual": "valid", 1223 "passed": true, 1224 "error": null 1225 }, 1226 { 1227 "input": "m.xn--masekowski-d0b.pl", 1228 "expected": "valid", 1229 "actual": "valid", 1230 "passed": true, 1231 "error": null 1232 }, 1233 { 1234 "input": "one.two.three", 1235 "expected": "valid", 1236 "actual": "valid", 1237 "passed": true, 1238 "error": null 1239 }, 1240 { 1241 "input": "one.two.three.four-and.FiVe", 1242 "expected": "valid", 1243 "actual": "valid", 1244 "passed": true, 1245 "error": null 1246 }, 1247 { 1248 "input": "one.2.three", 1249 "expected": "valid", 1250 "actual": "valid", 1251 "passed": true, 1252 "error": null 1253 }, 1254 { 1255 "input": "a-0.b-1.c", 1256 "expected": "valid", 1257 "actual": "valid", 1258 "passed": true, 1259 "error": null 1260 }, 1261 { 1262 "input": "a0.b1.cc", 1263 "expected": "valid", 1264 "actual": "valid", 1265 "passed": true, 1266 "error": null 1267 }, 1268 { 1269 "input": "cn.8.lex.stuff", 1270 "expected": "valid", 1271 "actual": "valid", 1272 "passed": true, 1273 "error": null 1274 }, 1275 { 1276 "input": "test.12345.record", 1277 "expected": "valid", 1278 "actual": "valid", 1279 "passed": true, 1280 "error": null 1281 }, 1282 { 1283 "input": "a01.thing.record", 1284 "expected": "valid", 1285 "actual": "valid", 1286 "passed": true, 1287 "error": null 1288 }, 1289 { 1290 "input": "a.0.c", 1291 "expected": "valid", 1292 "actual": "valid", 1293 "passed": true, 1294 "error": null 1295 }, 1296 { 1297 "input": "xn--fiqs8s.xn--fiqa61au8b7zsevnm8ak20mc4a87e.record.two", 1298 "expected": "valid", 1299 "actual": "valid", 1300 "passed": true, 1301 "error": null 1302 }, 1303 { 1304 "input": "a0.b1.c3", 1305 "expected": "valid", 1306 "actual": "valid", 1307 "passed": true, 1308 "error": null 1309 }, 1310 { 1311 "input": "com.example.f00", 1312 "expected": "valid", 1313 "actual": "valid", 1314 "passed": true, 1315 "error": null 1316 }, 1317 { 1318 "input": "onion.expyuzz4wqqyqhjn.spec.getThing", 1319 "expected": "valid", 1320 "actual": "valid", 1321 "passed": true, 1322 "error": null 1323 }, 1324 { 1325 "input": "onion.g2zyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.lex.deleteThing", 1326 "expected": "valid", 1327 "actual": "valid", 1328 "passed": true, 1329 "error": null 1330 }, 1331 { 1332 "input": "org.4chan.lex.getThing", 1333 "expected": "valid", 1334 "actual": "valid", 1335 "passed": true, 1336 "error": null 1337 }, 1338 { 1339 "input": "cn.8.lex.stuff", 1340 "expected": "valid", 1341 "actual": "valid", 1342 "passed": true, 1343 "error": null 1344 }, 1345 { 1346 "input": "onion.2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.lex.deleteThing", 1347 "expected": "valid", 1348 "actual": "valid", 1349 "passed": true, 1350 "error": null 1351 }, 1352 { 1353 "input": "com.oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.foo", 1354 "expected": "invalid", 1355 "actual": "invalid", 1356 "passed": true, 1357 "error": null 1358 }, 1359 { 1360 "input": "com.example.oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1361 "expected": "invalid", 1362 "actual": "invalid", 1363 "passed": true, 1364 "error": null 1365 }, 1366 { 1367 "input": "com.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.foo", 1368 "expected": "invalid", 1369 "actual": "invalid", 1370 "passed": true, 1371 "error": null 1372 }, 1373 { 1374 "input": "com.example.foo.*", 1375 "expected": "invalid", 1376 "actual": "invalid", 1377 "passed": true, 1378 "error": null 1379 }, 1380 { 1381 "input": "com.example.foo.blah*", 1382 "expected": "invalid", 1383 "actual": "invalid", 1384 "passed": true, 1385 "error": null 1386 }, 1387 { 1388 "input": "com.example.foo.*blah", 1389 "expected": "invalid", 1390 "actual": "invalid", 1391 "passed": true, 1392 "error": null 1393 }, 1394 { 1395 "input": "com.exa💩ple.thing", 1396 "expected": "invalid", 1397 "actual": "invalid", 1398 "passed": true, 1399 "error": null 1400 }, 1401 { 1402 "input": "a-0.b-1.c-3", 1403 "expected": "invalid", 1404 "actual": "invalid", 1405 "passed": true, 1406 "error": null 1407 }, 1408 { 1409 "input": "a-0.b-1.c-o", 1410 "expected": "invalid", 1411 "actual": "invalid", 1412 "passed": true, 1413 "error": null 1414 }, 1415 { 1416 "input": "1.0.0.127.record", 1417 "expected": "invalid", 1418 "actual": "invalid", 1419 "passed": true, 1420 "error": null 1421 }, 1422 { 1423 "input": "0two.example.foo", 1424 "expected": "invalid", 1425 "actual": "invalid", 1426 "passed": true, 1427 "error": null 1428 }, 1429 { 1430 "input": "example.com", 1431 "expected": "invalid", 1432 "actual": "invalid", 1433 "passed": true, 1434 "error": null 1435 }, 1436 { 1437 "input": "com.example", 1438 "expected": "invalid", 1439 "actual": "invalid", 1440 "passed": true, 1441 "error": null 1442 }, 1443 { 1444 "input": "a.", 1445 "expected": "invalid", 1446 "actual": "invalid", 1447 "passed": true, 1448 "error": null 1449 }, 1450 { 1451 "input": ".one.two.three", 1452 "expected": "invalid", 1453 "actual": "invalid", 1454 "passed": true, 1455 "error": null 1456 }, 1457 { 1458 "input": "one.two.three ", 1459 "expected": "invalid", 1460 "actual": "invalid", 1461 "passed": true, 1462 "error": null 1463 }, 1464 { 1465 "input": "one.two..three", 1466 "expected": "invalid", 1467 "actual": "invalid", 1468 "passed": true, 1469 "error": null 1470 }, 1471 { 1472 "input": "one .two.three", 1473 "expected": "invalid", 1474 "actual": "invalid", 1475 "passed": true, 1476 "error": null 1477 }, 1478 { 1479 "input": " one.two.three", 1480 "expected": "invalid", 1481 "actual": "invalid", 1482 "passed": true, 1483 "error": null 1484 }, 1485 { 1486 "input": "com.exa💩ple.thing", 1487 "expected": "invalid", 1488 "actual": "invalid", 1489 "passed": true, 1490 "error": null 1491 }, 1492 { 1493 "input": "com.atproto.feed.p@st", 1494 "expected": "invalid", 1495 "actual": "invalid", 1496 "passed": true, 1497 "error": null 1498 }, 1499 { 1500 "input": "com.atproto.feed.p_st", 1501 "expected": "invalid", 1502 "actual": "invalid", 1503 "passed": true, 1504 "error": null 1505 }, 1506 { 1507 "input": "com.atproto.feed.p*st", 1508 "expected": "invalid", 1509 "actual": "invalid", 1510 "passed": true, 1511 "error": null 1512 }, 1513 { 1514 "input": "com.atproto.feed.po#t", 1515 "expected": "invalid", 1516 "actual": "invalid", 1517 "passed": true, 1518 "error": null 1519 }, 1520 { 1521 "input": "com.atproto.feed.p!ot", 1522 "expected": "invalid", 1523 "actual": "invalid", 1524 "passed": true, 1525 "error": null 1526 }, 1527 { 1528 "input": "com.example-.foo", 1529 "expected": "invalid", 1530 "actual": "invalid", 1531 "passed": true, 1532 "error": null 1533 }, 1534 { 1535 "input": "com.example.fooBar.2", 1536 "expected": "invalid", 1537 "actual": "invalid", 1538 "passed": true, 1539 "error": null 1540 } 1541 ] 1542 }, 1543 { 1544 "name": "TID", 1545 "description": "Timestamp Identifiers", 1546 "fixture_file": "tid_syntax_valid.txt, tid_syntax_invalid.txt", 1547 "total": 13, 1548 "passed": 13, 1549 "failed": 0, 1550 "pass_rate": 100, 1551 "results": [ 1552 { 1553 "input": "3jzfcijpj2z2a", 1554 "expected": "valid", 1555 "actual": "valid", 1556 "passed": true, 1557 "error": null 1558 }, 1559 { 1560 "input": "7777777777777", 1561 "expected": "valid", 1562 "actual": "valid", 1563 "passed": true, 1564 "error": null 1565 }, 1566 { 1567 "input": "3zzzzzzzzzzzz", 1568 "expected": "valid", 1569 "actual": "valid", 1570 "passed": true, 1571 "error": null 1572 }, 1573 { 1574 "input": "2222222222222", 1575 "expected": "valid", 1576 "actual": "valid", 1577 "passed": true, 1578 "error": null 1579 }, 1580 { 1581 "input": "3jzfcijpj2z21", 1582 "expected": "invalid", 1583 "actual": "invalid", 1584 "passed": true, 1585 "error": null 1586 }, 1587 { 1588 "input": "0000000000000", 1589 "expected": "invalid", 1590 "actual": "invalid", 1591 "passed": true, 1592 "error": null 1593 }, 1594 { 1595 "input": "3JZFCIJPJ2Z2A", 1596 "expected": "invalid", 1597 "actual": "invalid", 1598 "passed": true, 1599 "error": null 1600 }, 1601 { 1602 "input": "3jzfcijpj2z2aa", 1603 "expected": "invalid", 1604 "actual": "invalid", 1605 "passed": true, 1606 "error": null 1607 }, 1608 { 1609 "input": "3jzfcijpj2z2", 1610 "expected": "invalid", 1611 "actual": "invalid", 1612 "passed": true, 1613 "error": null 1614 }, 1615 { 1616 "input": "222", 1617 "expected": "invalid", 1618 "actual": "invalid", 1619 "passed": true, 1620 "error": null 1621 }, 1622 { 1623 "input": "3jzf-cij-pj2z-2a", 1624 "expected": "invalid", 1625 "actual": "invalid", 1626 "passed": true, 1627 "error": null 1628 }, 1629 { 1630 "input": "zzzzzzzzzzzzz", 1631 "expected": "invalid", 1632 "actual": "invalid", 1633 "passed": true, 1634 "error": null 1635 }, 1636 { 1637 "input": "kjzfcijpj2z2a", 1638 "expected": "invalid", 1639 "actual": "invalid", 1640 "passed": true, 1641 "error": null 1642 } 1643 ] 1644 }, 1645 { 1646 "name": "Record Key", 1647 "description": "Record key identifiers", 1648 "fixture_file": "recordkey_syntax_valid.txt, recordkey_syntax_invalid.txt", 1649 "total": 27, 1650 "passed": 27, 1651 "failed": 0, 1652 "pass_rate": 100, 1653 "results": [ 1654 { 1655 "input": "self", 1656 "expected": "valid", 1657 "actual": "valid", 1658 "passed": true, 1659 "error": null 1660 }, 1661 { 1662 "input": "example.com", 1663 "expected": "valid", 1664 "actual": "valid", 1665 "passed": true, 1666 "error": null 1667 }, 1668 { 1669 "input": "~1.2-3_", 1670 "expected": "valid", 1671 "actual": "valid", 1672 "passed": true, 1673 "error": null 1674 }, 1675 { 1676 "input": "dHJ1ZQ", 1677 "expected": "valid", 1678 "actual": "valid", 1679 "passed": true, 1680 "error": null 1681 }, 1682 { 1683 "input": "_", 1684 "expected": "valid", 1685 "actual": "valid", 1686 "passed": true, 1687 "error": null 1688 }, 1689 { 1690 "input": "literal:self", 1691 "expected": "valid", 1692 "actual": "valid", 1693 "passed": true, 1694 "error": null 1695 }, 1696 { 1697 "input": "pre:fix", 1698 "expected": "valid", 1699 "actual": "valid", 1700 "passed": true, 1701 "error": null 1702 }, 1703 { 1704 "input": ":", 1705 "expected": "valid", 1706 "actual": "valid", 1707 "passed": true, 1708 "error": null 1709 }, 1710 { 1711 "input": "-", 1712 "expected": "valid", 1713 "actual": "valid", 1714 "passed": true, 1715 "error": null 1716 }, 1717 { 1718 "input": "_", 1719 "expected": "valid", 1720 "actual": "valid", 1721 "passed": true, 1722 "error": null 1723 }, 1724 { 1725 "input": "~", 1726 "expected": "valid", 1727 "actual": "valid", 1728 "passed": true, 1729 "error": null 1730 }, 1731 { 1732 "input": "...", 1733 "expected": "valid", 1734 "actual": "valid", 1735 "passed": true, 1736 "error": null 1737 }, 1738 { 1739 "input": "self.", 1740 "expected": "valid", 1741 "actual": "valid", 1742 "passed": true, 1743 "error": null 1744 }, 1745 { 1746 "input": "lang:", 1747 "expected": "valid", 1748 "actual": "valid", 1749 "passed": true, 1750 "error": null 1751 }, 1752 { 1753 "input": ":lang", 1754 "expected": "valid", 1755 "actual": "valid", 1756 "passed": true, 1757 "error": null 1758 }, 1759 { 1760 "input": "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1761 "expected": "valid", 1762 "actual": "valid", 1763 "passed": true, 1764 "error": null 1765 }, 1766 { 1767 "input": "alpha/beta", 1768 "expected": "invalid", 1769 "actual": "invalid", 1770 "passed": true, 1771 "error": null 1772 }, 1773 { 1774 "input": ".", 1775 "expected": "invalid", 1776 "actual": "invalid", 1777 "passed": true, 1778 "error": null 1779 }, 1780 { 1781 "input": "..", 1782 "expected": "invalid", 1783 "actual": "invalid", 1784 "passed": true, 1785 "error": null 1786 }, 1787 { 1788 "input": "@handle", 1789 "expected": "invalid", 1790 "actual": "invalid", 1791 "passed": true, 1792 "error": null 1793 }, 1794 { 1795 "input": "any space", 1796 "expected": "invalid", 1797 "actual": "invalid", 1798 "passed": true, 1799 "error": null 1800 }, 1801 { 1802 "input": "any+space", 1803 "expected": "invalid", 1804 "actual": "invalid", 1805 "passed": true, 1806 "error": null 1807 }, 1808 { 1809 "input": "number[3]", 1810 "expected": "invalid", 1811 "actual": "invalid", 1812 "passed": true, 1813 "error": null 1814 }, 1815 { 1816 "input": "number(3)", 1817 "expected": "invalid", 1818 "actual": "invalid", 1819 "passed": true, 1820 "error": null 1821 }, 1822 { 1823 "input": "\"quote\"", 1824 "expected": "invalid", 1825 "actual": "invalid", 1826 "passed": true, 1827 "error": null 1828 }, 1829 { 1830 "input": "dHJ1ZQ==", 1831 "expected": "invalid", 1832 "actual": "invalid", 1833 "passed": true, 1834 "error": null 1835 }, 1836 { 1837 "input": "ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1838 "expected": "invalid", 1839 "actual": "invalid", 1840 "passed": true, 1841 "error": null 1842 } 1843 ] 1844 }, 1845 { 1846 "name": "AT-URI", 1847 "description": "AT Protocol URIs", 1848 "fixture_file": "aturi_syntax_valid.txt, aturi_syntax_invalid.txt", 1849 "total": 95, 1850 "passed": 95, 1851 "failed": 0, 1852 "pass_rate": 100, 1853 "results": [ 1854 { 1855 "input": "at://did:plc:asdf123", 1856 "expected": "valid", 1857 "actual": "valid", 1858 "passed": true, 1859 "error": null 1860 }, 1861 { 1862 "input": "at://user.bsky.social", 1863 "expected": "valid", 1864 "actual": "valid", 1865 "passed": true, 1866 "error": null 1867 }, 1868 { 1869 "input": "at://did:plc:asdf123/com.atproto.feed.post", 1870 "expected": "valid", 1871 "actual": "valid", 1872 "passed": true, 1873 "error": null 1874 }, 1875 { 1876 "input": "at://did:plc:asdf123/com.atproto.feed.post/record", 1877 "expected": "valid", 1878 "actual": "valid", 1879 "passed": true, 1880 "error": null 1881 }, 1882 { 1883 "input": "at://did:plc:asdf123/com.atproto.feed.post/oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1884 "expected": "valid", 1885 "actual": "valid", 1886 "passed": true, 1887 "error": null 1888 }, 1889 { 1890 "input": "at://did:plc:asdf123", 1891 "expected": "valid", 1892 "actual": "valid", 1893 "passed": true, 1894 "error": null 1895 }, 1896 { 1897 "input": "at://user.bsky.social", 1898 "expected": "valid", 1899 "actual": "valid", 1900 "passed": true, 1901 "error": null 1902 }, 1903 { 1904 "input": "at://did:plc:asdf123/com.atproto.feed.post", 1905 "expected": "valid", 1906 "actual": "valid", 1907 "passed": true, 1908 "error": null 1909 }, 1910 { 1911 "input": "at://did:plc:asdf123/com.atproto.feed.post/record", 1912 "expected": "valid", 1913 "actual": "valid", 1914 "passed": true, 1915 "error": null 1916 }, 1917 { 1918 "input": "at://did:plc:asdf123/com.atproto.feed.post/asdf123", 1919 "expected": "valid", 1920 "actual": "valid", 1921 "passed": true, 1922 "error": null 1923 }, 1924 { 1925 "input": "at://did:plc:asdf123/com.atproto.feed.post/asdf123", 1926 "expected": "valid", 1927 "actual": "valid", 1928 "passed": true, 1929 "error": null 1930 }, 1931 { 1932 "input": "at://did:plc:asdf123/com.atproto.feed.post/a", 1933 "expected": "valid", 1934 "actual": "valid", 1935 "passed": true, 1936 "error": null 1937 }, 1938 { 1939 "input": "at://did:plc:asdf123/com.atproto.feed.post/asdf-123", 1940 "expected": "valid", 1941 "actual": "valid", 1942 "passed": true, 1943 "error": null 1944 }, 1945 { 1946 "input": "at://did:abc:123", 1947 "expected": "valid", 1948 "actual": "valid", 1949 "passed": true, 1950 "error": null 1951 }, 1952 { 1953 "input": "at://did:abc:123/io.nsid.someFunc/record-key", 1954 "expected": "valid", 1955 "actual": "valid", 1956 "passed": true, 1957 "error": null 1958 }, 1959 { 1960 "input": "at://did:abc:123/io.nsid.someFunc/self.", 1961 "expected": "valid", 1962 "actual": "valid", 1963 "passed": true, 1964 "error": null 1965 }, 1966 { 1967 "input": "at://did:abc:123/io.nsid.someFunc/lang:", 1968 "expected": "valid", 1969 "actual": "valid", 1970 "passed": true, 1971 "error": null 1972 }, 1973 { 1974 "input": "at://did:abc:123/io.nsid.someFunc/:", 1975 "expected": "valid", 1976 "actual": "valid", 1977 "passed": true, 1978 "error": null 1979 }, 1980 { 1981 "input": "at://did:abc:123/io.nsid.someFunc/-", 1982 "expected": "valid", 1983 "actual": "valid", 1984 "passed": true, 1985 "error": null 1986 }, 1987 { 1988 "input": "at://did:abc:123/io.nsid.someFunc/_", 1989 "expected": "valid", 1990 "actual": "valid", 1991 "passed": true, 1992 "error": null 1993 }, 1994 { 1995 "input": "at://did:abc:123/io.nsid.someFunc/~", 1996 "expected": "valid", 1997 "actual": "valid", 1998 "passed": true, 1999 "error": null 2000 }, 2001 { 2002 "input": "at://did:abc:123/io.nsid.someFunc/...", 2003 "expected": "valid", 2004 "actual": "valid", 2005 "passed": true, 2006 "error": null 2007 }, 2008 { 2009 "input": "at://did:plc:asdf123/com.atproto.feed.postV2", 2010 "expected": "valid", 2011 "actual": "valid", 2012 "passed": true, 2013 "error": null 2014 }, 2015 { 2016 "input": "a://did:plc:asdf123", 2017 "expected": "invalid", 2018 "actual": "invalid", 2019 "passed": true, 2020 "error": null 2021 }, 2022 { 2023 "input": "at//did:plc:asdf123", 2024 "expected": "invalid", 2025 "actual": "invalid", 2026 "passed": true, 2027 "error": null 2028 }, 2029 { 2030 "input": "at:/a/did:plc:asdf123", 2031 "expected": "invalid", 2032 "actual": "invalid", 2033 "passed": true, 2034 "error": null 2035 }, 2036 { 2037 "input": "at:/did:plc:asdf123", 2038 "expected": "invalid", 2039 "actual": "invalid", 2040 "passed": true, 2041 "error": null 2042 }, 2043 { 2044 "input": "AT://did:plc:asdf123", 2045 "expected": "invalid", 2046 "actual": "invalid", 2047 "passed": true, 2048 "error": null 2049 }, 2050 { 2051 "input": "http://did:plc:asdf123", 2052 "expected": "invalid", 2053 "actual": "invalid", 2054 "passed": true, 2055 "error": null 2056 }, 2057 { 2058 "input": "://did:plc:asdf123", 2059 "expected": "invalid", 2060 "actual": "invalid", 2061 "passed": true, 2062 "error": null 2063 }, 2064 { 2065 "input": "at:did:plc:asdf123", 2066 "expected": "invalid", 2067 "actual": "invalid", 2068 "passed": true, 2069 "error": null 2070 }, 2071 { 2072 "input": "at:/did:plc:asdf123", 2073 "expected": "invalid", 2074 "actual": "invalid", 2075 "passed": true, 2076 "error": null 2077 }, 2078 { 2079 "input": "at:///did:plc:asdf123", 2080 "expected": "invalid", 2081 "actual": "invalid", 2082 "passed": true, 2083 "error": null 2084 }, 2085 { 2086 "input": "at://:/did:plc:asdf123", 2087 "expected": "invalid", 2088 "actual": "invalid", 2089 "passed": true, 2090 "error": null 2091 }, 2092 { 2093 "input": "at:/ /did:plc:asdf123", 2094 "expected": "invalid", 2095 "actual": "invalid", 2096 "passed": true, 2097 "error": null 2098 }, 2099 { 2100 "input": "at://did:plc:asdf123 ", 2101 "expected": "invalid", 2102 "actual": "invalid", 2103 "passed": true, 2104 "error": null 2105 }, 2106 { 2107 "input": "at://did:plc:asdf123/ ", 2108 "expected": "invalid", 2109 "actual": "invalid", 2110 "passed": true, 2111 "error": null 2112 }, 2113 { 2114 "input": " at://did:plc:asdf123", 2115 "expected": "invalid", 2116 "actual": "invalid", 2117 "passed": true, 2118 "error": null 2119 }, 2120 { 2121 "input": "at://did:plc:asdf123/com.atproto.feed.post ", 2122 "expected": "invalid", 2123 "actual": "invalid", 2124 "passed": true, 2125 "error": null 2126 }, 2127 { 2128 "input": "at://did:plc:asdf123/com.atproto.feed.post# ", 2129 "expected": "invalid", 2130 "actual": "invalid", 2131 "passed": true, 2132 "error": null 2133 }, 2134 { 2135 "input": "at://did:plc:asdf123/com.atproto.feed.post#/ ", 2136 "expected": "invalid", 2137 "actual": "invalid", 2138 "passed": true, 2139 "error": null 2140 }, 2141 { 2142 "input": "at://did:plc:asdf123/com.atproto.feed.post#/frag ", 2143 "expected": "invalid", 2144 "actual": "invalid", 2145 "passed": true, 2146 "error": null 2147 }, 2148 { 2149 "input": "at://did:plc:asdf123/com.atproto.feed.post#fr ag", 2150 "expected": "invalid", 2151 "actual": "invalid", 2152 "passed": true, 2153 "error": null 2154 }, 2155 { 2156 "input": "//did:plc:asdf123", 2157 "expected": "invalid", 2158 "actual": "invalid", 2159 "passed": true, 2160 "error": null 2161 }, 2162 { 2163 "input": "at://name", 2164 "expected": "invalid", 2165 "actual": "invalid", 2166 "passed": true, 2167 "error": null 2168 }, 2169 { 2170 "input": "at://name.0", 2171 "expected": "invalid", 2172 "actual": "invalid", 2173 "passed": true, 2174 "error": null 2175 }, 2176 { 2177 "input": "at://diD:plc:asdf123", 2178 "expected": "invalid", 2179 "actual": "invalid", 2180 "passed": true, 2181 "error": null 2182 }, 2183 { 2184 "input": "at://did:plc:asdf123/com.atproto.feed.p@st", 2185 "expected": "invalid", 2186 "actual": "invalid", 2187 "passed": true, 2188 "error": null 2189 }, 2190 { 2191 "input": "at://did:plc:asdf123/com.atproto.feed.p$st", 2192 "expected": "invalid", 2193 "actual": "invalid", 2194 "passed": true, 2195 "error": null 2196 }, 2197 { 2198 "input": "at://did:plc:asdf123/com.atproto.feed.p%st", 2199 "expected": "invalid", 2200 "actual": "invalid", 2201 "passed": true, 2202 "error": null 2203 }, 2204 { 2205 "input": "at://did:plc:asdf123/com.atproto.feed.p&st", 2206 "expected": "invalid", 2207 "actual": "invalid", 2208 "passed": true, 2209 "error": null 2210 }, 2211 { 2212 "input": "at://did:plc:asdf123/com.atproto.feed.p()t", 2213 "expected": "invalid", 2214 "actual": "invalid", 2215 "passed": true, 2216 "error": null 2217 }, 2218 { 2219 "input": "at://did:plc:asdf123/com.atproto.feed_post", 2220 "expected": "invalid", 2221 "actual": "invalid", 2222 "passed": true, 2223 "error": null 2224 }, 2225 { 2226 "input": "at://did:plc:asdf123/-com.atproto.feed.post", 2227 "expected": "invalid", 2228 "actual": "invalid", 2229 "passed": true, 2230 "error": null 2231 }, 2232 { 2233 "input": "at://did:plc:asdf@123/com.atproto.feed.post", 2234 "expected": "invalid", 2235 "actual": "invalid", 2236 "passed": true, 2237 "error": null 2238 }, 2239 { 2240 "input": "at://DID:plc:asdf123", 2241 "expected": "invalid", 2242 "actual": "invalid", 2243 "passed": true, 2244 "error": null 2245 }, 2246 { 2247 "input": "at://user.bsky.123", 2248 "expected": "invalid", 2249 "actual": "invalid", 2250 "passed": true, 2251 "error": null 2252 }, 2253 { 2254 "input": "at://bsky", 2255 "expected": "invalid", 2256 "actual": "invalid", 2257 "passed": true, 2258 "error": null 2259 }, 2260 { 2261 "input": "at://did:plc:", 2262 "expected": "invalid", 2263 "actual": "invalid", 2264 "passed": true, 2265 "error": null 2266 }, 2267 { 2268 "input": "at://did:plc:", 2269 "expected": "invalid", 2270 "actual": "invalid", 2271 "passed": true, 2272 "error": null 2273 }, 2274 { 2275 "input": "at://frag", 2276 "expected": "invalid", 2277 "actual": "invalid", 2278 "passed": true, 2279 "error": null 2280 }, 2281 { 2282 "input": "at://did:plc:asdf123/com.atproto.feed.post/oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 2283 "expected": "invalid", 2284 "actual": "invalid", 2285 "passed": true, 2286 "error": null 2287 }, 2288 { 2289 "input": "at://user.bsky.social//", 2290 "expected": "invalid", 2291 "actual": "invalid", 2292 "passed": true, 2293 "error": null 2294 }, 2295 { 2296 "input": "at://user.bsky.social//com.atproto.feed.post", 2297 "expected": "invalid", 2298 "actual": "invalid", 2299 "passed": true, 2300 "error": null 2301 }, 2302 { 2303 "input": "at://user.bsky.social/com.atproto.feed.post//", 2304 "expected": "invalid", 2305 "actual": "invalid", 2306 "passed": true, 2307 "error": null 2308 }, 2309 { 2310 "input": "at://did:plc:asdf123/com.atproto.feed.post/asdf123/more/more',", 2311 "expected": "invalid", 2312 "actual": "invalid", 2313 "passed": true, 2314 "error": null 2315 }, 2316 { 2317 "input": "at://did:plc:asdf123/short/stuff", 2318 "expected": "invalid", 2319 "actual": "invalid", 2320 "passed": true, 2321 "error": null 2322 }, 2323 { 2324 "input": "at://did:plc:asdf123/12345", 2325 "expected": "invalid", 2326 "actual": "invalid", 2327 "passed": true, 2328 "error": null 2329 }, 2330 { 2331 "input": "at://did:plc:asdf123/", 2332 "expected": "invalid", 2333 "actual": "invalid", 2334 "passed": true, 2335 "error": null 2336 }, 2337 { 2338 "input": "at://user.bsky.social/", 2339 "expected": "invalid", 2340 "actual": "invalid", 2341 "passed": true, 2342 "error": null 2343 }, 2344 { 2345 "input": "at://did:plc:asdf123/com.atproto.feed.post/", 2346 "expected": "invalid", 2347 "actual": "invalid", 2348 "passed": true, 2349 "error": null 2350 }, 2351 { 2352 "input": "at://did:plc:asdf123/com.atproto.feed.post/record/", 2353 "expected": "invalid", 2354 "actual": "invalid", 2355 "passed": true, 2356 "error": null 2357 }, 2358 { 2359 "input": "at://did:plc:asdf123/com.atproto.feed.post/record/#/frag", 2360 "expected": "invalid", 2361 "actual": "invalid", 2362 "passed": true, 2363 "error": null 2364 }, 2365 { 2366 "input": "at://did:plc:asdf123/com.atproto.feed.post/asdf123/asdf", 2367 "expected": "invalid", 2368 "actual": "invalid", 2369 "passed": true, 2370 "error": null 2371 }, 2372 { 2373 "input": "at://did:plc:asdf123#", 2374 "expected": "invalid", 2375 "actual": "invalid", 2376 "passed": true, 2377 "error": null 2378 }, 2379 { 2380 "input": "at://did:plc:asdf123##", 2381 "expected": "invalid", 2382 "actual": "invalid", 2383 "passed": true, 2384 "error": null 2385 }, 2386 { 2387 "input": "at://did:plc:asdf123#/asdf#/asdf", 2388 "expected": "invalid", 2389 "actual": "invalid", 2390 "passed": true, 2391 "error": null 2392 }, 2393 { 2394 "input": "at://did:plc:asdf123/com.atproto.feed.post/%23", 2395 "expected": "invalid", 2396 "actual": "invalid", 2397 "passed": true, 2398 "error": null 2399 }, 2400 { 2401 "input": "at://did:plc:asdf123/com.atproto.feed.post/$@!*)(:,;~.sdf123", 2402 "expected": "invalid", 2403 "actual": "invalid", 2404 "passed": true, 2405 "error": null 2406 }, 2407 { 2408 "input": "at://did:plc:asdf123/com.atproto.feed.post/~'sdf123\")", 2409 "expected": "invalid", 2410 "actual": "invalid", 2411 "passed": true, 2412 "error": null 2413 }, 2414 { 2415 "input": "at://did:plc:asdf123/com.atproto.feed.post/$", 2416 "expected": "invalid", 2417 "actual": "invalid", 2418 "passed": true, 2419 "error": null 2420 }, 2421 { 2422 "input": "at://did:plc:asdf123/com.atproto.feed.post/@", 2423 "expected": "invalid", 2424 "actual": "invalid", 2425 "passed": true, 2426 "error": null 2427 }, 2428 { 2429 "input": "at://did:plc:asdf123/com.atproto.feed.post/!", 2430 "expected": "invalid", 2431 "actual": "invalid", 2432 "passed": true, 2433 "error": null 2434 }, 2435 { 2436 "input": "at://did:plc:asdf123/com.atproto.feed.post/*", 2437 "expected": "invalid", 2438 "actual": "invalid", 2439 "passed": true, 2440 "error": null 2441 }, 2442 { 2443 "input": "at://did:plc:asdf123/com.atproto.feed.post/(", 2444 "expected": "invalid", 2445 "actual": "invalid", 2446 "passed": true, 2447 "error": null 2448 }, 2449 { 2450 "input": "at://did:plc:asdf123/com.atproto.feed.post/,", 2451 "expected": "invalid", 2452 "actual": "invalid", 2453 "passed": true, 2454 "error": null 2455 }, 2456 { 2457 "input": "at://did:plc:asdf123/com.atproto.feed.post/;", 2458 "expected": "invalid", 2459 "actual": "invalid", 2460 "passed": true, 2461 "error": null 2462 }, 2463 { 2464 "input": "at://did:plc:asdf123/com.atproto.feed.post/abc%30123", 2465 "expected": "invalid", 2466 "actual": "invalid", 2467 "passed": true, 2468 "error": null 2469 }, 2470 { 2471 "input": "at://did:plc:asdf123/com.atproto.feed.post/%30", 2472 "expected": "invalid", 2473 "actual": "invalid", 2474 "passed": true, 2475 "error": null 2476 }, 2477 { 2478 "input": "at://did:plc:asdf123/com.atproto.feed.post/%3", 2479 "expected": "invalid", 2480 "actual": "invalid", 2481 "passed": true, 2482 "error": null 2483 }, 2484 { 2485 "input": "at://did:plc:asdf123/com.atproto.feed.post/%", 2486 "expected": "invalid", 2487 "actual": "invalid", 2488 "passed": true, 2489 "error": null 2490 }, 2491 { 2492 "input": "at://did:plc:asdf123/com.atproto.feed.post/%zz", 2493 "expected": "invalid", 2494 "actual": "invalid", 2495 "passed": true, 2496 "error": null 2497 }, 2498 { 2499 "input": "at://did:plc:asdf123/com.atproto.feed.post/%%%", 2500 "expected": "invalid", 2501 "actual": "invalid", 2502 "passed": true, 2503 "error": null 2504 }, 2505 { 2506 "input": "at://did:plc:asdf123/com.atproto.feed.post/.", 2507 "expected": "invalid", 2508 "actual": "invalid", 2509 "passed": true, 2510 "error": null 2511 }, 2512 { 2513 "input": "at://did:plc:asdf123/com.atproto.feed.post/..", 2514 "expected": "invalid", 2515 "actual": "invalid", 2516 "passed": true, 2517 "error": null 2518 } 2519 ] 2520 }, 2521 { 2522 "name": "Datetime", 2523 "description": "ISO 8601 datetime strings", 2524 "fixture_file": "datetime_syntax_valid.txt, datetime_syntax_invalid.txt", 2525 "total": 79, 2526 "passed": 79, 2527 "failed": 0, 2528 "pass_rate": 100, 2529 "results": [ 2530 { 2531 "input": "1985-04-12T23:20:50.123Z", 2532 "expected": "valid", 2533 "actual": "valid", 2534 "passed": true, 2535 "error": null 2536 }, 2537 { 2538 "input": "1985-04-12T23:20:50.000Z", 2539 "expected": "valid", 2540 "actual": "valid", 2541 "passed": true, 2542 "error": null 2543 }, 2544 { 2545 "input": "2000-01-01T00:00:00.000Z", 2546 "expected": "valid", 2547 "actual": "valid", 2548 "passed": true, 2549 "error": null 2550 }, 2551 { 2552 "input": "1985-04-12T23:20:50.123456Z", 2553 "expected": "valid", 2554 "actual": "valid", 2555 "passed": true, 2556 "error": null 2557 }, 2558 { 2559 "input": "1985-04-12T23:20:50.120Z", 2560 "expected": "valid", 2561 "actual": "valid", 2562 "passed": true, 2563 "error": null 2564 }, 2565 { 2566 "input": "1985-04-12T23:20:50.120000Z", 2567 "expected": "valid", 2568 "actual": "valid", 2569 "passed": true, 2570 "error": null 2571 }, 2572 { 2573 "input": "1985-04-12T23:20:50.1235678912345Z", 2574 "expected": "valid", 2575 "actual": "valid", 2576 "passed": true, 2577 "error": null 2578 }, 2579 { 2580 "input": "1985-04-12T23:20:50.100Z", 2581 "expected": "valid", 2582 "actual": "valid", 2583 "passed": true, 2584 "error": null 2585 }, 2586 { 2587 "input": "1985-04-12T23:20:50Z", 2588 "expected": "valid", 2589 "actual": "valid", 2590 "passed": true, 2591 "error": null 2592 }, 2593 { 2594 "input": "1985-04-12T23:20:50.0Z", 2595 "expected": "valid", 2596 "actual": "valid", 2597 "passed": true, 2598 "error": null 2599 }, 2600 { 2601 "input": "1985-04-12T23:20:50.123+00:00", 2602 "expected": "valid", 2603 "actual": "valid", 2604 "passed": true, 2605 "error": null 2606 }, 2607 { 2608 "input": "1985-04-12T23:20:50.123-07:00", 2609 "expected": "valid", 2610 "actual": "valid", 2611 "passed": true, 2612 "error": null 2613 }, 2614 { 2615 "input": "1985-04-12T23:20:50.123+07:00", 2616 "expected": "valid", 2617 "actual": "valid", 2618 "passed": true, 2619 "error": null 2620 }, 2621 { 2622 "input": "1985-04-12T23:20:50.123+01:45", 2623 "expected": "valid", 2624 "actual": "valid", 2625 "passed": true, 2626 "error": null 2627 }, 2628 { 2629 "input": "0985-04-12T23:20:50.123-07:00", 2630 "expected": "valid", 2631 "actual": "valid", 2632 "passed": true, 2633 "error": null 2634 }, 2635 { 2636 "input": "1985-04-12T23:20:50.123-07:00", 2637 "expected": "valid", 2638 "actual": "valid", 2639 "passed": true, 2640 "error": null 2641 }, 2642 { 2643 "input": "0123-01-01T00:00:00.000Z", 2644 "expected": "valid", 2645 "actual": "valid", 2646 "passed": true, 2647 "error": null 2648 }, 2649 { 2650 "input": "1985-04-12T23:20:50.1Z", 2651 "expected": "valid", 2652 "actual": "valid", 2653 "passed": true, 2654 "error": null 2655 }, 2656 { 2657 "input": "1985-04-12T23:20:50.12Z", 2658 "expected": "valid", 2659 "actual": "valid", 2660 "passed": true, 2661 "error": null 2662 }, 2663 { 2664 "input": "1985-04-12T23:20:50.123Z", 2665 "expected": "valid", 2666 "actual": "valid", 2667 "passed": true, 2668 "error": null 2669 }, 2670 { 2671 "input": "1985-04-12T23:20:50.1234Z", 2672 "expected": "valid", 2673 "actual": "valid", 2674 "passed": true, 2675 "error": null 2676 }, 2677 { 2678 "input": "1985-04-12T23:20:50.12345Z", 2679 "expected": "valid", 2680 "actual": "valid", 2681 "passed": true, 2682 "error": null 2683 }, 2684 { 2685 "input": "1985-04-12T23:20:50.123456Z", 2686 "expected": "valid", 2687 "actual": "valid", 2688 "passed": true, 2689 "error": null 2690 }, 2691 { 2692 "input": "1985-04-12T23:20:50.1234567Z", 2693 "expected": "valid", 2694 "actual": "valid", 2695 "passed": true, 2696 "error": null 2697 }, 2698 { 2699 "input": "1985-04-12T23:20:50.12345678Z", 2700 "expected": "valid", 2701 "actual": "valid", 2702 "passed": true, 2703 "error": null 2704 }, 2705 { 2706 "input": "1985-04-12T23:20:50.123456789Z", 2707 "expected": "valid", 2708 "actual": "valid", 2709 "passed": true, 2710 "error": null 2711 }, 2712 { 2713 "input": "1985-04-12T23:20:50.1234567890Z", 2714 "expected": "valid", 2715 "actual": "valid", 2716 "passed": true, 2717 "error": null 2718 }, 2719 { 2720 "input": "1985-04-12T23:20:50.12345678901Z", 2721 "expected": "valid", 2722 "actual": "valid", 2723 "passed": true, 2724 "error": null 2725 }, 2726 { 2727 "input": "1985-04-12T23:20:50.123456789012Z", 2728 "expected": "valid", 2729 "actual": "valid", 2730 "passed": true, 2731 "error": null 2732 }, 2733 { 2734 "input": "0010-12-31T23:00:00.000Z", 2735 "expected": "valid", 2736 "actual": "valid", 2737 "passed": true, 2738 "error": null 2739 }, 2740 { 2741 "input": "1000-12-31T23:00:00.000Z", 2742 "expected": "valid", 2743 "actual": "valid", 2744 "passed": true, 2745 "error": null 2746 }, 2747 { 2748 "input": "1900-12-31T23:00:00.000Z", 2749 "expected": "valid", 2750 "actual": "valid", 2751 "passed": true, 2752 "error": null 2753 }, 2754 { 2755 "input": "3001-12-31T23:00:00.000Z", 2756 "expected": "valid", 2757 "actual": "valid", 2758 "passed": true, 2759 "error": null 2760 }, 2761 { 2762 "input": "1985-04-12T23:20:50.123z", 2763 "expected": "invalid", 2764 "actual": "invalid", 2765 "passed": true, 2766 "error": null 2767 }, 2768 { 2769 "input": "01985-04-12T23:20:50.123Z", 2770 "expected": "invalid", 2771 "actual": "invalid", 2772 "passed": true, 2773 "error": null 2774 }, 2775 { 2776 "input": "985-04-12T23:20:50.123Z", 2777 "expected": "invalid", 2778 "actual": "invalid", 2779 "passed": true, 2780 "error": null 2781 }, 2782 { 2783 "input": "1985-04-12T23:20:50.Z", 2784 "expected": "invalid", 2785 "actual": "invalid", 2786 "passed": true, 2787 "error": null 2788 }, 2789 { 2790 "input": "1985-04-32T23;20:50.123Z", 2791 "expected": "invalid", 2792 "actual": "invalid", 2793 "passed": true, 2794 "error": null 2795 }, 2796 { 2797 "input": "1985-04-32T23;20:50.123Z", 2798 "expected": "invalid", 2799 "actual": "invalid", 2800 "passed": true, 2801 "error": null 2802 }, 2803 { 2804 "input": "1985—04-32T23;20:50.123Z", 2805 "expected": "invalid", 2806 "actual": "invalid", 2807 "passed": true, 2808 "error": null 2809 }, 2810 { 2811 "input": "1985–04-32T23;20:50.123Z", 2812 "expected": "invalid", 2813 "actual": "invalid", 2814 "passed": true, 2815 "error": null 2816 }, 2817 { 2818 "input": " 1985-04-12T23:20:50.123Z", 2819 "expected": "invalid", 2820 "actual": "invalid", 2821 "passed": true, 2822 "error": null 2823 }, 2824 { 2825 "input": "1985-04-12T23:20:50.123Z ", 2826 "expected": "invalid", 2827 "actual": "invalid", 2828 "passed": true, 2829 "error": null 2830 }, 2831 { 2832 "input": "1985-04-12T 23:20:50.123Z", 2833 "expected": "invalid", 2834 "actual": "invalid", 2835 "passed": true, 2836 "error": null 2837 }, 2838 { 2839 "input": "1985-4-12T23:20:50.123Z", 2840 "expected": "invalid", 2841 "actual": "invalid", 2842 "passed": true, 2843 "error": null 2844 }, 2845 { 2846 "input": "1985-04-2T23:20:50.123Z", 2847 "expected": "invalid", 2848 "actual": "invalid", 2849 "passed": true, 2850 "error": null 2851 }, 2852 { 2853 "input": "1985-04-12T3:20:50.123Z", 2854 "expected": "invalid", 2855 "actual": "invalid", 2856 "passed": true, 2857 "error": null 2858 }, 2859 { 2860 "input": "1985-04-12T23:0:50.123Z", 2861 "expected": "invalid", 2862 "actual": "invalid", 2863 "passed": true, 2864 "error": null 2865 }, 2866 { 2867 "input": "1985-04-12T23:20:5.123Z", 2868 "expected": "invalid", 2869 "actual": "invalid", 2870 "passed": true, 2871 "error": null 2872 }, 2873 { 2874 "input": "01985-04-12T23:20:50.123Z", 2875 "expected": "invalid", 2876 "actual": "invalid", 2877 "passed": true, 2878 "error": null 2879 }, 2880 { 2881 "input": "1985-004-12T23:20:50.123Z", 2882 "expected": "invalid", 2883 "actual": "invalid", 2884 "passed": true, 2885 "error": null 2886 }, 2887 { 2888 "input": "1985-04-012T23:20:50.123Z", 2889 "expected": "invalid", 2890 "actual": "invalid", 2891 "passed": true, 2892 "error": null 2893 }, 2894 { 2895 "input": "1985-04-12T023:20:50.123Z", 2896 "expected": "invalid", 2897 "actual": "invalid", 2898 "passed": true, 2899 "error": null 2900 }, 2901 { 2902 "input": "1985-04-12T23:020:50.123Z", 2903 "expected": "invalid", 2904 "actual": "invalid", 2905 "passed": true, 2906 "error": null 2907 }, 2908 { 2909 "input": "1985-04-12T23:20:050.123Z", 2910 "expected": "invalid", 2911 "actual": "invalid", 2912 "passed": true, 2913 "error": null 2914 }, 2915 { 2916 "input": "1985-04-12t23:20:50.123Z", 2917 "expected": "invalid", 2918 "actual": "invalid", 2919 "passed": true, 2920 "error": null 2921 }, 2922 { 2923 "input": "1985-04-12T23:20:50.123z", 2924 "expected": "invalid", 2925 "actual": "invalid", 2926 "passed": true, 2927 "error": null 2928 }, 2929 { 2930 "input": "1985-04-12T23:20:50.123-00:00", 2931 "expected": "invalid", 2932 "actual": "invalid", 2933 "passed": true, 2934 "error": null 2935 }, 2936 { 2937 "input": "1985-04-12_23:20:50.123Z", 2938 "expected": "invalid", 2939 "actual": "invalid", 2940 "passed": true, 2941 "error": null 2942 }, 2943 { 2944 "input": "1985-04-12 23:20:50.123Z", 2945 "expected": "invalid", 2946 "actual": "invalid", 2947 "passed": true, 2948 "error": null 2949 }, 2950 { 2951 "input": "1985-04-274T23:20:50.123Z", 2952 "expected": "invalid", 2953 "actual": "invalid", 2954 "passed": true, 2955 "error": null 2956 }, 2957 { 2958 "input": "1985-04-12T23:20:50.123", 2959 "expected": "invalid", 2960 "actual": "invalid", 2961 "passed": true, 2962 "error": null 2963 }, 2964 { 2965 "input": "1985-04-12T23:20:50", 2966 "expected": "invalid", 2967 "actual": "invalid", 2968 "passed": true, 2969 "error": null 2970 }, 2971 { 2972 "input": "1985-04-12", 2973 "expected": "invalid", 2974 "actual": "invalid", 2975 "passed": true, 2976 "error": null 2977 }, 2978 { 2979 "input": "1985-04-12T23:20Z", 2980 "expected": "invalid", 2981 "actual": "invalid", 2982 "passed": true, 2983 "error": null 2984 }, 2985 { 2986 "input": "1985-04-12T23:20:5Z", 2987 "expected": "invalid", 2988 "actual": "invalid", 2989 "passed": true, 2990 "error": null 2991 }, 2992 { 2993 "input": "1985-04-12T23:20:50.123", 2994 "expected": "invalid", 2995 "actual": "invalid", 2996 "passed": true, 2997 "error": null 2998 }, 2999 { 3000 "input": "+001985-04-12T23:20:50.123Z", 3001 "expected": "invalid", 3002 "actual": "invalid", 3003 "passed": true, 3004 "error": null 3005 }, 3006 { 3007 "input": "23:20:50.123Z", 3008 "expected": "invalid", 3009 "actual": "invalid", 3010 "passed": true, 3011 "error": null 3012 }, 3013 { 3014 "input": "1985-04-12T23:20:50.123+00", 3015 "expected": "invalid", 3016 "actual": "invalid", 3017 "passed": true, 3018 "error": null 3019 }, 3020 { 3021 "input": "1985-04-12T23:20:50.123+00:0", 3022 "expected": "invalid", 3023 "actual": "invalid", 3024 "passed": true, 3025 "error": null 3026 }, 3027 { 3028 "input": "1985-04-12T23:20:50.123+0:00", 3029 "expected": "invalid", 3030 "actual": "invalid", 3031 "passed": true, 3032 "error": null 3033 }, 3034 { 3035 "input": "1985-04-12T23:20:50.123", 3036 "expected": "invalid", 3037 "actual": "invalid", 3038 "passed": true, 3039 "error": null 3040 }, 3041 { 3042 "input": "1985-04-12T23:20:50.123+0000", 3043 "expected": "invalid", 3044 "actual": "invalid", 3045 "passed": true, 3046 "error": null 3047 }, 3048 { 3049 "input": "1985-04-12T23:20:50.123+00", 3050 "expected": "invalid", 3051 "actual": "invalid", 3052 "passed": true, 3053 "error": null 3054 }, 3055 { 3056 "input": "1985-04-12T23:20:50.123+", 3057 "expected": "invalid", 3058 "actual": "invalid", 3059 "passed": true, 3060 "error": null 3061 }, 3062 { 3063 "input": "1985-04-12T23:20:50.123-", 3064 "expected": "invalid", 3065 "actual": "invalid", 3066 "passed": true, 3067 "error": null 3068 }, 3069 { 3070 "input": "0000-01-01T00:00:00+01:00", 3071 "expected": "invalid", 3072 "actual": "invalid", 3073 "passed": true, 3074 "error": null 3075 }, 3076 { 3077 "input": "-000001-12-31T23:00:00.000Z", 3078 "expected": "invalid", 3079 "actual": "invalid", 3080 "passed": true, 3081 "error": null 3082 } 3083 ] 3084 }, 3085 { 3086 "name": "Language", 3087 "description": "BCP-47 language tags", 3088 "fixture_file": "language_syntax_valid.txt, language_syntax_invalid.txt", 3089 "total": 21, 3090 "passed": 21, 3091 "failed": 0, 3092 "pass_rate": 100, 3093 "results": [ 3094 { 3095 "input": "ja", 3096 "expected": "valid", 3097 "actual": "valid", 3098 "passed": true, 3099 "error": null 3100 }, 3101 { 3102 "input": "ban", 3103 "expected": "valid", 3104 "actual": "valid", 3105 "passed": true, 3106 "error": null 3107 }, 3108 { 3109 "input": "pt-BR", 3110 "expected": "valid", 3111 "actual": "valid", 3112 "passed": true, 3113 "error": null 3114 }, 3115 { 3116 "input": "hy-Latn-IT-arevela", 3117 "expected": "valid", 3118 "actual": "valid", 3119 "passed": true, 3120 "error": null 3121 }, 3122 { 3123 "input": "en-GB", 3124 "expected": "valid", 3125 "actual": "valid", 3126 "passed": true, 3127 "error": null 3128 }, 3129 { 3130 "input": "zh-Hant", 3131 "expected": "valid", 3132 "actual": "valid", 3133 "passed": true, 3134 "error": null 3135 }, 3136 { 3137 "input": "sgn-BE-NL", 3138 "expected": "valid", 3139 "actual": "valid", 3140 "passed": true, 3141 "error": null 3142 }, 3143 { 3144 "input": "es-419", 3145 "expected": "valid", 3146 "actual": "valid", 3147 "passed": true, 3148 "error": null 3149 }, 3150 { 3151 "input": "en-GB-boont-r-extended-sequence-x-private", 3152 "expected": "valid", 3153 "actual": "valid", 3154 "passed": true, 3155 "error": null 3156 }, 3157 { 3158 "input": "zh-hakka", 3159 "expected": "valid", 3160 "actual": "valid", 3161 "passed": true, 3162 "error": null 3163 }, 3164 { 3165 "input": "i-default", 3166 "expected": "valid", 3167 "actual": "valid", 3168 "passed": true, 3169 "error": null 3170 }, 3171 { 3172 "input": "i-navajo", 3173 "expected": "valid", 3174 "actual": "valid", 3175 "passed": true, 3176 "error": null 3177 }, 3178 { 3179 "input": "de-CH-1901", 3180 "expected": "valid", 3181 "actual": "valid", 3182 "passed": true, 3183 "error": null 3184 }, 3185 { 3186 "input": "qaa-Qaaa-QM-x-southern", 3187 "expected": "valid", 3188 "actual": "valid", 3189 "passed": true, 3190 "error": null 3191 }, 3192 { 3193 "input": "jaja", 3194 "expected": "invalid", 3195 "actual": "invalid", 3196 "passed": true, 3197 "error": null 3198 }, 3199 { 3200 "input": ".", 3201 "expected": "invalid", 3202 "actual": "invalid", 3203 "passed": true, 3204 "error": null 3205 }, 3206 { 3207 "input": "123", 3208 "expected": "invalid", 3209 "actual": "invalid", 3210 "passed": true, 3211 "error": null 3212 }, 3213 { 3214 "input": "JA", 3215 "expected": "invalid", 3216 "actual": "invalid", 3217 "passed": true, 3218 "error": null 3219 }, 3220 { 3221 "input": "j", 3222 "expected": "invalid", 3223 "actual": "invalid", 3224 "passed": true, 3225 "error": null 3226 }, 3227 { 3228 "input": "ja-", 3229 "expected": "invalid", 3230 "actual": "invalid", 3231 "passed": true, 3232 "error": null 3233 }, 3234 { 3235 "input": "a-DE", 3236 "expected": "invalid", 3237 "actual": "invalid", 3238 "passed": true, 3239 "error": null 3240 } 3241 ] 3242 } 3243 ] 3244 }, 3245 { 3246 "name": "Cryptography", 3247 "spec_url": "https://atproto.com/specs/cryptography", 3248 "total": 12, 3249 "passed": 12, 3250 "failed": 0, 3251 "pass_rate": 100, 3252 "categories": [ 3253 { 3254 "name": "Signature Verification", 3255 "description": "ECDSA signature verification with low-S normalization", 3256 "fixture_file": "signature-fixtures.json", 3257 "total": 6, 3258 "passed": 6, 3259 "failed": 0, 3260 "pass_rate": 100, 3261 "results": [ 3262 { 3263 "input": "valid P-256 key and signature, with low-S signature", 3264 "expected": "valid", 3265 "actual": "valid", 3266 "passed": true, 3267 "error": null 3268 }, 3269 { 3270 "input": "valid K-256 key and signature, with low-S signature", 3271 "expected": "valid", 3272 "actual": "valid", 3273 "passed": true, 3274 "error": null 3275 }, 3276 { 3277 "input": "P-256 key and signature, with non-low-S signature which is invalid in atproto", 3278 "expected": "invalid", 3279 "actual": "invalid", 3280 "passed": true, 3281 "error": null 3282 }, 3283 { 3284 "input": "K-256 key and signature, with non-low-S signature which is invalid in atproto", 3285 "expected": "invalid", 3286 "actual": "invalid", 3287 "passed": true, 3288 "error": null 3289 }, 3290 { 3291 "input": "P-256 key and signature, with DER-encoded signature which is invalid in atproto", 3292 "expected": "invalid", 3293 "actual": "invalid", 3294 "passed": true, 3295 "error": null 3296 }, 3297 { 3298 "input": "K-256 key and signature, with DER-encoded signature which is invalid in atproto", 3299 "expected": "invalid", 3300 "actual": "invalid", 3301 "passed": true, 3302 "error": null 3303 } 3304 ] 3305 }, 3306 { 3307 "name": "P-256 did:key", 3308 "description": "did:key encoding/decoding for P-256 keys", 3309 "fixture_file": "w3c_didkey_P256.json", 3310 "total": 1, 3311 "passed": 1, 3312 "failed": 0, 3313 "pass_rate": 100, 3314 "results": [ 3315 { 3316 "input": "did:key:zDnaeTiq1PdzvZXUaMdezchcMJQpBdH2VN4pgrrEhMCCbmwSb", 3317 "expected": "valid", 3318 "actual": "valid", 3319 "passed": true, 3320 "error": null 3321 } 3322 ] 3323 }, 3324 { 3325 "name": "K-256 did:key", 3326 "description": "did:key encoding/decoding for K-256 (secp256k1) keys", 3327 "fixture_file": "w3c_didkey_K256.json", 3328 "total": 5, 3329 "passed": 5, 3330 "failed": 0, 3331 "pass_rate": 100, 3332 "results": [ 3333 { 3334 "input": "did:key:zQ3shokFTS3brHcDQrn82RUDfCZESWL1ZdCEJwekUDPQiYBme", 3335 "expected": "valid", 3336 "actual": "valid", 3337 "passed": true, 3338 "error": null 3339 }, 3340 { 3341 "input": "did:key:zQ3shtxV1FrJfhqE1dvxYRcCknWNjHc3c5X1y3ZSoPDi2aur2", 3342 "expected": "valid", 3343 "actual": "valid", 3344 "passed": true, 3345 "error": null 3346 }, 3347 { 3348 "input": "did:key:zQ3shZc2QzApp2oymGvQbzP8eKheVshBHbU4ZYjeXqwSKEn6N", 3349 "expected": "valid", 3350 "actual": "valid", 3351 "passed": true, 3352 "error": null 3353 }, 3354 { 3355 "input": "did:key:zQ3shadCps5JLAHcZiuX5YUtWHHL8ysBJqFLWvjZDKAWUBGzy", 3356 "expected": "valid", 3357 "actual": "valid", 3358 "passed": true, 3359 "error": null 3360 }, 3361 { 3362 "input": "did:key:zQ3shptjE6JwdkeKN4fcpnYQY3m9Cet3NiHdAfpvSUZBFoKBj", 3363 "expected": "valid", 3364 "actual": "valid", 3365 "passed": true, 3366 "error": null 3367 } 3368 ] 3369 } 3370 ] 3371 }, 3372 { 3373 "name": "Data Model (IPLD)", 3374 "spec_url": "https://atproto.com/specs/data-model", 3375 "total": 21, 3376 "passed": 21, 3377 "failed": 0, 3378 "pass_rate": 100, 3379 "categories": [ 3380 { 3381 "name": "DAG-CBOR/CID", 3382 "description": "DAG-CBOR encoding and CID computation", 3383 "fixture_file": "data-model-fixtures.json", 3384 "total": 3, 3385 "passed": 3, 3386 "failed": 0, 3387 "pass_rate": 100, 3388 "results": [ 3389 { 3390 "input": "fixture[0]", 3391 "expected": "valid", 3392 "actual": "valid", 3393 "passed": true, 3394 "error": null 3395 }, 3396 { 3397 "input": "fixture[1]", 3398 "expected": "valid", 3399 "actual": "valid", 3400 "passed": true, 3401 "error": null 3402 }, 3403 { 3404 "input": "fixture[2]", 3405 "expected": "valid", 3406 "actual": "valid", 3407 "passed": true, 3408 "error": null 3409 } 3410 ] 3411 }, 3412 { 3413 "name": "CID Syntax", 3414 "description": "CID string format validation", 3415 "fixture_file": "cid_syntax_valid.txt, cid_syntax_invalid.txt", 3416 "total": 18, 3417 "passed": 18, 3418 "failed": 0, 3419 "pass_rate": 100, 3420 "results": [ 3421 { 3422 "input": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", 3423 "expected": "valid", 3424 "actual": "valid", 3425 "passed": true, 3426 "error": null 3427 }, 3428 { 3429 "input": "zdj7WWeQ43G6JJvLWQWZpyHuAMq6uYWRjkBXFad11vE2LHhQ7", 3430 "expected": "valid", 3431 "actual": "valid", 3432 "passed": true, 3433 "error": null 3434 }, 3435 { 3436 "input": "bafybeie5gq4jxvzmsym6hjlwxej4rwdoxt7wadqvmmwbqi7r27fclha2va", 3437 "expected": "valid", 3438 "actual": "valid", 3439 "passed": true, 3440 "error": null 3441 }, 3442 { 3443 "input": "mBcDxtdWx0aWhhc2g+", 3444 "expected": "valid", 3445 "actual": "valid", 3446 "passed": true, 3447 "error": null 3448 }, 3449 { 3450 "input": "z7x3CtScH765HvShXT", 3451 "expected": "valid", 3452 "actual": "valid", 3453 "passed": true, 3454 "error": null 3455 }, 3456 { 3457 "input": "zdj7WhuEjrB52m1BisYCtmjH1hSKa7yZ3jEZ9JcXaFRD51wVz", 3458 "expected": "valid", 3459 "actual": "valid", 3460 "passed": true, 3461 "error": null 3462 }, 3463 { 3464 "input": "7134036155352661643226414134664076", 3465 "expected": "valid", 3466 "actual": "valid", 3467 "passed": true, 3468 "error": null 3469 }, 3470 { 3471 "input": "f017012202c5f688262e0ece8569aa6f94d60aad55ca8d9d83734e4a7430d0cff6588ec2b", 3472 "expected": "valid", 3473 "actual": "valid", 3474 "passed": true, 3475 "error": null 3476 }, 3477 { 3478 "input": "example.com", 3479 "expected": "invalid", 3480 "actual": "invalid", 3481 "passed": true, 3482 "error": null 3483 }, 3484 { 3485 "input": "https://example.com", 3486 "expected": "invalid", 3487 "actual": "invalid", 3488 "passed": true, 3489 "error": null 3490 }, 3491 { 3492 "input": "cid:bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", 3493 "expected": "invalid", 3494 "actual": "invalid", 3495 "passed": true, 3496 "error": null 3497 }, 3498 { 3499 "input": ".", 3500 "expected": "invalid", 3501 "actual": "invalid", 3502 "passed": true, 3503 "error": null 3504 }, 3505 { 3506 "input": "12345", 3507 "expected": "invalid", 3508 "actual": "invalid", 3509 "passed": true, 3510 "error": null 3511 }, 3512 { 3513 "input": " bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", 3514 "expected": "invalid", 3515 "actual": "invalid", 3516 "passed": true, 3517 "error": null 3518 }, 3519 { 3520 "input": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi ", 3521 "expected": "invalid", 3522 "actual": "invalid", 3523 "passed": true, 3524 "error": null 3525 }, 3526 { 3527 "input": "bafybe igdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", 3528 "expected": "invalid", 3529 "actual": "invalid", 3530 "passed": true, 3531 "error": null 3532 }, 3533 { 3534 "input": "QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR", 3535 "expected": "invalid", 3536 "actual": "invalid", 3537 "passed": true, 3538 "error": null 3539 }, 3540 { 3541 "input": "noop", 3542 "expected": "invalid", 3543 "actual": "invalid", 3544 "passed": true, 3545 "error": null 3546 } 3547 ] 3548 } 3549 ] 3550 }, 3551 { 3552 "name": "Merkle Search Tree (MST)", 3553 "spec_url": "https://atproto.com/specs/repository#mst-structure", 3554 "total": 13, 3555 "passed": 13, 3556 "failed": 0, 3557 "pass_rate": 100, 3558 "categories": [ 3559 { 3560 "name": "Key Heights", 3561 "description": "MST key height calculation", 3562 "fixture_file": "key_heights.json", 3563 "total": 0, 3564 "passed": 0, 3565 "failed": 0, 3566 "pass_rate": 0, 3567 "results": [] 3568 }, 3569 { 3570 "name": "Common Prefix", 3571 "description": "Common prefix length calculation", 3572 "fixture_file": "common_prefix.json", 3573 "total": 13, 3574 "passed": 13, 3575 "failed": 0, 3576 "pass_rate": 100, 3577 "results": [ 3578 { 3579 "input": "prefix[0]: , ", 3580 "expected": "valid", 3581 "actual": "valid", 3582 "passed": true, 3583 "error": null 3584 }, 3585 { 3586 "input": "prefix[1]: abc, abc", 3587 "expected": "valid", 3588 "actual": "valid", 3589 "passed": true, 3590 "error": null 3591 }, 3592 { 3593 "input": "prefix[2]: , abc", 3594 "expected": "valid", 3595 "actual": "valid", 3596 "passed": true, 3597 "error": null 3598 }, 3599 { 3600 "input": "prefix[3]: abc, ", 3601 "expected": "valid", 3602 "actual": "valid", 3603 "passed": true, 3604 "error": null 3605 }, 3606 { 3607 "input": "prefix[4]: ab, abc", 3608 "expected": "valid", 3609 "actual": "valid", 3610 "passed": true, 3611 "error": null 3612 }, 3613 { 3614 "input": "prefix[5]: abc, ab", 3615 "expected": "valid", 3616 "actual": "valid", 3617 "passed": true, 3618 "error": null 3619 }, 3620 { 3621 "input": "prefix[6]: abcde, abc", 3622 "expected": "valid", 3623 "actual": "valid", 3624 "passed": true, 3625 "error": null 3626 }, 3627 { 3628 "input": "prefix[7]: abc, abcde", 3629 "expected": "valid", 3630 "actual": "valid", 3631 "passed": true, 3632 "error": null 3633 }, 3634 { 3635 "input": "prefix[8]: abcde, abc1", 3636 "expected": "valid", 3637 "actual": "valid", 3638 "passed": true, 3639 "error": null 3640 }, 3641 { 3642 "input": "prefix[9]: abcde, abb", 3643 "expected": "valid", 3644 "actual": "valid", 3645 "passed": true, 3646 "error": null 3647 }, 3648 { 3649 "input": "prefix[10]: abcde, qbb", 3650 "expected": "valid", 3651 "actual": "valid", 3652 "passed": true, 3653 "error": null 3654 }, 3655 { 3656 "input": "prefix[11]: abc, abc\u0000", 3657 "expected": "valid", 3658 "actual": "valid", 3659 "passed": true, 3660 "error": null 3661 }, 3662 { 3663 "input": "prefix[12]: abc\u0000, abc", 3664 "expected": "valid", 3665 "actual": "valid", 3666 "passed": true, 3667 "error": null 3668 } 3669 ] 3670 } 3671 ] 3672 } 3673 ] 3674}