cesr-ts 0.3.1 → 0.5.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 (248) hide show
  1. package/README.md +3 -3
  2. package/esm/src/adapters/async-iterable.js +8 -0
  3. package/esm/src/adapters/effection.js +6 -0
  4. package/esm/src/annotate/annotator.js +16 -7
  5. package/esm/src/annotate/cli.js +12 -0
  6. package/esm/src/annotate/comments.js +6 -2
  7. package/esm/src/annotate/denot.js +6 -0
  8. package/esm/src/annotate/render.js +76 -76
  9. package/esm/src/core/bytes.js +56 -0
  10. package/esm/src/core/cbor.js +122 -0
  11. package/esm/src/core/errors.js +16 -0
  12. package/esm/src/core/parser-attachment-collector.js +1 -2
  13. package/esm/src/core/parser-engine.js +8 -8
  14. package/esm/src/core/parser-frame-parser.js +32 -35
  15. package/esm/src/core/vocabulary.js +47 -0
  16. package/esm/src/index.js +64 -33
  17. package/esm/src/parser/attachment-parser.js +5 -1
  18. package/esm/src/parser/cold-start.js +6 -0
  19. package/esm/src/parser/group-dispatch.js +28 -42
  20. package/esm/src/primitives/aggor.js +423 -36
  21. package/esm/src/primitives/bexter.js +59 -16
  22. package/esm/src/primitives/blinder.js +33 -20
  23. package/esm/src/primitives/byte-like.js +19 -0
  24. package/esm/src/primitives/cigar.js +39 -15
  25. package/esm/src/primitives/cipher.js +103 -0
  26. package/esm/src/primitives/codex.js +107 -0
  27. package/esm/src/primitives/compactor.js +308 -10
  28. package/esm/src/primitives/counter.js +207 -13
  29. package/esm/src/primitives/dater.js +30 -16
  30. package/esm/src/primitives/decimer.js +61 -0
  31. package/esm/src/primitives/decrypter.js +134 -0
  32. package/esm/src/primitives/diger.js +78 -18
  33. package/esm/src/primitives/disclosure.js +300 -0
  34. package/esm/src/primitives/encrypter.js +142 -0
  35. package/esm/src/primitives/hydrate.js +49 -0
  36. package/esm/src/primitives/ilker.js +22 -11
  37. package/esm/src/primitives/indexer.js +217 -8
  38. package/esm/src/primitives/labeler.js +73 -24
  39. package/esm/src/primitives/mapper.js +624 -68
  40. package/esm/src/primitives/matter.js +290 -6
  41. package/esm/src/primitives/mediar.js +33 -18
  42. package/esm/src/primitives/noncer.js +31 -14
  43. package/esm/src/primitives/number.js +27 -27
  44. package/esm/src/primitives/pather.js +128 -19
  45. package/esm/src/primitives/prefixer.js +22 -20
  46. package/esm/src/primitives/primitive.js +23 -0
  47. package/esm/src/primitives/registry.js +5 -3
  48. package/esm/src/primitives/saider.js +102 -19
  49. package/esm/src/primitives/salter.js +116 -0
  50. package/esm/src/primitives/sealed-box.js +41 -0
  51. package/esm/src/primitives/sealer.js +27 -32
  52. package/esm/src/primitives/seqner.js +27 -19
  53. package/esm/src/primitives/siger.js +84 -0
  54. package/esm/src/primitives/signer.js +257 -0
  55. package/esm/src/primitives/streamer.js +28 -0
  56. package/esm/src/primitives/structing.js +727 -0
  57. package/esm/src/primitives/structor.js +124 -0
  58. package/esm/src/primitives/tagger.js +43 -0
  59. package/esm/src/primitives/texter.js +23 -15
  60. package/esm/src/primitives/tholder.js +567 -22
  61. package/esm/src/primitives/traitor.js +21 -15
  62. package/esm/src/primitives/unknown.js +89 -0
  63. package/esm/src/primitives/verfer.js +69 -25
  64. package/esm/src/primitives/verser.js +63 -22
  65. package/esm/src/router/router-stub.js +1 -0
  66. package/esm/src/serder/native.js +1326 -0
  67. package/esm/src/serder/serder.js +1699 -20
  68. package/esm/src/serder/serdery.js +94 -9
  69. package/esm/src/serder/smell.js +26 -1
  70. package/esm/src/tables/codex-utils.js +11 -0
  71. package/esm/src/tables/counter-codex.js +3 -1
  72. package/esm/src/tables/counter-groups.js +52 -0
  73. package/esm/src/tables/counter-version-registry.js +1 -1
  74. package/esm/src/tables/indexer.codex.generated.js +64 -0
  75. package/esm/src/tables/indexer.tables.generated.js +72 -0
  76. package/esm/src/tables/matter.codex.generated.js +399 -0
  77. package/esm/src/tables/matter.tables.generated.js +112 -0
  78. package/esm/src/tables/trait.codex.generated.js +10 -0
  79. package/esm/src/tables/versions.js +4 -0
  80. package/esm/src/version.js +5 -2
  81. package/package.json +5 -2
  82. package/types/src/adapters/async-iterable.d.ts +9 -1
  83. package/types/src/adapters/async-iterable.d.ts.map +1 -1
  84. package/types/src/adapters/effection.d.ts +8 -1
  85. package/types/src/adapters/effection.d.ts.map +1 -1
  86. package/types/src/annotate/annotator.d.ts +12 -0
  87. package/types/src/annotate/annotator.d.ts.map +1 -1
  88. package/types/src/annotate/cli.d.ts +13 -0
  89. package/types/src/annotate/cli.d.ts.map +1 -1
  90. package/types/src/annotate/comments.d.ts +4 -0
  91. package/types/src/annotate/comments.d.ts.map +1 -1
  92. package/types/src/annotate/denot.d.ts +6 -0
  93. package/types/src/annotate/denot.d.ts.map +1 -1
  94. package/types/src/annotate/render.d.ts.map +1 -1
  95. package/types/src/annotate/types.d.ts +2 -0
  96. package/types/src/annotate/types.d.ts.map +1 -1
  97. package/types/src/bench/parser-benchmark.d.ts +3 -0
  98. package/types/src/bench/parser-benchmark.d.ts.map +1 -1
  99. package/types/src/core/bytes.d.ts +31 -0
  100. package/types/src/core/bytes.d.ts.map +1 -1
  101. package/types/src/core/cbor.d.ts +30 -0
  102. package/types/src/core/cbor.d.ts.map +1 -0
  103. package/types/src/core/errors.d.ts +16 -0
  104. package/types/src/core/errors.d.ts.map +1 -1
  105. package/types/src/core/parser-attachment-collector.d.ts.map +1 -1
  106. package/types/src/core/parser-engine.d.ts +5 -1
  107. package/types/src/core/parser-engine.d.ts.map +1 -1
  108. package/types/src/core/parser-frame-parser.d.ts +1 -1
  109. package/types/src/core/parser-frame-parser.d.ts.map +1 -1
  110. package/types/src/core/types.d.ts +9 -36
  111. package/types/src/core/types.d.ts.map +1 -1
  112. package/types/src/core/vocabulary.d.ts +48 -0
  113. package/types/src/core/vocabulary.d.ts.map +1 -0
  114. package/types/src/index.d.ts +64 -33
  115. package/types/src/index.d.ts.map +1 -1
  116. package/types/src/parser/attachment-fallback-policy.d.ts.map +1 -1
  117. package/types/src/parser/attachment-parser.d.ts +4 -0
  118. package/types/src/parser/attachment-parser.d.ts.map +1 -1
  119. package/types/src/parser/cold-start.d.ts +6 -0
  120. package/types/src/parser/cold-start.d.ts.map +1 -1
  121. package/types/src/parser/group-dispatch.d.ts +2 -2
  122. package/types/src/parser/group-dispatch.d.ts.map +1 -1
  123. package/types/src/primitives/aggor.d.ts +122 -9
  124. package/types/src/primitives/aggor.d.ts.map +1 -1
  125. package/types/src/primitives/bexter.d.ts +28 -6
  126. package/types/src/primitives/bexter.d.ts.map +1 -1
  127. package/types/src/primitives/blinder.d.ts +22 -8
  128. package/types/src/primitives/blinder.d.ts.map +1 -1
  129. package/types/src/primitives/byte-like.d.ts +7 -0
  130. package/types/src/primitives/byte-like.d.ts.map +1 -0
  131. package/types/src/primitives/cigar.d.ts +22 -7
  132. package/types/src/primitives/cigar.d.ts.map +1 -1
  133. package/types/src/primitives/cipher.d.ts +82 -0
  134. package/types/src/primitives/cipher.d.ts.map +1 -0
  135. package/types/src/primitives/codex.d.ts +84 -0
  136. package/types/src/primitives/codex.d.ts.map +1 -0
  137. package/types/src/primitives/compactor.d.ts +94 -2
  138. package/types/src/primitives/compactor.d.ts.map +1 -1
  139. package/types/src/primitives/counter.d.ts +63 -2
  140. package/types/src/primitives/counter.d.ts.map +1 -1
  141. package/types/src/primitives/dater.d.ts +12 -7
  142. package/types/src/primitives/dater.d.ts.map +1 -1
  143. package/types/src/primitives/decimer.d.ts +23 -0
  144. package/types/src/primitives/decimer.d.ts.map +1 -0
  145. package/types/src/primitives/decrypter.d.ts +72 -0
  146. package/types/src/primitives/decrypter.d.ts.map +1 -0
  147. package/types/src/primitives/diger.d.ts +32 -7
  148. package/types/src/primitives/diger.d.ts.map +1 -1
  149. package/types/src/primitives/disclosure.d.ts +201 -0
  150. package/types/src/primitives/disclosure.d.ts.map +1 -0
  151. package/types/src/primitives/encrypter.d.ts +74 -0
  152. package/types/src/primitives/encrypter.d.ts.map +1 -0
  153. package/types/src/primitives/hydrate.d.ts +20 -0
  154. package/types/src/primitives/hydrate.d.ts.map +1 -0
  155. package/types/src/primitives/ilker.d.ts +13 -6
  156. package/types/src/primitives/ilker.d.ts.map +1 -1
  157. package/types/src/primitives/indexer.d.ts +52 -1
  158. package/types/src/primitives/indexer.d.ts.map +1 -1
  159. package/types/src/primitives/labeler.d.ts +28 -11
  160. package/types/src/primitives/labeler.d.ts.map +1 -1
  161. package/types/src/primitives/mapper.d.ts +136 -17
  162. package/types/src/primitives/mapper.d.ts.map +1 -1
  163. package/types/src/primitives/matter.d.ts +76 -1
  164. package/types/src/primitives/matter.d.ts.map +1 -1
  165. package/types/src/primitives/mediar.d.ts +22 -8
  166. package/types/src/primitives/mediar.d.ts.map +1 -1
  167. package/types/src/primitives/noncer.d.ts +20 -6
  168. package/types/src/primitives/noncer.d.ts.map +1 -1
  169. package/types/src/primitives/number.d.ts +12 -7
  170. package/types/src/primitives/number.d.ts.map +1 -1
  171. package/types/src/primitives/pather.d.ts +33 -6
  172. package/types/src/primitives/pather.d.ts.map +1 -1
  173. package/types/src/primitives/prefixer.d.ts +12 -6
  174. package/types/src/primitives/prefixer.d.ts.map +1 -1
  175. package/types/src/primitives/primitive.d.ts +51 -0
  176. package/types/src/primitives/primitive.d.ts.map +1 -0
  177. package/types/src/primitives/registry.d.ts +3 -0
  178. package/types/src/primitives/registry.d.ts.map +1 -1
  179. package/types/src/primitives/saider.d.ts +53 -7
  180. package/types/src/primitives/saider.d.ts.map +1 -1
  181. package/types/src/primitives/salter.d.ts +68 -0
  182. package/types/src/primitives/salter.d.ts.map +1 -0
  183. package/types/src/primitives/sealed-box.d.ts +29 -0
  184. package/types/src/primitives/sealed-box.d.ts.map +1 -0
  185. package/types/src/primitives/sealer.d.ts +16 -8
  186. package/types/src/primitives/sealer.d.ts.map +1 -1
  187. package/types/src/primitives/seqner.d.ts +12 -7
  188. package/types/src/primitives/seqner.d.ts.map +1 -1
  189. package/types/src/primitives/siger.d.ts +30 -0
  190. package/types/src/primitives/siger.d.ts.map +1 -0
  191. package/types/src/primitives/signer.d.ts +90 -0
  192. package/types/src/primitives/signer.d.ts.map +1 -0
  193. package/types/src/primitives/streamer.d.ts +31 -0
  194. package/types/src/primitives/streamer.d.ts.map +1 -0
  195. package/types/src/primitives/structing.d.ts +4114 -0
  196. package/types/src/primitives/structing.d.ts.map +1 -0
  197. package/types/src/primitives/structor.d.ts +50 -0
  198. package/types/src/primitives/structor.d.ts.map +1 -0
  199. package/types/src/primitives/tagger.d.ts +17 -0
  200. package/types/src/primitives/tagger.d.ts.map +1 -0
  201. package/types/src/primitives/texter.d.ts +11 -6
  202. package/types/src/primitives/texter.d.ts.map +1 -1
  203. package/types/src/primitives/tholder.d.ts +156 -6
  204. package/types/src/primitives/tholder.d.ts.map +1 -1
  205. package/types/src/primitives/traitor.d.ts +13 -6
  206. package/types/src/primitives/traitor.d.ts.map +1 -1
  207. package/types/src/primitives/unknown.d.ts +32 -0
  208. package/types/src/primitives/unknown.d.ts.map +1 -0
  209. package/types/src/primitives/verfer.d.ts +24 -7
  210. package/types/src/primitives/verfer.d.ts.map +1 -1
  211. package/types/src/primitives/verser.d.ts +29 -8
  212. package/types/src/primitives/verser.d.ts.map +1 -1
  213. package/types/src/router/router-stub.d.ts +3 -0
  214. package/types/src/router/router-stub.d.ts.map +1 -1
  215. package/types/src/serder/native.d.ts +115 -0
  216. package/types/src/serder/native.d.ts.map +1 -0
  217. package/types/src/serder/serder.d.ts +247 -3
  218. package/types/src/serder/serder.d.ts.map +1 -1
  219. package/types/src/serder/serdery.d.ts +42 -0
  220. package/types/src/serder/serdery.d.ts.map +1 -1
  221. package/types/src/serder/smell.d.ts +22 -0
  222. package/types/src/serder/smell.d.ts.map +1 -1
  223. package/types/src/tables/codex-utils.d.ts +7 -0
  224. package/types/src/tables/codex-utils.d.ts.map +1 -0
  225. package/types/src/tables/counter-codex.d.ts +4 -0
  226. package/types/src/tables/counter-codex.d.ts.map +1 -1
  227. package/types/src/tables/counter-groups.d.ts +14 -0
  228. package/types/src/tables/counter-groups.d.ts.map +1 -0
  229. package/types/src/tables/counter.tables.generated.d.ts.map +1 -1
  230. package/types/src/tables/indexer.codex.generated.d.ts +127 -0
  231. package/types/src/tables/indexer.codex.generated.d.ts.map +1 -0
  232. package/types/src/tables/indexer.tables.generated.d.ts +46 -0
  233. package/types/src/tables/indexer.tables.generated.d.ts.map +1 -0
  234. package/types/src/tables/matter.codex.generated.d.ts +797 -0
  235. package/types/src/tables/matter.codex.generated.d.ts.map +1 -0
  236. package/types/src/tables/matter.tables.generated.d.ts +112 -0
  237. package/types/src/tables/matter.tables.generated.d.ts.map +1 -1
  238. package/types/src/tables/table-types.d.ts +13 -0
  239. package/types/src/tables/table-types.d.ts.map +1 -1
  240. package/types/src/tables/trait.codex.generated.d.ts +19 -0
  241. package/types/src/tables/trait.codex.generated.d.ts.map +1 -0
  242. package/types/src/tables/versions.d.ts +6 -0
  243. package/types/src/tables/versions.d.ts.map +1 -1
  244. package/types/src/version.d.ts +5 -2
  245. package/types/src/version.d.ts.map +1 -1
  246. package/esm/src/tables/indexer.tables.js +0 -30
  247. package/types/src/tables/indexer.tables.d.ts +0 -12
  248. package/types/src/tables/indexer.tables.d.ts.map +0 -1
@@ -34,8 +34,7 @@ export class AttachmentCollector {
34
34
  value: void 0
35
35
  });
36
36
  this.frameBoundaryPolicy = options.frameBoundaryPolicy;
37
- this.attachmentVersionFallbackPolicy =
38
- options.attachmentVersionFallbackPolicy;
37
+ this.attachmentVersionFallbackPolicy = options.attachmentVersionFallbackPolicy;
39
38
  this.recoveryDiagnosticObserver = options.recoveryDiagnosticObserver;
40
39
  this.isFrameBoundaryAhead = options.isFrameBoundaryAhead;
41
40
  }
@@ -1,12 +1,12 @@
1
1
  import { createAttachmentVersionFallbackPolicy, } from "../parser/group-dispatch.js";
2
2
  import { ParserError, ShortageError } from "./errors.js";
3
+ import { AttachmentCollector } from "./parser-attachment-collector.js";
3
4
  import { DEFAULT_VERSION } from "./parser-constants.js";
4
- import { ParserStreamState } from "./parser-stream-state.js";
5
5
  import { DeferredFrameLifecycle } from "./parser-deferred-frames.js";
6
6
  import { FrameParser } from "./parser-frame-parser.js";
7
- import { AttachmentCollector } from "./parser-attachment-collector.js";
8
- import { createFrameBoundaryPolicy, } from "./parser-policy.js";
9
- import { composeRecoveryDiagnosticObserver, } from "./recovery-diagnostics.js";
7
+ import { createFrameBoundaryPolicy } from "./parser-policy.js";
8
+ import { ParserStreamState } from "./parser-stream-state.js";
9
+ import { composeRecoveryDiagnosticObserver } from "./recovery-diagnostics.js";
10
10
  /**
11
11
  * Streaming CESR parser for message-domain and CESR-native body-group streams.
12
12
  * Handles chunk boundaries, pending frames, and attachment continuation.
@@ -60,16 +60,16 @@ export class CesrParser {
60
60
  writable: true,
61
61
  value: void 0
62
62
  });
63
- this.frameBoundaryPolicy = options.frameBoundaryPolicy ??
64
- createFrameBoundaryPolicy(options.framed ?? false);
63
+ this.frameBoundaryPolicy = options.frameBoundaryPolicy
64
+ ?? createFrameBoundaryPolicy(options.framed ?? false);
65
65
  this.recoveryDiagnosticObserver = composeRecoveryDiagnosticObserver({
66
66
  onRecoveryDiagnostic: options.onRecoveryDiagnostic,
67
67
  onAttachmentVersionFallback: options.attachmentVersionFallbackPolicy
68
68
  ? undefined
69
69
  : options.onAttachmentVersionFallback,
70
70
  });
71
- const attachmentVersionFallbackPolicy = options.attachmentVersionFallbackPolicy ??
72
- createAttachmentVersionFallbackPolicy({
71
+ const attachmentVersionFallbackPolicy = options.attachmentVersionFallbackPolicy
72
+ ?? createAttachmentVersionFallbackPolicy({
73
73
  mode: options.attachmentDispatchMode,
74
74
  });
75
75
  this.stream = new ParserStreamState(DEFAULT_VERSION);
@@ -3,8 +3,8 @@ import { sniff } from "../parser/cold-start.js";
3
3
  import { parseCounter } from "../primitives/counter.js";
4
4
  import { parseIlker } from "../primitives/ilker.js";
5
5
  import { isLabelerCode, parseLabeler } from "../primitives/labeler.js";
6
+ import { interpretMapperBodySyntax, parseMapperBodySyntax } from "../primitives/mapper.js";
6
7
  import { parseMatter } from "../primitives/matter.js";
7
- import { interpretMapperBodySyntax, parseMapperBodySyntax, } from "../primitives/mapper.js";
8
8
  import { parseVerser } from "../primitives/verser.js";
9
9
  import { reapSerder } from "../serder/serdery.js";
10
10
  import { Kinds, Protocols } from "../tables/versions.js";
@@ -46,8 +46,7 @@ export class FrameParser {
46
46
  value: void 0
47
47
  });
48
48
  this.frameBoundaryPolicy = options.frameBoundaryPolicy;
49
- this.attachmentVersionFallbackPolicy =
50
- options.attachmentVersionFallbackPolicy;
49
+ this.attachmentVersionFallbackPolicy = options.attachmentVersionFallbackPolicy;
51
50
  this.onEnclosedFrames = options.onEnclosedFrames;
52
51
  this.recoveryDiagnosticObserver = options.recoveryDiagnosticObserver;
53
52
  }
@@ -275,23 +274,26 @@ export class FrameParser {
275
274
  const syntax = this.parseNativeBodySyntax(raw, cold, version);
276
275
  const metadata = this.interpretNativeMetadataSyntax(syntax.metadata, version);
277
276
  const fields = this.interpretNativeFieldSyntax(syntax.fields);
277
+ // KERIpy parity rule: once the frame parser has classified a top-level
278
+ // FixBodyGroup/MapBodyGroup as a native message body, the result must be a
279
+ // real Serder or a parse error. Arbitrary native map/list corpora still
280
+ // belong to lower-level CESR-native surfaces such as Mapper/Aggor.
281
+ const { serder } = reapSerder(raw);
282
+ if (serder.proto !== metadata.proto
283
+ || serder.pvrsn.major !== metadata.pvrsn.major
284
+ || serder.pvrsn.minor !== metadata.pvrsn.minor
285
+ || (metadata.ilk !== null && serder.ilk !== metadata.ilk)
286
+ || (metadata.said !== null && serder.said !== metadata.said)) {
287
+ throw new SemanticInterpretationError("Native body syntax pre-read disagreed with Serder hydration");
288
+ }
289
+ serder.native = {
290
+ bodyCode,
291
+ fields,
292
+ };
293
+ const body = serder;
278
294
  return {
279
295
  frame: {
280
- body: {
281
- raw,
282
- ked: null,
283
- proto: metadata.proto,
284
- kind: Kinds.cesr,
285
- size: raw.length,
286
- pvrsn: metadata.pvrsn,
287
- gvrsn: metadata.gvrsn,
288
- ilk: metadata.ilk,
289
- said: metadata.said,
290
- native: {
291
- bodyCode,
292
- fields,
293
- },
294
- },
296
+ body,
295
297
  attachments: [],
296
298
  },
297
299
  consumed: offset + total,
@@ -432,9 +434,9 @@ export class FrameParser {
432
434
  };
433
435
  }
434
436
  catch (error) {
435
- if (error instanceof ShortageError ||
436
- error instanceof UnknownCodeError ||
437
- error instanceof DeserializeError) {
437
+ if (error instanceof ShortageError
438
+ || error instanceof UnknownCodeError
439
+ || error instanceof DeserializeError) {
438
440
  throw new SyntaxParseError(`Native body syntax parse failed: ${error.message}`, error);
439
441
  }
440
442
  throw error;
@@ -499,8 +501,7 @@ export class FrameParser {
499
501
  const size = tokenSize(ctr, cold);
500
502
  entries.push({
501
503
  kind: "value",
502
- code: ctr.code,
503
- qb64: ctr.qb64,
504
+ primitive: ctr,
504
505
  });
505
506
  offset += size;
506
507
  continue;
@@ -512,15 +513,13 @@ export class FrameParser {
512
513
  entries.push({
513
514
  kind: "label",
514
515
  label: parseLabeler(at, cold).label,
515
- code: token.code,
516
- qb64: token.qb64,
516
+ primitive: token,
517
517
  });
518
518
  continue;
519
519
  }
520
520
  entries.push({
521
521
  kind: "value",
522
- code: token.code,
523
- qb64: token.qb64,
522
+ primitive: token,
524
523
  });
525
524
  }
526
525
  if (offset !== end) {
@@ -534,8 +533,7 @@ export class FrameParser {
534
533
  try {
535
534
  return interpretMapperBodySyntax(syntax.mapper).map((field) => ({
536
535
  label: field.label,
537
- code: field.code,
538
- qb64: field.qb64,
536
+ primitive: field.primitive,
539
537
  }));
540
538
  }
541
539
  catch (error) {
@@ -554,8 +552,7 @@ export class FrameParser {
554
552
  }
555
553
  out.push({
556
554
  label: pendingLabel,
557
- code: entry.code,
558
- qb64: entry.qb64,
555
+ primitive: entry.primitive,
559
556
  });
560
557
  pendingLabel = null;
561
558
  }
@@ -591,8 +588,8 @@ export class FrameParser {
591
588
  if (error instanceof ShortageError) {
592
589
  throw error;
593
590
  }
594
- if (error instanceof UnknownCodeError ||
595
- error instanceof DeserializeError) {
591
+ if (error instanceof UnknownCodeError
592
+ || error instanceof DeserializeError) {
596
593
  continue;
597
594
  }
598
595
  throw error;
@@ -622,8 +619,8 @@ export class FrameParser {
622
619
  if (error instanceof ShortageError) {
623
620
  throw error;
624
621
  }
625
- if (error instanceof UnknownCodeError ||
626
- error instanceof DeserializeError) {
622
+ if (error instanceof UnknownCodeError
623
+ || error instanceof DeserializeError) {
627
624
  if (!firstError) {
628
625
  firstError = error;
629
626
  }
@@ -0,0 +1,47 @@
1
+ /** KERI security tiers for deterministic secret derivation. */
2
+ export const Tiers = Object.freeze({
3
+ low: "low",
4
+ med: "med",
5
+ high: "high",
6
+ });
7
+ /** Return true when the value is one of the supported KERI security tiers. */
8
+ export function isTier(value) {
9
+ return Object.values(Tiers).includes(value);
10
+ }
11
+ /** KERI/ACDC message ilks mirrored from KERIpy's `kering.Ilks`. */
12
+ export const Ilks = Object.freeze({
13
+ icp: "icp",
14
+ rot: "rot",
15
+ ixn: "ixn",
16
+ dip: "dip",
17
+ drt: "drt",
18
+ rct: "rct",
19
+ qry: "qry",
20
+ rpy: "rpy",
21
+ xip: "xip",
22
+ exn: "exn",
23
+ pro: "pro",
24
+ bar: "bar",
25
+ vcp: "vcp",
26
+ vrt: "vrt",
27
+ iss: "iss",
28
+ rev: "rev",
29
+ bis: "bis",
30
+ brv: "brv",
31
+ rip: "rip",
32
+ bup: "bup",
33
+ upd: "upd",
34
+ acm: "acm",
35
+ act: "act",
36
+ acg: "acg",
37
+ ace: "ace",
38
+ sch: "sch",
39
+ att: "att",
40
+ agg: "agg",
41
+ edg: "edg",
42
+ rul: "rul",
43
+ });
44
+ /** Return true when the value is one of the known KERI/ACDC ilks. */
45
+ export function isIlk(value) {
46
+ return Object.values(Ilks).includes(value);
47
+ }
package/esm/src/index.js CHANGED
@@ -1,50 +1,81 @@
1
- export * from "./core/types.js";
1
+ export * from "./adapters/async-iterable.js";
2
+ export * from "./adapters/effection.js";
3
+ export * from "./annotate/annotator.js";
4
+ export * from "./annotate/comments.js";
5
+ export * from "./annotate/denot.js";
6
+ export * from "./annotate/render.js";
7
+ export * from "./annotate/types.js";
8
+ export * from "./bench/parser-benchmark.js";
9
+ export * from "./core/bytes.js";
10
+ export * from "./core/cbor.js";
2
11
  export * from "./core/errors.js";
3
12
  export * from "./core/parser-engine.js";
4
13
  export * from "./core/parser-policy.js";
5
14
  export * from "./core/recovery-diagnostics.js";
15
+ export * from "./core/types.js";
16
+ export * from "./core/vocabulary.js";
6
17
  export * from "./parser/cold-start.js";
7
18
  export * from "./parser/group-dispatch.js";
8
- export * from "./serder/smell.js";
9
- export * from "./serder/serder.js";
10
- export * from "./serder/serdery.js";
11
- export * from "./primitives/matter.js";
19
+ export * from "./primitives/aggor.js";
20
+ export * from "./primitives/bexter.js";
21
+ export * from "./primitives/blinder.js";
22
+ export * from "./primitives/cigar.js";
23
+ export * from "./primitives/cipher.js";
24
+ export * from "./primitives/codex.js";
25
+ export * from "./primitives/compactor.js";
12
26
  export * from "./primitives/counter.js";
13
- export * from "./primitives/indexer.js";
14
- export * from "./primitives/verser.js";
27
+ export * from "./primitives/dater.js";
28
+ export * from "./primitives/decimer.js";
29
+ export * from "./primitives/decrypter.js";
30
+ export * from "./primitives/diger.js";
31
+ export * from "./primitives/disclosure.js";
32
+ export * from "./primitives/encrypter.js";
33
+ export * from "./primitives/hydrate.js";
15
34
  export * from "./primitives/ilker.js";
35
+ export * from "./primitives/indexer.js";
16
36
  export * from "./primitives/labeler.js";
17
- export * from "./primitives/texter.js";
18
- export * from "./primitives/bexter.js";
19
- export * from "./primitives/pather.js";
20
37
  export * from "./primitives/mapper.js";
38
+ export * from "./primitives/matter.js";
39
+ export * from "./primitives/mediar.js";
40
+ export * from "./primitives/noncer.js";
21
41
  export * from "./primitives/number.js";
22
- export * from "./primitives/seqner.js";
23
- export * from "./primitives/dater.js";
24
- export * from "./primitives/diger.js";
42
+ export * from "./primitives/pather.js";
25
43
  export * from "./primitives/prefixer.js";
26
- export * from "./primitives/noncer.js";
44
+ export * from "./primitives/primitive.js";
45
+ export * from "./primitives/registry.js";
27
46
  export * from "./primitives/saider.js";
28
- export * from "./primitives/cigar.js";
29
- export * from "./primitives/verfer.js";
30
- export * from "./primitives/traitor.js";
31
- export * from "./primitives/tholder.js";
47
+ export * from "./primitives/salter.js";
32
48
  export * from "./primitives/sealer.js";
33
- export * from "./primitives/blinder.js";
34
- export * from "./primitives/mediar.js";
35
- export * from "./primitives/compactor.js";
36
- export * from "./primitives/aggor.js";
37
- export * from "./primitives/registry.js";
38
- export * from "./adapters/async-iterable.js";
39
- export * from "./adapters/effection.js";
49
+ export * from "./primitives/seqner.js";
50
+ export * from "./primitives/siger.js";
51
+ export * from "./primitives/signer.js";
52
+ export * from "./primitives/streamer.js";
53
+ export * from "./primitives/structing.js";
54
+ export * from "./primitives/structor.js";
55
+ export * from "./primitives/tagger.js";
56
+ export * from "./primitives/texter.js";
57
+ export * from "./primitives/tholder.js";
58
+ export * from "./primitives/traitor.js";
59
+ export * from "./primitives/unknown.js";
60
+ export * from "./primitives/verfer.js";
61
+ export * from "./primitives/verser.js";
40
62
  export * from "./router/router-stub.js";
41
- export * from "./tables/versions.js";
42
- export * from "./tables/table-types.js";
63
+ export * from "./serder/serder.js";
64
+ export * from "./serder/serdery.js";
65
+ export * from "./serder/smell.js";
66
+ export * from "./tables/codex-utils.js";
43
67
  export * from "./tables/counter-codex.js";
68
+ export * from "./tables/counter-groups.js";
44
69
  export * from "./tables/counter-version-registry.js";
45
- export * from "./annotate/types.js";
46
- export * from "./annotate/comments.js";
47
- export * from "./annotate/render.js";
48
- export * from "./annotate/annotator.js";
49
- export * from "./annotate/denot.js";
50
- export * from "./bench/parser-benchmark.js";
70
+ export * from "./tables/indexer.codex.generated.js";
71
+ export * from "./tables/indexer.tables.generated.js";
72
+ export * from "./tables/matter.codex.generated.js";
73
+ export * from "./tables/matter.tables.generated.js";
74
+ export * from "./tables/table-types.js";
75
+ export * from "./tables/trait.codex.generated.js";
76
+ export * from "./tables/versions.js";
77
+ export { bytesHex } from "./core/bytes.js";
78
+ export { bytesEqual } from "./core/bytes.js";
79
+ export { toBytes } from "./core/bytes.js";
80
+ export { t } from "./core/bytes.js";
81
+ export { b } from "./core/bytes.js";
@@ -1,4 +1,8 @@
1
- import { parseAttachmentDispatchCompat, } from "./group-dispatch.js";
1
+ import { parseAttachmentDispatchCompat } from "./group-dispatch.js";
2
+ /**
3
+ * Historical attachment-group entrypoint preserved as a thin wrapper around the
4
+ * newer dispatch-policy parser.
5
+ */
2
6
  export function parseAttachmentGroup(input, version, domain, options = {}) {
3
7
  return parseAttachmentDispatchCompat(input, version, domain, options);
4
8
  }
@@ -1,4 +1,10 @@
1
1
  import { ColdStartError, ShortageError } from "../core/errors.js";
2
+ /**
3
+ * Classify the next unread stream bytes into CESR cold-start domains.
4
+ *
5
+ * This mirrors KERIpy's tritet probe: message-domain encodings, text CESR,
6
+ * binary CESR, or annotation separators all begin with distinct leading bits.
7
+ */
2
8
  export function sniff(ims) {
3
9
  if (ims.length === 0) {
4
10
  throw new ShortageError(1, 0);
@@ -1,24 +1,16 @@
1
- import { parseCounter } from "../primitives/counter.js";
2
- import { parseMatter } from "../primitives/matter.js";
1
+ import { b, b64ToInt, intToB64 } from "../core/bytes.js";
2
+ import { GroupSizeError, ShortageError, UnknownCodeError } from "../core/errors.js";
3
+ import { composeRecoveryDiagnosticObserver } from "../core/recovery-diagnostics.js";
4
+ import { CounterGroup, parseCounter } from "../primitives/counter.js";
3
5
  import { parseIndexer } from "../primitives/indexer.js";
4
- import { GroupSizeError, ShortageError, UnknownCodeError, } from "../core/errors.js";
6
+ import { parseMatter } from "../primitives/matter.js";
7
+ import { UnknownPrimitive } from "../primitives/unknown.js";
5
8
  import { CtrDexV1, CtrDexV2 } from "../tables/counter-codex.js";
6
- import { resolveVersionedRegistryValue, } from "../tables/counter-version-registry.js";
7
- import { b64ToInt, intToB64 } from "../core/bytes.js";
8
- import { composeRecoveryDiagnosticObserver, } from "../core/recovery-diagnostics.js";
9
+ import { resolveVersionedRegistryValue } from "../tables/counter-version-registry.js";
9
10
  import { createAttachmentVersionFallbackPolicy, } from "./attachment-fallback-policy.js";
10
- export { createAttachmentVersionFallbackPolicy, } from "./attachment-fallback-policy.js";
11
- function qb64Item(qb64, opaque = false) {
12
- return { kind: "qb64", qb64, opaque };
13
- }
14
- function qb2Item(qb2, opaque = false) {
15
- return { kind: "qb2", qb2, opaque };
16
- }
11
+ export { createAttachmentVersionFallbackPolicy } from "./attachment-fallback-policy.js";
17
12
  function tupleItem(items) {
18
- return { kind: "tuple", items };
19
- }
20
- function nestedGroupItem(code, name, count) {
21
- return { kind: "group", code, name, count };
13
+ return items;
22
14
  }
23
15
  /** Normalize unknown throwables to an `Error` for diagnostic emission. */
24
16
  function asError(error) {
@@ -352,7 +344,7 @@ function parseTuple(input, kinds, domain) {
352
344
  const part = kind === "indexer"
353
345
  ? parseIndexer(input.slice(offset), domain)
354
346
  : parseMatter(input.slice(offset), domain);
355
- items.push(qb64Item(part.qb64));
347
+ items.push(part);
356
348
  offset += primitiveSize(part, domain);
357
349
  }
358
350
  return { items, consumed: offset };
@@ -369,16 +361,16 @@ function parseRepeated(input, count, kinds, domain) {
369
361
  return { items, consumed: offset };
370
362
  }
371
363
  /** Split opaque counted payload into domain units (quadlets for text, triplets for binary). */
372
- function splitOpaqueUnits(payload, domain, expectedCount, opaque = false) {
364
+ function splitOpaqueUnits(payload, domain, expectedCount) {
373
365
  if (domain === "bny") {
374
366
  const count = expectedCount ?? Math.floor(payload.length / 3);
375
- return Array.from({ length: count }, (_v, i) => qb2Item(payload.slice(i * 3, i * 3 + 3), opaque));
367
+ return Array.from({ length: count }, (_v, i) => UnknownPrimitive.fromPayload(payload.slice(i * 3, i * 3 + 3), domain));
376
368
  }
377
369
  const text = String.fromCharCode(...payload);
378
370
  if (expectedCount !== undefined) {
379
- return Array.from({ length: expectedCount }, (_v, i) => qb64Item(text.slice(i * 4, i * 4 + 4), opaque));
371
+ return Array.from({ length: expectedCount }, (_v, i) => UnknownPrimitive.fromPayload(b(text.slice(i * 4, i * 4 + 4)), domain));
380
372
  }
381
- return (text.match(/.{1,4}/g) ?? []).map((token) => qb64Item(token, opaque));
373
+ return (text.match(/.{1,4}/g) ?? []).map((token) => UnknownPrimitive.fromPayload(b(token), domain));
382
374
  }
383
375
  /** Parse nested siger-list group headed by a version-appropriate siger counter. */
384
376
  function parseSigerList(input, version, domain) {
@@ -391,7 +383,7 @@ function parseSigerList(input, version, domain) {
391
383
  let offset = counterHeaderSize(counter, domain);
392
384
  for (let i = 0; i < counter.count; i++) {
393
385
  const part = parseIndexer(input.slice(offset), domain);
394
- items.push(qb64Item(part.qb64));
386
+ items.push(part);
395
387
  offset += primitiveSize(part, domain);
396
388
  }
397
389
  return { items, consumed: offset };
@@ -432,7 +424,7 @@ function parseQuadletGroup(input, counter, version, wrapperCodes, domain, contex
432
424
  // Allow mixed-version nested groups inside wrapper payloads.
433
425
  // Some real-world streams wrap v2 groups inside v1 wrappers.
434
426
  payload.slice(offset), nestedVersion, domain, context);
435
- items.push(nestedGroupItem(nested.group.code, nested.group.name, nested.group.count));
427
+ items.push(nested.group);
436
428
  if (nested.consumed === 0) {
437
429
  throw new GroupSizeError("Nested attachment parser consumed zero bytes");
438
430
  }
@@ -440,8 +432,8 @@ function parseQuadletGroup(input, counter, version, wrapperCodes, domain, contex
440
432
  }
441
433
  catch (error) {
442
434
  const normalized = asError(error);
443
- if (normalized instanceof ShortageError ||
444
- normalized instanceof GroupSizeError) {
435
+ if (normalized instanceof ShortageError
436
+ || normalized instanceof GroupSizeError) {
445
437
  throw normalized;
446
438
  }
447
439
  if (!context.versionFallbackPolicy.shouldPreserveWrapperRemainder(normalized)) {
@@ -449,7 +441,7 @@ function parseQuadletGroup(input, counter, version, wrapperCodes, domain, contex
449
441
  }
450
442
  // Intentional recovery point: keep unread wrapper tail as opaque units.
451
443
  const remainder = payload.slice(offset);
452
- const opaque = splitOpaqueUnits(remainder, domain, undefined, true);
444
+ const opaque = splitOpaqueUnits(remainder, domain);
453
445
  context.recoveryDiagnosticObserver?.({
454
446
  type: "wrapper-opaque-tail-preserved",
455
447
  version: nestedVersion,
@@ -519,8 +511,8 @@ function sadPathSigParser(input, counter, version, domain, context) {
519
511
  const sigGroup = parseAttachmentDispatchCompat(input.slice(offset), version, domain, context);
520
512
  offset += sigGroup.consumed;
521
513
  items.push(tupleItem([
522
- qb64Item(path.qb64),
523
- nestedGroupItem(sigGroup.group.code, sigGroup.group.name, sigGroup.group.count),
514
+ path,
515
+ sigGroup.group,
524
516
  ]));
525
517
  }
526
518
  return { items, consumed: offset };
@@ -531,15 +523,15 @@ function sadPathSigGroupParser(input, counter, version, domain, context) {
531
523
  let offset = counterHeaderSize(counter, domain);
532
524
  const root = parseMatter(input.slice(offset), domain);
533
525
  offset += primitiveSize(root, domain);
534
- items.push(qb64Item(root.qb64));
526
+ items.push(root);
535
527
  for (let i = 0; i < counter.count; i++) {
536
528
  const path = parseMatter(input.slice(offset), domain);
537
529
  offset += primitiveSize(path, domain);
538
530
  const sigGroup = parseAttachmentDispatchCompat(input.slice(offset), version, domain, context);
539
531
  offset += sigGroup.consumed;
540
532
  items.push(tupleItem([
541
- qb64Item(path.qb64),
542
- nestedGroupItem(sigGroup.group.code, sigGroup.group.name, sigGroup.group.count),
533
+ path,
534
+ sigGroup.group,
543
535
  ]));
544
536
  }
545
537
  return { items, consumed: offset };
@@ -547,7 +539,7 @@ function sadPathSigGroupParser(input, counter, version, domain, context) {
547
539
  /** Genus-version groups carry only the counter token itself as semantic payload. */
548
540
  function genusVersionParser(_input, counter, _version, domain, _context) {
549
541
  return {
550
- items: [qb64Item(counter.qb64)],
542
+ items: [counter],
551
543
  consumed: counterHeaderSize(counter, domain),
552
544
  };
553
545
  }
@@ -648,13 +640,7 @@ function parseAttachmentDispatchWithVersion(input, version, domain, context) {
648
640
  throw new GroupSizeError(`Parsed beyond input boundary for ${counter.code}`);
649
641
  }
650
642
  return {
651
- group: {
652
- code: counter.code,
653
- name: counter.name,
654
- count: counter.count,
655
- raw: input.slice(0, parsed.consumed),
656
- items: parsed.items,
657
- },
643
+ group: new CounterGroup(counter, input.slice(0, parsed.consumed), parsed.items),
658
644
  consumed: parsed.consumed,
659
645
  };
660
646
  }
@@ -702,8 +688,8 @@ function parseAttachmentDispatchWithPolicy(input, version, domain, context) {
702
688
  * `options.versionFallbackPolicy`.
703
689
  */
704
690
  export function parseAttachmentDispatchCompat(input, version, domain, options = {}) {
705
- const versionFallbackPolicy = options.versionFallbackPolicy ??
706
- createAttachmentVersionFallbackPolicy({
691
+ const versionFallbackPolicy = options.versionFallbackPolicy
692
+ ?? createAttachmentVersionFallbackPolicy({
707
693
  mode: options.mode,
708
694
  });
709
695
  const recoveryDiagnosticObserver = composeRecoveryDiagnosticObserver({