@hypercerts-org/lexicon 0.10.0 → 0.11.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.
Files changed (168) hide show
  1. package/CHANGELOG.md +205 -0
  2. package/README.md +371 -388
  3. package/SCHEMAS.md +533 -75
  4. package/dist/exports.d.ts +900 -10
  5. package/dist/exports.d.ts.map +1 -1
  6. package/dist/generated/exports.d.ts +900 -10
  7. package/dist/generated/exports.d.ts.map +1 -1
  8. package/dist/generated/lexicons.d.ts +2683 -1093
  9. package/dist/generated/lexicons.d.ts.map +1 -1
  10. package/dist/generated/types/app/bsky/richtext/facet.d.ts +44 -7
  11. package/dist/generated/types/app/bsky/richtext/facet.d.ts.map +1 -1
  12. package/dist/generated/types/app/certified/badge/award.d.ts +2 -3
  13. package/dist/generated/types/app/certified/badge/award.d.ts.map +1 -1
  14. package/dist/generated/types/app/certified/badge/definition.d.ts +3 -3
  15. package/dist/generated/types/app/certified/badge/definition.d.ts.map +1 -1
  16. package/dist/generated/types/app/certified/badge/response.d.ts +2 -2
  17. package/dist/generated/types/app/certified/badge/response.d.ts.map +1 -1
  18. package/dist/generated/types/app/certified/link/evm.d.ts +45 -0
  19. package/dist/generated/types/app/certified/link/evm.d.ts.map +1 -0
  20. package/dist/generated/types/org/hypercerts/claim/activity.d.ts +6 -3
  21. package/dist/generated/types/org/hypercerts/claim/activity.d.ts.map +1 -1
  22. package/dist/generated/types/org/hypercerts/collection.d.ts +11 -5
  23. package/dist/generated/types/org/hypercerts/collection.d.ts.map +1 -1
  24. package/dist/generated/types/org/hypercerts/context/attachment.d.ts +5 -3
  25. package/dist/generated/types/org/hypercerts/context/attachment.d.ts.map +1 -1
  26. package/dist/generated/types/org/hypercerts/context/evaluation.d.ts +6 -6
  27. package/dist/generated/types/org/hypercerts/context/evaluation.d.ts.map +1 -1
  28. package/dist/generated/types/org/hypercerts/defs.d.ts +11 -0
  29. package/dist/generated/types/org/hypercerts/defs.d.ts.map +1 -1
  30. package/dist/generated/types/org/hypercerts/funding/receipt.d.ts +17 -5
  31. package/dist/generated/types/org/hypercerts/funding/receipt.d.ts.map +1 -1
  32. package/dist/generated/types/pub/leaflet/blocks/blockquote.d.ts +13 -0
  33. package/dist/generated/types/pub/leaflet/blocks/blockquote.d.ts.map +1 -0
  34. package/dist/generated/types/pub/leaflet/blocks/bskyPost.d.ts +13 -0
  35. package/dist/generated/types/pub/leaflet/blocks/bskyPost.d.ts.map +1 -0
  36. package/dist/generated/types/pub/leaflet/blocks/button.d.ts +12 -0
  37. package/dist/generated/types/pub/leaflet/blocks/button.d.ts.map +1 -0
  38. package/dist/generated/types/pub/leaflet/blocks/code.d.ts +13 -0
  39. package/dist/generated/types/pub/leaflet/blocks/code.d.ts.map +1 -0
  40. package/dist/generated/types/pub/leaflet/blocks/header.d.ts +14 -0
  41. package/dist/generated/types/pub/leaflet/blocks/header.d.ts.map +1 -0
  42. package/dist/generated/types/pub/leaflet/blocks/horizontalRule.d.ts +10 -0
  43. package/dist/generated/types/pub/leaflet/blocks/horizontalRule.d.ts.map +1 -0
  44. package/dist/generated/types/pub/leaflet/blocks/iframe.d.ts +12 -0
  45. package/dist/generated/types/pub/leaflet/blocks/iframe.d.ts.map +1 -0
  46. package/dist/generated/types/pub/leaflet/blocks/image.d.ts +21 -0
  47. package/dist/generated/types/pub/leaflet/blocks/image.d.ts.map +1 -0
  48. package/dist/generated/types/pub/leaflet/blocks/math.d.ts +11 -0
  49. package/dist/generated/types/pub/leaflet/blocks/math.d.ts.map +1 -0
  50. package/dist/generated/types/pub/leaflet/blocks/orderedList.d.ts +31 -0
  51. package/dist/generated/types/pub/leaflet/blocks/orderedList.d.ts.map +1 -0
  52. package/dist/generated/types/pub/leaflet/blocks/page.d.ts +11 -0
  53. package/dist/generated/types/pub/leaflet/blocks/page.d.ts.map +1 -0
  54. package/dist/generated/types/pub/leaflet/blocks/poll.d.ts +12 -0
  55. package/dist/generated/types/pub/leaflet/blocks/poll.d.ts.map +1 -0
  56. package/dist/generated/types/pub/leaflet/blocks/text.d.ts +14 -0
  57. package/dist/generated/types/pub/leaflet/blocks/text.d.ts.map +1 -0
  58. package/dist/generated/types/pub/leaflet/blocks/unorderedList.d.ts +29 -0
  59. package/dist/generated/types/pub/leaflet/blocks/unorderedList.d.ts.map +1 -0
  60. package/dist/generated/types/pub/leaflet/blocks/website.d.ts +14 -0
  61. package/dist/generated/types/pub/leaflet/blocks/website.d.ts.map +1 -0
  62. package/dist/generated/types/pub/leaflet/pages/linearDocument.d.ts +54 -1
  63. package/dist/generated/types/pub/leaflet/pages/linearDocument.d.ts.map +1 -1
  64. package/dist/generated/types/pub/leaflet/richtext/facet.d.ts +97 -0
  65. package/dist/generated/types/pub/leaflet/richtext/facet.d.ts.map +1 -0
  66. package/dist/index.cjs +4486 -1807
  67. package/dist/index.cjs.map +1 -1
  68. package/dist/index.mjs +4407 -1804
  69. package/dist/index.mjs.map +1 -1
  70. package/dist/lexicons.cjs +927 -35
  71. package/dist/lexicons.cjs.map +1 -1
  72. package/dist/lexicons.d.ts +2683 -1093
  73. package/dist/lexicons.d.ts.map +1 -1
  74. package/dist/lexicons.mjs +927 -35
  75. package/dist/lexicons.mjs.map +1 -1
  76. package/dist/tests/validate-external-lexicons.test.d.ts +2 -0
  77. package/dist/tests/validate-external-lexicons.test.d.ts.map +1 -0
  78. package/dist/tests/validate-funding-receipt.test.d.ts +2 -0
  79. package/dist/tests/validate-funding-receipt.test.d.ts.map +1 -0
  80. package/dist/tests/validate-link-evm.test.d.ts +2 -0
  81. package/dist/tests/validate-link-evm.test.d.ts.map +1 -0
  82. package/dist/tests/validate-rights.test.d.ts +2 -0
  83. package/dist/tests/validate-rights.test.d.ts.map +1 -0
  84. package/dist/types/app/bsky/richtext/facet.d.ts +44 -7
  85. package/dist/types/app/bsky/richtext/facet.d.ts.map +1 -1
  86. package/dist/types/app/certified/badge/award.d.ts +2 -3
  87. package/dist/types/app/certified/badge/award.d.ts.map +1 -1
  88. package/dist/types/app/certified/badge/definition.d.ts +3 -3
  89. package/dist/types/app/certified/badge/definition.d.ts.map +1 -1
  90. package/dist/types/app/certified/badge/response.d.ts +2 -2
  91. package/dist/types/app/certified/badge/response.d.ts.map +1 -1
  92. package/dist/types/app/certified/link/evm.d.ts +45 -0
  93. package/dist/types/app/certified/link/evm.d.ts.map +1 -0
  94. package/dist/types/org/hypercerts/claim/activity.d.ts +6 -3
  95. package/dist/types/org/hypercerts/claim/activity.d.ts.map +1 -1
  96. package/dist/types/org/hypercerts/collection.d.ts +11 -5
  97. package/dist/types/org/hypercerts/collection.d.ts.map +1 -1
  98. package/dist/types/org/hypercerts/context/attachment.d.ts +5 -3
  99. package/dist/types/org/hypercerts/context/attachment.d.ts.map +1 -1
  100. package/dist/types/org/hypercerts/context/evaluation.d.ts +6 -6
  101. package/dist/types/org/hypercerts/context/evaluation.d.ts.map +1 -1
  102. package/dist/types/org/hypercerts/defs.d.ts +11 -0
  103. package/dist/types/org/hypercerts/defs.d.ts.map +1 -1
  104. package/dist/types/org/hypercerts/funding/receipt.d.ts +17 -5
  105. package/dist/types/org/hypercerts/funding/receipt.d.ts.map +1 -1
  106. package/dist/types/pub/leaflet/blocks/blockquote.d.ts +13 -0
  107. package/dist/types/pub/leaflet/blocks/blockquote.d.ts.map +1 -0
  108. package/dist/types/pub/leaflet/blocks/bskyPost.d.ts +13 -0
  109. package/dist/types/pub/leaflet/blocks/bskyPost.d.ts.map +1 -0
  110. package/dist/types/pub/leaflet/blocks/button.d.ts +12 -0
  111. package/dist/types/pub/leaflet/blocks/button.d.ts.map +1 -0
  112. package/dist/types/pub/leaflet/blocks/code.d.ts +13 -0
  113. package/dist/types/pub/leaflet/blocks/code.d.ts.map +1 -0
  114. package/dist/types/pub/leaflet/blocks/header.d.ts +14 -0
  115. package/dist/types/pub/leaflet/blocks/header.d.ts.map +1 -0
  116. package/dist/types/pub/leaflet/blocks/horizontalRule.d.ts +10 -0
  117. package/dist/types/pub/leaflet/blocks/horizontalRule.d.ts.map +1 -0
  118. package/dist/types/pub/leaflet/blocks/iframe.d.ts +12 -0
  119. package/dist/types/pub/leaflet/blocks/iframe.d.ts.map +1 -0
  120. package/dist/types/pub/leaflet/blocks/image.d.ts +21 -0
  121. package/dist/types/pub/leaflet/blocks/image.d.ts.map +1 -0
  122. package/dist/types/pub/leaflet/blocks/math.d.ts +11 -0
  123. package/dist/types/pub/leaflet/blocks/math.d.ts.map +1 -0
  124. package/dist/types/pub/leaflet/blocks/orderedList.d.ts +31 -0
  125. package/dist/types/pub/leaflet/blocks/orderedList.d.ts.map +1 -0
  126. package/dist/types/pub/leaflet/blocks/page.d.ts +11 -0
  127. package/dist/types/pub/leaflet/blocks/page.d.ts.map +1 -0
  128. package/dist/types/pub/leaflet/blocks/poll.d.ts +12 -0
  129. package/dist/types/pub/leaflet/blocks/poll.d.ts.map +1 -0
  130. package/dist/types/pub/leaflet/blocks/text.d.ts +14 -0
  131. package/dist/types/pub/leaflet/blocks/text.d.ts.map +1 -0
  132. package/dist/types/pub/leaflet/blocks/unorderedList.d.ts +29 -0
  133. package/dist/types/pub/leaflet/blocks/unorderedList.d.ts.map +1 -0
  134. package/dist/types/pub/leaflet/blocks/website.d.ts +14 -0
  135. package/dist/types/pub/leaflet/blocks/website.d.ts.map +1 -0
  136. package/dist/types/pub/leaflet/pages/linearDocument.d.ts +54 -1
  137. package/dist/types/pub/leaflet/pages/linearDocument.d.ts.map +1 -1
  138. package/dist/types/pub/leaflet/richtext/facet.d.ts +97 -0
  139. package/dist/types/pub/leaflet/richtext/facet.d.ts.map +1 -0
  140. package/lexicons/app/bsky/richtext/facet.json +51 -0
  141. package/lexicons/app/certified/badge/award.json +2 -2
  142. package/lexicons/app/certified/badge/definition.json +10 -2
  143. package/lexicons/app/certified/badge/response.json +2 -2
  144. package/lexicons/app/certified/link/evm.json +88 -0
  145. package/lexicons/org/hypercerts/claim/activity.json +8 -4
  146. package/lexicons/org/hypercerts/collection.json +19 -5
  147. package/lexicons/org/hypercerts/context/attachment.json +16 -5
  148. package/lexicons/org/hypercerts/context/evaluation.json +9 -6
  149. package/lexicons/org/hypercerts/defs.json +21 -0
  150. package/lexicons/org/hypercerts/funding/receipt.json +30 -10
  151. package/lexicons/pub/leaflet/blocks/blockquote.json +22 -0
  152. package/lexicons/pub/leaflet/blocks/bskyPost.json +19 -0
  153. package/lexicons/pub/leaflet/blocks/button.json +19 -0
  154. package/lexicons/pub/leaflet/blocks/code.json +21 -0
  155. package/lexicons/pub/leaflet/blocks/header.json +27 -0
  156. package/lexicons/pub/leaflet/blocks/horizontalRule.json +11 -0
  157. package/lexicons/pub/leaflet/blocks/iframe.json +21 -0
  158. package/lexicons/pub/leaflet/blocks/image.json +37 -0
  159. package/lexicons/pub/leaflet/blocks/math.json +15 -0
  160. package/lexicons/pub/leaflet/blocks/orderedList.json +54 -0
  161. package/lexicons/pub/leaflet/blocks/page.json +15 -0
  162. package/lexicons/pub/leaflet/blocks/poll.json +16 -0
  163. package/lexicons/pub/leaflet/blocks/text.json +26 -0
  164. package/lexicons/pub/leaflet/blocks/unorderedList.json +50 -0
  165. package/lexicons/pub/leaflet/blocks/website.json +27 -0
  166. package/lexicons/pub/leaflet/pages/linearDocument.json +98 -0
  167. package/lexicons/pub/leaflet/richtext/facet.json +149 -0
  168. package/package.json +3 -4
package/dist/lexicons.cjs CHANGED
@@ -30,6 +30,83 @@ function maybe$typed(v, id, hash) {
30
30
  * GENERATED CODE - DO NOT MODIFY
31
31
  */
32
32
  const schemaDict = {
33
+ AppBskyRichtextFacet: {
34
+ lexicon: 1,
35
+ id: 'app.bsky.richtext.facet',
36
+ defs: {
37
+ main: {
38
+ type: 'object',
39
+ description: 'Annotation of a sub-string within rich text.',
40
+ required: ['index', 'features'],
41
+ properties: {
42
+ index: {
43
+ type: 'ref',
44
+ ref: 'lex:app.bsky.richtext.facet#byteSlice',
45
+ },
46
+ features: {
47
+ type: 'array',
48
+ items: {
49
+ type: 'union',
50
+ refs: [
51
+ 'lex:app.bsky.richtext.facet#mention',
52
+ 'lex:app.bsky.richtext.facet#link',
53
+ 'lex:app.bsky.richtext.facet#tag',
54
+ ],
55
+ },
56
+ },
57
+ },
58
+ },
59
+ mention: {
60
+ type: 'object',
61
+ description: "Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID.",
62
+ required: ['did'],
63
+ properties: {
64
+ did: {
65
+ type: 'string',
66
+ format: 'did',
67
+ },
68
+ },
69
+ },
70
+ link: {
71
+ type: 'object',
72
+ description: 'Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL.',
73
+ required: ['uri'],
74
+ properties: {
75
+ uri: {
76
+ type: 'string',
77
+ format: 'uri',
78
+ },
79
+ },
80
+ },
81
+ tag: {
82
+ type: 'object',
83
+ description: "Facet feature for a hashtag. The text usually includes a '#' prefix, but the facet reference should not (except in the case of 'double hash tags').",
84
+ required: ['tag'],
85
+ properties: {
86
+ tag: {
87
+ type: 'string',
88
+ maxLength: 640,
89
+ maxGraphemes: 64,
90
+ },
91
+ },
92
+ },
93
+ byteSlice: {
94
+ type: 'object',
95
+ description: 'Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets.',
96
+ required: ['byteStart', 'byteEnd'],
97
+ properties: {
98
+ byteStart: {
99
+ type: 'integer',
100
+ minimum: 0,
101
+ },
102
+ byteEnd: {
103
+ type: 'integer',
104
+ minimum: 0,
105
+ },
106
+ },
107
+ },
108
+ },
109
+ },
33
110
  AppCertifiedActorOrganization: {
34
111
  lexicon: 1,
35
112
  id: 'app.certified.actor.organization',
@@ -175,8 +252,8 @@ const schemaDict = {
175
252
  properties: {
176
253
  badge: {
177
254
  type: 'ref',
178
- ref: 'lex:app.certified.badge.definition',
179
- description: 'Reference to the badge definition for this award.',
255
+ ref: 'lex:com.atproto.repo.strongRef',
256
+ description: 'Strong reference to the badge definition at the time of award. The record referenced must conform with the lexicon app.certified.badge.definition.',
180
257
  },
181
258
  subject: {
182
259
  type: 'union',
@@ -217,11 +294,19 @@ const schemaDict = {
217
294
  key: 'tid',
218
295
  record: {
219
296
  type: 'object',
220
- required: ['title', 'badgeType', 'icon', 'createdAt'],
297
+ required: ['title', 'badgeType', 'createdAt'],
221
298
  properties: {
222
299
  badgeType: {
223
300
  type: 'string',
224
- description: 'Category of the badge (e.g. endorsement, participation, affiliation).',
301
+ description: 'Category of the badge. Values beyond the known set are permitted.',
302
+ knownValues: [
303
+ 'endorsement',
304
+ 'verification',
305
+ 'participation',
306
+ 'certification',
307
+ 'affiliation',
308
+ 'recognition',
309
+ ],
225
310
  maxLength: 100,
226
311
  },
227
312
  title: {
@@ -279,8 +364,8 @@ const schemaDict = {
279
364
  properties: {
280
365
  badgeAward: {
281
366
  type: 'ref',
282
- ref: 'lex:app.certified.badge.award',
283
- description: 'Reference to the badge award.',
367
+ ref: 'lex:com.atproto.repo.strongRef',
368
+ description: 'Strong reference to the badge award being responded to. The record referenced must conform with the lexicon app.certified.badge.award.',
284
369
  },
285
370
  response: {
286
371
  type: 'string',
@@ -322,6 +407,94 @@ const schemaDict = {
322
407
  },
323
408
  },
324
409
  },
410
+ AppCertifiedLinkEvm: {
411
+ lexicon: 1,
412
+ id: 'app.certified.link.evm',
413
+ defs: {
414
+ main: {
415
+ type: 'record',
416
+ description: 'A verifiable link between an ATProto DID and an EVM wallet address, proven via a cryptographic signature. Currently supports EOA wallets via EIP-712 typed data signatures; the proof field is an open union to allow future signature methods.',
417
+ key: 'any',
418
+ record: {
419
+ type: 'object',
420
+ required: ['address', 'proof', 'createdAt'],
421
+ properties: {
422
+ address: {
423
+ type: 'string',
424
+ description: 'EVM wallet address (0x-prefixed, with EIP-55 checksum recommended).',
425
+ minLength: 42,
426
+ maxLength: 42,
427
+ },
428
+ proof: {
429
+ type: 'union',
430
+ refs: ['lex:app.certified.link.evm#eip712Proof'],
431
+ description: 'Cryptographic proof of wallet ownership. The union is open to allow future proof methods (e.g. ERC-1271, ERC-6492). Each variant bundles its signature with the corresponding message format.',
432
+ },
433
+ createdAt: {
434
+ type: 'string',
435
+ format: 'datetime',
436
+ description: 'Client-declared timestamp when this record was originally created.',
437
+ },
438
+ },
439
+ },
440
+ },
441
+ eip712Proof: {
442
+ type: 'object',
443
+ description: 'EOA wallet ownership proof via EIP-712 typed data signature. Contains both the structured message that was signed and the resulting signature.',
444
+ required: ['signature', 'message'],
445
+ properties: {
446
+ signature: {
447
+ type: 'string',
448
+ description: 'ECDSA signature over the EIP-712 hash (hex-encoded with 0x prefix, 64 or 65 bytes).',
449
+ minLength: 130,
450
+ maxLength: 132,
451
+ },
452
+ message: {
453
+ type: 'ref',
454
+ ref: 'lex:app.certified.link.evm#eip712Message',
455
+ description: 'The EIP-712 structured message fields that were signed.',
456
+ },
457
+ },
458
+ },
459
+ eip712Message: {
460
+ type: 'object',
461
+ description: 'The EIP-712 typed data message that was signed by the wallet. Contains the fields binding an ATProto DID to an EVM address on a specific chain.',
462
+ required: ['did', 'evmAddress', 'chainId', 'timestamp', 'nonce'],
463
+ properties: {
464
+ did: {
465
+ type: 'string',
466
+ format: 'did',
467
+ description: 'The ATProto DID being linked to the EVM address.',
468
+ maxLength: 256,
469
+ },
470
+ evmAddress: {
471
+ type: 'string',
472
+ description: 'The EVM wallet address (must match the top-level address field).',
473
+ minLength: 42,
474
+ maxLength: 42,
475
+ },
476
+ chainId: {
477
+ type: 'string',
478
+ description: 'EVM chain ID as string (bigint serialized). Identifies which chain was used for signing; for EOA wallets the identity link applies across all EVM-compatible chains.',
479
+ minLength: 1,
480
+ maxLength: 78,
481
+ },
482
+ timestamp: {
483
+ type: 'string',
484
+ description: 'Unix timestamp when the attestation was created (bigint serialized).',
485
+ minLength: 1,
486
+ maxLength: 78,
487
+ },
488
+ nonce: {
489
+ type: 'string',
490
+ description: 'Replay-protection nonce (bigint serialized).',
491
+ minLength: 1,
492
+ maxLength: 78,
493
+ },
494
+ },
495
+ },
496
+ },
497
+ },
325
498
  AppCertifiedLocation: {
326
499
  lexicon: 1,
327
500
  id: 'app.certified.location',
@@ -691,9 +864,13 @@ const schemaDict = {
691
864
  },
692
865
  },
693
866
  description: {
694
- type: 'ref',
695
- ref: 'lex:pub.leaflet.pages.linearDocument#main',
696
- description: 'Rich-text description, represented as a Leaflet linear document.',
867
+ type: 'union',
868
+ refs: [
869
+ 'lex:org.hypercerts.defs#descriptionString',
870
+ 'lex:pub.leaflet.pages.linearDocument',
871
+ 'lex:com.atproto.repo.strongRef',
872
+ ],
873
+ description: 'Long-form description of the activity. An inline string for plain text or markdown, a Leaflet linear document for rich-text content, or a strong reference to an external description record.',
697
874
  },
698
875
  image: {
699
876
  type: 'union',
@@ -706,7 +883,6 @@ const schemaDict = {
706
883
  contributors: {
707
884
  type: 'array',
708
885
  description: 'An array of contributor objects, each containing contributor information, weight, and contribution details.',
709
- maxLength: 1000,
710
886
  items: {
711
887
  type: 'ref',
712
888
  ref: 'lex:org.hypercerts.claim.activity#contributor',
@@ -754,6 +930,7 @@ const schemaDict = {
754
930
  },
755
931
  contributor: {
756
932
  type: 'object',
933
+ description: 'A contributor to the activity, with identity, weight, and contribution details.',
757
934
  required: ['contributorIdentity'],
758
935
  properties: {
759
936
  contributorIdentity: {
@@ -968,7 +1145,8 @@ const schemaDict = {
968
1145
  properties: {
969
1146
  type: {
970
1147
  type: 'string',
971
- description: "The type of this collection. Possible fields can be 'favorites', 'project', or any other type of collection.",
1148
+ description: 'The type of this collection. Values beyond the known set are permitted.',
1149
+ knownValues: ['favorites', 'project', 'portfolio', 'program'],
972
1150
  maxLength: 64,
973
1151
  },
974
1152
  title: {
@@ -981,12 +1159,24 @@ const schemaDict = {
981
1159
  type: 'string',
982
1160
  maxLength: 3000,
983
1161
  maxGraphemes: 300,
984
- description: 'Short summary of this collection, suitable for previews and list views',
1162
+ description: 'Short summary of this collection, suitable for previews and list views. Rich text annotations may be provided via `shortDescriptionFacets`.',
1163
+ },
1164
+ shortDescriptionFacets: {
1165
+ type: 'array',
1166
+ description: 'Rich text annotations for `shortDescription` (mentions, URLs, hashtags, etc).',
1167
+ items: {
1168
+ type: 'ref',
1169
+ ref: 'lex:app.bsky.richtext.facet',
1170
+ },
985
1171
  },
986
1172
  description: {
987
- type: 'ref',
988
- ref: 'lex:pub.leaflet.pages.linearDocument#main',
989
- description: 'Rich-text description, represented as a Leaflet linear document.',
1173
+ type: 'union',
1174
+ refs: [
1175
+ 'lex:org.hypercerts.defs#descriptionString',
1176
+ 'lex:pub.leaflet.pages.linearDocument',
1177
+ 'lex:com.atproto.repo.strongRef',
1178
+ ],
1179
+ description: 'Long-form description of the collection. An inline string for plain text or markdown, a Leaflet linear document for rich-text content, or a strong reference to an external description record.',
990
1180
  },
991
1181
  avatar: {
992
1182
  type: 'union',
@@ -1028,6 +1218,7 @@ const schemaDict = {
1028
1218
  },
1029
1219
  item: {
1030
1220
  type: 'object',
1221
+ description: 'An item in a collection, with an identifier and optional weight.',
1031
1222
  required: ['itemIdentifier'],
1032
1223
  properties: {
1033
1224
  itemIdentifier: {
@@ -1112,8 +1303,15 @@ const schemaDict = {
1112
1303
  },
1113
1304
  contentType: {
1114
1305
  type: 'string',
1306
+ description: 'The type of attachment. Values beyond the known set are permitted.',
1307
+ knownValues: [
1308
+ 'report',
1309
+ 'audit',
1310
+ 'evidence',
1311
+ 'testimonial',
1312
+ 'methodology',
1313
+ ],
1115
1314
  maxLength: 64,
1116
- description: 'The type of attachment, e.g. report, audit, evidence, testimonial, methodology, etc.',
1117
1315
  },
1118
1316
  content: {
1119
1317
  type: 'array',
@@ -1147,9 +1345,13 @@ const schemaDict = {
1147
1345
  },
1148
1346
  },
1149
1347
  description: {
1150
- type: 'ref',
1151
- ref: 'lex:pub.leaflet.pages.linearDocument#main',
1152
- description: 'Rich-text description, represented as a Leaflet linear document.',
1348
+ type: 'union',
1349
+ refs: [
1350
+ 'lex:org.hypercerts.defs#descriptionString',
1351
+ 'lex:pub.leaflet.pages.linearDocument',
1352
+ 'lex:com.atproto.repo.strongRef',
1353
+ ],
1354
+ description: 'Long-form description of the attachment. An inline string for plain text or markdown, a Leaflet linear document for rich-text content, or a strong reference to an external description record.',
1153
1355
  },
1154
1356
  location: {
1155
1357
  type: 'ref',
@@ -1243,16 +1445,19 @@ const schemaDict = {
1243
1445
  required: ['min', 'max', 'value'],
1244
1446
  properties: {
1245
1447
  min: {
1246
- type: 'integer',
1247
- description: 'Minimum value of the scale, e.g. 0 or 1.',
1448
+ type: 'string',
1449
+ description: "Minimum value of the scale as a numeric string (e.g. '0', '1').",
1450
+ maxLength: 50,
1248
1451
  },
1249
1452
  max: {
1250
- type: 'integer',
1251
- description: 'Maximum value of the scale, e.g. 5 or 10.',
1453
+ type: 'string',
1454
+ description: "Maximum value of the scale as a numeric string (e.g. '5', '10').",
1455
+ maxLength: 50,
1252
1456
  },
1253
1457
  value: {
1254
- type: 'integer',
1255
- description: 'Score within the inclusive range [min, max].',
1458
+ type: 'string',
1459
+ description: "Score within the inclusive range [min, max] as a numeric string (e.g. '3.7').",
1460
+ maxLength: 50,
1256
1461
  },
1257
1462
  },
1258
1463
  },
@@ -1370,6 +1575,27 @@ const schemaDict = {
1370
1575
  id: 'org.hypercerts.defs',
1371
1576
  description: 'Common type definitions used across all Hypercerts protocols.',
1372
1577
  defs: {
1578
+ descriptionString: {
1579
+ type: 'object',
1580
+ description: 'An inline long-form description as plain text or markdown, with optional rich-text annotations.',
1581
+ required: ['value'],
1582
+ properties: {
1583
+ value: {
1584
+ type: 'string',
1585
+ description: 'The description text (plain text or markdown).',
1586
+ maxLength: 250000,
1587
+ maxGraphemes: 25000,
1588
+ },
1589
+ facets: {
1590
+ type: 'array',
1591
+ description: 'Rich text annotations for the description (mentions, URLs, hashtags, etc).',
1592
+ items: {
1593
+ type: 'ref',
1594
+ ref: 'lex:app.bsky.richtext.facet',
1595
+ },
1596
+ },
1597
+ },
1598
+ },
1373
1599
  uri: {
1374
1600
  type: 'object',
1375
1601
  required: ['uri'],
@@ -1459,17 +1685,25 @@ const schemaDict = {
1459
1685
  key: 'tid',
1460
1686
  record: {
1461
1687
  type: 'object',
1462
- required: ['from', 'to', 'amount', 'currency', 'createdAt'],
1688
+ required: ['to', 'amount', 'currency', 'createdAt'],
1463
1689
  properties: {
1464
1690
  from: {
1465
- type: 'ref',
1466
- ref: 'lex:app.certified.defs#did',
1467
- description: 'DID of the sender who transferred the funds. Leave empty if sender wants to stay anonymous.',
1691
+ type: 'union',
1692
+ description: 'The sender of the funds (a free-text string, an account DID, or a strong reference to a record). Optional — omit to represent anonymity.',
1693
+ refs: [
1694
+ 'lex:org.hypercerts.funding.receipt#text',
1695
+ 'lex:app.certified.defs#did',
1696
+ 'lex:com.atproto.repo.strongRef',
1697
+ ],
1468
1698
  },
1469
1699
  to: {
1470
- type: 'string',
1471
- description: 'The recipient of the funds. Can be identified by DID or a clear-text name.',
1472
- maxLength: 2048,
1700
+ type: 'union',
1701
+ description: 'The recipient of the funds (a free-text string, an account DID, or a strong reference to a record).',
1702
+ refs: [
1703
+ 'lex:org.hypercerts.funding.receipt#text',
1704
+ 'lex:app.certified.defs#did',
1705
+ 'lex:com.atproto.repo.strongRef',
1706
+ ],
1473
1707
  },
1474
1708
  amount: {
1475
1709
  type: 'string',
@@ -1497,9 +1731,9 @@ const schemaDict = {
1497
1731
  maxLength: 256,
1498
1732
  },
1499
1733
  for: {
1500
- type: 'string',
1501
- format: 'at-uri',
1502
- description: 'Optional reference to the activity, project, or organization this funding relates to.',
1734
+ type: 'ref',
1735
+ ref: 'lex:com.atproto.repo.strongRef',
1736
+ description: 'Optional strong reference to the activity, project, or organization this funding relates to.',
1503
1737
  },
1504
1738
  notes: {
1505
1739
  type: 'string',
@@ -1519,6 +1753,18 @@ const schemaDict = {
1519
1753
  },
1520
1754
  },
1521
1755
  },
1756
+ text: {
1757
+ type: 'object',
1758
+ description: 'A free-text string value (e.g. a display name, wallet address, or other identifier).',
1759
+ required: ['value'],
1760
+ properties: {
1761
+ value: {
1762
+ type: 'string',
1763
+ description: 'The string value.',
1764
+ maxLength: 2048,
1765
+ },
1766
+ },
1767
+ },
1522
1768
  },
1523
1769
  },
1524
1770
  OrgHypercertsWorkscopeCel: {
@@ -1647,6 +1893,633 @@ const schemaDict = {
1647
1893
  },
1648
1894
  },
1649
1895
  },
1896
+ PubLeafletBlocksBlockquote: {
1897
+ lexicon: 1,
1898
+ id: 'pub.leaflet.blocks.blockquote',
1899
+ defs: {
1900
+ main: {
1901
+ type: 'object',
1902
+ required: ['plaintext'],
1903
+ properties: {
1904
+ plaintext: {
1905
+ type: 'string',
1906
+ },
1907
+ facets: {
1908
+ type: 'array',
1909
+ items: {
1910
+ type: 'ref',
1911
+ ref: 'lex:pub.leaflet.richtext.facet',
1912
+ },
1913
+ },
1914
+ },
1915
+ },
1916
+ },
1917
+ },
1918
+ PubLeafletBlocksBskyPost: {
1919
+ lexicon: 1,
1920
+ id: 'pub.leaflet.blocks.bskyPost',
1921
+ defs: {
1922
+ main: {
1923
+ type: 'object',
1924
+ required: ['postRef'],
1925
+ properties: {
1926
+ postRef: {
1927
+ type: 'ref',
1928
+ ref: 'lex:com.atproto.repo.strongRef',
1929
+ },
1930
+ clientHost: {
1931
+ type: 'string',
1932
+ },
1933
+ },
1934
+ },
1935
+ },
1936
+ },
1937
+ PubLeafletBlocksButton: {
1938
+ lexicon: 1,
1939
+ id: 'pub.leaflet.blocks.button',
1940
+ defs: {
1941
+ main: {
1942
+ type: 'object',
1943
+ required: ['text', 'url'],
1944
+ properties: {
1945
+ text: {
1946
+ type: 'string',
1947
+ },
1948
+ url: {
1949
+ type: 'string',
1950
+ format: 'uri',
1951
+ },
1952
+ },
1953
+ },
1954
+ },
1955
+ },
1956
+ PubLeafletBlocksCode: {
1957
+ lexicon: 1,
1958
+ id: 'pub.leaflet.blocks.code',
1959
+ defs: {
1960
+ main: {
1961
+ type: 'object',
1962
+ required: ['plaintext'],
1963
+ properties: {
1964
+ plaintext: {
1965
+ type: 'string',
1966
+ },
1967
+ language: {
1968
+ type: 'string',
1969
+ },
1970
+ syntaxHighlightingTheme: {
1971
+ type: 'string',
1972
+ },
1973
+ },
1974
+ },
1975
+ },
1976
+ },
1977
+ PubLeafletBlocksHeader: {
1978
+ lexicon: 1,
1979
+ id: 'pub.leaflet.blocks.header',
1980
+ defs: {
1981
+ main: {
1982
+ type: 'object',
1983
+ required: ['plaintext'],
1984
+ properties: {
1985
+ level: {
1986
+ type: 'integer',
1987
+ minimum: 1,
1988
+ maximum: 6,
1989
+ },
1990
+ plaintext: {
1991
+ type: 'string',
1992
+ },
1993
+ facets: {
1994
+ type: 'array',
1995
+ items: {
1996
+ type: 'ref',
1997
+ ref: 'lex:pub.leaflet.richtext.facet',
1998
+ },
1999
+ },
2000
+ },
2001
+ },
2002
+ },
2003
+ },
2004
+ PubLeafletBlocksHorizontalRule: {
2005
+ lexicon: 1,
2006
+ id: 'pub.leaflet.blocks.horizontalRule',
2007
+ defs: {
2008
+ main: {
2009
+ type: 'object',
2010
+ required: [],
2011
+ properties: {},
2012
+ },
2013
+ },
2014
+ },
2015
+ PubLeafletBlocksIframe: {
2016
+ lexicon: 1,
2017
+ id: 'pub.leaflet.blocks.iframe',
2018
+ defs: {
2019
+ main: {
2020
+ type: 'object',
2021
+ required: ['url'],
2022
+ properties: {
2023
+ url: {
2024
+ type: 'string',
2025
+ format: 'uri',
2026
+ },
2027
+ height: {
2028
+ type: 'integer',
2029
+ minimum: 16,
2030
+ maximum: 1600,
2031
+ },
2032
+ },
2033
+ },
2034
+ },
2035
+ },
2036
+ PubLeafletBlocksImage: {
2037
+ lexicon: 1,
2038
+ id: 'pub.leaflet.blocks.image',
2039
+ defs: {
2040
+ main: {
2041
+ type: 'object',
2042
+ required: ['image', 'aspectRatio'],
2043
+ properties: {
2044
+ image: {
2045
+ type: 'blob',
2046
+ accept: ['image/*'],
2047
+ maxSize: 1000000,
2048
+ },
2049
+ alt: {
2050
+ type: 'string',
2051
+ description: 'Alt text description of the image, for accessibility.',
2052
+ },
2053
+ aspectRatio: {
2054
+ type: 'ref',
2055
+ ref: 'lex:pub.leaflet.blocks.image#aspectRatio',
2056
+ },
2057
+ },
2058
+ },
2059
+ aspectRatio: {
2060
+ type: 'object',
2061
+ required: ['width', 'height'],
2062
+ properties: {
2063
+ width: {
2064
+ type: 'integer',
2065
+ },
2066
+ height: {
2067
+ type: 'integer',
2068
+ },
2069
+ },
2070
+ },
2071
+ },
2072
+ },
2073
+ PubLeafletBlocksMath: {
2074
+ lexicon: 1,
2075
+ id: 'pub.leaflet.blocks.math',
2076
+ defs: {
2077
+ main: {
2078
+ type: 'object',
2079
+ required: ['tex'],
2080
+ properties: {
2081
+ tex: {
2082
+ type: 'string',
2083
+ },
2084
+ },
2085
+ },
2086
+ },
2087
+ },
2088
+ PubLeafletBlocksOrderedList: {
2089
+ lexicon: 1,
2090
+ id: 'pub.leaflet.blocks.orderedList',
2091
+ defs: {
2092
+ main: {
2093
+ type: 'object',
2094
+ required: ['children'],
2095
+ properties: {
2096
+ startIndex: {
2097
+ type: 'integer',
2098
+ description: 'The starting number for this ordered list. Defaults to 1 if not specified.',
2099
+ },
2100
+ children: {
2101
+ type: 'array',
2102
+ items: {
2103
+ type: 'ref',
2104
+ ref: 'lex:pub.leaflet.blocks.orderedList#listItem',
2105
+ },
2106
+ },
2107
+ },
2108
+ },
2109
+ listItem: {
2110
+ type: 'object',
2111
+ required: ['content'],
2112
+ properties: {
2113
+ checked: {
2114
+ type: 'boolean',
2115
+ description: 'If present, this item is a checklist item. true = checked, false = unchecked. If absent, this is a normal list item.',
2116
+ },
2117
+ content: {
2118
+ type: 'union',
2119
+ refs: [
2120
+ 'lex:pub.leaflet.blocks.text',
2121
+ 'lex:pub.leaflet.blocks.header',
2122
+ 'lex:pub.leaflet.blocks.image',
2123
+ ],
2124
+ },
2125
+ children: {
2126
+ type: 'array',
2127
+ description: 'Nested ordered list items. Mutually exclusive with unorderedListChildren; if both are present, children takes precedence.',
2128
+ items: {
2129
+ type: 'ref',
2130
+ ref: 'lex:pub.leaflet.blocks.orderedList#listItem',
2131
+ },
2132
+ },
2133
+ unorderedListChildren: {
2134
+ type: 'ref',
2135
+ description: 'A nested unordered list. Mutually exclusive with children; if both are present, children takes precedence.',
2136
+ ref: 'lex:pub.leaflet.blocks.unorderedList',
2137
+ },
2138
+ },
2139
+ },
2140
+ },
2141
+ },
2142
+ PubLeafletBlocksPage: {
2143
+ lexicon: 1,
2144
+ id: 'pub.leaflet.blocks.page',
2145
+ defs: {
2146
+ main: {
2147
+ type: 'object',
2148
+ required: ['id'],
2149
+ properties: {
2150
+ id: {
2151
+ type: 'string',
2152
+ },
2153
+ },
2154
+ },
2155
+ },
2156
+ },
2157
+ PubLeafletBlocksPoll: {
2158
+ lexicon: 1,
2159
+ id: 'pub.leaflet.blocks.poll',
2160
+ defs: {
2161
+ main: {
2162
+ type: 'object',
2163
+ required: ['pollRef'],
2164
+ properties: {
2165
+ pollRef: {
2166
+ type: 'ref',
2167
+ ref: 'lex:com.atproto.repo.strongRef',
2168
+ },
2169
+ },
2170
+ },
2171
+ },
2172
+ },
2173
+ PubLeafletBlocksText: {
2174
+ lexicon: 1,
2175
+ id: 'pub.leaflet.blocks.text',
2176
+ defs: {
2177
+ main: {
2178
+ type: 'object',
2179
+ required: ['plaintext'],
2180
+ properties: {
2181
+ plaintext: {
2182
+ type: 'string',
2183
+ },
2184
+ textSize: {
2185
+ type: 'string',
2186
+ enum: ['default', 'small', 'large'],
2187
+ },
2188
+ facets: {
2189
+ type: 'array',
2190
+ items: {
2191
+ type: 'ref',
2192
+ ref: 'lex:pub.leaflet.richtext.facet',
2193
+ },
2194
+ },
2195
+ },
2196
+ },
2197
+ },
2198
+ },
2199
+ PubLeafletBlocksUnorderedList: {
2200
+ lexicon: 1,
2201
+ id: 'pub.leaflet.blocks.unorderedList',
2202
+ defs: {
2203
+ main: {
2204
+ type: 'object',
2205
+ required: ['children'],
2206
+ properties: {
2207
+ children: {
2208
+ type: 'array',
2209
+ items: {
2210
+ type: 'ref',
2211
+ ref: 'lex:pub.leaflet.blocks.unorderedList#listItem',
2212
+ },
2213
+ },
2214
+ },
2215
+ },
2216
+ listItem: {
2217
+ type: 'object',
2218
+ required: ['content'],
2219
+ properties: {
2220
+ checked: {
2221
+ type: 'boolean',
2222
+ description: 'If present, this item is a checklist item. true = checked, false = unchecked. If absent, this is a normal list item.',
2223
+ },
2224
+ content: {
2225
+ type: 'union',
2226
+ refs: [
2227
+ 'lex:pub.leaflet.blocks.text',
2228
+ 'lex:pub.leaflet.blocks.header',
2229
+ 'lex:pub.leaflet.blocks.image',
2230
+ ],
2231
+ },
2232
+ children: {
2233
+ type: 'array',
2234
+ description: 'Nested unordered list items. Mutually exclusive with orderedListChildren; if both are present, children takes precedence.',
2235
+ items: {
2236
+ type: 'ref',
2237
+ ref: 'lex:pub.leaflet.blocks.unorderedList#listItem',
2238
+ },
2239
+ },
2240
+ orderedListChildren: {
2241
+ type: 'ref',
2242
+ description: 'Nested ordered list items. Mutually exclusive with children; if both are present, children takes precedence.',
2243
+ ref: 'lex:pub.leaflet.blocks.orderedList',
2244
+ },
2245
+ },
2246
+ },
2247
+ },
2248
+ },
2249
+ PubLeafletBlocksWebsite: {
2250
+ lexicon: 1,
2251
+ id: 'pub.leaflet.blocks.website',
2252
+ defs: {
2253
+ main: {
2254
+ type: 'object',
2255
+ required: ['src'],
2256
+ properties: {
2257
+ previewImage: {
2258
+ type: 'blob',
2259
+ accept: ['image/*'],
2260
+ maxSize: 1000000,
2261
+ },
2262
+ title: {
2263
+ type: 'string',
2264
+ },
2265
+ description: {
2266
+ type: 'string',
2267
+ },
2268
+ src: {
2269
+ type: 'string',
2270
+ format: 'uri',
2271
+ },
2272
+ },
2273
+ },
2274
+ },
2275
+ },
2276
+ PubLeafletPagesLinearDocument: {
2277
+ lexicon: 1,
2278
+ id: 'pub.leaflet.pages.linearDocument',
2279
+ defs: {
2280
+ main: {
2281
+ type: 'object',
2282
+ required: ['blocks'],
2283
+ properties: {
2284
+ id: {
2285
+ type: 'string',
2286
+ },
2287
+ blocks: {
2288
+ type: 'array',
2289
+ items: {
2290
+ type: 'ref',
2291
+ ref: 'lex:pub.leaflet.pages.linearDocument#block',
2292
+ },
2293
+ },
2294
+ },
2295
+ },
2296
+ block: {
2297
+ type: 'object',
2298
+ required: ['block'],
2299
+ properties: {
2300
+ block: {
2301
+ type: 'union',
2302
+ refs: [
2303
+ 'lex:pub.leaflet.blocks.iframe',
2304
+ 'lex:pub.leaflet.blocks.text',
2305
+ 'lex:pub.leaflet.blocks.blockquote',
2306
+ 'lex:pub.leaflet.blocks.header',
2307
+ 'lex:pub.leaflet.blocks.image',
2308
+ 'lex:pub.leaflet.blocks.unorderedList',
2309
+ 'lex:pub.leaflet.blocks.orderedList',
2310
+ 'lex:pub.leaflet.blocks.website',
2311
+ 'lex:pub.leaflet.blocks.math',
2312
+ 'lex:pub.leaflet.blocks.code',
2313
+ 'lex:pub.leaflet.blocks.horizontalRule',
2314
+ 'lex:pub.leaflet.blocks.bskyPost',
2315
+ 'lex:pub.leaflet.blocks.page',
2316
+ 'lex:pub.leaflet.blocks.poll',
2317
+ 'lex:pub.leaflet.blocks.button',
2318
+ ],
2319
+ },
2320
+ alignment: {
2321
+ type: 'string',
2322
+ knownValues: [
2323
+ 'lex:pub.leaflet.pages.linearDocument#textAlignLeft',
2324
+ 'lex:pub.leaflet.pages.linearDocument#textAlignCenter',
2325
+ 'lex:pub.leaflet.pages.linearDocument#textAlignRight',
2326
+ 'lex:pub.leaflet.pages.linearDocument#textAlignJustify',
2327
+ ],
2328
+ },
2329
+ },
2330
+ },
2331
+ textAlignLeft: {
2332
+ type: 'token',
2333
+ },
2334
+ textAlignCenter: {
2335
+ type: 'token',
2336
+ },
2337
+ textAlignRight: {
2338
+ type: 'token',
2339
+ },
2340
+ textAlignJustify: {
2341
+ type: 'token',
2342
+ },
2343
+ quote: {
2344
+ type: 'object',
2345
+ required: ['start', 'end'],
2346
+ properties: {
2347
+ start: {
2348
+ type: 'ref',
2349
+ ref: 'lex:pub.leaflet.pages.linearDocument#position',
2350
+ },
2351
+ end: {
2352
+ type: 'ref',
2353
+ ref: 'lex:pub.leaflet.pages.linearDocument#position',
2354
+ },
2355
+ },
2356
+ },
2357
+ position: {
2358
+ type: 'object',
2359
+ required: ['block', 'offset'],
2360
+ properties: {
2361
+ block: {
2362
+ type: 'array',
2363
+ items: {
2364
+ type: 'integer',
2365
+ },
2366
+ },
2367
+ offset: {
2368
+ type: 'integer',
2369
+ },
2370
+ },
2371
+ },
2372
+ },
2373
+ },
2374
+ PubLeafletRichtextFacet: {
2375
+ lexicon: 1,
2376
+ id: 'pub.leaflet.richtext.facet',
2377
+ defs: {
2378
+ main: {
2379
+ type: 'object',
2380
+ description: 'Annotation of a sub-string within rich text.',
2381
+ required: ['index', 'features'],
2382
+ properties: {
2383
+ index: {
2384
+ type: 'ref',
2385
+ ref: 'lex:pub.leaflet.richtext.facet#byteSlice',
2386
+ },
2387
+ features: {
2388
+ type: 'array',
2389
+ items: {
2390
+ type: 'union',
2391
+ refs: [
2392
+ 'lex:pub.leaflet.richtext.facet#link',
2393
+ 'lex:pub.leaflet.richtext.facet#didMention',
2394
+ 'lex:pub.leaflet.richtext.facet#atMention',
2395
+ 'lex:pub.leaflet.richtext.facet#code',
2396
+ 'lex:pub.leaflet.richtext.facet#highlight',
2397
+ 'lex:pub.leaflet.richtext.facet#underline',
2398
+ 'lex:pub.leaflet.richtext.facet#strikethrough',
2399
+ 'lex:pub.leaflet.richtext.facet#id',
2400
+ 'lex:pub.leaflet.richtext.facet#bold',
2401
+ 'lex:pub.leaflet.richtext.facet#italic',
2402
+ 'lex:pub.leaflet.richtext.facet#footnote',
2403
+ ],
2404
+ },
2405
+ },
2406
+ },
2407
+ },
2408
+ byteSlice: {
2409
+ type: 'object',
2410
+ description: 'Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets.',
2411
+ required: ['byteStart', 'byteEnd'],
2412
+ properties: {
2413
+ byteStart: {
2414
+ type: 'integer',
2415
+ minimum: 0,
2416
+ },
2417
+ byteEnd: {
2418
+ type: 'integer',
2419
+ minimum: 0,
2420
+ },
2421
+ },
2422
+ },
2423
+ link: {
2424
+ type: 'object',
2425
+ description: 'Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL.',
2426
+ required: ['uri'],
2427
+ properties: {
2428
+ uri: {
2429
+ type: 'string',
2430
+ },
2431
+ },
2432
+ },
2433
+ didMention: {
2434
+ type: 'object',
2435
+ description: 'Facet feature for mentioning a did.',
2436
+ required: ['did'],
2437
+ properties: {
2438
+ did: {
2439
+ type: 'string',
2440
+ format: 'did',
2441
+ },
2442
+ },
2443
+ },
2444
+ atMention: {
2445
+ type: 'object',
2446
+ description: 'Facet feature for mentioning an AT URI.',
2447
+ required: ['atURI'],
2448
+ properties: {
2449
+ atURI: {
2450
+ type: 'string',
2451
+ format: 'uri',
2452
+ },
2453
+ },
2454
+ },
2455
+ code: {
2456
+ type: 'object',
2457
+ description: 'Facet feature for inline code.',
2458
+ required: [],
2459
+ properties: {},
2460
+ },
2461
+ highlight: {
2462
+ type: 'object',
2463
+ description: 'Facet feature for highlighted text.',
2464
+ required: [],
2465
+ properties: {},
2466
+ },
2467
+ underline: {
2468
+ type: 'object',
2469
+ description: 'Facet feature for underline markup',
2470
+ required: [],
2471
+ properties: {},
2472
+ },
2473
+ strikethrough: {
2474
+ type: 'object',
2475
+ description: 'Facet feature for strikethrough markup',
2476
+ required: [],
2477
+ properties: {},
2478
+ },
2479
+ id: {
2480
+ type: 'object',
2481
+ description: 'Facet feature for an identifier. Used for linking to a segment',
2482
+ required: [],
2483
+ properties: {
2484
+ id: {
2485
+ type: 'string',
2486
+ },
2487
+ },
2488
+ },
2489
+ bold: {
2490
+ type: 'object',
2491
+ description: 'Facet feature for bold text',
2492
+ required: [],
2493
+ properties: {},
2494
+ },
2495
+ italic: {
2496
+ type: 'object',
2497
+ description: 'Facet feature for italic text',
2498
+ required: [],
2499
+ properties: {},
2500
+ },
2501
+ footnote: {
2502
+ type: 'object',
2503
+ description: 'Facet feature for a footnote reference',
2504
+ required: ['footnoteId', 'contentPlaintext'],
2505
+ properties: {
2506
+ footnoteId: {
2507
+ type: 'string',
2508
+ },
2509
+ contentPlaintext: {
2510
+ type: 'string',
2511
+ },
2512
+ contentFacets: {
2513
+ type: 'array',
2514
+ items: {
2515
+ type: 'ref',
2516
+ ref: 'lex:pub.leaflet.richtext.facet#main',
2517
+ },
2518
+ },
2519
+ },
2520
+ },
2521
+ },
2522
+ },
1650
2523
  };
1651
2524
  const schemas = Object.values(schemaDict);
1652
2525
  const lexicons = new lexicon.Lexicons(schemas);
@@ -1659,12 +2532,14 @@ function validate(v, id, hash, requiredType) {
1659
2532
  };
1660
2533
  }
1661
2534
  const ids = {
2535
+ AppBskyRichtextFacet: 'app.bsky.richtext.facet',
1662
2536
  AppCertifiedActorOrganization: 'app.certified.actor.organization',
1663
2537
  AppCertifiedActorProfile: 'app.certified.actor.profile',
1664
2538
  AppCertifiedBadgeAward: 'app.certified.badge.award',
1665
2539
  AppCertifiedBadgeDefinition: 'app.certified.badge.definition',
1666
2540
  AppCertifiedBadgeResponse: 'app.certified.badge.response',
1667
2541
  AppCertifiedDefs: 'app.certified.defs',
2542
+ AppCertifiedLinkEvm: 'app.certified.link.evm',
1668
2543
  AppCertifiedLocation: 'app.certified.location',
1669
2544
  ComAtprotoRepoStrongRef: 'com.atproto.repo.strongRef',
1670
2545
  OrgHyperboardsBoard: 'org.hyperboards.board',
@@ -1682,6 +2557,23 @@ const ids = {
1682
2557
  OrgHypercertsFundingReceipt: 'org.hypercerts.funding.receipt',
1683
2558
  OrgHypercertsWorkscopeCel: 'org.hypercerts.workscope.cel',
1684
2559
  OrgHypercertsWorkscopeTag: 'org.hypercerts.workscope.tag',
2560
+ PubLeafletBlocksBlockquote: 'pub.leaflet.blocks.blockquote',
2561
+ PubLeafletBlocksBskyPost: 'pub.leaflet.blocks.bskyPost',
2562
+ PubLeafletBlocksButton: 'pub.leaflet.blocks.button',
2563
+ PubLeafletBlocksCode: 'pub.leaflet.blocks.code',
2564
+ PubLeafletBlocksHeader: 'pub.leaflet.blocks.header',
2565
+ PubLeafletBlocksHorizontalRule: 'pub.leaflet.blocks.horizontalRule',
2566
+ PubLeafletBlocksIframe: 'pub.leaflet.blocks.iframe',
2567
+ PubLeafletBlocksImage: 'pub.leaflet.blocks.image',
2568
+ PubLeafletBlocksMath: 'pub.leaflet.blocks.math',
2569
+ PubLeafletBlocksOrderedList: 'pub.leaflet.blocks.orderedList',
2570
+ PubLeafletBlocksPage: 'pub.leaflet.blocks.page',
2571
+ PubLeafletBlocksPoll: 'pub.leaflet.blocks.poll',
2572
+ PubLeafletBlocksText: 'pub.leaflet.blocks.text',
2573
+ PubLeafletBlocksUnorderedList: 'pub.leaflet.blocks.unorderedList',
2574
+ PubLeafletBlocksWebsite: 'pub.leaflet.blocks.website',
2575
+ PubLeafletPagesLinearDocument: 'pub.leaflet.pages.linearDocument',
2576
+ PubLeafletRichtextFacet: 'pub.leaflet.richtext.facet',
1685
2577
  };
1686
2578
 
1687
2579
  exports.ids = ids;