@thurinlabs/identity-kit 0.8.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -2,12 +2,1247 @@
2
2
  var _react = require('react');
3
3
  var _wagmi = require('wagmi');
4
4
  var _chains = require('wagmi/chains');
5
+
6
+ // src/core/abi.ts
7
+ var REGISTRY_ABI = [
8
+ {
9
+ "type": "function",
10
+ "name": "ATTEST_TYPEHASH",
11
+ "inputs": [],
12
+ "outputs": [
13
+ {
14
+ "name": "",
15
+ "type": "bytes32",
16
+ "internalType": "bytes32"
17
+ }
18
+ ],
19
+ "stateMutability": "view"
20
+ },
21
+ {
22
+ "type": "function",
23
+ "name": "DOMAIN_SEPARATOR",
24
+ "inputs": [],
25
+ "outputs": [
26
+ {
27
+ "name": "",
28
+ "type": "bytes32",
29
+ "internalType": "bytes32"
30
+ }
31
+ ],
32
+ "stateMutability": "view"
33
+ },
34
+ {
35
+ "type": "function",
36
+ "name": "EIP712_NAME",
37
+ "inputs": [],
38
+ "outputs": [
39
+ {
40
+ "name": "",
41
+ "type": "string",
42
+ "internalType": "string"
43
+ }
44
+ ],
45
+ "stateMutability": "view"
46
+ },
47
+ {
48
+ "type": "function",
49
+ "name": "EIP712_VERSION",
50
+ "inputs": [],
51
+ "outputs": [
52
+ {
53
+ "name": "",
54
+ "type": "string",
55
+ "internalType": "string"
56
+ }
57
+ ],
58
+ "stateMutability": "view"
59
+ },
60
+ {
61
+ "type": "function",
62
+ "name": "MAX_KEY_BYTES",
63
+ "inputs": [],
64
+ "outputs": [
65
+ {
66
+ "name": "",
67
+ "type": "uint256",
68
+ "internalType": "uint256"
69
+ }
70
+ ],
71
+ "stateMutability": "view"
72
+ },
73
+ {
74
+ "type": "function",
75
+ "name": "MAX_RECORD_BYTES",
76
+ "inputs": [],
77
+ "outputs": [
78
+ {
79
+ "name": "",
80
+ "type": "uint256",
81
+ "internalType": "uint256"
82
+ }
83
+ ],
84
+ "stateMutability": "view"
85
+ },
86
+ {
87
+ "type": "function",
88
+ "name": "MAX_SIG_BYTES",
89
+ "inputs": [],
90
+ "outputs": [
91
+ {
92
+ "name": "",
93
+ "type": "uint256",
94
+ "internalType": "uint256"
95
+ }
96
+ ],
97
+ "stateMutability": "view"
98
+ },
99
+ {
100
+ "type": "function",
101
+ "name": "MESSAGE_VERSION",
102
+ "inputs": [],
103
+ "outputs": [
104
+ {
105
+ "name": "",
106
+ "type": "uint8",
107
+ "internalType": "uint8"
108
+ }
109
+ ],
110
+ "stateMutability": "view"
111
+ },
112
+ {
113
+ "type": "function",
114
+ "name": "REATTEST_TYPEHASH",
115
+ "inputs": [],
116
+ "outputs": [
117
+ {
118
+ "name": "",
119
+ "type": "bytes32",
120
+ "internalType": "bytes32"
121
+ }
122
+ ],
123
+ "stateMutability": "view"
124
+ },
125
+ {
126
+ "type": "function",
127
+ "name": "REVOKE_TYPEHASH",
128
+ "inputs": [],
129
+ "outputs": [
130
+ {
131
+ "name": "",
132
+ "type": "bytes32",
133
+ "internalType": "bytes32"
134
+ }
135
+ ],
136
+ "stateMutability": "view"
137
+ },
138
+ {
139
+ "type": "function",
140
+ "name": "SET_RECORD_TYPEHASH",
141
+ "inputs": [],
142
+ "outputs": [
143
+ {
144
+ "name": "",
145
+ "type": "bytes32",
146
+ "internalType": "bytes32"
147
+ }
148
+ ],
149
+ "stateMutability": "view"
150
+ },
151
+ {
152
+ "type": "function",
153
+ "name": "UPDATE_KEY_TYPEHASH",
154
+ "inputs": [],
155
+ "outputs": [
156
+ {
157
+ "name": "",
158
+ "type": "bytes32",
159
+ "internalType": "bytes32"
160
+ }
161
+ ],
162
+ "stateMutability": "view"
163
+ },
164
+ {
165
+ "type": "function",
166
+ "name": "VERSION",
167
+ "inputs": [],
168
+ "outputs": [
169
+ {
170
+ "name": "",
171
+ "type": "uint8",
172
+ "internalType": "uint8"
173
+ }
174
+ ],
175
+ "stateMutability": "view"
176
+ },
177
+ {
178
+ "type": "function",
179
+ "name": "addressesFor",
180
+ "inputs": [
181
+ {
182
+ "name": "fingerprintHash",
183
+ "type": "bytes32",
184
+ "internalType": "bytes32"
185
+ }
186
+ ],
187
+ "outputs": [
188
+ {
189
+ "name": "",
190
+ "type": "address[]",
191
+ "internalType": "address[]"
192
+ }
193
+ ],
194
+ "stateMutability": "view"
195
+ },
196
+ {
197
+ "type": "function",
198
+ "name": "addressesForCount",
199
+ "inputs": [
200
+ {
201
+ "name": "fingerprintHash",
202
+ "type": "bytes32",
203
+ "internalType": "bytes32"
204
+ }
205
+ ],
206
+ "outputs": [
207
+ {
208
+ "name": "",
209
+ "type": "uint256",
210
+ "internalType": "uint256"
211
+ }
212
+ ],
213
+ "stateMutability": "view"
214
+ },
215
+ {
216
+ "type": "function",
217
+ "name": "addressesForRange",
218
+ "inputs": [
219
+ {
220
+ "name": "fingerprintHash",
221
+ "type": "bytes32",
222
+ "internalType": "bytes32"
223
+ },
224
+ {
225
+ "name": "start",
226
+ "type": "uint256",
227
+ "internalType": "uint256"
228
+ },
229
+ {
230
+ "name": "count",
231
+ "type": "uint256",
232
+ "internalType": "uint256"
233
+ }
234
+ ],
235
+ "outputs": [
236
+ {
237
+ "name": "out",
238
+ "type": "address[]",
239
+ "internalType": "address[]"
240
+ }
241
+ ],
242
+ "stateMutability": "view"
243
+ },
244
+ {
245
+ "type": "function",
246
+ "name": "attest",
247
+ "inputs": [
248
+ {
249
+ "name": "fingerprint",
250
+ "type": "bytes",
251
+ "internalType": "bytes"
252
+ },
253
+ {
254
+ "name": "pgpSignature",
255
+ "type": "bytes",
256
+ "internalType": "bytes"
257
+ },
258
+ {
259
+ "name": "pgpPublicKey",
260
+ "type": "bytes",
261
+ "internalType": "bytes"
262
+ }
263
+ ],
264
+ "outputs": [
265
+ {
266
+ "name": "index",
267
+ "type": "uint256",
268
+ "internalType": "uint256"
269
+ }
270
+ ],
271
+ "stateMutability": "nonpayable"
272
+ },
273
+ {
274
+ "type": "function",
275
+ "name": "attestFor",
276
+ "inputs": [
277
+ {
278
+ "name": "owner",
279
+ "type": "address",
280
+ "internalType": "address"
281
+ },
282
+ {
283
+ "name": "fingerprint",
284
+ "type": "bytes",
285
+ "internalType": "bytes"
286
+ },
287
+ {
288
+ "name": "pgpSignature",
289
+ "type": "bytes",
290
+ "internalType": "bytes"
291
+ },
292
+ {
293
+ "name": "pgpPublicKey",
294
+ "type": "bytes",
295
+ "internalType": "bytes"
296
+ },
297
+ {
298
+ "name": "deadline",
299
+ "type": "uint256",
300
+ "internalType": "uint256"
301
+ },
302
+ {
303
+ "name": "signature",
304
+ "type": "bytes",
305
+ "internalType": "bytes"
306
+ }
307
+ ],
308
+ "outputs": [
309
+ {
310
+ "name": "index",
311
+ "type": "uint256",
312
+ "internalType": "uint256"
313
+ }
314
+ ],
315
+ "stateMutability": "nonpayable"
316
+ },
317
+ {
318
+ "type": "function",
319
+ "name": "attestationCount",
320
+ "inputs": [
321
+ {
322
+ "name": "owner",
323
+ "type": "address",
324
+ "internalType": "address"
325
+ }
326
+ ],
327
+ "outputs": [
328
+ {
329
+ "name": "",
330
+ "type": "uint256",
331
+ "internalType": "uint256"
332
+ }
333
+ ],
334
+ "stateMutability": "view"
335
+ },
336
+ {
337
+ "type": "function",
338
+ "name": "attestationsOf",
339
+ "inputs": [
340
+ {
341
+ "name": "owner",
342
+ "type": "address",
343
+ "internalType": "address"
344
+ }
345
+ ],
346
+ "outputs": [
347
+ {
348
+ "name": "",
349
+ "type": "tuple[]",
350
+ "internalType": "struct PGPRegistry.Attestation[]",
351
+ "components": [
352
+ {
353
+ "name": "fingerprint",
354
+ "type": "bytes",
355
+ "internalType": "bytes"
356
+ },
357
+ {
358
+ "name": "createdAt",
359
+ "type": "uint64",
360
+ "internalType": "uint64"
361
+ },
362
+ {
363
+ "name": "revokedAt",
364
+ "type": "uint64",
365
+ "internalType": "uint64"
366
+ },
367
+ {
368
+ "name": "messageVersion",
369
+ "type": "uint8",
370
+ "internalType": "uint8"
371
+ },
372
+ {
373
+ "name": "keyPtr",
374
+ "type": "address",
375
+ "internalType": "address"
376
+ },
377
+ {
378
+ "name": "sigPtr",
379
+ "type": "address",
380
+ "internalType": "address"
381
+ }
382
+ ]
383
+ }
384
+ ],
385
+ "stateMutability": "view"
386
+ },
387
+ {
388
+ "type": "function",
389
+ "name": "attestationsOfRange",
390
+ "inputs": [
391
+ {
392
+ "name": "owner",
393
+ "type": "address",
394
+ "internalType": "address"
395
+ },
396
+ {
397
+ "name": "start",
398
+ "type": "uint256",
399
+ "internalType": "uint256"
400
+ },
401
+ {
402
+ "name": "count",
403
+ "type": "uint256",
404
+ "internalType": "uint256"
405
+ }
406
+ ],
407
+ "outputs": [
408
+ {
409
+ "name": "out",
410
+ "type": "tuple[]",
411
+ "internalType": "struct PGPRegistry.Attestation[]",
412
+ "components": [
413
+ {
414
+ "name": "fingerprint",
415
+ "type": "bytes",
416
+ "internalType": "bytes"
417
+ },
418
+ {
419
+ "name": "createdAt",
420
+ "type": "uint64",
421
+ "internalType": "uint64"
422
+ },
423
+ {
424
+ "name": "revokedAt",
425
+ "type": "uint64",
426
+ "internalType": "uint64"
427
+ },
428
+ {
429
+ "name": "messageVersion",
430
+ "type": "uint8",
431
+ "internalType": "uint8"
432
+ },
433
+ {
434
+ "name": "keyPtr",
435
+ "type": "address",
436
+ "internalType": "address"
437
+ },
438
+ {
439
+ "name": "sigPtr",
440
+ "type": "address",
441
+ "internalType": "address"
442
+ }
443
+ ]
444
+ }
445
+ ],
446
+ "stateMutability": "view"
447
+ },
448
+ {
449
+ "type": "function",
450
+ "name": "cancelAuthorization",
451
+ "inputs": [],
452
+ "outputs": [],
453
+ "stateMutability": "nonpayable"
454
+ },
455
+ {
456
+ "type": "function",
457
+ "name": "current",
458
+ "inputs": [
459
+ {
460
+ "name": "owner",
461
+ "type": "address",
462
+ "internalType": "address"
463
+ }
464
+ ],
465
+ "outputs": [
466
+ {
467
+ "name": "found",
468
+ "type": "bool",
469
+ "internalType": "bool"
470
+ },
471
+ {
472
+ "name": "index",
473
+ "type": "uint256",
474
+ "internalType": "uint256"
475
+ },
476
+ {
477
+ "name": "attestation",
478
+ "type": "tuple",
479
+ "internalType": "struct PGPRegistry.Attestation",
480
+ "components": [
481
+ {
482
+ "name": "fingerprint",
483
+ "type": "bytes",
484
+ "internalType": "bytes"
485
+ },
486
+ {
487
+ "name": "createdAt",
488
+ "type": "uint64",
489
+ "internalType": "uint64"
490
+ },
491
+ {
492
+ "name": "revokedAt",
493
+ "type": "uint64",
494
+ "internalType": "uint64"
495
+ },
496
+ {
497
+ "name": "messageVersion",
498
+ "type": "uint8",
499
+ "internalType": "uint8"
500
+ },
501
+ {
502
+ "name": "keyPtr",
503
+ "type": "address",
504
+ "internalType": "address"
505
+ },
506
+ {
507
+ "name": "sigPtr",
508
+ "type": "address",
509
+ "internalType": "address"
510
+ }
511
+ ]
512
+ }
513
+ ],
514
+ "stateMutability": "view"
515
+ },
516
+ {
517
+ "type": "function",
518
+ "name": "fingerprintsForKeyId",
519
+ "inputs": [
520
+ {
521
+ "name": "keyId",
522
+ "type": "bytes8",
523
+ "internalType": "bytes8"
524
+ }
525
+ ],
526
+ "outputs": [
527
+ {
528
+ "name": "",
529
+ "type": "bytes[]",
530
+ "internalType": "bytes[]"
531
+ }
532
+ ],
533
+ "stateMutability": "view"
534
+ },
535
+ {
536
+ "type": "function",
537
+ "name": "fingerprintsForKeyIdCount",
538
+ "inputs": [
539
+ {
540
+ "name": "keyId",
541
+ "type": "bytes8",
542
+ "internalType": "bytes8"
543
+ }
544
+ ],
545
+ "outputs": [
546
+ {
547
+ "name": "",
548
+ "type": "uint256",
549
+ "internalType": "uint256"
550
+ }
551
+ ],
552
+ "stateMutability": "view"
553
+ },
554
+ {
555
+ "type": "function",
556
+ "name": "fingerprintsForKeyIdRange",
557
+ "inputs": [
558
+ {
559
+ "name": "keyId",
560
+ "type": "bytes8",
561
+ "internalType": "bytes8"
562
+ },
563
+ {
564
+ "name": "start",
565
+ "type": "uint256",
566
+ "internalType": "uint256"
567
+ },
568
+ {
569
+ "name": "count",
570
+ "type": "uint256",
571
+ "internalType": "uint256"
572
+ }
573
+ ],
574
+ "outputs": [
575
+ {
576
+ "name": "out",
577
+ "type": "bytes[]",
578
+ "internalType": "bytes[]"
579
+ }
580
+ ],
581
+ "stateMutability": "view"
582
+ },
583
+ {
584
+ "type": "function",
585
+ "name": "getAttestation",
586
+ "inputs": [
587
+ {
588
+ "name": "owner",
589
+ "type": "address",
590
+ "internalType": "address"
591
+ },
592
+ {
593
+ "name": "index",
594
+ "type": "uint256",
595
+ "internalType": "uint256"
596
+ }
597
+ ],
598
+ "outputs": [
599
+ {
600
+ "name": "",
601
+ "type": "tuple",
602
+ "internalType": "struct PGPRegistry.Attestation",
603
+ "components": [
604
+ {
605
+ "name": "fingerprint",
606
+ "type": "bytes",
607
+ "internalType": "bytes"
608
+ },
609
+ {
610
+ "name": "createdAt",
611
+ "type": "uint64",
612
+ "internalType": "uint64"
613
+ },
614
+ {
615
+ "name": "revokedAt",
616
+ "type": "uint64",
617
+ "internalType": "uint64"
618
+ },
619
+ {
620
+ "name": "messageVersion",
621
+ "type": "uint8",
622
+ "internalType": "uint8"
623
+ },
624
+ {
625
+ "name": "keyPtr",
626
+ "type": "address",
627
+ "internalType": "address"
628
+ },
629
+ {
630
+ "name": "sigPtr",
631
+ "type": "address",
632
+ "internalType": "address"
633
+ }
634
+ ]
635
+ }
636
+ ],
637
+ "stateMutability": "view"
638
+ },
639
+ {
640
+ "type": "function",
641
+ "name": "getPayload",
642
+ "inputs": [
643
+ {
644
+ "name": "owner",
645
+ "type": "address",
646
+ "internalType": "address"
647
+ },
648
+ {
649
+ "name": "index",
650
+ "type": "uint256",
651
+ "internalType": "uint256"
652
+ }
653
+ ],
654
+ "outputs": [
655
+ {
656
+ "name": "pgpSignature",
657
+ "type": "bytes",
658
+ "internalType": "bytes"
659
+ },
660
+ {
661
+ "name": "pgpPublicKey",
662
+ "type": "bytes",
663
+ "internalType": "bytes"
664
+ }
665
+ ],
666
+ "stateMutability": "view"
667
+ },
668
+ {
669
+ "type": "function",
670
+ "name": "nonces",
671
+ "inputs": [
672
+ {
673
+ "name": "",
674
+ "type": "address",
675
+ "internalType": "address"
676
+ }
677
+ ],
678
+ "outputs": [
679
+ {
680
+ "name": "",
681
+ "type": "uint256",
682
+ "internalType": "uint256"
683
+ }
684
+ ],
685
+ "stateMutability": "view"
686
+ },
687
+ {
688
+ "type": "function",
689
+ "name": "reattest",
690
+ "inputs": [
691
+ {
692
+ "name": "revokeIndex",
693
+ "type": "uint256",
694
+ "internalType": "uint256"
695
+ },
696
+ {
697
+ "name": "fingerprint",
698
+ "type": "bytes",
699
+ "internalType": "bytes"
700
+ },
701
+ {
702
+ "name": "pgpSignature",
703
+ "type": "bytes",
704
+ "internalType": "bytes"
705
+ },
706
+ {
707
+ "name": "pgpPublicKey",
708
+ "type": "bytes",
709
+ "internalType": "bytes"
710
+ }
711
+ ],
712
+ "outputs": [
713
+ {
714
+ "name": "index",
715
+ "type": "uint256",
716
+ "internalType": "uint256"
717
+ }
718
+ ],
719
+ "stateMutability": "nonpayable"
720
+ },
721
+ {
722
+ "type": "function",
723
+ "name": "reattestFor",
724
+ "inputs": [
725
+ {
726
+ "name": "owner",
727
+ "type": "address",
728
+ "internalType": "address"
729
+ },
730
+ {
731
+ "name": "revokeIndex",
732
+ "type": "uint256",
733
+ "internalType": "uint256"
734
+ },
735
+ {
736
+ "name": "fingerprint",
737
+ "type": "bytes",
738
+ "internalType": "bytes"
739
+ },
740
+ {
741
+ "name": "pgpSignature",
742
+ "type": "bytes",
743
+ "internalType": "bytes"
744
+ },
745
+ {
746
+ "name": "pgpPublicKey",
747
+ "type": "bytes",
748
+ "internalType": "bytes"
749
+ },
750
+ {
751
+ "name": "deadline",
752
+ "type": "uint256",
753
+ "internalType": "uint256"
754
+ },
755
+ {
756
+ "name": "signature",
757
+ "type": "bytes",
758
+ "internalType": "bytes"
759
+ }
760
+ ],
761
+ "outputs": [
762
+ {
763
+ "name": "index",
764
+ "type": "uint256",
765
+ "internalType": "uint256"
766
+ }
767
+ ],
768
+ "stateMutability": "nonpayable"
769
+ },
770
+ {
771
+ "type": "function",
772
+ "name": "record",
773
+ "inputs": [
774
+ {
775
+ "name": "owner",
776
+ "type": "address",
777
+ "internalType": "address"
778
+ },
779
+ {
780
+ "name": "index",
781
+ "type": "uint256",
782
+ "internalType": "uint256"
783
+ },
784
+ {
785
+ "name": "kind",
786
+ "type": "bytes32",
787
+ "internalType": "bytes32"
788
+ }
789
+ ],
790
+ "outputs": [
791
+ {
792
+ "name": "",
793
+ "type": "bytes",
794
+ "internalType": "bytes"
795
+ }
796
+ ],
797
+ "stateMutability": "view"
798
+ },
799
+ {
800
+ "type": "function",
801
+ "name": "revoke",
802
+ "inputs": [
803
+ {
804
+ "name": "index",
805
+ "type": "uint256",
806
+ "internalType": "uint256"
807
+ }
808
+ ],
809
+ "outputs": [],
810
+ "stateMutability": "nonpayable"
811
+ },
812
+ {
813
+ "type": "function",
814
+ "name": "revokeFor",
815
+ "inputs": [
816
+ {
817
+ "name": "owner",
818
+ "type": "address",
819
+ "internalType": "address"
820
+ },
821
+ {
822
+ "name": "index",
823
+ "type": "uint256",
824
+ "internalType": "uint256"
825
+ },
826
+ {
827
+ "name": "deadline",
828
+ "type": "uint256",
829
+ "internalType": "uint256"
830
+ },
831
+ {
832
+ "name": "signature",
833
+ "type": "bytes",
834
+ "internalType": "bytes"
835
+ }
836
+ ],
837
+ "outputs": [],
838
+ "stateMutability": "nonpayable"
839
+ },
840
+ {
841
+ "type": "function",
842
+ "name": "setRecord",
843
+ "inputs": [
844
+ {
845
+ "name": "index",
846
+ "type": "uint256",
847
+ "internalType": "uint256"
848
+ },
849
+ {
850
+ "name": "kind",
851
+ "type": "bytes32",
852
+ "internalType": "bytes32"
853
+ },
854
+ {
855
+ "name": "value",
856
+ "type": "bytes",
857
+ "internalType": "bytes"
858
+ }
859
+ ],
860
+ "outputs": [],
861
+ "stateMutability": "nonpayable"
862
+ },
863
+ {
864
+ "type": "function",
865
+ "name": "setRecordFor",
866
+ "inputs": [
867
+ {
868
+ "name": "owner",
869
+ "type": "address",
870
+ "internalType": "address"
871
+ },
872
+ {
873
+ "name": "index",
874
+ "type": "uint256",
875
+ "internalType": "uint256"
876
+ },
877
+ {
878
+ "name": "kind",
879
+ "type": "bytes32",
880
+ "internalType": "bytes32"
881
+ },
882
+ {
883
+ "name": "value",
884
+ "type": "bytes",
885
+ "internalType": "bytes"
886
+ },
887
+ {
888
+ "name": "deadline",
889
+ "type": "uint256",
890
+ "internalType": "uint256"
891
+ },
892
+ {
893
+ "name": "signature",
894
+ "type": "bytes",
895
+ "internalType": "bytes"
896
+ }
897
+ ],
898
+ "outputs": [],
899
+ "stateMutability": "nonpayable"
900
+ },
901
+ {
902
+ "type": "function",
903
+ "name": "updateKey",
904
+ "inputs": [
905
+ {
906
+ "name": "index",
907
+ "type": "uint256",
908
+ "internalType": "uint256"
909
+ },
910
+ {
911
+ "name": "pgpPublicKey",
912
+ "type": "bytes",
913
+ "internalType": "bytes"
914
+ }
915
+ ],
916
+ "outputs": [],
917
+ "stateMutability": "nonpayable"
918
+ },
919
+ {
920
+ "type": "function",
921
+ "name": "updateKeyFor",
922
+ "inputs": [
923
+ {
924
+ "name": "owner",
925
+ "type": "address",
926
+ "internalType": "address"
927
+ },
928
+ {
929
+ "name": "index",
930
+ "type": "uint256",
931
+ "internalType": "uint256"
932
+ },
933
+ {
934
+ "name": "pgpPublicKey",
935
+ "type": "bytes",
936
+ "internalType": "bytes"
937
+ },
938
+ {
939
+ "name": "deadline",
940
+ "type": "uint256",
941
+ "internalType": "uint256"
942
+ },
943
+ {
944
+ "name": "signature",
945
+ "type": "bytes",
946
+ "internalType": "bytes"
947
+ }
948
+ ],
949
+ "outputs": [],
950
+ "stateMutability": "nonpayable"
951
+ },
952
+ {
953
+ "type": "event",
954
+ "name": "Attested",
955
+ "inputs": [
956
+ {
957
+ "name": "owner",
958
+ "type": "address",
959
+ "indexed": true,
960
+ "internalType": "address"
961
+ },
962
+ {
963
+ "name": "fingerprintHash",
964
+ "type": "bytes32",
965
+ "indexed": true,
966
+ "internalType": "bytes32"
967
+ },
968
+ {
969
+ "name": "index",
970
+ "type": "uint256",
971
+ "indexed": true,
972
+ "internalType": "uint256"
973
+ },
974
+ {
975
+ "name": "fingerprint",
976
+ "type": "bytes",
977
+ "indexed": false,
978
+ "internalType": "bytes"
979
+ },
980
+ {
981
+ "name": "messageVersion",
982
+ "type": "uint8",
983
+ "indexed": false,
984
+ "internalType": "uint8"
985
+ },
986
+ {
987
+ "name": "keyPtr",
988
+ "type": "address",
989
+ "indexed": false,
990
+ "internalType": "address"
991
+ },
992
+ {
993
+ "name": "sigPtr",
994
+ "type": "address",
995
+ "indexed": false,
996
+ "internalType": "address"
997
+ },
998
+ {
999
+ "name": "submitter",
1000
+ "type": "address",
1001
+ "indexed": false,
1002
+ "internalType": "address"
1003
+ }
1004
+ ],
1005
+ "anonymous": false
1006
+ },
1007
+ {
1008
+ "type": "event",
1009
+ "name": "KeyUpdated",
1010
+ "inputs": [
1011
+ {
1012
+ "name": "owner",
1013
+ "type": "address",
1014
+ "indexed": true,
1015
+ "internalType": "address"
1016
+ },
1017
+ {
1018
+ "name": "fingerprintHash",
1019
+ "type": "bytes32",
1020
+ "indexed": true,
1021
+ "internalType": "bytes32"
1022
+ },
1023
+ {
1024
+ "name": "index",
1025
+ "type": "uint256",
1026
+ "indexed": true,
1027
+ "internalType": "uint256"
1028
+ },
1029
+ {
1030
+ "name": "oldKeyPtr",
1031
+ "type": "address",
1032
+ "indexed": false,
1033
+ "internalType": "address"
1034
+ },
1035
+ {
1036
+ "name": "newKeyPtr",
1037
+ "type": "address",
1038
+ "indexed": false,
1039
+ "internalType": "address"
1040
+ },
1041
+ {
1042
+ "name": "submitter",
1043
+ "type": "address",
1044
+ "indexed": false,
1045
+ "internalType": "address"
1046
+ }
1047
+ ],
1048
+ "anonymous": false
1049
+ },
1050
+ {
1051
+ "type": "event",
1052
+ "name": "NonceUsed",
1053
+ "inputs": [
1054
+ {
1055
+ "name": "owner",
1056
+ "type": "address",
1057
+ "indexed": true,
1058
+ "internalType": "address"
1059
+ },
1060
+ {
1061
+ "name": "nonce",
1062
+ "type": "uint256",
1063
+ "indexed": false,
1064
+ "internalType": "uint256"
1065
+ }
1066
+ ],
1067
+ "anonymous": false
1068
+ },
1069
+ {
1070
+ "type": "event",
1071
+ "name": "RecordSet",
1072
+ "inputs": [
1073
+ {
1074
+ "name": "owner",
1075
+ "type": "address",
1076
+ "indexed": true,
1077
+ "internalType": "address"
1078
+ },
1079
+ {
1080
+ "name": "index",
1081
+ "type": "uint256",
1082
+ "indexed": true,
1083
+ "internalType": "uint256"
1084
+ },
1085
+ {
1086
+ "name": "kind",
1087
+ "type": "bytes32",
1088
+ "indexed": true,
1089
+ "internalType": "bytes32"
1090
+ },
1091
+ {
1092
+ "name": "submitter",
1093
+ "type": "address",
1094
+ "indexed": false,
1095
+ "internalType": "address"
1096
+ }
1097
+ ],
1098
+ "anonymous": false
1099
+ },
1100
+ {
1101
+ "type": "event",
1102
+ "name": "Revoked",
1103
+ "inputs": [
1104
+ {
1105
+ "name": "owner",
1106
+ "type": "address",
1107
+ "indexed": true,
1108
+ "internalType": "address"
1109
+ },
1110
+ {
1111
+ "name": "fingerprintHash",
1112
+ "type": "bytes32",
1113
+ "indexed": true,
1114
+ "internalType": "bytes32"
1115
+ },
1116
+ {
1117
+ "name": "index",
1118
+ "type": "uint256",
1119
+ "indexed": true,
1120
+ "internalType": "uint256"
1121
+ },
1122
+ {
1123
+ "name": "submitter",
1124
+ "type": "address",
1125
+ "indexed": false,
1126
+ "internalType": "address"
1127
+ }
1128
+ ],
1129
+ "anonymous": false
1130
+ },
1131
+ {
1132
+ "type": "error",
1133
+ "name": "AlreadyRevoked",
1134
+ "inputs": []
1135
+ },
1136
+ {
1137
+ "type": "error",
1138
+ "name": "AuthorizationExpired",
1139
+ "inputs": []
1140
+ },
1141
+ {
1142
+ "type": "error",
1143
+ "name": "DeploymentFailed",
1144
+ "inputs": []
1145
+ },
1146
+ {
1147
+ "type": "error",
1148
+ "name": "DuplicateActiveFingerprint",
1149
+ "inputs": []
1150
+ },
1151
+ {
1152
+ "type": "error",
1153
+ "name": "EmptyPublicKey",
1154
+ "inputs": []
1155
+ },
1156
+ {
1157
+ "type": "error",
1158
+ "name": "EmptySignature",
1159
+ "inputs": []
1160
+ },
1161
+ {
1162
+ "type": "error",
1163
+ "name": "IndexOutOfBounds",
1164
+ "inputs": []
1165
+ },
1166
+ {
1167
+ "type": "error",
1168
+ "name": "InvalidAuthorization",
1169
+ "inputs": []
1170
+ },
1171
+ {
1172
+ "type": "error",
1173
+ "name": "InvalidFingerprintLength",
1174
+ "inputs": []
1175
+ },
1176
+ {
1177
+ "type": "error",
1178
+ "name": "InvalidPointer",
1179
+ "inputs": []
1180
+ },
1181
+ {
1182
+ "type": "error",
1183
+ "name": "PublicKeyTooLarge",
1184
+ "inputs": []
1185
+ },
1186
+ {
1187
+ "type": "error",
1188
+ "name": "RecordTooLarge",
1189
+ "inputs": []
1190
+ },
1191
+ {
1192
+ "type": "error",
1193
+ "name": "SignatureTooLarge",
1194
+ "inputs": []
1195
+ }
1196
+ ];
1197
+
1198
+ // src/core/contract.ts
1199
+ var REGISTRY_ADDRESS = "0x9302E02e2869e129aC8516fE5eFFd51EA3082c09";
1200
+ var NETWORKS = {
1201
+ mainnet: {
1202
+ chainId: 1,
1203
+ address: REGISTRY_ADDRESS,
1204
+ deployBlock: 25962908n,
1205
+ // 2026-09-12, tx 0xda4c3a19cae4e71ffb02559a048403f664d5a7967c19d42158c39600ec63bad8
1206
+ explorerUrl: "https://etherscan.io",
1207
+ defaultRpcUrl: "https://ethereum-rpc.publicnode.com"
1208
+ },
1209
+ sepolia: {
1210
+ chainId: 11155111,
1211
+ address: REGISTRY_ADDRESS,
1212
+ deployBlock: 11683667n,
1213
+ // 2026-09-11, tx 0x3e40e8f5b9fbf82a4b8943561bcc9b964b2987de10640ac8ff3a1b4ef0725322
1214
+ explorerUrl: "https://sepolia.etherscan.io",
1215
+ defaultRpcUrl: "https://ethereum-sepolia-rpc.publicnode.com"
1216
+ },
1217
+ /** A local anvil instance (`anvil`, chain id 31337). Deploy with pgp-registry's Deploy script. */
1218
+ local: {
1219
+ chainId: 31337,
1220
+ address: REGISTRY_ADDRESS,
1221
+ deployBlock: 0n,
1222
+ explorerUrl: "",
1223
+ defaultRpcUrl: "http://127.0.0.1:8545"
1224
+ }
1225
+ };
1226
+ function isNetworkName(value) {
1227
+ return value === "mainnet" || value === "sepolia" || value === "local";
1228
+ }
1229
+ function getRegistry(network = "mainnet", addressOverride) {
1230
+ const r = NETWORKS[network];
1231
+ if (!r) throw new Error(`Unknown network: ${network}`);
1232
+ if (addressOverride && /^0x[0-9a-fA-F]{40}$/.test(addressOverride)) {
1233
+ return { ...r, address: addressOverride };
1234
+ }
1235
+ return r;
1236
+ }
1237
+
1238
+ // src/provider.tsx
5
1239
  var _reactquery = require('@tanstack/react-query');
6
1240
 
7
1241
  // src/context.ts
8
1242
 
9
1243
  var defaultConfig = {
10
- baseUrl: "https://thurin.id"
1244
+ baseUrl: "https://thurin.id",
1245
+ network: "mainnet"
11
1246
  };
12
1247
  var IdentityKitContext = _react.createContext.call(void 0, defaultConfig);
13
1248
  function useIdentityKitConfig() {
@@ -24,22 +1259,25 @@ var defaultQueryClient = new (0, _reactquery.QueryClient)({
24
1259
  }
25
1260
  }
26
1261
  });
27
- function createDefaultWagmiConfig(rpcUrl) {
28
- return _wagmi.createConfig.call(void 0, {
29
- chains: [_chains.mainnet],
30
- transports: {
31
- [_chains.mainnet.id]: _wagmi.http.call(void 0, rpcUrl || "https://ethereum-rpc.publicnode.com")
32
- }
33
- });
1262
+ function chainFor(network = "mainnet") {
1263
+ if (network === "sepolia") return _chains.sepolia;
1264
+ if (network === "local") return _chains.foundry;
1265
+ return _chains.mainnet;
34
1266
  }
35
- function WagmiDetector({ children, rpcUrl }) {
1267
+ function createDefaultWagmiConfig(rpcUrl, network) {
1268
+ const url = rpcUrl || getRegistry(network).defaultRpcUrl;
1269
+ if (network === "sepolia") return _wagmi.createConfig.call(void 0, { chains: [_chains.sepolia], transports: { [_chains.sepolia.id]: _wagmi.http.call(void 0, url) } });
1270
+ if (network === "local") return _wagmi.createConfig.call(void 0, { chains: [_chains.foundry], transports: { [_chains.foundry.id]: _wagmi.http.call(void 0, url) } });
1271
+ return _wagmi.createConfig.call(void 0, { chains: [_chains.mainnet], transports: { [_chains.mainnet.id]: _wagmi.http.call(void 0, url) } });
1272
+ }
1273
+ function WagmiDetector({ children, rpcUrl, network }) {
36
1274
  let hasWagmi = false;
37
1275
  try {
38
1276
  _wagmi.useConfig.call(void 0, );
39
1277
  hasWagmi = true;
40
1278
  } catch (e) {
41
1279
  }
42
- const wagmiConfig = _react.useMemo.call(void 0, () => createDefaultWagmiConfig(rpcUrl), [rpcUrl]);
1280
+ const wagmiConfig = _react.useMemo.call(void 0, () => createDefaultWagmiConfig(rpcUrl, network), [rpcUrl, network]);
43
1281
  if (hasWagmi) {
44
1282
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children });
45
1283
  }
@@ -49,93 +1287,84 @@ function IdentityKitProvider({
49
1287
  children,
50
1288
  rpcUrl,
51
1289
  neynarApiKey,
52
- baseUrl = "https://thurin.id"
1290
+ baseUrl = "https://thurin.id",
1291
+ network = "mainnet",
1292
+ registryAddress
53
1293
  }) {
54
1294
  const config = _react.useMemo.call(void 0,
55
- () => ({ rpcUrl, neynarApiKey, baseUrl }),
56
- [rpcUrl, neynarApiKey, baseUrl]
1295
+ () => ({ rpcUrl, neynarApiKey, baseUrl, network, registryAddress }),
1296
+ [rpcUrl, neynarApiKey, baseUrl, network, registryAddress]
57
1297
  );
58
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, IdentityKitContext.Provider, { value: config, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, WagmiDetector, { rpcUrl, children }) });
1298
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, IdentityKitContext.Provider, { value: config, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, WagmiDetector, { rpcUrl, network, children }) });
59
1299
  }
60
1300
 
61
1301
  // src/hooks/useThurinIdentity.ts
62
1302
 
63
-
64
1303
  var _ens = require('viem/ens');
65
1304
 
66
1305
  // src/hooks/useAttestations.ts
67
1306
 
68
1307
 
69
-
70
1308
  var _viem = require('viem');
71
1309
 
72
- // src/core/contract.ts
73
- var REGISTRY_ADDRESS = "0xf7a45BC662A78a6fb417ED5f52b3766cbf13EbBb";
74
- var CONTRACT_DEPLOY_BLOCK = 24515891n;
75
- var REGISTRY_ABI = [
76
- {
77
- name: "Attested",
78
- type: "event",
79
- inputs: [
80
- { name: "ethAddress", type: "address", indexed: true },
81
- { name: "fingerprintHash", type: "string", indexed: true },
82
- { name: "fingerprint", type: "string", indexed: false },
83
- { name: "pgpSignature", type: "string", indexed: false },
84
- { name: "pgpPublicKey", type: "string", indexed: false },
85
- { name: "index", type: "uint256", indexed: false },
86
- { name: "timestamp", type: "uint256", indexed: false }
87
- ]
88
- },
89
- {
90
- name: "attestationCount",
91
- type: "function",
92
- stateMutability: "view",
93
- inputs: [{ name: "addr", type: "address" }],
94
- outputs: [{ name: "", type: "uint256" }]
95
- },
96
- {
97
- name: "getAttestation",
98
- type: "function",
99
- stateMutability: "view",
100
- inputs: [
101
- { name: "addr", type: "address" },
102
- { name: "index", type: "uint256" }
103
- ],
104
- outputs: [
105
- { name: "fingerprint", type: "string" },
106
- { name: "createdAt", type: "uint256" },
107
- { name: "revoked", type: "bool" }
108
- ]
109
- }
110
- ];
1310
+ // src/core/fingerprint.ts
111
1311
 
112
- // src/core/logs.ts
113
- var LOG_CHUNK_SIZE = 49999n;
114
- async function getLogsChunked(client, params) {
115
- const latest = await client.getBlockNumber();
116
- const fromBlock = _nullishCoalesce(params.fromBlock, () => ( CONTRACT_DEPLOY_BLOCK));
117
- const toBlock = params.toBlock === "latest" || !params.toBlock ? latest : params.toBlock;
118
- const allLogs = [];
119
- for (let start = fromBlock; start <= toBlock; start += LOG_CHUNK_SIZE) {
120
- const end = start + LOG_CHUNK_SIZE - 1n > toBlock ? toBlock : start + LOG_CHUNK_SIZE - 1n;
121
- const logs = await client.getLogs({
122
- ...params,
123
- fromBlock: start,
124
- toBlock: end
125
- });
126
- allLogs.push(...logs);
127
- }
128
- return allLogs;
1312
+ var FINGERPRINT_HEX = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/;
1313
+ function normalizeFingerprint(input) {
1314
+ const hex = input.replace(/^0x/i, "").replace(/\s+/g, "").toLowerCase();
1315
+ return FINGERPRINT_HEX.test(hex) ? hex : null;
1316
+ }
1317
+ function fingerprintToBytes(fingerprint) {
1318
+ const hex = normalizeFingerprint(fingerprint);
1319
+ if (!hex) throw new Error(`Invalid PGP fingerprint: ${fingerprint}`);
1320
+ return `0x${hex}`;
1321
+ }
1322
+ function bytesToFingerprint(bytes) {
1323
+ return bytes.replace(/^0x/i, "").toLowerCase();
1324
+ }
1325
+ function fingerprintHash(fingerprint) {
1326
+ return _viem.keccak256.call(void 0, fingerprintToBytes(fingerprint));
1327
+ }
1328
+ function keyIdOf(fingerprint) {
1329
+ const hex = normalizeFingerprint(fingerprint);
1330
+ if (!hex) throw new Error(`Invalid PGP fingerprint: ${fingerprint}`);
1331
+ return `0x${keyIdHex(hex)}`;
1332
+ }
1333
+ function keyIdHex(normalizedFingerprint) {
1334
+ return normalizedFingerprint.length === 64 ? normalizedFingerprint.slice(0, 16) : normalizedFingerprint.slice(-16);
1335
+ }
1336
+ function keyIdToBytes(keyId) {
1337
+ const hex = keyId.replace(/^0x/i, "").replace(/\s+/g, "").toLowerCase();
1338
+ return /^[0-9a-f]{16}$/.test(hex) ? `0x${hex}` : null;
129
1339
  }
130
1340
 
131
1341
  // src/core/pgp.ts
1342
+ function algorithmName(keyOrSubkey) {
1343
+ try {
1344
+ const info = keyOrSubkey.getAlgorithmInfo();
1345
+ const curve = (info.curve || "").toLowerCase();
1346
+ if (curve.startsWith("ed25519") || info.algorithm === "ed25519" || info.algorithm === "eddsaLegacy") return "Ed25519";
1347
+ if (curve.startsWith("curve25519") || info.algorithm === "x25519") return "Cv25519";
1348
+ if (curve.startsWith("ed448")) return "Ed448";
1349
+ if (curve.startsWith("curve448") || info.algorithm === "x448") return "X448";
1350
+ if (curve.startsWith("nistp") || curve.startsWith("p")) return `NIST P-${curve.replace(/\D/g, "")}`;
1351
+ if (curve.startsWith("secp")) return curve;
1352
+ if (curve.startsWith("brainpool")) return curve;
1353
+ if (info.algorithm.startsWith("rsa")) return info.bits ? `RSA ${info.bits}` : "RSA";
1354
+ if (info.algorithm.startsWith("dsa")) return info.bits ? `DSA ${info.bits}` : "DSA";
1355
+ if (info.algorithm.startsWith("elgamal")) return info.bits ? `ElGamal ${info.bits}` : "ElGamal";
1356
+ return info.curve || info.algorithm;
1357
+ } catch (e2) {
1358
+ return String(_nullishCoalesce(_optionalChain([keyOrSubkey, 'access', _2 => _2.keyPacket, 'optionalAccess', _3 => _3.algorithm]), () => ( "unknown")));
1359
+ }
1360
+ }
132
1361
  async function parsePgpKey(armoredKey) {
133
1362
  try {
134
1363
  const { readKey } = await Promise.resolve().then(() => _interopRequireWildcard(require("openpgp")));
135
1364
  const key = await readKey({ armoredKey });
136
1365
  const fingerprint = key.getFingerprint().toUpperCase();
137
- const algorithm = String(key.keyPacket.algorithm);
138
- const created = _nullishCoalesce(_optionalChain([key, 'access', _2 => _2.keyPacket, 'access', _3 => _3.created, 'optionalAccess', _4 => _4.toISOString, 'call', _5 => _5()]), () => ( null));
1366
+ const algorithm = algorithmName(key);
1367
+ const created = _nullishCoalesce(_optionalChain([key, 'access', _4 => _4.keyPacket, 'access', _5 => _5.created, 'optionalAccess', _6 => _6.toISOString, 'call', _7 => _7()]), () => ( null));
139
1368
  const expiration = await key.getExpirationTime();
140
1369
  const expires = expiration && expiration !== Infinity ? new Date(expiration).toISOString() : null;
141
1370
  const userIDs = [];
@@ -152,7 +1381,7 @@ async function parsePgpKey(armoredKey) {
152
1381
  cert.signatureType,
153
1382
  { userID: user.userID, key: key.keyPacket }
154
1383
  );
155
- } catch (e2) {
1384
+ } catch (e3) {
156
1385
  continue;
157
1386
  }
158
1387
  userVerified = true;
@@ -170,17 +1399,17 @@ async function parsePgpKey(armoredKey) {
170
1399
  }
171
1400
  }
172
1401
  if (userVerified) {
173
- const uid = _optionalChain([user, 'access', _6 => _6.userID, 'optionalAccess', _7 => _7.userID]);
1402
+ const uid = _optionalChain([user, 'access', _8 => _8.userID, 'optionalAccess', _9 => _9.userID]);
174
1403
  if (uid) userIDs.push(uid);
175
1404
  }
176
1405
  }
177
1406
  const subkeys = key.subkeys.map((sk) => ({
178
- algorithm: String(sk.keyPacket.algorithm),
179
- created: _nullishCoalesce(_optionalChain([sk, 'access', _8 => _8.keyPacket, 'access', _9 => _9.created, 'optionalAccess', _10 => _10.toISOString, 'call', _11 => _11()]), () => ( null)),
1407
+ algorithm: algorithmName(sk),
1408
+ created: _nullishCoalesce(_optionalChain([sk, 'access', _10 => _10.keyPacket, 'access', _11 => _11.created, 'optionalAccess', _12 => _12.toISOString, 'call', _13 => _13()]), () => ( null)),
180
1409
  fingerprint: sk.getFingerprint().toUpperCase()
181
1410
  }));
182
1411
  return { fingerprint, userIDs, algorithm, created, expires, notations, subkeys };
183
- } catch (e3) {
1412
+ } catch (e4) {
184
1413
  return null;
185
1414
  }
186
1415
  }
@@ -208,17 +1437,50 @@ async function verifyAttestation({
208
1437
  return { verified: false, reason: "Signed message does not contain ETH address" };
209
1438
  }
210
1439
  return { verified: true };
211
- } catch (e4) {
1440
+ } catch (e5) {
212
1441
  return { verified: false, reason: "Signature verification failed" };
213
1442
  }
214
1443
  }
1444
+ var EMAIL_UID = /@/;
1445
+ async function stripEmailUserIDs(armoredKey) {
1446
+ try {
1447
+ const { readKey } = await Promise.resolve().then(() => _interopRequireWildcard(require("openpgp")));
1448
+ const key = await readKey({ armoredKey });
1449
+ const kept = [];
1450
+ const removed = [];
1451
+ const users = key.users.filter((u) => {
1452
+ const uid = _optionalChain([u, 'access', _14 => _14.userID, 'optionalAccess', _15 => _15.userID]);
1453
+ if (!uid) return false;
1454
+ if (EMAIL_UID.test(uid)) {
1455
+ removed.push(uid);
1456
+ return false;
1457
+ }
1458
+ kept.push(uid);
1459
+ return true;
1460
+ });
1461
+ if (users.length === 0) return null;
1462
+ key.users = users;
1463
+ return { armored: key.armor(), kept, removed };
1464
+ } catch (e6) {
1465
+ return null;
1466
+ }
1467
+ }
1468
+ async function hasEmailUserID(armoredKey) {
1469
+ try {
1470
+ const { readKey } = await Promise.resolve().then(() => _interopRequireWildcard(require("openpgp")));
1471
+ const key = await readKey({ armoredKey });
1472
+ return key.users.some((u) => EMAIL_UID.test(_nullishCoalesce(_optionalChain([u, 'access', _16 => _16.userID, 'optionalAccess', _17 => _17.userID]), () => ( ""))));
1473
+ } catch (e7) {
1474
+ return false;
1475
+ }
1476
+ }
215
1477
  var KEYSERVER_BASE = "https://keys.openpgp.org/vks/v1";
216
1478
  async function fetchKeyByFingerprint(fingerprint) {
217
1479
  try {
218
1480
  const resp = await fetch(`${KEYSERVER_BASE}/by-fingerprint/${fingerprint}`);
219
1481
  if (!resp.ok) return null;
220
1482
  return await resp.text();
221
- } catch (e5) {
1483
+ } catch (e8) {
222
1484
  return null;
223
1485
  }
224
1486
  }
@@ -227,7 +1489,7 @@ async function fetchKeyByKeyId(keyId) {
227
1489
  const resp = await fetch(`${KEYSERVER_BASE}/by-keyid/${keyId}`);
228
1490
  if (!resp.ok) return null;
229
1491
  return await resp.text();
230
- } catch (e6) {
1492
+ } catch (e9) {
231
1493
  return null;
232
1494
  }
233
1495
  }
@@ -235,96 +1497,72 @@ async function fetchKeyByKeyId(keyId) {
235
1497
  // src/hooks/useAttestations.ts
236
1498
  function useAttestations(address) {
237
1499
  const config = useIdentityKitConfig();
238
- const { data: count, isLoading: countLoading } = _wagmi.useReadContract.call(void 0, {
239
- address: REGISTRY_ADDRESS,
1500
+ const registry = getRegistry(config.network, config.registryAddress);
1501
+ const chain = chainFor(config.network);
1502
+ const owner = address;
1503
+ const { data: rows, isLoading: rowsLoading } = _wagmi.useReadContract.call(void 0, {
1504
+ address: registry.address,
240
1505
  abi: REGISTRY_ABI,
241
- functionName: "attestationCount",
242
- args: address ? [address] : void 0,
243
- chainId: _chains.mainnet.id,
244
- query: { enabled: !!address }
1506
+ functionName: "attestationsOf",
1507
+ args: owner ? [owner] : void 0,
1508
+ chainId: chain.id,
1509
+ query: { enabled: !!owner }
245
1510
  });
246
- const attestationCount = count ? Number(count) : 0;
247
- const contracts = address ? Array.from({ length: attestationCount }, (_, i) => ({
248
- address: REGISTRY_ADDRESS,
1511
+ const count = _nullishCoalesce(_optionalChain([rows, 'optionalAccess', _18 => _18.length]), () => ( 0));
1512
+ const contracts = owner && rows ? rows.map((_, i) => ({
1513
+ address: registry.address,
249
1514
  abi: REGISTRY_ABI,
250
- functionName: "getAttestation",
251
- args: [address, BigInt(i)],
252
- chainId: _chains.mainnet.id
1515
+ functionName: "getPayload",
1516
+ args: [owner, BigInt(i)],
1517
+ chainId: chain.id
253
1518
  })) : [];
254
- const { data: attestations, isLoading: attestationsLoading } = _wagmi.useReadContracts.call(void 0, {
1519
+ const { data: payloads, isLoading: payloadsLoading } = _wagmi.useReadContracts.call(void 0, {
255
1520
  contracts,
256
1521
  query: { enabled: contracts.length > 0 }
257
1522
  });
258
- const { data: eventData } = _reactquery.useQuery.call(void 0, {
259
- queryKey: ["attestation-logs", address],
260
- queryFn: async () => {
261
- if (!address) return [];
262
- const client = _viem.createPublicClient.call(void 0, {
263
- chain: _chains.mainnet,
264
- transport: _viem.http.call(void 0, config.rpcUrl || "https://ethereum-rpc.publicnode.com")
265
- });
266
- const event = _viem.parseAbiItem.call(void 0,
267
- "event Attested(address indexed ethAddress, string indexed fingerprintHash, string fingerprint, string pgpSignature, string pgpPublicKey, uint256 index, uint256 timestamp)"
268
- );
269
- return getLogsChunked(client, {
270
- address: REGISTRY_ADDRESS,
271
- event,
272
- args: { ethAddress: address },
273
- fromBlock: CONTRACT_DEPLOY_BLOCK,
274
- toBlock: "latest"
275
- });
276
- },
277
- enabled: !!address && attestationCount > 0,
278
- staleTime: 3e5
279
- });
1523
+ const payloadsReady = count === 0 || payloads !== void 0 && payloads.length === count;
280
1524
  const { data: claims, isLoading: verifyLoading } = _reactquery.useQuery.call(void 0, {
281
- queryKey: ["attestations", address, attestationCount, !!eventData],
1525
+ queryKey: ["attestations", config.network, registry.address, address, count, payloadsReady],
282
1526
  queryFn: async () => {
283
- if (!attestations || !address) return [];
1527
+ if (!rows || !address) return [];
284
1528
  const results = [];
285
- const logsByIndex = {};
286
- for (const l of eventData || []) logsByIndex[Number(l.args.index)] = l;
287
- for (let i = 0; i < attestations.length; i++) {
288
- const att = attestations[i];
289
- if (att.status !== "success") continue;
290
- const [fingerprint, createdAt, revoked] = att.result;
291
- const log = logsByIndex[i];
292
- const pgpSignature = _nullishCoalesce(_optionalChain([log, 'optionalAccess', _12 => _12.args, 'optionalAccess', _13 => _13.pgpSignature]), () => ( null));
293
- const pgpPublicKey = _nullishCoalesce(_optionalChain([log, 'optionalAccess', _14 => _14.args, 'optionalAccess', _15 => _15.pgpPublicKey]), () => ( null));
294
- const txHash = _nullishCoalesce(_optionalChain([log, 'optionalAccess', _16 => _16.transactionHash]), () => ( null));
295
- let verification = null;
296
- if (pgpPublicKey && pgpSignature) {
297
- verification = await verifyAttestation({
298
- pgpPublicKey,
299
- pgpSignature,
300
- fingerprint,
301
- ethAddress: address
302
- });
1529
+ for (let i = 0; i < rows.length; i++) {
1530
+ const row = rows[i];
1531
+ const payload = _optionalChain([payloads, 'optionalAccess', _19 => _19[i]]);
1532
+ let pgpSignature = null;
1533
+ let pgpPublicKey = null;
1534
+ if (payload && payload.status === "success") {
1535
+ const [sigHex, keyHex] = payload.result;
1536
+ pgpSignature = _viem.hexToString.call(void 0, sigHex);
1537
+ pgpPublicKey = _viem.hexToString.call(void 0, keyHex);
303
1538
  }
1539
+ const fingerprint = bytesToFingerprint(row.fingerprint);
1540
+ const verification = pgpPublicKey && pgpSignature ? await verifyAttestation({ pgpPublicKey, pgpSignature, fingerprint, ethAddress: address }) : null;
1541
+ const revokedAt = Number(row.revokedAt);
304
1542
  results.push({
305
1543
  index: i,
306
1544
  fingerprint,
307
- createdAt: Number(createdAt),
308
- revoked,
1545
+ createdAt: Number(row.createdAt),
1546
+ revoked: revokedAt !== 0,
1547
+ revokedAt: revokedAt === 0 ? null : revokedAt,
1548
+ messageVersion: Number(row.messageVersion),
309
1549
  pgpSignature,
310
1550
  pgpPublicKey,
311
- txHash,
312
1551
  verification
313
1552
  });
314
1553
  }
315
1554
  return results;
316
1555
  },
317
- enabled: !!attestations && attestations.length > 0,
1556
+ enabled: !!rows && payloadsReady,
318
1557
  staleTime: 3e5
319
1558
  });
320
- const eventLogsPending = !!address && attestationCount > 0 && eventData === void 0;
321
- const isLoading = countLoading || attestationsLoading || verifyLoading || eventLogsPending;
1559
+ const isLoading = rowsLoading || payloadsLoading || verifyLoading || !!owner && rows !== void 0 && !payloadsReady;
322
1560
  const activeClaims = (claims || []).filter((c) => !c.revoked);
323
- const verifiedClaims = activeClaims.filter((c) => _optionalChain([c, 'access', _17 => _17.verification, 'optionalAccess', _18 => _18.verified]));
1561
+ const verifiedClaims = activeClaims.filter((c) => _optionalChain([c, 'access', _20 => _20.verification, 'optionalAccess', _21 => _21.verified]));
324
1562
  const currentFingerprint = verifiedClaims.length > 0 ? verifiedClaims[verifiedClaims.length - 1].fingerprint : null;
325
1563
  return {
326
1564
  claims: claims || [],
327
- totalClaims: attestationCount,
1565
+ totalClaims: count,
328
1566
  activeClaims: activeClaims.length,
329
1567
  currentFingerprint,
330
1568
  isLoading
@@ -357,7 +1595,7 @@ async function fetchEFPGraph(address) {
357
1595
  top8: (top8Data.following || []).map((f) => f.data),
358
1596
  hasEfp: true
359
1597
  };
360
- } catch (e7) {
1598
+ } catch (e10) {
361
1599
  return null;
362
1600
  }
363
1601
  }
@@ -462,7 +1700,7 @@ async function verifyGitHub(proof, fingerprint) {
462
1700
  const resp = await fetch(`https://api.github.com/gists/${proof.gistId}`);
463
1701
  if (!resp.ok) return { verified: false, reason: `GitHub API returned ${resp.status}` };
464
1702
  const data = await resp.json();
465
- if (_optionalChain([data, 'access', _19 => _19.owner, 'optionalAccess', _20 => _20.login, 'optionalAccess', _21 => _21.toLowerCase, 'call', _22 => _22()]) !== proof.user.toLowerCase()) {
1703
+ if (_optionalChain([data, 'access', _22 => _22.owner, 'optionalAccess', _23 => _23.login, 'optionalAccess', _24 => _24.toLowerCase, 'call', _25 => _25()]) !== proof.user.toLowerCase()) {
466
1704
  return { verified: false, reason: "Gist owner does not match claimed user" };
467
1705
  }
468
1706
  for (const file of Object.values(data.files || {})) {
@@ -520,7 +1758,7 @@ async function verifyFarcaster(proof, fingerprint, neynarApiKey) {
520
1758
  const data = await resp.json();
521
1759
  for (const msg of data.messages || []) {
522
1760
  if (msg.hash && msg.hash.startsWith(proof.castHash)) {
523
- const text = _optionalChain([msg, 'access', _23 => _23.data, 'optionalAccess', _24 => _24.castAddBody, 'optionalAccess', _25 => _25.text]) || "";
1761
+ const text = _optionalChain([msg, 'access', _26 => _26.data, 'optionalAccess', _27 => _27.castAddBody, 'optionalAccess', _28 => _28.text]) || "";
524
1762
  if (containsFingerprint(text, fingerprint)) {
525
1763
  return { verified: true };
526
1764
  }
@@ -559,7 +1797,7 @@ async function verifyMastodon(proof, fingerprint) {
559
1797
  );
560
1798
  if (!resp.ok) return { verified: false, reason: `Mastodon API returned ${resp.status}` };
561
1799
  const data = await resp.json();
562
- const keyId = fingerprint.slice(-16);
1800
+ const keyId = keyIdHex(fingerprint.replace(/^0x/i, "").replace(/\s+/g, "").toLowerCase());
563
1801
  for (const field of data.fields || []) {
564
1802
  const text = field.value.replace(/<[^>]*>/g, "");
565
1803
  if (containsFingerprintUrl(text, fingerprint) || containsFingerprintUrl(text, keyId)) {
@@ -591,14 +1829,14 @@ async function verifyProof(proof, fingerprint, neynarApiKey) {
591
1829
  }
592
1830
 
593
1831
  // src/hooks/usePGPProofs.ts
594
- function usePGPProofs(fingerprint) {
1832
+ function usePGPProofs(fingerprint, armoredKey) {
595
1833
  const config = useIdentityKitConfig();
596
1834
  const { data } = _reactquery.useQuery.call(void 0, {
597
- queryKey: ["pgp-proofs", fingerprint],
1835
+ // The key is large; key the query on its length + fingerprint, which
1836
+ // changes whenever a different attestation's key is supplied.
1837
+ queryKey: ["pgp-proofs", fingerprint, _nullishCoalesce(_optionalChain([armoredKey, 'optionalAccess', _29 => _29.length]), () => ( 0))],
598
1838
  queryFn: async () => {
599
- if (!fingerprint) return { keyInfo: null, proofs: [] };
600
- const armoredKey = await fetchKeyByFingerprint(fingerprint);
601
- if (!armoredKey) return { keyInfo: null, proofs: [] };
1839
+ if (!fingerprint || !armoredKey) return { keyInfo: null, proofs: [] };
602
1840
  const keyInfo = await parsePgpKey(armoredKey);
603
1841
  if (!keyInfo) return { keyInfo: null, proofs: [] };
604
1842
  const identified = keyInfo.notations.map((n) => identifyProof(n)).filter((p) => p !== null && p.provider !== "unknown");
@@ -627,17 +1865,17 @@ function usePGPProofs(fingerprint) {
627
1865
  }
628
1866
  return { keyInfo, proofs: [...byAccount.values()] };
629
1867
  },
630
- enabled: !!fingerprint,
1868
+ enabled: !!fingerprint && !!armoredKey,
631
1869
  staleTime: 3e5
632
1870
  });
633
1871
  return {
634
- keyInfo: _nullishCoalesce(_optionalChain([data, 'optionalAccess', _26 => _26.keyInfo]), () => ( null)),
635
- proofs: _nullishCoalesce(_optionalChain([data, 'optionalAccess', _27 => _27.proofs]), () => ( [])),
1872
+ keyInfo: _nullishCoalesce(_optionalChain([data, 'optionalAccess', _30 => _30.keyInfo]), () => ( null)),
1873
+ proofs: _nullishCoalesce(_optionalChain([data, 'optionalAccess', _31 => _31.proofs]), () => ( [])),
636
1874
  // Report loading whenever a fingerprint is set but its proofs haven't
637
1875
  // resolved yet. Using react-query's own isLoading leaves a gap while the
638
1876
  // query is enabling (fingerprint just became known), during which the card
639
1877
  // would briefly paint without proof badges and then pop them in.
640
- isLoading: !!fingerprint && data === void 0
1878
+ isLoading: !!fingerprint && !!armoredKey && data === void 0
641
1879
  };
642
1880
  }
643
1881
 
@@ -648,28 +1886,29 @@ function isAddress(value) {
648
1886
  function safeNormalize(name) {
649
1887
  try {
650
1888
  return _ens.normalize.call(void 0, name);
651
- } catch (e8) {
1889
+ } catch (e11) {
652
1890
  return void 0;
653
1891
  }
654
1892
  }
655
1893
  function useThurinIdentity(ensOrAddress) {
1894
+ const chain = chainFor(useIdentityKitConfig().network);
656
1895
  const isAddr = ensOrAddress ? isAddress(ensOrAddress) : false;
657
1896
  const ensInput = ensOrAddress && !isAddr ? safeNormalize(ensOrAddress) : void 0;
658
1897
  const { data: resolvedAddress } = _wagmi.useEnsAddress.call(void 0, {
659
1898
  name: ensInput,
660
- chainId: _chains.mainnet.id,
1899
+ chainId: chain.id,
661
1900
  query: { enabled: !!ensInput }
662
1901
  });
663
1902
  const address = isAddr ? ensOrAddress : _nullishCoalesce(resolvedAddress, () => ( null));
664
1903
  const { data: ensName } = _wagmi.useEnsName.call(void 0, {
665
1904
  address,
666
- chainId: _chains.mainnet.id,
1905
+ chainId: chain.id,
667
1906
  query: { enabled: !!address }
668
1907
  });
669
1908
  const displayName = ensInput || ensName || null;
670
1909
  const { data: ensAvatar } = _wagmi.useEnsAvatar.call(void 0, {
671
1910
  name: displayName ? safeNormalize(displayName) : void 0,
672
- chainId: _chains.mainnet.id,
1911
+ chainId: chain.id,
673
1912
  query: { enabled: !!displayName }
674
1913
  });
675
1914
  const {
@@ -679,11 +1918,14 @@ function useThurinIdentity(ensOrAddress) {
679
1918
  currentFingerprint,
680
1919
  isLoading: claimsLoading
681
1920
  } = useAttestations(address);
1921
+ const currentClaim = [...claims].reverse().find(
1922
+ (c) => !c.revoked && _optionalChain([c, 'access', _32 => _32.verification, 'optionalAccess', _33 => _33.verified]) && c.fingerprint === currentFingerprint
1923
+ );
682
1924
  const {
683
1925
  keyInfo: pgpKeyInfo,
684
1926
  proofs,
685
1927
  isLoading: proofsLoading
686
- } = usePGPProofs(currentFingerprint);
1928
+ } = usePGPProofs(currentFingerprint, _nullishCoalesce(_optionalChain([currentClaim, 'optionalAccess', _34 => _34.pgpPublicKey]), () => ( null)));
687
1929
  const { efp, isLoading: efpLoading } = useEFPGraph(address);
688
1930
  return {
689
1931
  address,
@@ -722,7 +1964,7 @@ function ThurinCard({ ens, address, theme = "thurin" }) {
722
1964
  }
723
1965
  const displayAddress = identity.address || null;
724
1966
  const verifiedProofs = identity.proofs.filter((p) => p.status === "verified").length;
725
- const hasVerifiedPgp = identity.claims.some((c) => _optionalChain([c, 'access', _28 => _28.verification, 'optionalAccess', _29 => _29.verified]) && !c.revoked);
1967
+ const hasVerifiedPgp = identity.claims.some((c) => _optionalChain([c, 'access', _35 => _35.verification, 'optionalAccess', _36 => _36.verified]) && !c.revoked);
726
1968
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "thurin-card", "data-thurin-theme": theme, children: [
727
1969
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "a", { className: "thurin-card-header", href: profileUrl || void 0, target: "_blank", rel: "noopener noreferrer", children: [
728
1970
  identity.ensAvatar ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -748,13 +1990,13 @@ function ThurinCard({ ens, address, theme = "thurin" }) {
748
1990
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "thurin-card-stat-label", children: "Proofs" })
749
1991
  ] }),
750
1992
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "thurin-card-stat", children: [
751
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "thurin-card-stat-value", children: _nullishCoalesce(_optionalChain([identity, 'access', _30 => _30.efp, 'optionalAccess', _31 => _31.followers]), () => ( 0)) }),
1993
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "thurin-card-stat-value", children: _nullishCoalesce(_optionalChain([identity, 'access', _37 => _37.efp, 'optionalAccess', _38 => _38.followers]), () => ( 0)) }),
752
1994
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "thurin-card-stat-label", children: "Followers" })
753
1995
  ] })
754
1996
  ] }),
755
1997
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "thurin-card-badges", children: [
756
1998
  hasVerifiedPgp && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "thurin-card-badge thurin-card-badge--verified", children: "PGP Verified" }),
757
- _optionalChain([identity, 'access', _32 => _32.efp, 'optionalAccess', _33 => _33.hasEfp]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "thurin-card-badge thurin-card-badge--verified", children: "EFP" }),
1999
+ _optionalChain([identity, 'access', _39 => _39.efp, 'optionalAccess', _40 => _40.hasEfp]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "thurin-card-badge thurin-card-badge--verified", children: "EFP" }),
758
2000
  identity.proofs.map((p, i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
759
2001
  "span",
760
2002
  {
@@ -776,6 +2018,130 @@ function ThurinCard({ ens, address, theme = "thurin" }) {
776
2018
  )
777
2019
  ] });
778
2020
  }
2021
+
2022
+ // src/core/authorization.ts
2023
+
2024
+ var EIP712_NAME = "Thurin PGPRegistry";
2025
+ var EIP712_VERSION = "2";
2026
+ function registryDomain(chainId, verifyingContract) {
2027
+ return { name: EIP712_NAME, version: EIP712_VERSION, chainId, verifyingContract };
2028
+ }
2029
+ var AUTHORIZATION_TYPES = {
2030
+ Attest: [
2031
+ { name: "owner", type: "address" },
2032
+ { name: "fingerprint", type: "bytes" },
2033
+ { name: "pgpSignature", type: "bytes" },
2034
+ { name: "pgpPublicKey", type: "bytes" },
2035
+ { name: "nonce", type: "uint256" },
2036
+ { name: "deadline", type: "uint256" }
2037
+ ],
2038
+ Reattest: [
2039
+ { name: "owner", type: "address" },
2040
+ { name: "revokeIndex", type: "uint256" },
2041
+ { name: "fingerprint", type: "bytes" },
2042
+ { name: "pgpSignature", type: "bytes" },
2043
+ { name: "pgpPublicKey", type: "bytes" },
2044
+ { name: "nonce", type: "uint256" },
2045
+ { name: "deadline", type: "uint256" }
2046
+ ],
2047
+ UpdateKey: [
2048
+ { name: "owner", type: "address" },
2049
+ { name: "index", type: "uint256" },
2050
+ { name: "pgpPublicKey", type: "bytes" },
2051
+ { name: "nonce", type: "uint256" },
2052
+ { name: "deadline", type: "uint256" }
2053
+ ],
2054
+ Revoke: [
2055
+ { name: "owner", type: "address" },
2056
+ { name: "index", type: "uint256" },
2057
+ { name: "nonce", type: "uint256" },
2058
+ { name: "deadline", type: "uint256" }
2059
+ ],
2060
+ SetRecord: [
2061
+ { name: "owner", type: "address" },
2062
+ { name: "index", type: "uint256" },
2063
+ { name: "kind", type: "bytes32" },
2064
+ { name: "value", type: "bytes" },
2065
+ { name: "nonce", type: "uint256" },
2066
+ { name: "deadline", type: "uint256" }
2067
+ ]
2068
+ };
2069
+ function attestTypedData(chainId, registry, a) {
2070
+ return {
2071
+ domain: registryDomain(chainId, registry),
2072
+ types: { Attest: AUTHORIZATION_TYPES.Attest },
2073
+ primaryType: "Attest",
2074
+ message: {
2075
+ owner: a.owner,
2076
+ fingerprint: fingerprintToBytes(a.fingerprint),
2077
+ pgpSignature: _viem.stringToHex.call(void 0, a.pgpSignature),
2078
+ pgpPublicKey: _viem.stringToHex.call(void 0, a.pgpPublicKey),
2079
+ nonce: a.nonce,
2080
+ deadline: a.deadline
2081
+ }
2082
+ };
2083
+ }
2084
+ function reattestTypedData(chainId, registry, a) {
2085
+ const base = attestTypedData(chainId, registry, a);
2086
+ return {
2087
+ domain: base.domain,
2088
+ types: { Reattest: AUTHORIZATION_TYPES.Reattest },
2089
+ primaryType: "Reattest",
2090
+ message: { ...base.message, revokeIndex: a.revokeIndex }
2091
+ };
2092
+ }
2093
+ function updateKeyTypedData(chainId, registry, a) {
2094
+ return {
2095
+ domain: registryDomain(chainId, registry),
2096
+ types: { UpdateKey: AUTHORIZATION_TYPES.UpdateKey },
2097
+ primaryType: "UpdateKey",
2098
+ message: { owner: a.owner, index: a.index, pgpPublicKey: _viem.stringToHex.call(void 0, a.pgpPublicKey), nonce: a.nonce, deadline: a.deadline }
2099
+ };
2100
+ }
2101
+ function revokeTypedData(chainId, registry, a) {
2102
+ return {
2103
+ domain: registryDomain(chainId, registry),
2104
+ types: { Revoke: AUTHORIZATION_TYPES.Revoke },
2105
+ primaryType: "Revoke",
2106
+ message: { owner: a.owner, index: a.index, nonce: a.nonce, deadline: a.deadline }
2107
+ };
2108
+ }
2109
+ function setRecordTypedData(chainId, registry, a) {
2110
+ return {
2111
+ domain: registryDomain(chainId, registry),
2112
+ types: { SetRecord: AUTHORIZATION_TYPES.SetRecord },
2113
+ primaryType: "SetRecord",
2114
+ message: { owner: a.owner, index: a.index, kind: a.kind, value: a.value, nonce: a.nonce, deadline: a.deadline }
2115
+ };
2116
+ }
2117
+ function authorizationDigest(typedData) {
2118
+ return _viem.hashTypedData.call(void 0, typedData);
2119
+ }
2120
+ function recordKind(name) {
2121
+ return _viem.keccak256.call(void 0, _viem.stringToHex.call(void 0, name));
2122
+ }
2123
+
2124
+
2125
+
2126
+
2127
+
2128
+
2129
+
2130
+
2131
+
2132
+
2133
+
2134
+
2135
+
2136
+
2137
+
2138
+
2139
+
2140
+
2141
+
2142
+
2143
+
2144
+
779
2145
 
780
2146
 
781
2147
 
@@ -796,5 +2162,5 @@ function ThurinCard({ ens, address, theme = "thurin" }) {
796
2162
 
797
2163
 
798
2164
 
799
- exports.CONTRACT_DEPLOY_BLOCK = CONTRACT_DEPLOY_BLOCK; exports.IdentityKitProvider = IdentityKitProvider; exports.REGISTRY_ABI = REGISTRY_ABI; exports.REGISTRY_ADDRESS = REGISTRY_ADDRESS; exports.ThurinCard = ThurinCard; exports.displayUrl = displayUrl; exports.fetchEFPGraph = fetchEFPGraph; exports.fetchKeyByFingerprint = fetchKeyByFingerprint; exports.fetchKeyByKeyId = fetchKeyByKeyId; exports.identifyProof = identifyProof; exports.parsePgpKey = parsePgpKey; exports.proofHref = proofHref; exports.proofSecondaryHref = proofSecondaryHref; exports.useAttestations = useAttestations; exports.useEFPGraph = useEFPGraph; exports.usePGPProofs = usePGPProofs; exports.useThurinIdentity = useThurinIdentity; exports.verifyAttestation = verifyAttestation; exports.verifyProof = verifyProof;
2165
+ exports.AUTHORIZATION_TYPES = AUTHORIZATION_TYPES; exports.EIP712_NAME = EIP712_NAME; exports.EIP712_VERSION = EIP712_VERSION; exports.IdentityKitProvider = IdentityKitProvider; exports.NETWORKS = NETWORKS; exports.REGISTRY_ABI = REGISTRY_ABI; exports.REGISTRY_ADDRESS = REGISTRY_ADDRESS; exports.ThurinCard = ThurinCard; exports.attestTypedData = attestTypedData; exports.authorizationDigest = authorizationDigest; exports.bytesToFingerprint = bytesToFingerprint; exports.chainFor = chainFor; exports.displayUrl = displayUrl; exports.fetchEFPGraph = fetchEFPGraph; exports.fetchKeyByFingerprint = fetchKeyByFingerprint; exports.fetchKeyByKeyId = fetchKeyByKeyId; exports.fingerprintHash = fingerprintHash; exports.fingerprintToBytes = fingerprintToBytes; exports.getRegistry = getRegistry; exports.hasEmailUserID = hasEmailUserID; exports.identifyProof = identifyProof; exports.isNetworkName = isNetworkName; exports.keyIdOf = keyIdOf; exports.keyIdToBytes = keyIdToBytes; exports.normalizeFingerprint = normalizeFingerprint; exports.parsePgpKey = parsePgpKey; exports.proofHref = proofHref; exports.proofSecondaryHref = proofSecondaryHref; exports.reattestTypedData = reattestTypedData; exports.recordKind = recordKind; exports.registryDomain = registryDomain; exports.revokeTypedData = revokeTypedData; exports.setRecordTypedData = setRecordTypedData; exports.stripEmailUserIDs = stripEmailUserIDs; exports.updateKeyTypedData = updateKeyTypedData; exports.useAttestations = useAttestations; exports.useEFPGraph = useEFPGraph; exports.usePGPProofs = usePGPProofs; exports.useThurinIdentity = useThurinIdentity; exports.verifyAttestation = verifyAttestation; exports.verifyProof = verifyProof;
800
2166
  //# sourceMappingURL=index.cjs.map