keri-ts 0.10.4 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/esm/keri/npm/src/_dnt.shims.js +2 -2
- package/esm/keri/npm/src/acdc/messaging.js +5 -0
- package/esm/keri/npm/src/acdc/observing.js +122 -0
- package/esm/keri/npm/src/acdc/regbasing.js +100 -0
- package/esm/keri/npm/src/acdc/regengine.js +434 -0
- package/esm/keri/npm/src/acdc/regeventing.js +273 -0
- package/esm/keri/npm/src/acdc/registering.js +180 -0
- package/esm/keri/npm/src/acdc/registraring.js +264 -0
- package/esm/keri/npm/src/acdc/scheming.js +363 -0
- package/esm/keri/npm/src/app/abortable.js +27 -0
- package/esm/keri/npm/src/app/agent-runtime.js +265 -58
- package/esm/keri/npm/src/app/authenticating.js +27 -4
- package/esm/keri/npm/src/app/byte-source.js +131 -0
- package/esm/keri/npm/src/app/cesr-egress.js +308 -0
- package/esm/keri/npm/src/app/cesr-http.js +77 -75
- package/esm/keri/npm/src/app/cesr-output.js +12 -0
- package/esm/keri/npm/src/app/cli/annotate.js +18 -93
- package/esm/keri/npm/src/app/cli/benchmark.js +20 -196
- package/esm/keri/npm/src/app/cli/common/existing.js +2 -0
- package/esm/keri/npm/src/app/cli/delegate.js +5 -3
- package/esm/keri/npm/src/app/cli/did.js +3 -3
- package/esm/keri/npm/src/app/cli/incept.js +1 -1
- package/esm/keri/npm/src/app/cli/ipex.js +31 -18
- package/esm/keri/npm/src/app/cli/multisig.js +8 -8
- package/esm/keri/npm/src/app/cli/notifications.js +1 -0
- package/esm/keri/npm/src/app/cli/output.js +22 -0
- package/esm/keri/npm/src/app/cli/query.js +1 -1
- package/esm/keri/npm/src/app/cli/rotate.js +1 -1
- package/esm/keri/npm/src/app/cli/vc.js +1 -1
- package/esm/keri/npm/src/app/cli/verifier.js +2 -8
- package/esm/keri/npm/src/app/credential-workflows.js +3 -3
- package/esm/keri/npm/src/app/cue-delivery.js +171 -0
- package/esm/keri/npm/src/app/cue-preparation.js +124 -0
- package/esm/keri/npm/src/app/cue-route.js +64 -0
- package/esm/keri/npm/src/app/cue-runtime.js +66 -32
- package/esm/keri/npm/src/app/delegating.js +20 -10
- package/esm/keri/npm/src/app/direct-reply-delivery.js +282 -0
- package/esm/keri/npm/src/app/endpoint-roleing.js +3 -3
- package/esm/keri/npm/src/app/essr.js +235 -0
- package/esm/keri/npm/src/app/exchanging.js +870 -128
- package/esm/keri/npm/src/app/forwarding.js +476 -230
- package/esm/keri/npm/src/app/grouping.js +198 -46
- package/esm/keri/npm/src/app/habbing.js +103 -236
- package/esm/keri/npm/src/app/httping.js +70 -28
- package/esm/keri/npm/src/app/ipex-building.js +164 -0
- package/esm/keri/npm/src/app/ipex-credentialing.js +5 -5
- package/esm/keri/npm/src/app/ipex-graph.js +297 -0
- package/esm/keri/npm/src/app/ipex-grouping.js +7 -8
- package/esm/keri/npm/src/app/ipex-v2.js +542 -0
- package/esm/keri/npm/src/app/ipexing.js +4 -0
- package/esm/keri/npm/src/app/keeping.js +8 -0
- package/esm/keri/npm/src/app/mailbox-director.js +395 -175
- package/esm/keri/npm/src/app/mailbox-sse.js +240 -100
- package/esm/keri/npm/src/app/mailboxing.js +10 -8
- package/esm/keri/npm/src/app/multisig-workflows.js +15 -13
- package/esm/keri/npm/src/app/notifying.js +45 -19
- package/esm/keri/npm/src/app/oobi-replies.js +194 -0
- package/esm/keri/npm/src/app/oobiery.js +300 -137
- package/esm/keri/npm/src/app/parsering.js +243 -224
- package/esm/keri/npm/src/app/query-replies.js +181 -0
- package/esm/keri/npm/src/app/querying.js +406 -49
- package/esm/keri/npm/src/app/reactor.js +373 -59
- package/esm/keri/npm/src/app/reply-streams.js +304 -0
- package/esm/keri/npm/src/app/respondant.js +47 -6
- package/esm/keri/npm/src/app/runtime-deliveries.js +510 -0
- package/esm/keri/npm/src/app/runtime-services.js +3 -0
- package/esm/keri/npm/src/app/signaling.js +253 -33
- package/esm/keri/npm/src/app/socket-source.js +164 -0
- package/esm/keri/npm/src/app/stored-replies.js +85 -0
- package/esm/keri/npm/src/app/tcp-egress.js +334 -0
- package/esm/keri/npm/src/app/verifier-agent.js +89 -36
- package/esm/keri/npm/src/app/verifying.js +55 -28
- package/esm/keri/npm/src/app/version.js +2 -2
- package/esm/keri/npm/src/app/witnessing.js +292 -165
- package/esm/keri/npm/src/core/attachment-countering.js +2 -2
- package/esm/keri/npm/src/core/cue-admission.js +419 -0
- package/esm/keri/npm/src/core/deck.js +50 -11
- package/esm/keri/npm/src/core/dispatch.js +20 -59
- package/esm/keri/npm/src/core/eventing.js +245 -142
- package/esm/keri/npm/src/core/exchange-proofing.js +60 -0
- package/esm/keri/npm/src/core/kever.js +28 -24
- package/esm/keri/npm/src/core/kram-auth.js +32 -0
- package/esm/keri/npm/src/core/kram-handoff.js +148 -0
- package/esm/keri/npm/src/core/kram-policy.js +303 -0
- package/esm/keri/npm/src/core/kram-pruning.js +196 -0
- package/esm/keri/npm/src/core/kram-signatures.js +90 -0
- package/esm/keri/npm/src/core/kram-staging.js +211 -0
- package/esm/keri/npm/src/core/kram-time.js +98 -0
- package/esm/keri/npm/src/core/kraming.js +99 -0
- package/esm/keri/npm/src/core/protocol-exchanging.js +19 -0
- package/esm/keri/npm/src/core/protocol-serialization.js +63 -25
- package/esm/keri/npm/src/core/routing.js +138 -31
- package/esm/keri/npm/src/db/basing.js +585 -63
- package/esm/keri/npm/src/db/core/lmdber.js +60 -1
- package/esm/keri/npm/src/db/escrowing.js +84 -1
- package/esm/keri/npm/src/db/exchange-nests.js +175 -0
- package/esm/keri/npm/src/db/exchange-records.js +7 -0
- package/esm/keri/npm/src/db/index.js +4 -0
- package/esm/keri/npm/src/db/kel-replay.js +62 -0
- package/esm/keri/npm/src/db/kram-factors.js +193 -0
- package/esm/keri/npm/src/db/kram-snapshots.js +216 -0
- package/esm/keri/npm/src/db/mailboxing.js +18 -5
- package/esm/keri/npm/src/db/outboxing.js +77 -34
- package/esm/keri/npm/src/db/payload-archive.js +402 -0
- package/esm/keri/npm/src/db/payload-store.js +416 -0
- package/esm/keri/npm/src/db/payload-view.js +23 -0
- package/esm/keri/npm/src/db/reger.js +118 -24
- package/esm/keri/npm/src/db/subing.js +17 -0
- package/esm/keri/npm/src/db/tel-replay.js +87 -0
- package/esm/keri/npm/src/db/witness-replay.js +133 -0
- package/esm/keri/npm/src/did/webs/artifacts.js +11 -1
- package/esm/keri/npm/src/did/webs/resolving.js +73 -45
- package/esm/keri/npm/src/npm/deno-shim.js +17 -0
- package/esm/keri/npm/src/runtime/index.js +15 -1
- package/esm/keri/npm/src/time/mod.js +18 -3
- package/esm/keri/npm/src/vdr/credential-tsn.js +218 -0
- package/esm/keri/npm/src/vdr/credentialing.js +8 -5
- package/esm/keri/npm/src/vdr/eventing.js +100 -36
- package/esm/keri/npm/src/vdr/registry-tsn.js +218 -0
- package/esm/keri/npm/src/vdr/tsn-query.js +34 -0
- package/package.json +7 -8
- package/types/_dnt.shims.d.ts +3 -2
- package/types/_dnt.shims.d.ts.map +1 -1
- package/types/acdc/messaging.d.ts.map +1 -1
- package/types/acdc/observing.d.ts +38 -0
- package/types/acdc/observing.d.ts.map +1 -0
- package/types/acdc/regbasing.d.ts +38 -0
- package/types/acdc/regbasing.d.ts.map +1 -0
- package/types/acdc/regengine.d.ts +87 -0
- package/types/acdc/regengine.d.ts.map +1 -0
- package/types/acdc/regeventing.d.ts +101 -0
- package/types/acdc/regeventing.d.ts.map +1 -0
- package/types/acdc/registering.d.ts +72 -0
- package/types/acdc/registering.d.ts.map +1 -0
- package/types/acdc/registraring.d.ts +87 -0
- package/types/acdc/registraring.d.ts.map +1 -0
- package/types/acdc/scheming.d.ts +27 -0
- package/types/acdc/scheming.d.ts.map +1 -0
- package/types/app/abortable.d.ts +11 -0
- package/types/app/abortable.d.ts.map +1 -0
- package/types/app/agent-runtime.d.ts +42 -10
- package/types/app/agent-runtime.d.ts.map +1 -1
- package/types/app/authenticating.d.ts.map +1 -1
- package/types/app/byte-source.d.ts +16 -0
- package/types/app/byte-source.d.ts.map +1 -0
- package/types/app/cesr-egress.d.ts +48 -0
- package/types/app/cesr-egress.d.ts.map +1 -0
- package/types/app/cesr-http.d.ts +8 -12
- package/types/app/cesr-http.d.ts.map +1 -1
- package/types/app/cesr-output.d.ts +5 -0
- package/types/app/cesr-output.d.ts.map +1 -0
- package/types/app/cli/annotate.d.ts +2 -7
- package/types/app/cli/annotate.d.ts.map +1 -1
- package/types/app/cli/benchmark.d.ts +2 -9
- package/types/app/cli/benchmark.d.ts.map +1 -1
- package/types/app/cli/common/context.d.ts +3 -0
- package/types/app/cli/common/context.d.ts.map +1 -1
- package/types/app/cli/common/existing.d.ts +3 -0
- package/types/app/cli/common/existing.d.ts.map +1 -1
- package/types/app/cli/delegate.d.ts.map +1 -1
- package/types/app/cli/ipex.d.ts.map +1 -1
- package/types/app/cli/notifications.d.ts.map +1 -1
- package/types/app/cli/output.d.ts +2 -0
- package/types/app/cli/output.d.ts.map +1 -0
- package/types/app/credential-workflows.d.ts +1 -1
- package/types/app/credential-workflows.d.ts.map +1 -1
- package/types/app/cue-delivery.d.ts +30 -0
- package/types/app/cue-delivery.d.ts.map +1 -0
- package/types/app/cue-preparation.d.ts +25 -0
- package/types/app/cue-preparation.d.ts.map +1 -0
- package/types/app/cue-route.d.ts +19 -0
- package/types/app/cue-route.d.ts.map +1 -0
- package/types/app/cue-runtime.d.ts +19 -11
- package/types/app/cue-runtime.d.ts.map +1 -1
- package/types/app/delegating.d.ts +7 -3
- package/types/app/delegating.d.ts.map +1 -1
- package/types/app/direct-reply-delivery.d.ts +38 -0
- package/types/app/direct-reply-delivery.d.ts.map +1 -0
- package/types/app/essr.d.ts +72 -0
- package/types/app/essr.d.ts.map +1 -0
- package/types/app/exchanging.d.ts +141 -18
- package/types/app/exchanging.d.ts.map +1 -1
- package/types/app/forwarding.d.ts +91 -34
- package/types/app/forwarding.d.ts.map +1 -1
- package/types/app/grouping.d.ts +48 -9
- package/types/app/grouping.d.ts.map +1 -1
- package/types/app/habbing.d.ts +17 -33
- package/types/app/habbing.d.ts.map +1 -1
- package/types/app/httping.d.ts +3 -1
- package/types/app/httping.d.ts.map +1 -1
- package/types/app/ipex-building.d.ts +30 -0
- package/types/app/ipex-building.d.ts.map +1 -0
- package/types/app/ipex-credentialing.d.ts +2 -1
- package/types/app/ipex-credentialing.d.ts.map +1 -1
- package/types/app/ipex-graph.d.ts +30 -0
- package/types/app/ipex-graph.d.ts.map +1 -0
- package/types/app/ipex-grouping.d.ts.map +1 -1
- package/types/app/ipex-v2.d.ts +51 -0
- package/types/app/ipex-v2.d.ts.map +1 -0
- package/types/app/ipexing.d.ts +5 -0
- package/types/app/ipexing.d.ts.map +1 -1
- package/types/app/keeping.d.ts +2 -0
- package/types/app/keeping.d.ts.map +1 -1
- package/types/app/mailbox-director.d.ts +43 -33
- package/types/app/mailbox-director.d.ts.map +1 -1
- package/types/app/mailbox-sse.d.ts +22 -9
- package/types/app/mailbox-sse.d.ts.map +1 -1
- package/types/app/mailboxing.d.ts +1 -0
- package/types/app/mailboxing.d.ts.map +1 -1
- package/types/app/notifying.d.ts +4 -1
- package/types/app/notifying.d.ts.map +1 -1
- package/types/app/oobi-replies.d.ts +18 -0
- package/types/app/oobi-replies.d.ts.map +1 -0
- package/types/app/oobiery.d.ts +10 -2
- package/types/app/oobiery.d.ts.map +1 -1
- package/types/app/parsering.d.ts +41 -8
- package/types/app/parsering.d.ts.map +1 -1
- package/types/app/query-replies.d.ts +45 -0
- package/types/app/query-replies.d.ts.map +1 -0
- package/types/app/querying.d.ts +76 -12
- package/types/app/querying.d.ts.map +1 -1
- package/types/app/reactor.d.ts +86 -31
- package/types/app/reactor.d.ts.map +1 -1
- package/types/app/reply-streams.d.ts +51 -0
- package/types/app/reply-streams.d.ts.map +1 -0
- package/types/app/respondant.d.ts +7 -2
- package/types/app/respondant.d.ts.map +1 -1
- package/types/app/runtime-deliveries.d.ts +67 -0
- package/types/app/runtime-deliveries.d.ts.map +1 -0
- package/types/app/runtime-services.d.ts +3 -0
- package/types/app/runtime-services.d.ts.map +1 -1
- package/types/app/signaling.d.ts +39 -7
- package/types/app/signaling.d.ts.map +1 -1
- package/types/app/socket-source.d.ts +17 -0
- package/types/app/socket-source.d.ts.map +1 -0
- package/types/app/stored-replies.d.ts +18 -0
- package/types/app/stored-replies.d.ts.map +1 -0
- package/types/app/tcp-egress.d.ts +87 -0
- package/types/app/tcp-egress.d.ts.map +1 -0
- package/types/app/verifier-agent.d.ts +10 -1
- package/types/app/verifier-agent.d.ts.map +1 -1
- package/types/app/verifying.d.ts +5 -0
- package/types/app/verifying.d.ts.map +1 -1
- package/types/app/version.d.ts +2 -2
- package/types/app/witnessing.d.ts +66 -18
- package/types/app/witnessing.d.ts.map +1 -1
- package/types/core/attachment-countering.d.ts +3 -3
- package/types/core/attachment-countering.d.ts.map +1 -1
- package/types/core/cue-admission.d.ts +74 -0
- package/types/core/cue-admission.d.ts.map +1 -0
- package/types/core/cues.d.ts +9 -3
- package/types/core/cues.d.ts.map +1 -1
- package/types/core/deck.d.ts +12 -1
- package/types/core/deck.d.ts.map +1 -1
- package/types/core/dispatch.d.ts +16 -35
- package/types/core/dispatch.d.ts.map +1 -1
- package/types/core/eventing.d.ts +52 -23
- package/types/core/eventing.d.ts.map +1 -1
- package/types/core/exchange-proofing.d.ts +31 -0
- package/types/core/exchange-proofing.d.ts.map +1 -0
- package/types/core/kever-decisions.d.ts +2 -3
- package/types/core/kever-decisions.d.ts.map +1 -1
- package/types/core/kever.d.ts +11 -9
- package/types/core/kever.d.ts.map +1 -1
- package/types/core/kram-auth.d.ts +23 -0
- package/types/core/kram-auth.d.ts.map +1 -0
- package/types/core/kram-handoff.d.ts +45 -0
- package/types/core/kram-handoff.d.ts.map +1 -0
- package/types/core/kram-policy.d.ts +43 -0
- package/types/core/kram-policy.d.ts.map +1 -0
- package/types/core/kram-pruning.d.ts +38 -0
- package/types/core/kram-pruning.d.ts.map +1 -0
- package/types/core/kram-signatures.d.ts +29 -0
- package/types/core/kram-signatures.d.ts.map +1 -0
- package/types/core/kram-staging.d.ts +36 -0
- package/types/core/kram-staging.d.ts.map +1 -0
- package/types/core/kram-time.d.ts +53 -0
- package/types/core/kram-time.d.ts.map +1 -0
- package/types/core/kraming.d.ts +46 -0
- package/types/core/kraming.d.ts.map +1 -0
- package/types/core/protocol-exchanging.d.ts +4 -0
- package/types/core/protocol-exchanging.d.ts.map +1 -1
- package/types/core/protocol-serialization.d.ts +21 -2
- package/types/core/protocol-serialization.d.ts.map +1 -1
- package/types/core/records.d.ts +4 -2
- package/types/core/records.d.ts.map +1 -1
- package/types/core/routing.d.ts +26 -1
- package/types/core/routing.d.ts.map +1 -1
- package/types/db/basing.d.ts +83 -6
- package/types/db/basing.d.ts.map +1 -1
- package/types/db/core/lmdber.d.ts +9 -0
- package/types/db/core/lmdber.d.ts.map +1 -1
- package/types/db/escrowing.d.ts +16 -0
- package/types/db/escrowing.d.ts.map +1 -1
- package/types/db/exchange-nests.d.ts +39 -0
- package/types/db/exchange-nests.d.ts.map +1 -0
- package/types/db/exchange-records.d.ts +35 -0
- package/types/db/exchange-records.d.ts.map +1 -0
- package/types/db/index.d.ts +4 -0
- package/types/db/index.d.ts.map +1 -1
- package/types/db/kel-replay.d.ts +17 -0
- package/types/db/kel-replay.d.ts.map +1 -0
- package/types/db/kram-factors.d.ts +13 -0
- package/types/db/kram-factors.d.ts.map +1 -0
- package/types/db/kram-snapshots.d.ts +23 -0
- package/types/db/kram-snapshots.d.ts.map +1 -0
- package/types/db/mailboxing.d.ts +4 -2
- package/types/db/mailboxing.d.ts.map +1 -1
- package/types/db/outboxing.d.ts +27 -5
- package/types/db/outboxing.d.ts.map +1 -1
- package/types/db/payload-archive.d.ts +70 -0
- package/types/db/payload-archive.d.ts.map +1 -0
- package/types/db/payload-store.d.ts +40 -0
- package/types/db/payload-store.d.ts.map +1 -0
- package/types/db/payload-view.d.ts +4 -0
- package/types/db/payload-view.d.ts.map +1 -0
- package/types/db/reger.d.ts +18 -7
- package/types/db/reger.d.ts.map +1 -1
- package/types/db/subing.d.ts +9 -0
- package/types/db/subing.d.ts.map +1 -1
- package/types/db/tel-replay.d.ts +26 -0
- package/types/db/tel-replay.d.ts.map +1 -0
- package/types/db/witness-replay.d.ts +17 -0
- package/types/db/witness-replay.d.ts.map +1 -0
- package/types/did/webs/artifacts.d.ts +5 -1
- package/types/did/webs/artifacts.d.ts.map +1 -1
- package/types/did/webs/resolving.d.ts +0 -6
- package/types/did/webs/resolving.d.ts.map +1 -1
- package/types/npm/deno-shim.d.ts +3 -0
- package/types/npm/deno-shim.d.ts.map +1 -0
- package/types/runtime/index.d.ts +17 -1
- package/types/runtime/index.d.ts.map +1 -1
- package/types/time/mod.d.ts +4 -2
- package/types/time/mod.d.ts.map +1 -1
- package/types/vdr/credential-tsn.d.ts +18 -0
- package/types/vdr/credential-tsn.d.ts.map +1 -0
- package/types/vdr/credentialing.d.ts +2 -2
- package/types/vdr/credentialing.d.ts.map +1 -1
- package/types/vdr/eventing.d.ts +19 -1
- package/types/vdr/eventing.d.ts.map +1 -1
- package/types/vdr/registry-tsn.d.ts +23 -0
- package/types/vdr/registry-tsn.d.ts.map +1 -0
- package/types/vdr/tsn-query.d.ts +22 -0
- package/types/vdr/tsn-query.d.ts.map +1 -0
- package/esm/keri/npm/src/app/query-transport.js +0 -121
- package/types/app/query-transport.d.ts +0 -13
- package/types/app/query-transport.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -21,11 +21,11 @@ ownership lives in the separate `tufa` package.
|
|
|
21
21
|
## Maintainer Docs
|
|
22
22
|
|
|
23
23
|
- `docs/ARCHITECTURE_MAP.md`: package and module ownership map
|
|
24
|
-
- `docs/design-docs/
|
|
24
|
+
- `docs/design-docs/credentials/ACDC_TEL_VERIFIER.md`:
|
|
25
25
|
credential stack ownership and failure modes
|
|
26
|
-
- `docs/design-docs/
|
|
26
|
+
- `docs/design-docs/kel/DELEGATION_AND_ENDPOINTS.md`:
|
|
27
27
|
delegation, group coordination, and endpoint-role mental model
|
|
28
|
-
- `docs/design-docs/
|
|
28
|
+
- `docs/design-docs/cesr/ATTACHMENT_COUNTER_GVRSN.md`:
|
|
29
29
|
attachment counter versioning and replay boundaries
|
|
30
30
|
|
|
31
31
|
## License
|
|
@@ -62,6 +62,11 @@ function schemaSaidAndSad(schema, fallback, kind) {
|
|
|
62
62
|
if (typeof schema === "string") {
|
|
63
63
|
return [schema, schema];
|
|
64
64
|
}
|
|
65
|
+
// Supplied content-bound JSON resources keep their identity across body kinds.
|
|
66
|
+
// Default/unbound schema construction retains its frozen format-specific IDs.
|
|
67
|
+
const resource = defaultSchema(cloneMapperValue(schema), Kinds.json);
|
|
68
|
+
if (schema.$id === resource[0])
|
|
69
|
+
return resource;
|
|
65
70
|
return defaultSchema(cloneMapperValue(schema), kind);
|
|
66
71
|
}
|
|
67
72
|
function withIssuee(attribute, issuee) {
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/** Explicit public registry intake; this TypeScript integration is beyond frozen KERIpy 927. */
|
|
2
|
+
import { Diger, Ilks, ParserError, ResourceLimitError } from "cesr-ts";
|
|
3
|
+
import { DatabaseNotOpenError } from "../core/errors.js";
|
|
4
|
+
import { RegistryEventer } from "./regengine.js";
|
|
5
|
+
import { validateRip, validateUpdate } from "./regeventing.js";
|
|
6
|
+
/**
|
|
7
|
+
* Borrow accepted public KEL state and one registry store without habitats, aliases or handles.
|
|
8
|
+
* Reconstruct the engine's issuer from stored inception after reopen. Intake uses the engine's
|
|
9
|
+
* full tuple/witness anchor policy, distinct from digest-only observer vetting. Each accepted
|
|
10
|
+
* event commits independently; a later failure preserves the already accepted prefix.
|
|
11
|
+
* Parsed evidence stays borrowed. This installs no automatic parser or runtime route.
|
|
12
|
+
*/
|
|
13
|
+
export class RegistryObserver {
|
|
14
|
+
constructor(db, store, { maxEvents = 16384 } = {}) {
|
|
15
|
+
Object.defineProperty(this, "db", {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
configurable: true,
|
|
18
|
+
writable: true,
|
|
19
|
+
value: db
|
|
20
|
+
});
|
|
21
|
+
Object.defineProperty(this, "store", {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
configurable: true,
|
|
24
|
+
writable: true,
|
|
25
|
+
value: store
|
|
26
|
+
});
|
|
27
|
+
Object.defineProperty(this, "maxEvents", {
|
|
28
|
+
enumerable: true,
|
|
29
|
+
configurable: true,
|
|
30
|
+
writable: true,
|
|
31
|
+
value: void 0
|
|
32
|
+
});
|
|
33
|
+
if (!Number.isSafeInteger(maxEvents) || maxEvents < 1) {
|
|
34
|
+
throw new RangeError("Registry maxEvents must be positive and safe.");
|
|
35
|
+
}
|
|
36
|
+
this.maxEvents = maxEvents;
|
|
37
|
+
}
|
|
38
|
+
/** Stage parsed events before inception, otherwise delegate ordinary validation and acceptance. */
|
|
39
|
+
processEvent(serder) {
|
|
40
|
+
const result = serder.ilk === Ilks.rip ? validateRip(serder) : validateUpdate(serder, serder.regid ?? "");
|
|
41
|
+
if (result.kind === "reject")
|
|
42
|
+
return result;
|
|
43
|
+
const event = result.event;
|
|
44
|
+
// Unknown registry routing cannot rely on a stored RIP to validate its qualified SAID.
|
|
45
|
+
try {
|
|
46
|
+
if (new Diger({ qb64: event.regid }).qb64 !== event.regid)
|
|
47
|
+
return { kind: "reject", reason: "registry" };
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (!(error instanceof ParserError) || error instanceof ResourceLimitError)
|
|
51
|
+
throw error;
|
|
52
|
+
return { kind: "reject", reason: "registry" };
|
|
53
|
+
}
|
|
54
|
+
this.checkOrdinal(event.sn);
|
|
55
|
+
let engine = this.engine(event.regid);
|
|
56
|
+
if (engine && !(engine instanceof RegistryEventer))
|
|
57
|
+
return engine;
|
|
58
|
+
if (event.ilk === Ilks.rip) {
|
|
59
|
+
if (!event.issuer)
|
|
60
|
+
return { kind: "reject", reason: "issuer" };
|
|
61
|
+
engine ??= new RegistryEventer(this.db, event.issuer, this.store, event.regid);
|
|
62
|
+
}
|
|
63
|
+
if (engine) {
|
|
64
|
+
this.checkStored(event.regid, engine);
|
|
65
|
+
return engine.processEvent(serder);
|
|
66
|
+
}
|
|
67
|
+
// Issuer/anchor discovery is impossible until RIP arrives; the existing anchor escrow owns this body.
|
|
68
|
+
const baser = this.store.baser;
|
|
69
|
+
baser.initializeStorage();
|
|
70
|
+
return baser.env.transactionSync(() => {
|
|
71
|
+
this.store.putEvent(serder);
|
|
72
|
+
this.store.escrowMissingAnchor(event.regid, Number(event.sn), event.said);
|
|
73
|
+
return { kind: "escrow", reason: "inception", event };
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/** Retry one registry after inception/KEL dependencies arrive; never scan every registry implicitly. */
|
|
77
|
+
processEscrows(regid) {
|
|
78
|
+
const engine = this.engine(regid);
|
|
79
|
+
if (!(engine instanceof RegistryEventer))
|
|
80
|
+
return;
|
|
81
|
+
this.checkStored(regid, engine);
|
|
82
|
+
engine.processEscrows();
|
|
83
|
+
}
|
|
84
|
+
/** Stored inception is durable issuer identity, including while its anchor is still absent. */
|
|
85
|
+
engine(regid) {
|
|
86
|
+
if (!this.store.baser.env)
|
|
87
|
+
throw new DatabaseNotOpenError("Registry observer store is closed.");
|
|
88
|
+
const rip = this.store.event(regid);
|
|
89
|
+
if (!rip) {
|
|
90
|
+
if (this.store.head(regid) || this.store.seqSaider(regid, 0)) {
|
|
91
|
+
throw new Error("Corrupt observer registry inception.");
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
if (rip.said !== regid)
|
|
96
|
+
throw new Error("Corrupt observer registry inception.");
|
|
97
|
+
// evts also owns valid BUP bodies; naming one as a registry is remote misuse, not store corruption.
|
|
98
|
+
if (rip.ilk !== Ilks.rip && rip.verify())
|
|
99
|
+
return { kind: "reject", reason: "registry" };
|
|
100
|
+
const result = validateRip(rip);
|
|
101
|
+
if (result.kind !== "valid" || result.event.regid !== regid || !result.event.issuer) {
|
|
102
|
+
throw new Error("Corrupt observer registry inception.");
|
|
103
|
+
}
|
|
104
|
+
return new RegistryEventer(this.db, result.event.issuer, this.store, regid);
|
|
105
|
+
}
|
|
106
|
+
/** Bound chain length before processing; this does not bound queued rows, scans or native allocation. */
|
|
107
|
+
checkOrdinal(sn) {
|
|
108
|
+
if (sn >= BigInt(this.maxEvents))
|
|
109
|
+
throw new ResourceLimitError("Registry evidence exceeds configured event limit.");
|
|
110
|
+
}
|
|
111
|
+
/** A tighter observer must not advance previously staged rows beyond its own finite ceiling. */
|
|
112
|
+
checkStored(regid, engine) {
|
|
113
|
+
this.checkOrdinal(engine.sn);
|
|
114
|
+
for (const escrow of [this.store.baser.maes, this.store.baser.ooes]) {
|
|
115
|
+
for (const [, sn] of escrow?.getTopItemIter(regid) ?? []) {
|
|
116
|
+
if (!Number.isSafeInteger(sn) || sn < 0)
|
|
117
|
+
throw new RangeError("Unsafe observer escrow ordinal.");
|
|
118
|
+
this.checkOrdinal(BigInt(sn));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/** Public ACDC registry database layout and joined LMDB lifecycle. */
|
|
2
|
+
import { b, Diger, NumberPrimitive, Saider, SerderACDC } from "cesr-ts";
|
|
3
|
+
import { DatabaseNotOpenError, DatabaseOperationError } from "../core/errors.js";
|
|
4
|
+
import { LMDBer } from "../db/core/lmdber.js";
|
|
5
|
+
import { B64OnIoSetSuber, CatCesrSuber, CesrOnSuber, CesrSuber, SerderSuber } from "../db/subing.js";
|
|
6
|
+
/**
|
|
7
|
+
* Own one environment for public registry TEL bodies, accepted ordinals and heads.
|
|
8
|
+
* Mirrors frozen KERIpy RegBaser's typed tables; opening neither verifies
|
|
9
|
+
* evidence nor migrates rows. Absent anchor/escrow tables stay null until an
|
|
10
|
+
* explicit storage write initializes them, preserving readonly old layouts.
|
|
11
|
+
* Construction stays closed; callers own reopen and joined close.
|
|
12
|
+
*/
|
|
13
|
+
export class RegBaser extends LMDBer {
|
|
14
|
+
/** Named databases are root entries; testing presence opens no additional handles. */
|
|
15
|
+
hasTable(name) {
|
|
16
|
+
if (!this.env)
|
|
17
|
+
throw new DatabaseNotOpenError("Registry environment is closed.");
|
|
18
|
+
return this.env.getBinary(b(name)) !== undefined;
|
|
19
|
+
}
|
|
20
|
+
/** Explicit writable initialization; never called by opening or reading a store. */
|
|
21
|
+
initializeStorage() {
|
|
22
|
+
if (this.readonly)
|
|
23
|
+
throw new DatabaseOperationError("Cannot initialize readonly registry storage.");
|
|
24
|
+
this.ancs ??= new CatCesrSuber(this, { subkey: "ancs.", ctor: [NumberPrimitive, Diger] });
|
|
25
|
+
this.maes ??= new B64OnIoSetSuber(this, { subkey: "maes." });
|
|
26
|
+
this.ooes ??= new B64OnIoSetSuber(this, { subkey: "ooes." });
|
|
27
|
+
}
|
|
28
|
+
constructor(options = {}) {
|
|
29
|
+
super(options, {
|
|
30
|
+
tailDirPath: "keri/acdc/reg",
|
|
31
|
+
cleanTailDirPath: "keri/clean/acdc/reg",
|
|
32
|
+
altTailDirPath: options.compat ? ".keri/acdc/reg" : ".tufa/acdc/reg",
|
|
33
|
+
altCleanTailDirPath: options.compat ? ".keri/clean/acdc/reg" : ".tufa/clean/acdc/reg",
|
|
34
|
+
tempPrefix: "keri_acdc_reg_",
|
|
35
|
+
});
|
|
36
|
+
/** Event-SAID -> parsed rip/bup body; body presence alone is not acceptance. */
|
|
37
|
+
Object.defineProperty(this, "evts", {
|
|
38
|
+
enumerable: true,
|
|
39
|
+
configurable: true,
|
|
40
|
+
writable: true,
|
|
41
|
+
value: void 0
|
|
42
|
+
});
|
|
43
|
+
/** Registry-SAID + ordinal -> accepted event SAID; this is the acceptance marker. */
|
|
44
|
+
Object.defineProperty(this, "tels", {
|
|
45
|
+
enumerable: true,
|
|
46
|
+
configurable: true,
|
|
47
|
+
writable: true,
|
|
48
|
+
value: void 0
|
|
49
|
+
});
|
|
50
|
+
/** Registry-SAID -> current accepted head SAID; physical heds. is rebuildable from tels. */
|
|
51
|
+
Object.defineProperty(this, "heads", {
|
|
52
|
+
enumerable: true,
|
|
53
|
+
configurable: true,
|
|
54
|
+
writable: true,
|
|
55
|
+
value: void 0
|
|
56
|
+
});
|
|
57
|
+
/** Event-SAID -> earliest verified KEL source couple, when this table exists. */
|
|
58
|
+
Object.defineProperty(this, "ancs", {
|
|
59
|
+
enumerable: true,
|
|
60
|
+
configurable: true,
|
|
61
|
+
writable: true,
|
|
62
|
+
value: null
|
|
63
|
+
});
|
|
64
|
+
/** Insertion-ordered missing-anchor event-SAID tuples by registry and ordinal. */
|
|
65
|
+
Object.defineProperty(this, "maes", {
|
|
66
|
+
enumerable: true,
|
|
67
|
+
configurable: true,
|
|
68
|
+
writable: true,
|
|
69
|
+
value: null
|
|
70
|
+
});
|
|
71
|
+
/** Insertion-ordered out-of-order event-SAID tuples by registry and ordinal. */
|
|
72
|
+
Object.defineProperty(this, "ooes", {
|
|
73
|
+
enumerable: true,
|
|
74
|
+
configurable: true,
|
|
75
|
+
writable: true,
|
|
76
|
+
value: null
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/** Rebind the same environment's typed tables after every joined reopen. */
|
|
80
|
+
*reopen(options = {}) {
|
|
81
|
+
const opened = yield* super.reopen(options);
|
|
82
|
+
if (!opened)
|
|
83
|
+
return false;
|
|
84
|
+
try {
|
|
85
|
+
this.evts = new SerderSuber(this, { subkey: "evts.", ctor: SerderACDC });
|
|
86
|
+
this.tels = new CesrOnSuber(this, { subkey: "tels.", ctor: Saider });
|
|
87
|
+
this.heads = new CesrSuber(this, { subkey: "heds.", ctor: Saider });
|
|
88
|
+
this.ancs = this.hasTable("ancs.")
|
|
89
|
+
? new CatCesrSuber(this, { subkey: "ancs.", ctor: [NumberPrimitive, Diger] })
|
|
90
|
+
: null;
|
|
91
|
+
this.maes = this.hasTable("maes.") ? new B64OnIoSetSuber(this, { subkey: "maes." }) : null;
|
|
92
|
+
this.ooes = this.hasTable("ooes.") ? new B64OnIoSetSuber(this, { subkey: "ooes." }) : null;
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
yield* this.close();
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|