keri-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.
- package/README.md +2 -2
- package/esm/cesr/mod.js +2 -0
- package/esm/cesr/src/adapters/async-iterable.js +25 -0
- package/esm/cesr/src/adapters/effection.js +15 -0
- package/esm/cesr/src/annotate/annotator.js +55 -0
- package/esm/cesr/src/annotate/comments.js +44 -0
- package/esm/cesr/src/annotate/denot.js +23 -0
- package/esm/cesr/src/annotate/render.js +345 -0
- package/esm/cesr/src/bench/parser-benchmark.js +134 -0
- package/esm/cesr/src/core/bytes.js +132 -0
- package/esm/cesr/src/core/cbor.js +122 -0
- package/esm/cesr/src/core/errors.js +85 -0
- package/esm/cesr/src/core/parser-attachment-collector.js +153 -0
- package/esm/cesr/src/core/parser-constants.js +74 -0
- package/esm/cesr/src/core/parser-deferred-frames.js +73 -0
- package/esm/cesr/src/core/parser-engine.js +212 -0
- package/esm/cesr/src/core/parser-frame-parser.js +640 -0
- package/esm/cesr/src/core/parser-policy.js +137 -0
- package/esm/cesr/src/core/parser-stream-state.js +62 -0
- package/esm/cesr/src/core/recovery-diagnostics.js +25 -0
- package/esm/cesr/src/core/types.js +1 -0
- package/esm/cesr/src/core/vocabulary.js +47 -0
- package/esm/cesr/src/index.js +81 -0
- package/esm/cesr/src/parser/attachment-fallback-policy.js +142 -0
- package/esm/cesr/src/parser/attachment-parser.js +8 -0
- package/esm/cesr/src/parser/cold-start.js +23 -0
- package/esm/cesr/src/parser/group-dispatch.js +720 -0
- package/esm/cesr/src/primitives/aggor.js +428 -0
- package/esm/cesr/src/primitives/bexter.js +63 -0
- package/esm/cesr/src/primitives/blinder.js +36 -0
- package/esm/cesr/src/primitives/byte-like.js +19 -0
- package/esm/cesr/src/primitives/cigar.js +42 -0
- package/esm/cesr/src/primitives/cipher.js +103 -0
- package/esm/cesr/src/primitives/codex.js +107 -0
- package/esm/cesr/src/primitives/compactor.js +314 -0
- package/esm/cesr/src/primitives/counter.js +293 -0
- package/esm/cesr/src/primitives/dater.js +36 -0
- package/esm/cesr/src/primitives/decimer.js +61 -0
- package/esm/cesr/src/primitives/decrypter.js +134 -0
- package/esm/cesr/src/primitives/diger.js +82 -0
- package/esm/cesr/src/primitives/disclosure.js +300 -0
- package/esm/cesr/src/primitives/encrypter.js +142 -0
- package/esm/cesr/src/primitives/hydrate.js +49 -0
- package/esm/cesr/src/primitives/ilker.js +26 -0
- package/esm/cesr/src/primitives/indexer.js +295 -0
- package/esm/cesr/src/primitives/labeler.js +80 -0
- package/esm/cesr/src/primitives/mapper.js +795 -0
- package/esm/cesr/src/primitives/matter.js +393 -0
- package/esm/cesr/src/primitives/mediar.js +36 -0
- package/esm/cesr/src/primitives/noncer.js +35 -0
- package/esm/cesr/src/primitives/number.js +31 -0
- package/esm/cesr/src/primitives/pather.js +132 -0
- package/esm/cesr/src/primitives/prefixer.js +25 -0
- package/esm/cesr/src/primitives/primitive.js +23 -0
- package/esm/cesr/src/primitives/registry.js +19 -0
- package/esm/cesr/src/primitives/saider.js +105 -0
- package/esm/cesr/src/primitives/salter.js +116 -0
- package/esm/cesr/src/primitives/sealed-box.js +41 -0
- package/esm/cesr/src/primitives/sealer.js +30 -0
- package/esm/cesr/src/primitives/seqner.js +31 -0
- package/esm/cesr/src/primitives/siger.js +84 -0
- package/esm/cesr/src/primitives/signer.js +257 -0
- package/esm/cesr/src/primitives/streamer.js +28 -0
- package/esm/cesr/src/primitives/structing.js +727 -0
- package/esm/cesr/src/primitives/structor.js +124 -0
- package/esm/cesr/src/primitives/tagger.js +43 -0
- package/esm/cesr/src/primitives/texter.js +28 -0
- package/esm/cesr/src/primitives/tholder.js +573 -0
- package/esm/cesr/src/primitives/traitor.js +26 -0
- package/esm/cesr/src/primitives/unknown.js +89 -0
- package/esm/cesr/src/primitives/verfer.js +72 -0
- package/esm/cesr/src/primitives/verser.js +71 -0
- package/esm/cesr/src/router/router-stub.js +18 -0
- package/esm/cesr/src/serder/native.js +1326 -0
- package/esm/cesr/src/serder/serder.js +1738 -0
- package/esm/cesr/src/serder/serdery.js +97 -0
- package/esm/cesr/src/serder/smell.js +82 -0
- package/esm/cesr/src/tables/codex-utils.js +11 -0
- package/esm/cesr/src/tables/counter-codex.js +12 -0
- package/esm/cesr/src/tables/counter-groups.js +52 -0
- package/esm/cesr/src/tables/counter-version-registry.js +201 -0
- package/esm/cesr/src/tables/counter.tables.generated.js +178 -0
- package/esm/cesr/src/tables/indexer.codex.generated.js +64 -0
- package/esm/cesr/src/tables/indexer.tables.generated.js +72 -0
- package/esm/cesr/src/tables/matter.codex.generated.js +399 -0
- package/esm/cesr/src/tables/matter.tables.generated.js +350 -0
- package/esm/cesr/src/tables/table-types.js +1 -0
- package/esm/cesr/src/tables/trait.codex.generated.js +10 -0
- package/esm/cesr/src/tables/versions.js +16 -0
- package/esm/cesr/src/version.js +12 -0
- package/esm/keri/src/app/agent-runtime.js +226 -0
- package/esm/keri/src/app/authenticating.js +135 -0
- package/esm/keri/src/app/challenging.js +163 -0
- package/esm/keri/src/app/cli/agent.js +77 -0
- package/esm/keri/src/app/cli/aid.js +39 -0
- package/esm/{app → keri/src/app}/cli/annotate-color.js +3 -3
- package/esm/keri/src/app/cli/annotate.js +99 -0
- package/esm/{app → keri/src/app}/cli/benchmark.js +3 -4
- package/esm/keri/src/app/cli/challenge.js +136 -0
- package/esm/{app → keri/src/app}/cli/cli-node.js +2 -2
- package/esm/{app → keri/src/app}/cli/cli.js +13 -8
- package/esm/keri/src/app/cli/command-definitions.js +762 -0
- package/esm/keri/src/app/cli/command-types.js +1 -0
- package/esm/{app → keri/src/app}/cli/common/existing.js +11 -1
- package/esm/{app → keri/src/app}/cli/common/parsing.js +14 -1
- package/esm/keri/src/app/cli/ends.js +63 -0
- package/esm/keri/src/app/cli/exchange.js +83 -0
- package/esm/{app → keri/src/app}/cli/export.js +7 -5
- package/esm/{app → keri/src/app}/cli/incept.js +49 -5
- package/esm/keri/src/app/cli/index.js +14 -0
- package/esm/{app → keri/src/app}/cli/init.js +32 -0
- package/esm/keri/src/app/cli/list.js +33 -0
- package/esm/keri/src/app/cli/loc.js +73 -0
- package/esm/keri/src/app/cli/oobi.js +149 -0
- package/esm/{app → keri/src/app}/configing.js +24 -17
- package/esm/keri/src/app/cue-runtime.js +70 -0
- package/esm/keri/src/app/exchanging.js +451 -0
- package/esm/keri/src/app/habbing.js +1248 -0
- package/esm/{app → keri/src/app}/index.js +9 -2
- package/esm/keri/src/app/keeping.js +1190 -0
- package/esm/keri/src/app/mailbox-director.js +216 -0
- package/esm/keri/src/app/oobiery.js +445 -0
- package/esm/keri/src/app/querying.js +671 -0
- package/esm/keri/src/app/reactor.js +558 -0
- package/esm/keri/src/app/runtime-turn.js +14 -0
- package/esm/keri/src/app/server.js +380 -0
- package/esm/keri/src/app/version.js +12 -0
- package/esm/{core → keri/src/core}/bytes.js +5 -2
- package/esm/keri/src/core/cues.js +1 -0
- package/esm/keri/src/core/deck.js +86 -0
- package/esm/keri/src/core/dispatch.js +361 -0
- package/esm/keri/src/core/errors.js +42 -0
- package/esm/keri/src/core/eventing.js +2259 -0
- package/esm/keri/src/core/index.js +19 -0
- package/esm/keri/src/core/kever-decisions.js +63 -0
- package/esm/keri/src/core/kever.js +1771 -0
- package/esm/keri/src/core/logger.js +50 -0
- package/esm/keri/src/core/mailbox-topics.js +13 -0
- package/esm/keri/src/core/messages.js +81 -0
- package/esm/keri/src/core/records.js +325 -0
- package/esm/keri/src/core/roles.js +29 -0
- package/esm/keri/src/core/routing.js +792 -0
- package/esm/keri/src/core/schemes.js +10 -0
- package/esm/keri/src/core/witnesses.js +65 -0
- package/esm/keri/src/db/basing.js +1713 -0
- package/esm/keri/src/db/core/keys.js +181 -0
- package/esm/keri/src/db/core/lmdber.js +1764 -0
- package/esm/{db → keri/src/db}/core/path-manager.js +44 -36
- package/esm/keri/src/db/escrowing.js +358 -0
- package/esm/{db → keri/src/db}/index.js +3 -0
- package/esm/keri/src/db/keeping.js +462 -0
- package/esm/keri/src/db/koming.js +436 -0
- package/esm/keri/src/db/subing.js +1575 -0
- package/esm/{npm → keri/src/npm}/index.js +1 -1
- package/esm/keri/src/time/mod.js +31 -0
- package/package.json +15 -12
- package/types/_dnt.polyfills.d.ts +5 -0
- package/types/_dnt.polyfills.d.ts.map +1 -1
- package/types/cesr/mod.d.ts +3 -0
- package/types/cesr/mod.d.ts.map +1 -0
- package/types/cesr/src/adapters/async-iterable.d.ts +12 -0
- package/types/cesr/src/adapters/async-iterable.d.ts.map +1 -0
- package/types/cesr/src/adapters/effection.d.ts +15 -0
- package/types/cesr/src/adapters/effection.d.ts.map +1 -0
- package/types/cesr/src/annotate/annotator.d.ts +16 -0
- package/types/cesr/src/annotate/annotator.d.ts.map +1 -0
- package/types/cesr/src/annotate/comments.d.ts +10 -0
- package/types/cesr/src/annotate/comments.d.ts.map +1 -0
- package/types/cesr/src/annotate/denot.d.ts +8 -0
- package/types/cesr/src/annotate/denot.d.ts.map +1 -0
- package/types/cesr/src/annotate/render.d.ts +11 -0
- package/types/cesr/src/annotate/render.d.ts.map +1 -0
- package/types/cesr/src/annotate/types.d.ts +17 -0
- package/types/cesr/src/annotate/types.d.ts.map +1 -0
- package/types/cesr/src/bench/parser-benchmark.d.ts +73 -0
- package/types/cesr/src/bench/parser-benchmark.d.ts.map +1 -0
- package/types/cesr/src/core/bytes.d.ts +49 -0
- package/types/cesr/src/core/bytes.d.ts.map +1 -0
- package/types/cesr/src/core/cbor.d.ts +30 -0
- package/types/cesr/src/core/cbor.d.ts.map +1 -0
- package/types/cesr/src/core/errors.d.ts +47 -0
- package/types/cesr/src/core/errors.d.ts.map +1 -0
- package/types/cesr/src/core/parser-attachment-collector.d.ts +51 -0
- package/types/cesr/src/core/parser-attachment-collector.d.ts.map +1 -0
- package/types/cesr/src/core/parser-constants.d.ts +30 -0
- package/types/cesr/src/core/parser-constants.d.ts.map +1 -0
- package/types/cesr/src/core/parser-deferred-frames.d.ts +38 -0
- package/types/cesr/src/core/parser-deferred-frames.d.ts.map +1 -0
- package/types/cesr/src/core/parser-engine.d.ts +71 -0
- package/types/cesr/src/core/parser-engine.d.ts.map +1 -0
- package/types/cesr/src/core/parser-frame-parser.d.ts +89 -0
- package/types/cesr/src/core/parser-frame-parser.d.ts.map +1 -0
- package/types/cesr/src/core/parser-policy.d.ts +27 -0
- package/types/cesr/src/core/parser-policy.d.ts.map +1 -0
- package/types/cesr/src/core/parser-stream-state.d.ts +30 -0
- package/types/cesr/src/core/parser-stream-state.d.ts.map +1 -0
- package/types/cesr/src/core/recovery-diagnostics.d.ts +59 -0
- package/types/cesr/src/core/recovery-diagnostics.d.ts.map +1 -0
- package/types/cesr/src/core/types.d.ts +79 -0
- package/types/cesr/src/core/types.d.ts.map +1 -0
- package/types/cesr/src/core/vocabulary.d.ts +48 -0
- package/types/cesr/src/core/vocabulary.d.ts.map +1 -0
- package/types/cesr/src/index.d.ts +82 -0
- package/types/cesr/src/index.d.ts.map +1 -0
- package/types/cesr/src/parser/attachment-fallback-policy.d.ts +78 -0
- package/types/cesr/src/parser/attachment-fallback-policy.d.ts.map +1 -0
- package/types/cesr/src/parser/attachment-parser.d.ts +12 -0
- package/types/cesr/src/parser/attachment-parser.d.ts.map +1 -0
- package/types/cesr/src/parser/cold-start.d.ts +9 -0
- package/types/cesr/src/parser/cold-start.d.ts.map +1 -0
- package/types/cesr/src/parser/group-dispatch.d.ts +99 -0
- package/types/cesr/src/parser/group-dispatch.d.ts.map +1 -0
- package/types/cesr/src/primitives/aggor.d.ts +126 -0
- package/types/cesr/src/primitives/aggor.d.ts.map +1 -0
- package/types/cesr/src/primitives/bexter.d.ts +32 -0
- package/types/cesr/src/primitives/bexter.d.ts.map +1 -0
- package/types/cesr/src/primitives/blinder.d.ts +26 -0
- package/types/cesr/src/primitives/blinder.d.ts.map +1 -0
- package/types/cesr/src/primitives/byte-like.d.ts +7 -0
- package/types/cesr/src/primitives/byte-like.d.ts.map +1 -0
- package/types/cesr/src/primitives/cigar.d.ts +26 -0
- package/types/cesr/src/primitives/cigar.d.ts.map +1 -0
- package/types/cesr/src/primitives/cipher.d.ts +82 -0
- package/types/cesr/src/primitives/cipher.d.ts.map +1 -0
- package/types/cesr/src/primitives/codex.d.ts +84 -0
- package/types/cesr/src/primitives/codex.d.ts.map +1 -0
- package/types/cesr/src/primitives/compactor.d.ts +97 -0
- package/types/cesr/src/primitives/compactor.d.ts.map +1 -0
- package/types/cesr/src/primitives/counter.d.ts +75 -0
- package/types/cesr/src/primitives/counter.d.ts.map +1 -0
- package/types/cesr/src/primitives/dater.d.ts +16 -0
- package/types/cesr/src/primitives/dater.d.ts.map +1 -0
- package/types/cesr/src/primitives/decimer.d.ts +23 -0
- package/types/cesr/src/primitives/decimer.d.ts.map +1 -0
- package/types/cesr/src/primitives/decrypter.d.ts +72 -0
- package/types/cesr/src/primitives/decrypter.d.ts.map +1 -0
- package/types/cesr/src/primitives/diger.d.ts +36 -0
- package/types/cesr/src/primitives/diger.d.ts.map +1 -0
- package/types/cesr/src/primitives/disclosure.d.ts +201 -0
- package/types/cesr/src/primitives/disclosure.d.ts.map +1 -0
- package/types/cesr/src/primitives/encrypter.d.ts +74 -0
- package/types/cesr/src/primitives/encrypter.d.ts.map +1 -0
- package/types/cesr/src/primitives/hydrate.d.ts +20 -0
- package/types/cesr/src/primitives/hydrate.d.ts.map +1 -0
- package/types/cesr/src/primitives/ilker.d.ts +17 -0
- package/types/cesr/src/primitives/ilker.d.ts.map +1 -0
- package/types/cesr/src/primitives/indexer.d.ts +63 -0
- package/types/cesr/src/primitives/indexer.d.ts.map +1 -0
- package/types/cesr/src/primitives/labeler.d.ts +32 -0
- package/types/cesr/src/primitives/labeler.d.ts.map +1 -0
- package/types/cesr/src/primitives/mapper.d.ts +190 -0
- package/types/cesr/src/primitives/mapper.d.ts.map +1 -0
- package/types/cesr/src/primitives/matter.d.ts +87 -0
- package/types/cesr/src/primitives/matter.d.ts.map +1 -0
- package/types/cesr/src/primitives/mediar.d.ts +26 -0
- package/types/cesr/src/primitives/mediar.d.ts.map +1 -0
- package/types/cesr/src/primitives/noncer.d.ts +24 -0
- package/types/cesr/src/primitives/noncer.d.ts.map +1 -0
- package/types/cesr/src/primitives/number.d.ts +16 -0
- package/types/cesr/src/primitives/number.d.ts.map +1 -0
- package/types/cesr/src/primitives/pather.d.ts +37 -0
- package/types/cesr/src/primitives/pather.d.ts.map +1 -0
- package/types/cesr/src/primitives/prefixer.d.ts +16 -0
- package/types/cesr/src/primitives/prefixer.d.ts.map +1 -0
- package/types/cesr/src/primitives/primitive.d.ts +51 -0
- package/types/cesr/src/primitives/primitive.d.ts.map +1 -0
- package/types/cesr/src/primitives/registry.d.ts +13 -0
- package/types/cesr/src/primitives/registry.d.ts.map +1 -0
- package/types/cesr/src/primitives/saider.d.ts +57 -0
- package/types/cesr/src/primitives/saider.d.ts.map +1 -0
- package/types/cesr/src/primitives/salter.d.ts +68 -0
- package/types/cesr/src/primitives/salter.d.ts.map +1 -0
- package/types/cesr/src/primitives/sealed-box.d.ts +29 -0
- package/types/cesr/src/primitives/sealed-box.d.ts.map +1 -0
- package/types/cesr/src/primitives/sealer.d.ts +20 -0
- package/types/cesr/src/primitives/sealer.d.ts.map +1 -0
- package/types/cesr/src/primitives/seqner.d.ts +16 -0
- package/types/cesr/src/primitives/seqner.d.ts.map +1 -0
- package/types/cesr/src/primitives/siger.d.ts +30 -0
- package/types/cesr/src/primitives/siger.d.ts.map +1 -0
- package/types/cesr/src/primitives/signer.d.ts +90 -0
- package/types/cesr/src/primitives/signer.d.ts.map +1 -0
- package/types/cesr/src/primitives/streamer.d.ts +31 -0
- package/types/cesr/src/primitives/streamer.d.ts.map +1 -0
- package/types/cesr/src/primitives/structing.d.ts +4114 -0
- package/types/cesr/src/primitives/structing.d.ts.map +1 -0
- package/types/cesr/src/primitives/structor.d.ts +50 -0
- package/types/cesr/src/primitives/structor.d.ts.map +1 -0
- package/types/cesr/src/primitives/tagger.d.ts +17 -0
- package/types/cesr/src/primitives/tagger.d.ts.map +1 -0
- package/types/cesr/src/primitives/texter.d.ts +15 -0
- package/types/cesr/src/primitives/texter.d.ts.map +1 -0
- package/types/cesr/src/primitives/tholder.d.ts +160 -0
- package/types/cesr/src/primitives/tholder.d.ts.map +1 -0
- package/types/cesr/src/primitives/traitor.d.ts +17 -0
- package/types/cesr/src/primitives/traitor.d.ts.map +1 -0
- package/types/cesr/src/primitives/unknown.d.ts +32 -0
- package/types/cesr/src/primitives/unknown.d.ts.map +1 -0
- package/types/cesr/src/primitives/verfer.d.ts +28 -0
- package/types/cesr/src/primitives/verfer.d.ts.map +1 -0
- package/types/cesr/src/primitives/verser.d.ts +35 -0
- package/types/cesr/src/primitives/verser.d.ts.map +1 -0
- package/types/cesr/src/router/router-stub.d.ts +14 -0
- package/types/cesr/src/router/router-stub.d.ts.map +1 -0
- package/types/cesr/src/serder/native.d.ts +115 -0
- package/types/cesr/src/serder/native.d.ts.map +1 -0
- package/types/cesr/src/serder/serder.d.ts +248 -0
- package/types/cesr/src/serder/serder.d.ts.map +1 -0
- package/types/cesr/src/serder/serdery.d.ts +48 -0
- package/types/cesr/src/serder/serdery.d.ts.map +1 -0
- package/types/cesr/src/serder/smell.d.ts +29 -0
- package/types/cesr/src/serder/smell.d.ts.map +1 -0
- package/types/cesr/src/tables/codex-utils.d.ts +7 -0
- package/types/cesr/src/tables/codex-utils.d.ts.map +1 -0
- package/types/cesr/src/tables/counter-codex.d.ts +10 -0
- package/types/cesr/src/tables/counter-codex.d.ts.map +1 -0
- package/types/cesr/src/tables/counter-groups.d.ts +14 -0
- package/types/cesr/src/tables/counter-groups.d.ts.map +1 -0
- package/types/cesr/src/tables/counter-version-registry.d.ts +90 -0
- package/types/cesr/src/tables/counter-version-registry.d.ts.map +1 -0
- package/types/cesr/src/tables/counter.tables.generated.d.ts +92 -0
- package/types/cesr/src/tables/counter.tables.generated.d.ts.map +1 -0
- package/types/cesr/src/tables/indexer.codex.generated.d.ts +127 -0
- package/types/cesr/src/tables/indexer.codex.generated.d.ts.map +1 -0
- package/types/cesr/src/tables/indexer.tables.generated.d.ts +46 -0
- package/types/cesr/src/tables/indexer.tables.generated.d.ts.map +1 -0
- package/types/cesr/src/tables/matter.codex.generated.d.ts +797 -0
- package/types/cesr/src/tables/matter.codex.generated.d.ts.map +1 -0
- package/types/cesr/src/tables/matter.tables.generated.d.ts +228 -0
- package/types/cesr/src/tables/matter.tables.generated.d.ts.map +1 -0
- package/types/cesr/src/tables/table-types.d.ts +32 -0
- package/types/cesr/src/tables/table-types.d.ts.map +1 -0
- package/types/cesr/src/tables/trait.codex.generated.d.ts +19 -0
- package/types/cesr/src/tables/trait.codex.generated.d.ts.map +1 -0
- package/types/cesr/src/tables/versions.d.ts +22 -0
- package/types/cesr/src/tables/versions.d.ts.map +1 -0
- package/types/cesr/src/version.d.ts +11 -0
- package/types/cesr/src/version.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/path/1.1.4/constants.d.ts +1 -1
- package/types/keri/src/app/agent-runtime.d.ts +174 -0
- package/types/keri/src/app/agent-runtime.d.ts.map +1 -0
- package/types/keri/src/app/authenticating.d.ts +30 -0
- package/types/keri/src/app/authenticating.d.ts.map +1 -0
- package/types/keri/src/app/challenging.d.ts +56 -0
- package/types/keri/src/app/challenging.d.ts.map +1 -0
- package/types/keri/src/app/cli/agent.d.ts +16 -0
- package/types/keri/src/app/cli/agent.d.ts.map +1 -0
- package/types/keri/src/app/cli/aid.d.ts +4 -0
- package/types/keri/src/app/cli/aid.d.ts.map +1 -0
- package/types/keri/src/app/cli/annotate-color.d.ts.map +1 -0
- package/types/keri/src/app/cli/annotate.d.ts +9 -0
- package/types/keri/src/app/cli/annotate.d.ts.map +1 -0
- package/types/keri/src/app/cli/benchmark.d.ts.map +1 -0
- package/types/keri/src/app/cli/challenge.d.ts +8 -0
- package/types/keri/src/app/cli/challenge.d.ts.map +1 -0
- package/types/keri/src/app/cli/cli-node.d.ts +2 -0
- package/types/keri/src/app/cli/cli-node.d.ts.map +1 -0
- package/types/keri/src/app/cli/cli.d.ts.map +1 -0
- package/types/keri/src/app/cli/command-definitions.d.ts +17 -0
- package/types/keri/src/app/cli/command-definitions.d.ts.map +1 -0
- package/types/keri/src/app/cli/command-types.d.ts.map +1 -0
- package/types/keri/src/app/cli/common/existing.d.ts +15 -0
- package/types/keri/src/app/cli/common/existing.d.ts.map +1 -0
- package/types/keri/src/app/cli/common/parsing.d.ts +21 -0
- package/types/keri/src/app/cli/common/parsing.d.ts.map +1 -0
- package/types/keri/src/app/cli/db-dump.d.ts.map +1 -0
- package/types/keri/src/app/cli/ends.d.ts +15 -0
- package/types/keri/src/app/cli/ends.d.ts.map +1 -0
- package/types/keri/src/app/cli/exchange.d.ts +12 -0
- package/types/keri/src/app/cli/exchange.d.ts.map +1 -0
- package/types/keri/src/app/cli/export.d.ts.map +1 -0
- package/types/keri/src/app/cli/incept.d.ts.map +1 -0
- package/types/keri/src/app/cli/index.d.ts +15 -0
- package/types/keri/src/app/cli/index.d.ts.map +1 -0
- package/types/keri/src/app/cli/init.d.ts.map +1 -0
- package/types/keri/src/app/cli/list.d.ts +4 -0
- package/types/keri/src/app/cli/list.d.ts.map +1 -0
- package/types/keri/src/app/cli/loc.d.ts +12 -0
- package/types/keri/src/app/cli/loc.d.ts.map +1 -0
- package/types/keri/src/app/cli/oobi.d.ts +22 -0
- package/types/keri/src/app/cli/oobi.d.ts.map +1 -0
- package/types/{app → keri/src/app}/configing.d.ts +10 -9
- package/types/keri/src/app/configing.d.ts.map +1 -0
- package/types/keri/src/app/cue-runtime.d.ts +38 -0
- package/types/keri/src/app/cue-runtime.d.ts.map +1 -0
- package/types/keri/src/app/exchanging.d.ts +115 -0
- package/types/keri/src/app/exchanging.d.ts.map +1 -0
- package/types/keri/src/app/habbing.d.ts +364 -0
- package/types/keri/src/app/habbing.d.ts.map +1 -0
- package/types/{app → keri/src/app}/index.d.ts +9 -2
- package/types/keri/src/app/index.d.ts.map +1 -0
- package/types/keri/src/app/keeping.d.ts +481 -0
- package/types/keri/src/app/keeping.d.ts.map +1 -0
- package/types/keri/src/app/mailbox-director.d.ts +81 -0
- package/types/keri/src/app/mailbox-director.d.ts.map +1 -0
- package/types/keri/src/app/oobiery.d.ts +126 -0
- package/types/keri/src/app/oobiery.d.ts.map +1 -0
- package/types/keri/src/app/querying.d.ts +223 -0
- package/types/keri/src/app/querying.d.ts.map +1 -0
- package/types/keri/src/app/reactor.d.ts +89 -0
- package/types/keri/src/app/reactor.d.ts.map +1 -0
- package/types/keri/src/app/runtime-turn.d.ts +10 -0
- package/types/keri/src/app/runtime-turn.d.ts.map +1 -0
- package/types/keri/src/app/server.d.ts +24 -0
- package/types/keri/src/app/server.d.ts.map +1 -0
- package/types/keri/src/app/version.d.ts +11 -0
- package/types/keri/src/app/version.d.ts.map +1 -0
- package/types/keri/src/core/bytes.d.ts.map +1 -0
- package/types/keri/src/core/cues.d.ts +162 -0
- package/types/keri/src/core/cues.d.ts.map +1 -0
- package/types/keri/src/core/deck.d.ts +42 -0
- package/types/keri/src/core/deck.d.ts.map +1 -0
- package/types/keri/src/core/dispatch.d.ts +140 -0
- package/types/keri/src/core/dispatch.d.ts.map +1 -0
- package/types/keri/src/core/errors.d.ts +35 -0
- package/types/keri/src/core/errors.d.ts.map +1 -0
- package/types/keri/src/core/eventing.d.ts +746 -0
- package/types/keri/src/core/eventing.d.ts.map +1 -0
- package/types/keri/src/core/index.d.ts +20 -0
- package/types/keri/src/core/index.d.ts.map +1 -0
- package/types/keri/src/core/kever-decisions.d.ts +243 -0
- package/types/keri/src/core/kever-decisions.d.ts.map +1 -0
- package/types/keri/src/core/kever.d.ts +419 -0
- package/types/keri/src/core/kever.d.ts.map +1 -0
- package/types/keri/src/core/logger.d.ts +20 -0
- package/types/keri/src/core/logger.d.ts.map +1 -0
- package/types/keri/src/core/mailbox-topics.d.ts +28 -0
- package/types/keri/src/core/mailbox-topics.d.ts.map +1 -0
- package/types/keri/src/core/messages.d.ts +41 -0
- package/types/keri/src/core/messages.d.ts.map +1 -0
- package/types/keri/src/core/records.d.ts +424 -0
- package/types/keri/src/core/records.d.ts.map +1 -0
- package/types/keri/src/core/roles.d.ts +30 -0
- package/types/keri/src/core/roles.d.ts.map +1 -0
- package/types/keri/src/core/routing.d.ts +334 -0
- package/types/keri/src/core/routing.d.ts.map +1 -0
- package/types/keri/src/core/schemes.d.ts +11 -0
- package/types/keri/src/core/schemes.d.ts.map +1 -0
- package/types/keri/src/core/witnesses.d.ts +36 -0
- package/types/keri/src/core/witnesses.d.ts.map +1 -0
- package/types/keri/src/db/basing.d.ts +344 -0
- package/types/keri/src/db/basing.d.ts.map +1 -0
- package/types/keri/src/db/core/keys.d.ts +107 -0
- package/types/keri/src/db/core/keys.d.ts.map +1 -0
- package/types/keri/src/db/core/lmdber.d.ts +605 -0
- package/types/keri/src/db/core/lmdber.d.ts.map +1 -0
- package/types/{db → keri/src/db}/core/path-manager.d.ts +12 -19
- package/types/keri/src/db/core/path-manager.d.ts.map +1 -0
- package/types/keri/src/db/escrowing.d.ts +135 -0
- package/types/keri/src/db/escrowing.d.ts.map +1 -0
- package/types/keri/src/db/index.d.ts +9 -0
- package/types/keri/src/db/index.d.ts.map +1 -0
- package/types/keri/src/db/keeping.d.ts +274 -0
- package/types/keri/src/db/keeping.d.ts.map +1 -0
- package/types/keri/src/db/koming.d.ts +218 -0
- package/types/keri/src/db/koming.d.ts.map +1 -0
- package/types/keri/src/db/subing.d.ts +754 -0
- package/types/keri/src/db/subing.d.ts.map +1 -0
- package/types/{npm → keri/src/npm}/index.d.ts +1 -1
- package/types/keri/src/npm/index.d.ts.map +1 -0
- package/types/keri/src/time/mod.d.ts +20 -0
- package/types/keri/src/time/mod.d.ts.map +1 -0
- package/esm/app/cli/agent.js +0 -19
- package/esm/app/cli/annotate.js +0 -57
- package/esm/app/cli/command-definitions.js +0 -358
- package/esm/app/cli/index.js +0 -9
- package/esm/app/habbing.js +0 -386
- package/esm/app/keeping.js +0 -321
- package/esm/app/server.js +0 -57
- package/esm/app/version.js +0 -9
- package/esm/core/errors.js +0 -26
- package/esm/core/index.js +0 -8
- package/esm/core/logger.js +0 -20
- package/esm/db/basing.js +0 -241
- package/esm/db/core/lmdber.js +0 -499
- package/esm/db/keeping.js +0 -214
- package/types/app/cli/agent.d.ts +0 -9
- package/types/app/cli/agent.d.ts.map +0 -1
- package/types/app/cli/annotate-color.d.ts.map +0 -1
- package/types/app/cli/annotate.d.ts +0 -3
- package/types/app/cli/annotate.d.ts.map +0 -1
- package/types/app/cli/benchmark.d.ts.map +0 -1
- package/types/app/cli/cli-node.d.ts +0 -2
- package/types/app/cli/cli-node.d.ts.map +0 -1
- package/types/app/cli/cli.d.ts.map +0 -1
- package/types/app/cli/command-definitions.d.ts +0 -8
- package/types/app/cli/command-definitions.d.ts.map +0 -1
- package/types/app/cli/command-types.d.ts.map +0 -1
- package/types/app/cli/common/existing.d.ts +0 -4
- package/types/app/cli/common/existing.d.ts.map +0 -1
- package/types/app/cli/common/parsing.d.ts +0 -15
- package/types/app/cli/common/parsing.d.ts.map +0 -1
- package/types/app/cli/db-dump.d.ts.map +0 -1
- package/types/app/cli/export.d.ts.map +0 -1
- package/types/app/cli/incept.d.ts.map +0 -1
- package/types/app/cli/index.d.ts +0 -10
- package/types/app/cli/index.d.ts.map +0 -1
- package/types/app/cli/init.d.ts.map +0 -1
- package/types/app/configing.d.ts.map +0 -1
- package/types/app/habbing.d.ts +0 -107
- package/types/app/habbing.d.ts.map +0 -1
- package/types/app/index.d.ts.map +0 -1
- package/types/app/keeping.d.ts +0 -72
- package/types/app/keeping.d.ts.map +0 -1
- package/types/app/server.d.ts +0 -9
- package/types/app/server.d.ts.map +0 -1
- package/types/app/version.d.ts +0 -8
- package/types/app/version.d.ts.map +0 -1
- package/types/core/bytes.d.ts.map +0 -1
- package/types/core/errors.d.ts +0 -19
- package/types/core/errors.d.ts.map +0 -1
- package/types/core/index.d.ts +0 -9
- package/types/core/index.d.ts.map +0 -1
- package/types/core/logger.d.ts +0 -9
- package/types/core/logger.d.ts.map +0 -1
- package/types/db/basing.d.ts +0 -96
- package/types/db/basing.d.ts.map +0 -1
- package/types/db/core/lmdber.d.ts +0 -142
- package/types/db/core/lmdber.d.ts.map +0 -1
- package/types/db/core/path-manager.d.ts.map +0 -1
- package/types/db/index.d.ts +0 -6
- package/types/db/index.d.ts.map +0 -1
- package/types/db/keeping.d.ts +0 -73
- package/types/db/keeping.d.ts.map +0 -1
- package/types/npm/index.d.ts.map +0 -1
- /package/esm/{app/cli/command-types.js → cesr/src/annotate/types.js} +0 -0
- /package/esm/{app → keri/src/app}/cli/db-dump.js +0 -0
- /package/types/{app → keri/src/app}/cli/annotate-color.d.ts +0 -0
- /package/types/{app → keri/src/app}/cli/benchmark.d.ts +0 -0
- /package/types/{app → keri/src/app}/cli/cli.d.ts +0 -0
- /package/types/{app → keri/src/app}/cli/command-types.d.ts +0 -0
- /package/types/{app → keri/src/app}/cli/db-dump.d.ts +0 -0
- /package/types/{app → keri/src/app}/cli/export.d.ts +0 -0
- /package/types/{app → keri/src/app}/cli/incept.d.ts +0 -0
- /package/types/{app → keri/src/app}/cli/init.d.ts +0 -0
- /package/types/{core → keri/src/core}/bytes.d.ts +0 -0
package/README.md
CHANGED
|
@@ -83,5 +83,5 @@ deno task tufa version
|
|
|
83
83
|
|
|
84
84
|
## License
|
|
85
85
|
|
|
86
|
-
Licensed under the Apache License, Version 2.0 (`Apache-2.0`). See the
|
|
87
|
-
|
|
86
|
+
Licensed under the Apache License, Version 2.0 (`Apache-2.0`). See the top-level
|
|
87
|
+
`LICENSE` file in this repository.
|
package/esm/cesr/mod.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { createParser } from "../core/parser-engine.js";
|
|
2
|
+
/**
|
|
3
|
+
* Adapt an async byte stream into parsed CESR frames.
|
|
4
|
+
*
|
|
5
|
+
* Boundary contract:
|
|
6
|
+
* - chunks are fed in arrival order into one parser instance
|
|
7
|
+
* - emitted parser error events are rethrown as stream errors
|
|
8
|
+
* - yielded values are the historical `CesrMessage` frame payloads only
|
|
9
|
+
*/
|
|
10
|
+
export async function* toAsyncFrames(source, options = {}) {
|
|
11
|
+
const parser = createParser(options);
|
|
12
|
+
for await (const chunk of source) {
|
|
13
|
+
const frames = parser.feed(chunk);
|
|
14
|
+
for (const frame of frames) {
|
|
15
|
+
if (frame.type === "error")
|
|
16
|
+
throw frame.error;
|
|
17
|
+
yield frame.frame;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
for (const frame of parser.flush()) {
|
|
21
|
+
if (frame.type === "error")
|
|
22
|
+
throw frame.error;
|
|
23
|
+
yield frame.frame;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { action } from "effection";
|
|
2
|
+
import { toAsyncFrames } from "./async-iterable.js";
|
|
3
|
+
/**
|
|
4
|
+
* Bridge the async-iterable parser adapter into an Effection operation.
|
|
5
|
+
*
|
|
6
|
+
* This stays intentionally thin so parser semantics continue to live in
|
|
7
|
+
* `toAsyncFrames()` rather than forking behavior in an Effection-only path.
|
|
8
|
+
*/
|
|
9
|
+
export function* toEffectionFrames(source, options = {}) {
|
|
10
|
+
const frames = yield* action((resolve) => {
|
|
11
|
+
resolve(toAsyncFrames(source, options));
|
|
12
|
+
return () => { };
|
|
13
|
+
});
|
|
14
|
+
return { frames };
|
|
15
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { b } from "../core/bytes.js";
|
|
2
|
+
import { parseBytes } from "../core/parser-engine.js";
|
|
3
|
+
import { renderAnnotatedFrames, renderWrapperAnnotatedStream } from "./render.js";
|
|
4
|
+
const DEFAULT_OPTIONS = Object.freeze({
|
|
5
|
+
commentMode: "inline",
|
|
6
|
+
indent: 2,
|
|
7
|
+
showOffsets: false,
|
|
8
|
+
showRawHex: false,
|
|
9
|
+
domainHint: "auto",
|
|
10
|
+
pretty: false,
|
|
11
|
+
});
|
|
12
|
+
function resolveOptions(options) {
|
|
13
|
+
return {
|
|
14
|
+
...DEFAULT_OPTIONS,
|
|
15
|
+
...options,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function parsedFramesOrThrow(frames) {
|
|
19
|
+
const parsedFrames = [];
|
|
20
|
+
for (const frame of frames) {
|
|
21
|
+
if (frame.type === "error") {
|
|
22
|
+
throw frame.error;
|
|
23
|
+
}
|
|
24
|
+
parsedFrames.push(frame.frame);
|
|
25
|
+
}
|
|
26
|
+
return parsedFrames;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Parse input and return one annotation structure per emitted frame.
|
|
30
|
+
*
|
|
31
|
+
* Use this when callers want to inspect annotation lines programmatically
|
|
32
|
+
* instead of flattening the whole stream to one rendered string.
|
|
33
|
+
*/
|
|
34
|
+
export function annotateFrames(input, options) {
|
|
35
|
+
const opts = resolveOptions(options);
|
|
36
|
+
const bytes = typeof input === "string" ? b(input) : input;
|
|
37
|
+
const frames = parsedFramesOrThrow(parseBytes(bytes));
|
|
38
|
+
return renderAnnotatedFrames(frames, opts);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Render one CESR stream into maintainer-oriented annotated text.
|
|
42
|
+
*
|
|
43
|
+
* Wrapper-aware rendering is attempted first so opaque wrapper payloads can be
|
|
44
|
+
* preserved faithfully before falling back to frame-by-frame annotation.
|
|
45
|
+
*/
|
|
46
|
+
export function annotate(input, options) {
|
|
47
|
+
const opts = resolveOptions(options);
|
|
48
|
+
const bytes = typeof input === "string" ? b(input) : input;
|
|
49
|
+
const wrapperAnnotated = renderWrapperAnnotatedStream(bytes, opts);
|
|
50
|
+
if (wrapperAnnotated !== null) {
|
|
51
|
+
return wrapperAnnotated;
|
|
52
|
+
}
|
|
53
|
+
const frames = annotateFrames(bytes, opts);
|
|
54
|
+
return frames.map((frame) => frame.lines.join("\n")).join("\n");
|
|
55
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { resolveCounterCodeNameTable } from "../tables/counter-version-registry.js";
|
|
2
|
+
import { COUNTER_CODE_NAMES_V1, COUNTER_CODE_NAMES_V2 } from "../tables/counter.tables.generated.js";
|
|
3
|
+
import { MATTER_CODE_NAMES } from "../tables/matter.tables.generated.js";
|
|
4
|
+
const NATIVE_FIELD_LABELS = Object.freeze({
|
|
5
|
+
v: "version string",
|
|
6
|
+
t: "ilk",
|
|
7
|
+
d: "SAID",
|
|
8
|
+
i: "AID prefix",
|
|
9
|
+
s: "sequence number",
|
|
10
|
+
p: "prior event digest",
|
|
11
|
+
kt: "signing threshold",
|
|
12
|
+
k: "current keys",
|
|
13
|
+
nt: "next threshold",
|
|
14
|
+
n: "next keys digest",
|
|
15
|
+
bt: "witness threshold",
|
|
16
|
+
b: "witness list",
|
|
17
|
+
c: "traits/config",
|
|
18
|
+
a: "anchors/data",
|
|
19
|
+
});
|
|
20
|
+
/** Resolve a human-readable counter name against either known counter table. */
|
|
21
|
+
export function counterCodeName(code) {
|
|
22
|
+
const v2 = COUNTER_CODE_NAMES_V2[code];
|
|
23
|
+
if (v2)
|
|
24
|
+
return v2;
|
|
25
|
+
const v1 = COUNTER_CODE_NAMES_V1[code];
|
|
26
|
+
if (v1)
|
|
27
|
+
return v1;
|
|
28
|
+
return "Counter";
|
|
29
|
+
}
|
|
30
|
+
/** Resolve a counter name against the registry selected for one protocol version. */
|
|
31
|
+
export function counterCodeNameForVersion(code, version) {
|
|
32
|
+
const table = resolveCounterCodeNameTable(version);
|
|
33
|
+
return table[code] ?? "Counter";
|
|
34
|
+
}
|
|
35
|
+
/** Resolve a human-readable matter name from the generated matter code table. */
|
|
36
|
+
export function matterCodeName(code) {
|
|
37
|
+
return MATTER_CODE_NAMES[code] ?? "Matter";
|
|
38
|
+
}
|
|
39
|
+
/** Expand well-known native field labels for annotation comments when available. */
|
|
40
|
+
export function nativeLabelName(label) {
|
|
41
|
+
if (!label)
|
|
42
|
+
return null;
|
|
43
|
+
return NATIVE_FIELD_LABELS[label] ?? label;
|
|
44
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const TEXT_ENCODER = new TextEncoder();
|
|
2
|
+
/**
|
|
3
|
+
* Strip annotation comments/whitespace and rebuild the raw CESR text stream.
|
|
4
|
+
*
|
|
5
|
+
* This is the inverse of maintainer-facing annotation output, not a general
|
|
6
|
+
* parser: comment lines and inline `# ...` commentary are discarded.
|
|
7
|
+
*/
|
|
8
|
+
export function denot(annotated) {
|
|
9
|
+
const tokens = [];
|
|
10
|
+
for (const line of annotated.split(/\r?\n/)) {
|
|
11
|
+
const trimmed = line.trim();
|
|
12
|
+
if (!trimmed || trimmed.startsWith("#")) {
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
const commentIndex = line.indexOf("#");
|
|
16
|
+
const sansComment = (commentIndex >= 0 ? line.slice(0, commentIndex) : line)
|
|
17
|
+
.trim();
|
|
18
|
+
if (!sansComment)
|
|
19
|
+
continue;
|
|
20
|
+
tokens.push(sansComment);
|
|
21
|
+
}
|
|
22
|
+
return TEXT_ENCODER.encode(tokens.join(""));
|
|
23
|
+
}
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
import { b64ToInt, intToB64 } from "../core/bytes.js";
|
|
2
|
+
import { DeserializeError, GroupSizeError, ShortageError, UnknownCodeError } from "../core/errors.js";
|
|
3
|
+
import { parseBytes } from "../core/parser-engine.js";
|
|
4
|
+
import { sniff } from "../parser/cold-start.js";
|
|
5
|
+
import { parseAttachmentDispatchCompat } from "../parser/group-dispatch.js";
|
|
6
|
+
import { Counter, parseCounter } from "../primitives/counter.js";
|
|
7
|
+
import { Indexer } from "../primitives/indexer.js";
|
|
8
|
+
import { Matter, parseMatter } from "../primitives/matter.js";
|
|
9
|
+
import { isCounterGroupLike, isPrimitiveTuple } from "../primitives/primitive.js";
|
|
10
|
+
import { UnknownPrimitive } from "../primitives/unknown.js";
|
|
11
|
+
import { counterCodeName, counterCodeNameForVersion, matterCodeName, nativeLabelName } from "./comments.js";
|
|
12
|
+
const TEXT_DECODER = new TextDecoder();
|
|
13
|
+
const OPAQUE_TOKEN_COMMENT = "opaque token";
|
|
14
|
+
const OPAQUE_WRAPPER_PAYLOAD_COMMENT = "opaque wrapper payload";
|
|
15
|
+
const WRAPPER_GROUP_NAMES = new Set([
|
|
16
|
+
"AttachmentGroup",
|
|
17
|
+
"BigAttachmentGroup",
|
|
18
|
+
"BodyWithAttachmentGroup",
|
|
19
|
+
"BigBodyWithAttachmentGroup",
|
|
20
|
+
]);
|
|
21
|
+
const TOP_LEVEL_WRAPPER_GROUP_NAMES = new Set([
|
|
22
|
+
"GenericGroup",
|
|
23
|
+
"BigGenericGroup",
|
|
24
|
+
"BodyWithAttachmentGroup",
|
|
25
|
+
"BigBodyWithAttachmentGroup",
|
|
26
|
+
]);
|
|
27
|
+
function toHex(bytes) {
|
|
28
|
+
return Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
29
|
+
}
|
|
30
|
+
function isRecoverableParseError(error) {
|
|
31
|
+
return error instanceof UnknownCodeError
|
|
32
|
+
|| error instanceof DeserializeError
|
|
33
|
+
|| error instanceof ShortageError
|
|
34
|
+
|| error instanceof GroupSizeError;
|
|
35
|
+
}
|
|
36
|
+
function spaces(count) {
|
|
37
|
+
return " ".repeat(Math.max(0, count));
|
|
38
|
+
}
|
|
39
|
+
function asDomain(raw) {
|
|
40
|
+
try {
|
|
41
|
+
const cold = sniff(raw);
|
|
42
|
+
if (cold === "txt" || cold === "bny" || cold === "msg")
|
|
43
|
+
return cold;
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
if (!isRecoverableParseError(error)) {
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
// Fallback handled below.
|
|
50
|
+
}
|
|
51
|
+
return "msg";
|
|
52
|
+
}
|
|
53
|
+
function emitLine(lines, value, comment, indent, options) {
|
|
54
|
+
const pad = spaces(indent);
|
|
55
|
+
if (options.commentMode === "above") {
|
|
56
|
+
lines.push(`${pad}# ${comment}`);
|
|
57
|
+
lines.push(`${pad}${value}`);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
lines.push(`${pad}${value} # ${comment}`);
|
|
61
|
+
}
|
|
62
|
+
/** Parse counters with a bounded v1/v2 fallback for annotation-only rendering paths. */
|
|
63
|
+
function parseCounterCompat(input, version, domain) {
|
|
64
|
+
try {
|
|
65
|
+
return parseCounter(input, version, domain);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
if (!isRecoverableParseError(error)) {
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
const alternate = version.major >= 2
|
|
72
|
+
? { major: 1, minor: 0 }
|
|
73
|
+
: { major: 2, minor: 0 };
|
|
74
|
+
return parseCounter(input, alternate, domain);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** Decode a wrapped genus-version selector into the active protocol version context. */
|
|
78
|
+
function decodeVersionCounter(counter) {
|
|
79
|
+
const triplet = counter.qb64.length >= 3
|
|
80
|
+
? counter.qb64.slice(-3)
|
|
81
|
+
: intToB64(counter.count, 3);
|
|
82
|
+
const majorRaw = b64ToInt(triplet[0] ?? "A");
|
|
83
|
+
const minorRaw = b64ToInt(triplet[1] ?? "A");
|
|
84
|
+
return {
|
|
85
|
+
major: majorRaw === 1 ? 1 : 2,
|
|
86
|
+
minor: minorRaw,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/** Render hydrated group entries recursively using semantic primitive comments. */
|
|
90
|
+
function renderGroupItems(lines, items, version, indent, options) {
|
|
91
|
+
for (const item of items) {
|
|
92
|
+
if (isPrimitiveTuple(item)) {
|
|
93
|
+
renderGroupItems(lines, item, version, indent + options.indent, options);
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (isCounterGroupLike(item)) {
|
|
97
|
+
emitLine(lines, item.qb64, `${item.name} nested group`, indent, options);
|
|
98
|
+
renderGroupItems(lines, [...item.items], version, indent + options.indent, options);
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (item instanceof UnknownPrimitive) {
|
|
102
|
+
const value = item.sourceDomain === "bny"
|
|
103
|
+
? `0x${toHex(item.qb2)}`
|
|
104
|
+
: item.qb64;
|
|
105
|
+
emitLine(lines, value, OPAQUE_WRAPPER_PAYLOAD_COMMENT, indent, options);
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (item instanceof Counter) {
|
|
109
|
+
emitLine(lines, item.qb64, `${counterCodeNameForVersion(item.code, version)} counter`, indent, options);
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
if (item instanceof Indexer) {
|
|
113
|
+
emitLine(lines, item.qb64, `Indexer ${item.code}`, indent, options);
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
if (item instanceof Matter) {
|
|
117
|
+
emitLine(lines, item.qb64, matterCodeName(item.code), indent, options);
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
emitLine(lines, String(item), OPAQUE_TOKEN_COMMENT, indent, options);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/** Render one raw attachment-group span, including nested wrapper groups when present. */
|
|
124
|
+
function renderAttachmentGroupRaw(lines, raw, version, indent, options) {
|
|
125
|
+
const domain = asDomain(raw);
|
|
126
|
+
if (domain !== "txt" && domain !== "bny") {
|
|
127
|
+
return 0;
|
|
128
|
+
}
|
|
129
|
+
const parsed = parseAttachmentDispatchCompat(raw, version, domain);
|
|
130
|
+
const counter = parseCounterCompat(raw, version, domain);
|
|
131
|
+
emitLine(lines, counter.qb64, `${parsed.group.name} count=${counter.count}`, indent, options);
|
|
132
|
+
const headerSize = domain === "bny" ? counter.fullSizeB2 : counter.fullSize;
|
|
133
|
+
const payload = raw.slice(headerSize, parsed.consumed);
|
|
134
|
+
if (WRAPPER_GROUP_NAMES.has(parsed.group.name)) {
|
|
135
|
+
// Wrapper groups contain nested groups by convention, but real-world
|
|
136
|
+
// streams may include trailing opaque segments. Keep annotation resilient.
|
|
137
|
+
let offset = 0;
|
|
138
|
+
while (offset < payload.length) {
|
|
139
|
+
const slice = payload.slice(offset);
|
|
140
|
+
const sliceCold = asDomain(slice);
|
|
141
|
+
if (sliceCold === "msg") {
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
if (sliceCold === "txt" && slice[0] !== "-".charCodeAt(0)) {
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
let consumed = 0;
|
|
148
|
+
try {
|
|
149
|
+
consumed = renderAttachmentGroupRaw(lines, slice, version, indent + options.indent, options);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
if (!isRecoverableParseError(error)) {
|
|
153
|
+
throw error;
|
|
154
|
+
}
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
if (consumed <= 0)
|
|
158
|
+
break;
|
|
159
|
+
offset += consumed;
|
|
160
|
+
}
|
|
161
|
+
if (offset < payload.length) {
|
|
162
|
+
const remainder = payload.slice(offset);
|
|
163
|
+
const unit = domain === "bny" ? 3 : 4;
|
|
164
|
+
for (let i = 0; i < remainder.length; i += unit) {
|
|
165
|
+
const chunk = remainder.slice(i, Math.min(i + unit, remainder.length));
|
|
166
|
+
const rendered = domain === "bny"
|
|
167
|
+
? `0x${toHex(chunk)}`
|
|
168
|
+
: TEXT_DECODER.decode(chunk);
|
|
169
|
+
emitLine(lines, rendered, OPAQUE_WRAPPER_PAYLOAD_COMMENT, indent + options.indent, options);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return parsed.consumed;
|
|
173
|
+
}
|
|
174
|
+
renderGroupItems(lines, parsed.group.items, version, indent + options.indent, options);
|
|
175
|
+
return parsed.consumed;
|
|
176
|
+
}
|
|
177
|
+
/** Render a native CESR body-group payload using hydrated native field projections when available. */
|
|
178
|
+
function renderNativeBody(lines, frame, options, version) {
|
|
179
|
+
const raw = frame.body.raw;
|
|
180
|
+
const domain = asDomain(raw);
|
|
181
|
+
if (domain !== "txt" && domain !== "bny") {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const counter = parseCounterCompat(raw, version, domain);
|
|
185
|
+
emitLine(lines, counter.qb64, `${counterCodeNameForVersion(counter.code, version)} count=${counter.count}`, 0, options);
|
|
186
|
+
const unit = domain === "bny" ? 3 : 4;
|
|
187
|
+
const headerSize = domain === "bny" ? counter.fullSizeB2 : counter.fullSize;
|
|
188
|
+
const payloadSize = counter.count * unit;
|
|
189
|
+
const end = Math.min(raw.length, headerSize + payloadSize);
|
|
190
|
+
let offset = headerSize;
|
|
191
|
+
while (offset < end) {
|
|
192
|
+
const slice = raw.slice(offset, end);
|
|
193
|
+
try {
|
|
194
|
+
const nestedCounter = parseCounterCompat(slice, version, domain);
|
|
195
|
+
const nestedCounterSize = domain === "bny"
|
|
196
|
+
? nestedCounter.fullSizeB2
|
|
197
|
+
: nestedCounter.fullSize;
|
|
198
|
+
emitLine(lines, nestedCounter.qb64, `${counterCodeNameForVersion(nestedCounter.code, version)} counter`, options.indent, options);
|
|
199
|
+
offset += nestedCounterSize;
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
if (!isRecoverableParseError(error)) {
|
|
204
|
+
throw error;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
const matter = parseMatter(slice, domain);
|
|
208
|
+
const matterSize = domain === "bny" ? matter.fullSizeB2 : matter.fullSize;
|
|
209
|
+
const field = frame.body.native?.fields.find((candidate) => candidate.primitive.qb64 === matter.qb64);
|
|
210
|
+
const label = field ? nativeLabelName(field.label) : null;
|
|
211
|
+
const primitiveComment = matter instanceof Indexer
|
|
212
|
+
? `Indexer ${matter.code}`
|
|
213
|
+
: matterCodeName(matter.code);
|
|
214
|
+
const comment = label ? `${label} (${primitiveComment})` : primitiveComment;
|
|
215
|
+
emitLine(lines, matter.qb64, comment, options.indent, options);
|
|
216
|
+
offset += matterSize;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/** Render non-native or opaque message bodies as one annotated body line. */
|
|
220
|
+
function renderMessageBody(lines, frame, options) {
|
|
221
|
+
const rawBody = TEXT_DECODER.decode(frame.body.raw);
|
|
222
|
+
const isOpaqueCesrBody = frame.body.kind === "CESR"
|
|
223
|
+
&& frame.body.ked === null;
|
|
224
|
+
if (isOpaqueCesrBody) {
|
|
225
|
+
emitLine(lines, rawBody, `OPAQUE CESR body (non-serder fallback, hex=${toHex(frame.body.raw)})`, 0, options);
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
let body = rawBody;
|
|
229
|
+
if (options.pretty && frame.body.kind === "JSON") {
|
|
230
|
+
try {
|
|
231
|
+
body = JSON.stringify(JSON.parse(rawBody), null, 2);
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
if (!(error instanceof SyntaxError)) {
|
|
235
|
+
throw error;
|
|
236
|
+
}
|
|
237
|
+
body = rawBody;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
const info = [
|
|
241
|
+
`SERDER`,
|
|
242
|
+
frame.body.proto,
|
|
243
|
+
frame.body.kind,
|
|
244
|
+
frame.body.ilk ? `ilk=${frame.body.ilk}` : null,
|
|
245
|
+
frame.body.said ? `said=${frame.body.said}` : null,
|
|
246
|
+
].filter(Boolean).join(" ");
|
|
247
|
+
emitLine(lines, body, info, 0, options);
|
|
248
|
+
}
|
|
249
|
+
/** Render one parsed frame and all of its attachment groups into annotation lines. */
|
|
250
|
+
function renderFrame(frame, index, options) {
|
|
251
|
+
const lines = [];
|
|
252
|
+
const version = frame.body.gvrsn ?? frame.body.pvrsn;
|
|
253
|
+
const domain = asDomain(frame.body.raw);
|
|
254
|
+
if (domain === "txt" || domain === "bny") {
|
|
255
|
+
renderNativeBody(lines, frame, options, version);
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
renderMessageBody(lines, frame, options);
|
|
259
|
+
}
|
|
260
|
+
for (const group of frame.attachments) {
|
|
261
|
+
renderAttachmentGroupRaw(lines, group.raw, version, 0, options);
|
|
262
|
+
}
|
|
263
|
+
return { index, frame, lines };
|
|
264
|
+
}
|
|
265
|
+
/** Parse and render a nested frame chunk inside wrapper-aware annotation flows. */
|
|
266
|
+
function renderFrameChunk(lines, input, indent, options) {
|
|
267
|
+
const parsed = parseBytes(input);
|
|
268
|
+
const frames = [];
|
|
269
|
+
for (const event of parsed) {
|
|
270
|
+
if (event.type === "error") {
|
|
271
|
+
throw event.error;
|
|
272
|
+
}
|
|
273
|
+
frames.push(event.frame);
|
|
274
|
+
}
|
|
275
|
+
const rendered = renderAnnotatedFrames(frames, options);
|
|
276
|
+
for (const frame of rendered) {
|
|
277
|
+
for (const line of frame.lines) {
|
|
278
|
+
lines.push(`${spaces(indent)}${line}`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/** Walk a stream that may begin with wrapper/version selectors before ordinary frames. */
|
|
283
|
+
function renderWrapperAwareStream(lines, input, inheritedVersion, indent, options) {
|
|
284
|
+
let offset = 0;
|
|
285
|
+
let activeVersion = inheritedVersion;
|
|
286
|
+
let usedWrapper = false;
|
|
287
|
+
while (offset < input.length) {
|
|
288
|
+
const slice = input.slice(offset);
|
|
289
|
+
const domain = asDomain(slice);
|
|
290
|
+
if (domain !== "txt" && domain !== "bny") {
|
|
291
|
+
if (!usedWrapper)
|
|
292
|
+
return false;
|
|
293
|
+
renderFrameChunk(lines, slice, indent, options);
|
|
294
|
+
return true;
|
|
295
|
+
}
|
|
296
|
+
const counter = parseCounterCompat(slice, activeVersion, domain);
|
|
297
|
+
const headerSize = domain === "bny" ? counter.fullSizeB2 : counter.fullSize;
|
|
298
|
+
const name = counterCodeName(counter.code);
|
|
299
|
+
if (name === "KERIACDCGenusVersion") {
|
|
300
|
+
emitLine(lines, counter.qb64, `${name} count=${counter.count}`, indent, options);
|
|
301
|
+
activeVersion = decodeVersionCounter(counter);
|
|
302
|
+
offset += headerSize;
|
|
303
|
+
usedWrapper = true;
|
|
304
|
+
continue;
|
|
305
|
+
}
|
|
306
|
+
if (!TOP_LEVEL_WRAPPER_GROUP_NAMES.has(name)) {
|
|
307
|
+
if (!usedWrapper)
|
|
308
|
+
return false;
|
|
309
|
+
renderFrameChunk(lines, slice, indent, options);
|
|
310
|
+
return true;
|
|
311
|
+
}
|
|
312
|
+
const unit = domain === "bny" ? 3 : 4;
|
|
313
|
+
const payloadSize = counter.count * unit;
|
|
314
|
+
const total = headerSize + payloadSize;
|
|
315
|
+
if (slice.length < total) {
|
|
316
|
+
throw new ShortageError(total, slice.length);
|
|
317
|
+
}
|
|
318
|
+
emitLine(lines, counter.qb64, `${name} count=${counter.count}`, indent, options);
|
|
319
|
+
const payload = slice.slice(headerSize, total);
|
|
320
|
+
const nestedHandled = renderWrapperAwareStream(lines, payload, activeVersion, indent + options.indent, options);
|
|
321
|
+
if (!nestedHandled) {
|
|
322
|
+
renderFrameChunk(lines, payload, indent + options.indent, options);
|
|
323
|
+
}
|
|
324
|
+
offset += total;
|
|
325
|
+
usedWrapper = true;
|
|
326
|
+
}
|
|
327
|
+
return usedWrapper;
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Render stream-level wrapper groups (GenericGroup/BodyWithAttachmentGroup)
|
|
331
|
+
* so denot round-trips preserve wrapper counters. Returns null when input does
|
|
332
|
+
* not start in a wrapper-oriented domain and caller should use frame rendering.
|
|
333
|
+
*/
|
|
334
|
+
export function renderWrapperAnnotatedStream(input, options) {
|
|
335
|
+
const lines = [];
|
|
336
|
+
const rendered = renderWrapperAwareStream(lines, input, { major: 2, minor: 0 }, 0, options);
|
|
337
|
+
if (!rendered) {
|
|
338
|
+
return null;
|
|
339
|
+
}
|
|
340
|
+
return lines.join("\n");
|
|
341
|
+
}
|
|
342
|
+
/** Render parsed CESR frames into line-oriented, human-annotated text blocks. */
|
|
343
|
+
export function renderAnnotatedFrames(frames, options) {
|
|
344
|
+
return frames.map((frame, index) => renderFrame(frame, index + 1, options));
|
|
345
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { createParser } from "../core/parser-engine.js";
|
|
2
|
+
function asPositiveInteger(value, fallback) {
|
|
3
|
+
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
4
|
+
return fallback;
|
|
5
|
+
}
|
|
6
|
+
return Math.max(0, Math.trunc(value));
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Normalize chunking to a legal parser-feed size.
|
|
10
|
+
*
|
|
11
|
+
* Boundary rules:
|
|
12
|
+
* - `<= 0` means full-stream feed for each iteration.
|
|
13
|
+
* - values larger than stream size collapse to full-stream feed.
|
|
14
|
+
*/
|
|
15
|
+
function normalizeChunkSize(chunkSize, totalBytes) {
|
|
16
|
+
const normalized = asPositiveInteger(chunkSize, 0);
|
|
17
|
+
if (normalized <= 0 || normalized >= totalBytes) {
|
|
18
|
+
return totalBytes;
|
|
19
|
+
}
|
|
20
|
+
return normalized;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Produce deterministic feed slices for one parse run.
|
|
24
|
+
*
|
|
25
|
+
* Invariant:
|
|
26
|
+
* - slices preserve original stream ordering.
|
|
27
|
+
* - slices are view-backed (`subarray`) to avoid benchmark-side copy noise.
|
|
28
|
+
*/
|
|
29
|
+
function buildChunks(input, chunkSize) {
|
|
30
|
+
if (chunkSize >= input.length) {
|
|
31
|
+
return [input];
|
|
32
|
+
}
|
|
33
|
+
const chunks = [];
|
|
34
|
+
for (let offset = 0; offset < input.length; offset += chunkSize) {
|
|
35
|
+
chunks.push(input.subarray(offset, Math.min(offset + chunkSize, input.length)));
|
|
36
|
+
}
|
|
37
|
+
return chunks;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Count parser frame/error events for one parser emission batch.
|
|
41
|
+
*/
|
|
42
|
+
function countFrames(events) {
|
|
43
|
+
let frameCount = 0;
|
|
44
|
+
let errorCount = 0;
|
|
45
|
+
for (const event of events) {
|
|
46
|
+
if (event.type === "frame") {
|
|
47
|
+
frameCount++;
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
errorCount++;
|
|
51
|
+
}
|
|
52
|
+
return { frameCount, errorCount };
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Execute one complete parser pass over the provided stream.
|
|
56
|
+
*
|
|
57
|
+
* Boundary contract:
|
|
58
|
+
* - Always feeds configured chunks and then flushes once.
|
|
59
|
+
* - Returns event counts only; callers own timing and aggregation.
|
|
60
|
+
*/
|
|
61
|
+
export function parseCesrStreamOnce(input, options = {}) {
|
|
62
|
+
const chunkSize = normalizeChunkSize(options.chunkSize, input.length);
|
|
63
|
+
const parser = createParser(options.parserOptions);
|
|
64
|
+
let frameCount = 0;
|
|
65
|
+
let errorCount = 0;
|
|
66
|
+
for (const chunk of buildChunks(input, chunkSize)) {
|
|
67
|
+
const summary = countFrames(parser.feed(chunk));
|
|
68
|
+
frameCount += summary.frameCount;
|
|
69
|
+
errorCount += summary.errorCount;
|
|
70
|
+
}
|
|
71
|
+
const flushSummary = countFrames(parser.flush());
|
|
72
|
+
frameCount += flushSummary.frameCount;
|
|
73
|
+
errorCount += flushSummary.errorCount;
|
|
74
|
+
return { frameCount, errorCount };
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Benchmark parser throughput across warmup + measured iterations.
|
|
78
|
+
*
|
|
79
|
+
* Invariants:
|
|
80
|
+
* - warmup runs are excluded from final metrics.
|
|
81
|
+
* - when `failOnParseError` is true, any parse error fails fast to prevent
|
|
82
|
+
* silently benchmarking degraded correctness.
|
|
83
|
+
*/
|
|
84
|
+
export function benchmarkCesrParser(input, options = {}) {
|
|
85
|
+
if (input.length === 0) {
|
|
86
|
+
throw new Error("Benchmark input stream must not be empty");
|
|
87
|
+
}
|
|
88
|
+
const iterations = asPositiveInteger(options.iterations, 50);
|
|
89
|
+
if (iterations <= 0) {
|
|
90
|
+
throw new Error("iterations must be greater than 0");
|
|
91
|
+
}
|
|
92
|
+
const warmupIterations = asPositiveInteger(options.warmupIterations, 5);
|
|
93
|
+
const chunkSize = normalizeChunkSize(options.chunkSize, input.length);
|
|
94
|
+
const failOnParseError = options.failOnParseError ?? true;
|
|
95
|
+
for (let i = 0; i < warmupIterations; i++) {
|
|
96
|
+
parseCesrStreamOnce(input, {
|
|
97
|
+
chunkSize,
|
|
98
|
+
parserOptions: options.parserOptions,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
let totalFrames = 0;
|
|
102
|
+
let totalErrors = 0;
|
|
103
|
+
const startMs = performance.now();
|
|
104
|
+
for (let i = 0; i < iterations; i++) {
|
|
105
|
+
const run = parseCesrStreamOnce(input, {
|
|
106
|
+
chunkSize,
|
|
107
|
+
parserOptions: options.parserOptions,
|
|
108
|
+
});
|
|
109
|
+
totalFrames += run.frameCount;
|
|
110
|
+
totalErrors += run.errorCount;
|
|
111
|
+
if (failOnParseError && run.errorCount > 0) {
|
|
112
|
+
throw new Error(`Benchmark run produced parse errors (run=${i + 1}, errorCount=${run.errorCount})`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const elapsedMs = Math.max(performance.now() - startMs, Number.EPSILON);
|
|
116
|
+
const totalBytes = input.length * iterations;
|
|
117
|
+
const throughputBytesPerSec = (totalBytes * 1000) / elapsedMs;
|
|
118
|
+
const throughputMiBPerSec = throughputBytesPerSec / (1024 * 1024);
|
|
119
|
+
const framesPerSec = (totalFrames * 1000) / elapsedMs;
|
|
120
|
+
return {
|
|
121
|
+
iterations,
|
|
122
|
+
warmupIterations,
|
|
123
|
+
chunkSize,
|
|
124
|
+
bytesPerIteration: input.length,
|
|
125
|
+
totalBytes,
|
|
126
|
+
totalFrames,
|
|
127
|
+
totalErrors,
|
|
128
|
+
elapsedMs,
|
|
129
|
+
avgIterationMs: elapsedMs / iterations,
|
|
130
|
+
throughputBytesPerSec,
|
|
131
|
+
throughputMiBPerSec,
|
|
132
|
+
framesPerSec,
|
|
133
|
+
};
|
|
134
|
+
}
|