@run402/sdk 4.95.0 → 4.97.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 +27 -27
- package/core-dist/keystore.d.ts +1 -1
- package/core-dist/keystore.js +1 -1
- package/dist/errors.d.ts +5 -5
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +2 -2
- package/dist/errors.js.map +1 -1
- package/dist/grant-key-credentials.d.ts +38 -0
- package/dist/grant-key-credentials.d.ts.map +1 -0
- package/dist/grant-key-credentials.js +42 -0
- package/dist/grant-key-credentials.js.map +1 -0
- package/dist/index.d.ts +16 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -21
- package/dist/index.js.map +1 -1
- package/dist/namespaces/billing.d.ts +1 -1
- package/dist/namespaces/billing.js +1 -1
- package/dist/namespaces/buzz.js +1 -1
- package/dist/namespaces/buzz.js.map +1 -1
- package/dist/namespaces/credentials.d.ts +4 -4
- package/dist/namespaces/credentials.js +4 -4
- package/dist/namespaces/deploy.d.ts +5 -5
- package/dist/namespaces/deploy.d.ts.map +1 -1
- package/dist/namespaces/deploy.js +25 -25
- package/dist/namespaces/deploy.js.map +1 -1
- package/dist/namespaces/deploy.types.d.ts +17 -17
- package/dist/namespaces/deploy.types.d.ts.map +1 -1
- package/dist/namespaces/domains.d.ts +1 -1
- package/dist/namespaces/domains.js +1 -1
- package/dist/namespaces/errors.d.ts +1 -1
- package/dist/namespaces/errors.js +2 -2
- package/dist/namespaces/escalations.d.ts +2 -2
- package/dist/namespaces/escalations.js +2 -2
- package/dist/namespaces/escalations.types.d.ts +3 -3
- package/dist/namespaces/escalations.types.d.ts.map +1 -1
- package/dist/namespaces/events.d.ts +1 -1
- package/dist/namespaces/events.js +1 -1
- package/dist/namespaces/functions.js +1 -1
- package/dist/namespaces/functions.js.map +1 -1
- package/dist/namespaces/grants.d.ts +43 -9
- package/dist/namespaces/grants.d.ts.map +1 -1
- package/dist/namespaces/grants.js +99 -10
- package/dist/namespaces/grants.js.map +1 -1
- package/dist/namespaces/grants.types.d.ts +120 -15
- package/dist/namespaces/grants.types.d.ts.map +1 -1
- package/dist/namespaces/grants.types.js +12 -3
- package/dist/namespaces/grants.types.js.map +1 -1
- package/dist/namespaces/identity-links.types.d.ts +2 -2
- package/dist/namespaces/identity-links.types.d.ts.map +1 -1
- package/dist/namespaces/org.d.ts +3 -3
- package/dist/namespaces/org.js +3 -3
- package/dist/namespaces/org.types.d.ts +3 -3
- package/dist/namespaces/pay.js +1 -1
- package/dist/namespaces/projects.d.ts +1 -1
- package/dist/namespaces/projects.js +1 -1
- package/dist/namespaces/{gitvault.d.ts → repos.d.ts} +436 -449
- package/dist/namespaces/repos.d.ts.map +1 -0
- package/dist/namespaces/{gitvault.js → repos.js} +452 -460
- package/dist/namespaces/repos.js.map +1 -0
- package/dist/namespaces/rooms.d.ts +3 -3
- package/dist/namespaces/rooms.js +5 -5
- package/dist/namespaces/rooms.js.map +1 -1
- package/dist/namespaces/session.d.ts +2 -2
- package/dist/namespaces/session.d.ts.map +1 -1
- package/dist/namespaces/session.js +2 -2
- package/dist/namespaces/session.js.map +1 -1
- package/dist/namespaces/tier.d.ts +3 -3
- package/dist/namespaces/tier.d.ts.map +1 -1
- package/dist/namespaces/{gitvault.crypto.d.ts → vault.crypto.d.ts} +141 -141
- package/dist/namespaces/vault.crypto.d.ts.map +1 -0
- package/dist/namespaces/{gitvault.crypto.js → vault.crypto.js} +173 -173
- package/dist/namespaces/vault.crypto.js.map +1 -0
- package/dist/namespaces/{gitvault.types.d.ts → vault.types.d.ts} +136 -136
- package/dist/namespaces/vault.types.d.ts.map +1 -0
- package/dist/namespaces/{gitvault.types.js → vault.types.js} +4 -4
- package/dist/namespaces/vault.types.js.map +1 -0
- package/dist/node/bearer-redeem-key.d.ts +1 -1
- package/dist/node/bearer-redeem-key.js +5 -5
- package/dist/node/bearer-redeem-key.js.map +1 -1
- package/dist/node/credentials.d.ts +9 -9
- package/dist/node/credentials.d.ts.map +1 -1
- package/dist/node/credentials.js +12 -12
- package/dist/node/credentials.js.map +1 -1
- package/dist/node/http-dispatcher.js +5 -5
- package/dist/node/http-dispatcher.js.map +1 -1
- package/dist/node/index.d.ts +34 -34
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +41 -41
- package/dist/node/index.js.map +1 -1
- package/dist/node/{gitvault-address.d.ts → vault-address.d.ts} +42 -42
- package/dist/node/vault-address.d.ts.map +1 -0
- package/dist/node/{gitvault-address.js → vault-address.js} +43 -43
- package/dist/node/vault-address.js.map +1 -0
- package/dist/node/{gitvault-apply.d.ts → vault-apply.d.ts} +27 -27
- package/dist/node/vault-apply.d.ts.map +1 -0
- package/dist/node/{gitvault-apply.js → vault-apply.js} +38 -38
- package/dist/node/vault-apply.js.map +1 -0
- package/dist/node/vault-byo-config.d.ts +29 -0
- package/dist/node/vault-byo-config.d.ts.map +1 -0
- package/dist/node/{gitvault-byo-config.js → vault-byo-config.js} +18 -18
- package/dist/node/vault-byo-config.js.map +1 -0
- package/dist/node/vault-byo-probe.d.ts +20 -0
- package/dist/node/vault-byo-probe.d.ts.map +1 -0
- package/dist/node/vault-byo-probe.js +57 -0
- package/dist/node/vault-byo-probe.js.map +1 -0
- package/dist/node/{gitvault-creation-journal.d.ts → vault-creation-journal.d.ts} +69 -69
- package/dist/node/vault-creation-journal.d.ts.map +1 -0
- package/dist/node/{gitvault-creation-journal.js → vault-creation-journal.js} +54 -54
- package/dist/node/vault-creation-journal.js.map +1 -0
- package/dist/node/{gitvault-degraded-read.d.ts → vault-degraded-read.d.ts} +34 -34
- package/dist/node/vault-degraded-read.d.ts.map +1 -0
- package/dist/node/{gitvault-degraded-read.js → vault-degraded-read.js} +24 -24
- package/dist/node/vault-degraded-read.js.map +1 -0
- package/dist/node/{gitvault-deploy.d.ts → vault-deploy.d.ts} +67 -67
- package/dist/node/vault-deploy.d.ts.map +1 -0
- package/dist/node/{gitvault-deploy.js → vault-deploy.js} +27 -27
- package/dist/node/vault-deploy.js.map +1 -0
- package/dist/node/{gitvault-edge-fetch.d.ts → vault-edge-fetch.d.ts} +9 -9
- package/dist/node/vault-edge-fetch.d.ts.map +1 -0
- package/dist/node/{gitvault-edge-fetch.js → vault-edge-fetch.js} +11 -11
- package/dist/node/vault-edge-fetch.js.map +1 -0
- package/dist/node/{gitvault-handoff.d.ts → vault-handoff.d.ts} +9 -9
- package/dist/node/vault-handoff.d.ts.map +1 -0
- package/dist/node/{gitvault-handoff.js → vault-handoff.js} +24 -24
- package/dist/node/vault-handoff.js.map +1 -0
- package/dist/node/{gitvault-keystore.d.ts → vault-keystore.d.ts} +87 -77
- package/dist/node/vault-keystore.d.ts.map +1 -0
- package/dist/node/{gitvault-keystore.js → vault-keystore.js} +105 -68
- package/dist/node/vault-keystore.js.map +1 -0
- package/dist/node/{gitvault-member-bundle.d.ts → vault-member-bundle.d.ts} +17 -17
- package/dist/node/vault-member-bundle.d.ts.map +1 -0
- package/dist/node/{gitvault-member-bundle.js → vault-member-bundle.js} +11 -11
- package/dist/node/vault-member-bundle.js.map +1 -0
- package/dist/node/{gitvault-mirror-backend.d.ts → vault-mirror-backend.d.ts} +26 -26
- package/dist/node/vault-mirror-backend.d.ts.map +1 -0
- package/dist/node/{gitvault-mirror-backend.js → vault-mirror-backend.js} +25 -25
- package/dist/node/vault-mirror-backend.js.map +1 -0
- package/dist/node/{gitvault-mirror-config.d.ts → vault-mirror-config.d.ts} +23 -23
- package/dist/node/vault-mirror-config.d.ts.map +1 -0
- package/dist/node/{gitvault-mirror-config.js → vault-mirror-config.js} +16 -16
- package/dist/node/vault-mirror-config.js.map +1 -0
- package/dist/node/{gitvault-mirror.d.ts → vault-mirror.d.ts} +36 -36
- package/dist/node/vault-mirror.d.ts.map +1 -0
- package/dist/node/{gitvault-mirror.js → vault-mirror.js} +75 -75
- package/dist/node/vault-mirror.js.map +1 -0
- package/dist/node/{gitvault-native-crypto.d.ts → vault-native-crypto.d.ts} +10 -10
- package/dist/node/vault-native-crypto.d.ts.map +1 -0
- package/dist/node/{gitvault-native-crypto.js → vault-native-crypto.js} +16 -16
- package/dist/node/vault-native-crypto.js.map +1 -0
- package/dist/node/{gitvault-open-or-create.d.ts → vault-open-or-create.d.ts} +16 -16
- package/dist/node/vault-open-or-create.d.ts.map +1 -0
- package/dist/node/{gitvault-open-or-create.js → vault-open-or-create.js} +10 -10
- package/dist/node/vault-open-or-create.js.map +1 -0
- package/dist/node/{gitvault-prewarm.d.ts → vault-prewarm.d.ts} +13 -13
- package/dist/node/vault-prewarm.d.ts.map +1 -0
- package/dist/node/{gitvault-prewarm.js → vault-prewarm.js} +25 -25
- package/dist/node/vault-prewarm.js.map +1 -0
- package/dist/node/{gitvault-profile-scan.d.ts → vault-profile-scan.d.ts} +3 -3
- package/dist/node/vault-profile-scan.d.ts.map +1 -0
- package/dist/node/{gitvault-profile-scan.js → vault-profile-scan.js} +12 -12
- package/dist/node/vault-profile-scan.js.map +1 -0
- package/dist/node/{gitvault-prune.d.ts → vault-prune.d.ts} +61 -61
- package/dist/node/vault-prune.d.ts.map +1 -0
- package/dist/node/{gitvault-prune.js → vault-prune.js} +34 -34
- package/dist/node/vault-prune.js.map +1 -0
- package/dist/node/{gitvault-publication.d.ts → vault-publication.d.ts} +399 -399
- package/dist/node/vault-publication.d.ts.map +1 -0
- package/dist/node/{gitvault-publication.js → vault-publication.js} +584 -584
- package/dist/node/vault-publication.js.map +1 -0
- package/dist/node/{gitvault-push-to-create.d.ts → vault-push-to-create.d.ts} +16 -16
- package/dist/node/vault-push-to-create.d.ts.map +1 -0
- package/dist/node/{gitvault-push-to-create.js → vault-push-to-create.js} +9 -9
- package/dist/node/vault-push-to-create.js.map +1 -0
- package/dist/node/{gitvault-recover.d.ts → vault-recover.d.ts} +50 -50
- package/dist/node/vault-recover.d.ts.map +1 -0
- package/dist/node/{gitvault-recover.js → vault-recover.js} +84 -84
- package/dist/node/vault-recover.js.map +1 -0
- package/dist/node/{gitvault-restore.d.ts → vault-restore.d.ts} +8 -8
- package/dist/node/vault-restore.d.ts.map +1 -0
- package/dist/node/{gitvault-restore.js → vault-restore.js} +11 -11
- package/dist/node/vault-restore.js.map +1 -0
- package/dist/node/{gitvault-snapshot.d.ts → vault-snapshot.d.ts} +48 -48
- package/dist/node/vault-snapshot.d.ts.map +1 -0
- package/dist/node/{gitvault-snapshot.js → vault-snapshot.js} +61 -61
- package/dist/node/vault-snapshot.js.map +1 -0
- package/dist/node/{gitvault-writer-state.d.ts → vault-writer-state.d.ts} +8 -8
- package/dist/node/vault-writer-state.d.ts.map +1 -0
- package/dist/node/{gitvault-writer-state.js → vault-writer-state.js} +15 -15
- package/dist/node/vault-writer-state.js.map +1 -0
- package/dist/node/workflow-output.js +4 -4
- package/dist/node/workflow-output.js.map +1 -1
- package/dist/project-auth-classification.d.ts +8 -8
- package/dist/project-auth-classification.d.ts.map +1 -1
- package/dist/project-auth-classification.js +7 -7
- package/dist/project-auth-classification.js.map +1 -1
- package/dist/scoped.d.ts +6 -14
- package/dist/scoped.d.ts.map +1 -1
- package/dist/scoped.js +10 -21
- package/dist/scoped.js.map +1 -1
- package/package.json +1 -1
- package/dist/delegate-credentials.d.ts +0 -37
- package/dist/delegate-credentials.d.ts.map +0 -1
- package/dist/delegate-credentials.js +0 -41
- package/dist/delegate-credentials.js.map +0 -1
- package/dist/namespaces/delegates.d.ts +0 -50
- package/dist/namespaces/delegates.d.ts.map +0 -1
- package/dist/namespaces/delegates.js +0 -99
- package/dist/namespaces/delegates.js.map +0 -1
- package/dist/namespaces/delegates.types.d.ts +0 -88
- package/dist/namespaces/delegates.types.d.ts.map +0 -1
- package/dist/namespaces/delegates.types.js +0 -10
- package/dist/namespaces/delegates.types.js.map +0 -1
- package/dist/namespaces/gitvault.crypto.d.ts.map +0 -1
- package/dist/namespaces/gitvault.crypto.js.map +0 -1
- package/dist/namespaces/gitvault.d.ts.map +0 -1
- package/dist/namespaces/gitvault.js.map +0 -1
- package/dist/namespaces/gitvault.types.d.ts.map +0 -1
- package/dist/namespaces/gitvault.types.js.map +0 -1
- package/dist/node/gitvault-address.d.ts.map +0 -1
- package/dist/node/gitvault-address.js.map +0 -1
- package/dist/node/gitvault-apply.d.ts.map +0 -1
- package/dist/node/gitvault-apply.js.map +0 -1
- package/dist/node/gitvault-byo-config.d.ts +0 -29
- package/dist/node/gitvault-byo-config.d.ts.map +0 -1
- package/dist/node/gitvault-byo-config.js.map +0 -1
- package/dist/node/gitvault-byo-probe.d.ts +0 -20
- package/dist/node/gitvault-byo-probe.d.ts.map +0 -1
- package/dist/node/gitvault-byo-probe.js +0 -57
- package/dist/node/gitvault-byo-probe.js.map +0 -1
- package/dist/node/gitvault-creation-journal.d.ts.map +0 -1
- package/dist/node/gitvault-creation-journal.js.map +0 -1
- package/dist/node/gitvault-degraded-read.d.ts.map +0 -1
- package/dist/node/gitvault-degraded-read.js.map +0 -1
- package/dist/node/gitvault-deploy.d.ts.map +0 -1
- package/dist/node/gitvault-deploy.js.map +0 -1
- package/dist/node/gitvault-edge-fetch.d.ts.map +0 -1
- package/dist/node/gitvault-edge-fetch.js.map +0 -1
- package/dist/node/gitvault-handoff.d.ts.map +0 -1
- package/dist/node/gitvault-handoff.js.map +0 -1
- package/dist/node/gitvault-keystore.d.ts.map +0 -1
- package/dist/node/gitvault-keystore.js.map +0 -1
- package/dist/node/gitvault-member-bundle.d.ts.map +0 -1
- package/dist/node/gitvault-member-bundle.js.map +0 -1
- package/dist/node/gitvault-mirror-backend.d.ts.map +0 -1
- package/dist/node/gitvault-mirror-backend.js.map +0 -1
- package/dist/node/gitvault-mirror-config.d.ts.map +0 -1
- package/dist/node/gitvault-mirror-config.js.map +0 -1
- package/dist/node/gitvault-mirror.d.ts.map +0 -1
- package/dist/node/gitvault-mirror.js.map +0 -1
- package/dist/node/gitvault-native-crypto.d.ts.map +0 -1
- package/dist/node/gitvault-native-crypto.js.map +0 -1
- package/dist/node/gitvault-open-or-create.d.ts.map +0 -1
- package/dist/node/gitvault-open-or-create.js.map +0 -1
- package/dist/node/gitvault-prewarm.d.ts.map +0 -1
- package/dist/node/gitvault-prewarm.js.map +0 -1
- package/dist/node/gitvault-profile-scan.d.ts.map +0 -1
- package/dist/node/gitvault-profile-scan.js.map +0 -1
- package/dist/node/gitvault-prune.d.ts.map +0 -1
- package/dist/node/gitvault-prune.js.map +0 -1
- package/dist/node/gitvault-publication.d.ts.map +0 -1
- package/dist/node/gitvault-publication.js.map +0 -1
- package/dist/node/gitvault-push-to-create.d.ts.map +0 -1
- package/dist/node/gitvault-push-to-create.js.map +0 -1
- package/dist/node/gitvault-recover.d.ts.map +0 -1
- package/dist/node/gitvault-recover.js.map +0 -1
- package/dist/node/gitvault-restore.d.ts.map +0 -1
- package/dist/node/gitvault-restore.js.map +0 -1
- package/dist/node/gitvault-snapshot.d.ts.map +0 -1
- package/dist/node/gitvault-snapshot.js.map +0 -1
- package/dist/node/gitvault-writer-state.d.ts.map +0 -1
- package/dist/node/gitvault-writer-state.js.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* vault-mirror-and-recover — the mirror writer + reconcile/sync engine +
|
|
3
3
|
* capture-time dual-push hook (design D1/D6/D7, tasks 2.2–2.4).
|
|
4
4
|
*
|
|
5
5
|
* ADMISSION-ORDER WRITE DISCIPLINE (D1's whole point). The gateway's objects
|
|
6
|
-
* listing (`GET /
|
|
6
|
+
* listing (`GET /vaults/v1/:vault_id/objects`) is a flat, unordered
|
|
7
7
|
* set of `{key, object_kind, sha256, size_bytes}` — it does not group objects
|
|
8
8
|
* by generation. The correct, SUFFICIENT ordering rule does not need that
|
|
9
9
|
* grouping: write EVERY plain object first (any order among themselves — a
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
* (`POST …/object-reads` for object-kind reads, `GET …/heads/:gen` /
|
|
32
32
|
* `GET …/admissions/:gen` for the two generation-addressed raw-byte routes) —
|
|
33
33
|
* reimplemented here as a THIN, self-contained reader (not exported from
|
|
34
|
-
* `
|
|
34
|
+
* `vault-publication.ts`, which keeps those helpers module-private) so
|
|
35
35
|
* this file has no dependency on the live-push module and works from nothing
|
|
36
36
|
* but a `Client` + `repo_id`.
|
|
37
37
|
*
|
|
@@ -41,23 +41,23 @@
|
|
|
41
41
|
* The gateway's own `GET …/objects` listing
|
|
42
42
|
* echoes that FULL key back on every entry — it never returns a
|
|
43
43
|
* repo-relative key. This module's own working representation, and the
|
|
44
|
-
* mirror BACKEND's key space (`
|
|
45
|
-
* `
|
|
44
|
+
* mirror BACKEND's key space (`vault-mirror-backend.ts`
|
|
45
|
+
* `openVaultMirrorBackend`, whose `root`/`prefix` already bake in
|
|
46
46
|
* `source/<repo_id>`), are both REPO-RELATIVE (`head/<gen>`,
|
|
47
47
|
* `wal/<id>.pack.enc`, `key-envelopes/<epoch>/<fp>.env`, …) — the same shape
|
|
48
|
-
* `
|
|
48
|
+
* `vault-recover.ts` and `vault-publication.ts`'s `vaultPaths`
|
|
49
49
|
* already use. The mapping is therefore, in ONE place:
|
|
50
50
|
*
|
|
51
51
|
* bucket key = `source/<repo_id>/` + mirror key (repo-relative)
|
|
52
52
|
*
|
|
53
|
-
* `
|
|
53
|
+
* `listVaultObjectsAll` is the ONLY function that ever sees a full,
|
|
54
54
|
* `source/<repo_id>/`-prefixed key (the raw wire shape, typed
|
|
55
55
|
* `RawVaultObjectEntry` below) — it strips the prefix via
|
|
56
56
|
* `stripSourcePrefix` before anything else in this module (or in
|
|
57
|
-
* `
|
|
58
|
-
* the entry. Every `
|
|
57
|
+
* `vault-recover.ts`, which never talks to the live gateway at all) sees
|
|
58
|
+
* the entry. Every `VaultObjectEntry` handed to `generationRouteForKey`,
|
|
59
59
|
* `objectReadRequestForEntry`, `planMirrorWrite`, `reconcileOne`, and the
|
|
60
|
-
* `
|
|
60
|
+
* `VaultMirrorBackend` itself is repo-relative from that point on. An
|
|
61
61
|
* entry whose key names a DIFFERENT repo id than the one being synced is a
|
|
62
62
|
* listing-isolation violation and is refused loudly (never silently
|
|
63
63
|
* stripped-and-kept or silently dropped) — see `stripSourcePrefix`.
|
|
@@ -85,20 +85,20 @@
|
|
|
85
85
|
*/
|
|
86
86
|
import { createHash } from "node:crypto";
|
|
87
87
|
import { LocalError, isRun402Error } from "../errors.js";
|
|
88
|
-
import {
|
|
89
|
-
import {
|
|
90
|
-
import {
|
|
91
|
-
import { formatMirrorDestination, readMirrorConfig, recordMirrorSuccess } from "./
|
|
92
|
-
import {
|
|
93
|
-
import { readByoConfig } from "./
|
|
88
|
+
import { VAULT_GENESIS_GENERATION, VAULT_MIRROR_KEYSTORE_STILL_REQUIRED_STATEMENT, VAULT_MIRROR_VALIDITY_NOT_FRESHNESS_STATEMENT, fromBase64url, } from "../namespaces/vault.crypto.js";
|
|
89
|
+
import { fetchVaultObjectBytes } from "./vault-edge-fetch.js";
|
|
90
|
+
import { VaultKeystore } from "./vault-keystore.js";
|
|
91
|
+
import { formatMirrorDestination, readMirrorConfig, recordMirrorSuccess } from "./vault-mirror-config.js";
|
|
92
|
+
import { openVaultMirrorBackend, resolveMirrorCredentials } from "./vault-mirror-backend.js";
|
|
93
|
+
import { readByoConfig } from "./vault-byo-config.js";
|
|
94
94
|
function fail(code, message, context, details, nextActions) {
|
|
95
95
|
throw new LocalError(message, context, { code, details, ...(nextActions ? { next_actions: nextActions } : {}) });
|
|
96
96
|
}
|
|
97
97
|
function sha256Hex(bytes) {
|
|
98
98
|
return createHash("sha256").update(bytes).digest("hex");
|
|
99
99
|
}
|
|
100
|
-
/** protocol §3 (`storage-keys.ts` `
|
|
101
|
-
const
|
|
100
|
+
/** protocol §3 (`storage-keys.ts` `VAULT_SOURCE_PREFIX`) — duplicated here because the SDK carries no dependency on the gateway package. */
|
|
101
|
+
const VAULT_SOURCE_PREFIX = "source";
|
|
102
102
|
/**
|
|
103
103
|
* Turn one WIRE key (`source/<repo_id>/<rest>`) into the REPO-RELATIVE key
|
|
104
104
|
* every other function in this module expects. A key naming a DIFFERENT repo
|
|
@@ -109,37 +109,37 @@ const GITVAULT_SOURCE_PREFIX = "source";
|
|
|
109
109
|
* prefix at all is a listing-shape violation of the same severity.
|
|
110
110
|
*/
|
|
111
111
|
function stripSourcePrefix(repoId, key) {
|
|
112
|
-
const expected = `${
|
|
112
|
+
const expected = `${VAULT_SOURCE_PREFIX}/${repoId}/`;
|
|
113
113
|
if (key.startsWith(expected))
|
|
114
114
|
return key.slice(expected.length);
|
|
115
115
|
const foreign = /^source\/([^/]+)\//.exec(key);
|
|
116
116
|
if (foreign) {
|
|
117
|
-
fail("
|
|
117
|
+
fail("VAULT_MIRROR_FOREIGN_REPO_KEY", `the objects listing for ${repoId} returned a key addressed to a different vault (${foreign[1]}): ${key}`, "listing vault objects", { key, repo_id: repoId, foreign_repo_id: foreign[1] });
|
|
118
118
|
}
|
|
119
|
-
fail("
|
|
119
|
+
fail("VAULT_MIRROR_LISTING_INCONSISTENT", `listed key is not in the expected source/<repo_id>/… layout: ${key}`, "listing vault objects", { key, repo_id: repoId });
|
|
120
120
|
}
|
|
121
|
-
/** Page through `GET /
|
|
122
|
-
export async function
|
|
123
|
-
const base = `/
|
|
121
|
+
/** Page through `GET /vaults/v1/:vault_id/objects`, collecting every entry, stripped to repo-relative keys. Store-and-echo cursor per D3a — never parsed here either. */
|
|
122
|
+
export async function listVaultObjectsAll(client, repoId) {
|
|
123
|
+
const base = `/vaults/v1/${encodeURIComponent(repoId)}/objects`;
|
|
124
124
|
const out = [];
|
|
125
125
|
let cursor;
|
|
126
126
|
for (;;) {
|
|
127
127
|
const qs = cursor ? `?cursor=${encodeURIComponent(cursor)}` : "";
|
|
128
|
-
const page = await client.request(`${base}${qs}`, { context: "listing
|
|
128
|
+
const page = await client.request(`${base}${qs}`, { context: "listing vault objects" });
|
|
129
129
|
for (const raw of page.objects) {
|
|
130
130
|
out.push({ key: stripSourcePrefix(repoId, raw.key), object_kind: raw.object_kind, sha256: raw.sha256, size_bytes: raw.size_bytes });
|
|
131
131
|
}
|
|
132
132
|
if (!page.has_more)
|
|
133
133
|
break;
|
|
134
134
|
if (!page.next_cursor)
|
|
135
|
-
fail("
|
|
135
|
+
fail("VAULT_MIRROR_LISTING_INCONSISTENT", "the objects listing reported has_more with no next_cursor", "listing vault objects");
|
|
136
136
|
cursor = page.next_cursor;
|
|
137
137
|
}
|
|
138
138
|
return out;
|
|
139
139
|
}
|
|
140
140
|
/** Read one object's bytes by key, using the same wire identity every stored kind already carries (§3 layout). `null` when the gateway reports the object absent. */
|
|
141
|
-
export async function
|
|
142
|
-
const base = `/
|
|
141
|
+
export async function readVaultObjectBytes(client, repoId, entry) {
|
|
142
|
+
const base = `/vaults/v1/${encodeURIComponent(repoId)}`;
|
|
143
143
|
const generationRoute = generationRouteForKey(entry.key);
|
|
144
144
|
if (generationRoute) {
|
|
145
145
|
// Defense in depth: the key SHAPE alone is enough to route the read, but
|
|
@@ -149,28 +149,28 @@ export async function readGitvaultObjectBytes(client, repoId, entry) {
|
|
|
149
149
|
// `admission_record`; `head/<gen>` is `vault_genesis` ONLY at generation
|
|
150
150
|
// zero and `head` at every later generation — the kind names the
|
|
151
151
|
// CONTENT, both fetch through the same route.
|
|
152
|
-
const expectedKind = generationRoute.route === "admissions" ? "admission_record" : generationRoute.generation ===
|
|
152
|
+
const expectedKind = generationRoute.route === "admissions" ? "admission_record" : generationRoute.generation === VAULT_GENESIS_GENERATION ? "vault_genesis" : "head";
|
|
153
153
|
if (entry.object_kind !== expectedKind) {
|
|
154
|
-
fail("
|
|
154
|
+
fail("VAULT_MIRROR_KEY_UNRECOGNIZED", `listed object_kind '${entry.object_kind}' does not match its generation-addressed key ${entry.key} (expected '${expectedKind}')`, "reading vault mirror source object", { key: entry.key, object_kind: entry.object_kind, expected_object_kind: expectedKind });
|
|
155
155
|
}
|
|
156
156
|
const path = `${base}/${generationRoute.route}/${encodeURIComponent(generationRoute.generation)}`;
|
|
157
|
-
const auth = (await client.credentials.getAuth(path, { method: `
|
|
157
|
+
const auth = (await client.credentials.getAuth(path, { method: `vault.read_${generationRoute.route}` })) ?? {};
|
|
158
158
|
const r = await client.fetch(`${client.apiBase}${path}`, { method: "GET", headers: { ...auth, accept: "application/json" } });
|
|
159
159
|
if (r.status === 404)
|
|
160
160
|
return null;
|
|
161
161
|
if (!r.ok)
|
|
162
|
-
fail("
|
|
162
|
+
fail("VAULT_MIRROR_READ_FAILED", `${entry.key} read failed (HTTP ${r.status})`, "reading vault mirror source object", { key: entry.key, status: r.status });
|
|
163
163
|
return new Uint8Array(await r.arrayBuffer());
|
|
164
164
|
}
|
|
165
165
|
const read = objectReadRequestForEntry(entry);
|
|
166
|
-
// `edge_url` (
|
|
167
|
-
// same-bytes CDN companion `
|
|
168
|
-
// consumers get — see `
|
|
166
|
+
// `edge_url` (vault-read-edge-cache design D5) is the same optional,
|
|
167
|
+
// same-bytes CDN companion `vault-publication.ts`'s object-reads
|
|
168
|
+
// consumers get — see `fetchVaultObjectBytes` (`vault-edge-fetch.ts`)
|
|
169
169
|
// for the prefer-edge/silent-fallback policy shared across both.
|
|
170
170
|
//
|
|
171
|
-
// `inline` (
|
|
171
|
+
// `inline` (vault-small-object-inline design D1/D2) is the same
|
|
172
172
|
// optional, same-bytes small-object offer those consumers get too — see
|
|
173
|
-
// `
|
|
173
|
+
// `vault-publication.ts`'s `resolveObjectReadTarget` for the sibling
|
|
174
174
|
// logic, DUPLICATED here (not imported) for the reason this module's own
|
|
175
175
|
// header names: this reader must have no dependency on the live-push
|
|
176
176
|
// module. `entry.sha256` is always known here (the listing supplies it
|
|
@@ -179,7 +179,7 @@ export async function readGitvaultObjectBytes(client, repoId, entry) {
|
|
|
179
179
|
// still just a plain miss for this one read.
|
|
180
180
|
let presigned;
|
|
181
181
|
try {
|
|
182
|
-
presigned = await client.request(`${base}/object-reads`, { method: "POST", body: { objects: [read] }, context: "resolving
|
|
182
|
+
presigned = await client.request(`${base}/object-reads`, { method: "POST", body: { objects: [read] }, context: "resolving vault mirror source object" });
|
|
183
183
|
}
|
|
184
184
|
catch (e) {
|
|
185
185
|
if (isRun402Error(e) && (e.status === 404 || e.code === "RESOURCE_NOT_FOUND"))
|
|
@@ -194,14 +194,14 @@ export async function readGitvaultObjectBytes(client, repoId, entry) {
|
|
|
194
194
|
if (sha256Hex(bytes) === entry.sha256)
|
|
195
195
|
return bytes;
|
|
196
196
|
}
|
|
197
|
-
const r = await
|
|
197
|
+
const r = await fetchVaultObjectBytes(client, target);
|
|
198
198
|
if (r.status === 404)
|
|
199
199
|
return null;
|
|
200
200
|
if (!r.ok)
|
|
201
|
-
fail("
|
|
201
|
+
fail("VAULT_MIRROR_READ_FAILED", `${entry.key} GET failed (HTTP ${r.status})`, "reading vault mirror source object", { key: entry.key, status: r.status });
|
|
202
202
|
return new Uint8Array(await r.arrayBuffer());
|
|
203
203
|
}
|
|
204
|
-
/** Exported for the key-shape conformance test (`
|
|
204
|
+
/** Exported for the key-shape conformance test (`vault-mirror-recover.test.ts`) — never called for its own sake outside this module. */
|
|
205
205
|
export function generationRouteForKey(key) {
|
|
206
206
|
const head = /^head\/([0-9a-f]{16})$/.exec(key);
|
|
207
207
|
if (head)
|
|
@@ -253,11 +253,11 @@ const NON_GENERATION_KEY_SPECS = [
|
|
|
253
253
|
export function objectReadRequestForEntry(entry) {
|
|
254
254
|
if (entry.object_kind === "key_envelope") {
|
|
255
255
|
// `key-envelopes/<epoch>/<recipient_fingerprint>.env` — the GATEWAY's
|
|
256
|
-
// real §3 wire key (`packages/gateway/src/services/
|
|
256
|
+
// real §3 wire key (`packages/gateway/src/services/vault/
|
|
257
257
|
// upload-sessions.ts` `UPLOADABLE_KINDS.key_envelope.key()`, mirrored by
|
|
258
258
|
// `storage-keys.ts` `objectKeyFor`). This is what the live objects
|
|
259
259
|
// listing actually returns, and is DIFFERENT from the SDK's own
|
|
260
|
-
// `
|
|
260
|
+
// `vault-creation-journal.ts` envelope `path` string
|
|
261
261
|
// (`envelopes/<epoch>/<fp>`, no `key-` prefix, no `.env` suffix) — that
|
|
262
262
|
// string is CLIENT-LOCAL addressing for the upload manifest only ("never
|
|
263
263
|
// rides the wire", per its own doc comment); the gateway derives its own
|
|
@@ -265,35 +265,35 @@ export function objectReadRequestForEntry(entry) {
|
|
|
265
265
|
// re-derive this from that SDK constant.
|
|
266
266
|
const m = /^key-envelopes\/([0-9a-f]{16})\/(ek_[0-9a-f]{32})\.env$/.exec(entry.key);
|
|
267
267
|
if (!m)
|
|
268
|
-
fail("
|
|
268
|
+
fail("VAULT_MIRROR_KEY_UNRECOGNIZED", `key_envelope key does not match the expected layout: ${entry.key}`, "building vault mirror read request", { key: entry.key });
|
|
269
269
|
return { object_kind: "key_envelope", epoch: m[1], recipient_fingerprint: m[2] };
|
|
270
270
|
}
|
|
271
271
|
const spec = NON_GENERATION_KEY_SPECS.find((s) => s.kind === entry.object_kind);
|
|
272
272
|
if (!spec) {
|
|
273
|
-
fail("
|
|
273
|
+
fail("VAULT_MIRROR_KEY_UNRECOGNIZED", `unrecognized object_kind '${entry.object_kind}' for mirror read (key ${entry.key})`, "building vault mirror read request", { key: entry.key, object_kind: entry.object_kind });
|
|
274
274
|
}
|
|
275
275
|
const m = spec.pattern.exec(entry.key);
|
|
276
276
|
if (!m)
|
|
277
|
-
fail("
|
|
277
|
+
fail("VAULT_MIRROR_KEY_UNRECOGNIZED", `${entry.object_kind} key does not match the expected §3 layout: ${entry.key}`, "building vault mirror read request", { key: entry.key, object_kind: entry.object_kind });
|
|
278
278
|
return { object_kind: entry.object_kind, object_id: m[1] };
|
|
279
279
|
}
|
|
280
280
|
/**
|
|
281
281
|
* NOT a bug: the recipient-only read gate on
|
|
282
282
|
* `key_envelope` means a mirror can only ever hold envelopes wrapped for
|
|
283
|
-
* THIS machine's own identity. A multi-recipient vault (
|
|
283
|
+
* THIS machine's own identity. A multi-recipient vault (vault-human-
|
|
284
284
|
* envelopes) makes a foreign-recipient envelope the NORM, not an anomaly —
|
|
285
285
|
* it must never be synced as a failure. This extracts the `ek_` fingerprint
|
|
286
286
|
* straight from the key_envelope's own key (no network round-trip needed to
|
|
287
287
|
* classify it), reusing the exact pattern `objectReadRequestForEntry` uses;
|
|
288
288
|
* `null` for a key that doesn't match the expected layout at all (a real,
|
|
289
289
|
* separate problem — that case falls through to the normal read-and-fail
|
|
290
|
-
* path so `
|
|
290
|
+
* path so `VAULT_MIRROR_KEY_UNRECOGNIZED` still surfaces).
|
|
291
291
|
*/
|
|
292
292
|
function keyEnvelopeRecipientFingerprintFromKey(key) {
|
|
293
293
|
const m = /^key-envelopes\/[0-9a-f]{16}\/(ek_[0-9a-f]{32})\.env$/.exec(key);
|
|
294
294
|
return m ? m[1] : null;
|
|
295
295
|
}
|
|
296
|
-
/** The local keystore's own `ek_` fingerprint, or `null` when no identity exists on this machine (keyless / never-`
|
|
296
|
+
/** The local keystore's own `ek_` fingerprint, or `null` when no identity exists on this machine (keyless / never-`vault init`-ed). */
|
|
297
297
|
function localEncryptionFingerprint(keystore) {
|
|
298
298
|
return keystore.readIdentity()?.encryption_fingerprint ?? null;
|
|
299
299
|
}
|
|
@@ -355,7 +355,7 @@ async function reconcileOne(client, repoId, backend, entry, ownFingerprint) {
|
|
|
355
355
|
if (existing && existing.size_bytes === entry.size_bytes) {
|
|
356
356
|
return { key: entry.key, outcome: "already_present" };
|
|
357
357
|
}
|
|
358
|
-
const bytes = await
|
|
358
|
+
const bytes = await readVaultObjectBytes(client, repoId, entry);
|
|
359
359
|
if (!bytes)
|
|
360
360
|
return { key: entry.key, outcome: "failed", error: `${kindTag} the source no longer serves this object (listed but unreadable)` };
|
|
361
361
|
const hash = sha256Hex(bytes);
|
|
@@ -380,18 +380,18 @@ async function reconcileOne(client, repoId, backend, entry, ownFingerprint) {
|
|
|
380
380
|
}
|
|
381
381
|
}
|
|
382
382
|
/**
|
|
383
|
-
* `run402
|
|
383
|
+
* `run402 repos mirror sync` (task 2.3): list the vault's stored objects,
|
|
384
384
|
* diff against the mirror by key+size, fetch and hash-verify what's missing,
|
|
385
385
|
* write it in admission order. Resumable and idempotent — running it twice in
|
|
386
386
|
* a row with nothing new copies nothing the second time.
|
|
387
387
|
*/
|
|
388
388
|
export async function mirrorSync(client, repoId, options = {}) {
|
|
389
|
-
const keystore = options.keystore ??
|
|
389
|
+
const keystore = options.keystore ?? VaultKeystore.open();
|
|
390
390
|
const backend = options.backend ?? openBackendFromConfig(keystore, repoId);
|
|
391
391
|
const config = readMirrorConfig(keystore, repoId);
|
|
392
392
|
const destination = options.backend ? backend.describe() : formatMirrorDestination(config.destination);
|
|
393
393
|
const ownFingerprint = localEncryptionFingerprint(keystore);
|
|
394
|
-
const entries = await
|
|
394
|
+
const entries = await listVaultObjectsAll(client, repoId);
|
|
395
395
|
const plan = planMirrorWrite(entries);
|
|
396
396
|
const ordered = [...plan.objects, ...plan.admissionsAndHeads];
|
|
397
397
|
let copied = 0;
|
|
@@ -419,7 +419,7 @@ export async function mirrorSync(client, repoId, options = {}) {
|
|
|
419
419
|
errors.push({ key: result.key, error: result.error ?? "unknown failure" });
|
|
420
420
|
}
|
|
421
421
|
}
|
|
422
|
-
//
|
|
422
|
+
// vault-mirror-default: a zero-failure pass is the event that clears the
|
|
423
423
|
// vault_unmirrored finding — stamp it in the LOCAL config only (the gateway
|
|
424
424
|
// never learns any of this; recordMirrorSuccess no-ops when there is no
|
|
425
425
|
// config, e.g. a test-injected backend).
|
|
@@ -436,21 +436,21 @@ export async function mirrorSync(client, repoId, options = {}) {
|
|
|
436
436
|
objects_failed: failed,
|
|
437
437
|
bytes_copied: bytesCopied.toString(),
|
|
438
438
|
errors,
|
|
439
|
-
validity_not_freshness:
|
|
440
|
-
keystore_still_required:
|
|
439
|
+
validity_not_freshness: VAULT_MIRROR_VALIDITY_NOT_FRESHNESS_STATEMENT,
|
|
440
|
+
keystore_still_required: VAULT_MIRROR_KEYSTORE_STILL_REQUIRED_STATEMENT,
|
|
441
441
|
};
|
|
442
442
|
}
|
|
443
443
|
function openBackendFromConfig(keystore, repoId) {
|
|
444
444
|
const config = readMirrorConfig(keystore, repoId);
|
|
445
445
|
if (!config)
|
|
446
|
-
fail("
|
|
446
|
+
fail("VAULT_MIRROR_NOT_CONFIGURED", `no mirror is configured for ${repoId}`, "opening vault mirror", { repo_id: repoId }, [{ action: "run402 repos mirror <destination>" }]);
|
|
447
447
|
if (config.destination.kind === "s3" && config.credential) {
|
|
448
448
|
// Fail fast on a missing/misconfigured credential BEFORE any network call,
|
|
449
449
|
// so a sync's error names the credential problem instead of a confusing
|
|
450
450
|
// downstream 403.
|
|
451
451
|
resolveMirrorCredentials(config.credential);
|
|
452
452
|
}
|
|
453
|
-
return
|
|
453
|
+
return openVaultMirrorBackend(config.destination, repoId, config.credential);
|
|
454
454
|
}
|
|
455
455
|
/**
|
|
456
456
|
* Fires after an ordinary vault push/deploy produces a new generation. NEVER
|
|
@@ -470,7 +470,7 @@ function openBackendFromConfig(keystore, repoId) {
|
|
|
470
470
|
export async function mirrorPushForGeneration(client, repoId, options = {}) {
|
|
471
471
|
let keystore;
|
|
472
472
|
try {
|
|
473
|
-
keystore = options.keystore ??
|
|
473
|
+
keystore = options.keystore ?? VaultKeystore.open();
|
|
474
474
|
if (!options.backend && !readMirrorConfig(keystore, repoId)) {
|
|
475
475
|
return { attempted: false, outcome: "skipped_no_mirror" };
|
|
476
476
|
}
|
|
@@ -486,10 +486,10 @@ export async function mirrorPushForGeneration(client, repoId, options = {}) {
|
|
|
486
486
|
return { attempted: true, outcome: "failed", error: e instanceof Error ? e.message : String(e) };
|
|
487
487
|
}
|
|
488
488
|
}
|
|
489
|
-
// ─── BYO chain-copy dual-write (
|
|
489
|
+
// ─── BYO chain-copy dual-write (vault-byo-primary-bucket task 3.3) ─────────
|
|
490
490
|
/**
|
|
491
|
-
* The SAME six payload kinds the gateway's `
|
|
492
|
-
* names (`services/
|
|
491
|
+
* The SAME six payload kinds the gateway's `VAULT_BYO_PAYLOAD_KINDS`
|
|
492
|
+
* names (`services/vault/upload-sessions.ts`) — client-written directly
|
|
493
493
|
* to the BYO destination at push time (task 3.2), so the chain-copy below
|
|
494
494
|
* MUST skip them (re-copying them here would try to READ them back from
|
|
495
495
|
* run402, which never held them for a BYO vault, and would 404). Every
|
|
@@ -503,7 +503,7 @@ export async function mirrorPushForGeneration(client, repoId, options = {}) {
|
|
|
503
503
|
* D1/D9) and is exactly what this dual-write copies, so the customer bucket
|
|
504
504
|
* alone becomes a complete `r402s-recover` source.
|
|
505
505
|
*/
|
|
506
|
-
const
|
|
506
|
+
const VAULT_BYO_PAYLOAD_OBJECT_KINDS = new Set([
|
|
507
507
|
"wal_pack",
|
|
508
508
|
"ref_state",
|
|
509
509
|
"retention_roots",
|
|
@@ -514,13 +514,13 @@ const GITVAULT_BYO_PAYLOAD_OBJECT_KINDS = new Set([
|
|
|
514
514
|
function openByoBackendFromConfig(keystore, repoId) {
|
|
515
515
|
const config = readByoConfig(keystore, repoId);
|
|
516
516
|
if (!config)
|
|
517
|
-
fail("
|
|
517
|
+
fail("VAULT_BYO_NOT_CONFIGURED", `no local BYO write config for ${repoId}`, "opening the vault BYO destination", { repo_id: repoId }, [{ action: "run402 repos create --byo <destination> allocated this vault; this machine needs the same destination + credential configured locally to write or dual-push its chain" }]);
|
|
518
518
|
if (config.destination.kind === "s3" && config.credential) {
|
|
519
519
|
// Fail fast on a missing/misconfigured credential BEFORE any network
|
|
520
520
|
// call, same discipline as `openBackendFromConfig` above.
|
|
521
521
|
resolveMirrorCredentials(config.credential);
|
|
522
522
|
}
|
|
523
|
-
return
|
|
523
|
+
return openVaultMirrorBackend(config.destination, repoId, config.credential);
|
|
524
524
|
}
|
|
525
525
|
/**
|
|
526
526
|
* `plan.objects`, restricted to the chain-adjacent (NEVER payload) kinds —
|
|
@@ -530,7 +530,7 @@ function openByoBackendFromConfig(keystore, repoId) {
|
|
|
530
530
|
*/
|
|
531
531
|
function chainOnlyEntries(entries) {
|
|
532
532
|
const plan = planMirrorWrite(entries);
|
|
533
|
-
return [...plan.objects.filter((e) => !
|
|
533
|
+
return [...plan.objects.filter((e) => !VAULT_BYO_PAYLOAD_OBJECT_KINDS.has(e.object_kind)), ...plan.admissionsAndHeads];
|
|
534
534
|
}
|
|
535
535
|
/**
|
|
536
536
|
* `run402 repos create --byo`'s every-push dual-write (task 3.3, design
|
|
@@ -544,11 +544,11 @@ function chainOnlyEntries(entries) {
|
|
|
544
544
|
* not a second ordering to prove.
|
|
545
545
|
*/
|
|
546
546
|
export async function byoChainCopySync(client, repoId, options = {}) {
|
|
547
|
-
const keystore = options.keystore ??
|
|
547
|
+
const keystore = options.keystore ?? VaultKeystore.open();
|
|
548
548
|
const backend = options.backend ?? openByoBackendFromConfig(keystore, repoId);
|
|
549
549
|
const destination = options.backend ? backend.describe() : formatMirrorDestination(readByoConfig(keystore, repoId).destination);
|
|
550
550
|
const ownFingerprint = localEncryptionFingerprint(keystore);
|
|
551
|
-
const entries = await
|
|
551
|
+
const entries = await listVaultObjectsAll(client, repoId);
|
|
552
552
|
const ordered = chainOnlyEntries(entries);
|
|
553
553
|
let copied = 0;
|
|
554
554
|
let already = 0;
|
|
@@ -586,8 +586,8 @@ export async function byoChainCopySync(client, repoId, options = {}) {
|
|
|
586
586
|
objects_failed: failed,
|
|
587
587
|
bytes_copied: bytesCopied.toString(),
|
|
588
588
|
errors,
|
|
589
|
-
validity_not_freshness:
|
|
590
|
-
keystore_still_required:
|
|
589
|
+
validity_not_freshness: VAULT_MIRROR_VALIDITY_NOT_FRESHNESS_STATEMENT,
|
|
590
|
+
keystore_still_required: VAULT_MIRROR_KEYSTORE_STILL_REQUIRED_STATEMENT,
|
|
591
591
|
};
|
|
592
592
|
}
|
|
593
593
|
/**
|
|
@@ -600,7 +600,7 @@ export async function byoChainCopySync(client, repoId, options = {}) {
|
|
|
600
600
|
export async function byoChainCopyPushForGeneration(client, repoId, options = {}) {
|
|
601
601
|
let keystore;
|
|
602
602
|
try {
|
|
603
|
-
keystore = options.keystore ??
|
|
603
|
+
keystore = options.keystore ?? VaultKeystore.open();
|
|
604
604
|
if (!options.backend && !readByoConfig(keystore, repoId)) {
|
|
605
605
|
return { attempted: false, outcome: "skipped_no_mirror" };
|
|
606
606
|
}
|
|
@@ -624,14 +624,14 @@ export async function byoChainCopyPushForGeneration(client, repoId, options = {}
|
|
|
624
624
|
* direct write, chain via this file's dual-write above) — against the
|
|
625
625
|
* destination, by key + size. Never throws on an absence; it REPORTS every
|
|
626
626
|
* missing object by name so the caller (`repos fsck`) can refuse with
|
|
627
|
-
* `
|
|
627
|
+
* `VAULT_BYO_OBJECT_MISSING` naming exactly what the chain says should
|
|
628
628
|
* exist and does not.
|
|
629
629
|
*/
|
|
630
630
|
export async function verifyByoObjectsPresent(client, repoId, options = {}) {
|
|
631
|
-
const keystore = options.keystore ??
|
|
631
|
+
const keystore = options.keystore ?? VaultKeystore.open();
|
|
632
632
|
const backend = options.backend ?? openByoBackendFromConfig(keystore, repoId);
|
|
633
633
|
const destination = options.backend ? backend.describe() : formatMirrorDestination(readByoConfig(keystore, repoId).destination);
|
|
634
|
-
const entries = await
|
|
634
|
+
const entries = await listVaultObjectsAll(client, repoId);
|
|
635
635
|
const missing = [];
|
|
636
636
|
for (const entry of entries) {
|
|
637
637
|
const existing = await backend.head(entry.key);
|
|
@@ -640,4 +640,4 @@ export async function verifyByoObjectsPresent(client, repoId, options = {}) {
|
|
|
640
640
|
}
|
|
641
641
|
return { repo_id: repoId, destination, checked: entries.length, missing };
|
|
642
642
|
}
|
|
643
|
-
//# sourceMappingURL=
|
|
643
|
+
//# sourceMappingURL=vault-mirror.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-mirror.js","sourceRoot":"","sources":["../../src/node/vault-mirror.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
export declare const
|
|
1
|
+
import { type VaultAeadBackend, type VaultHashBackend } from "../namespaces/vault.crypto.js";
|
|
2
|
+
export declare const nodeVaultAeadBackend: VaultAeadBackend;
|
|
3
3
|
/**
|
|
4
4
|
* Install the native backend when this OpenSSL has the cipher. Returns whether
|
|
5
5
|
* it took, so a test can assert the guard rather than infer it. Any failure
|
|
6
6
|
* leaves the `@noble` default untouched — the native path is an optimization,
|
|
7
7
|
* never a correctness dependency.
|
|
8
8
|
*/
|
|
9
|
-
export declare function
|
|
9
|
+
export declare function installNodeVaultAeadBackend(): boolean;
|
|
10
10
|
/**
|
|
11
|
-
* The Node-native protocol-hash backend (
|
|
11
|
+
* The Node-native protocol-hash backend (vault-native-hash). Same seam
|
|
12
12
|
* pattern, second slot: `sha256Hex` is the chokepoint every protocol hash
|
|
13
13
|
* flows through, and on the receipt-verified open/seal paths it hashes whole
|
|
14
14
|
* multi-megabyte frames on pure-JS `@noble/hashes` — the measured leftover
|
|
15
|
-
* after the AEAD moved to OpenSSL. `createHash` is sync (the
|
|
15
|
+
* after the AEAD moved to OpenSSL. `createHash` is sync (the vault crypto
|
|
16
16
|
* surface is sync public API), byte-compatible, and already hashes packs in
|
|
17
|
-
* `
|
|
17
|
+
* `vault-recover.ts`/`vault-mirror.ts`.
|
|
18
18
|
*/
|
|
19
|
-
export declare const
|
|
19
|
+
export declare const nodeVaultHashBackend: VaultHashBackend;
|
|
20
20
|
/**
|
|
21
|
-
* Install the native hash backend after a live probe (
|
|
21
|
+
* Install the native hash backend after a live probe (vault-native-hash
|
|
22
22
|
* design D3): a backend that does not reproduce the known digest — or throws —
|
|
23
23
|
* registers nothing and the `@noble` default keeps serving. The `backend`
|
|
24
24
|
* parameter exists only so the byte-equality suite can drive the refusing
|
|
25
25
|
* branch; production callers pass nothing.
|
|
26
26
|
*/
|
|
27
|
-
export declare function
|
|
28
|
-
//# sourceMappingURL=
|
|
27
|
+
export declare function installNodeVaultHashBackend(backend?: VaultHashBackend): boolean;
|
|
28
|
+
//# sourceMappingURL=vault-native-crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-native-crypto.d.ts","sourceRoot":"","sources":["../../src/node/vault-native-crypto.ts"],"names":[],"mappings":"AAgCA,OAAO,EAA8C,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAyCzI,eAAO,MAAM,oBAAoB,EAAE,gBAoClC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,2BAA2B,IAAI,OAAO,CAcrD;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,gBAMlC,CAAC;AAQF;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,GAAE,gBAAuC,GAAG,OAAO,CAWrG"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The Node-native bulk-AEAD backend (
|
|
2
|
+
* The Node-native bulk-AEAD backend (vault-native-bulk-crypto, design
|
|
3
3
|
* D1/D2/D4).
|
|
4
4
|
*
|
|
5
5
|
* Every WAL pack, checkpoint pack, `ref_state` and `retention_roots` frame
|
|
@@ -26,11 +26,11 @@
|
|
|
26
26
|
* try/caught, so an OpenSSL build without `chacha20-poly1305` — or any
|
|
27
27
|
* construction error — silently leaves the `@noble` path in place. Correct,
|
|
28
28
|
* just slower. `open` returns `null` on tag failure; the core renders the
|
|
29
|
-
* SAME `
|
|
29
|
+
* SAME `VAULT_AEAD_AUTH_FAILURE` it always did.
|
|
30
30
|
*/
|
|
31
31
|
import { createCipheriv, createDecipheriv, createHash, getCiphers } from "node:crypto";
|
|
32
32
|
import { hchacha } from "@noble/ciphers/chacha.js";
|
|
33
|
-
import {
|
|
33
|
+
import { _setVaultAeadBackend, _setVaultHashBackend } from "../namespaces/vault.crypto.js";
|
|
34
34
|
const NODE_CIPHER = "chacha20-poly1305";
|
|
35
35
|
const TAG_BYTES = 16;
|
|
36
36
|
/** ChaCha's `"expand 32-byte k"` constant as little-endian u32 words. */
|
|
@@ -67,7 +67,7 @@ function ietfIv(nonce24) {
|
|
|
67
67
|
iv.set(nonce24.subarray(16, 24), 4);
|
|
68
68
|
return iv;
|
|
69
69
|
}
|
|
70
|
-
export const
|
|
70
|
+
export const nodeVaultAeadBackend = {
|
|
71
71
|
seal(key32, nonce24, aad, plaintext) {
|
|
72
72
|
const cipher = createCipheriv(NODE_CIPHER, xchachaSubkey(key32, nonce24), ietfIv(nonce24), { authTagLength: TAG_BYTES });
|
|
73
73
|
// OpenSSL's ChaCha20-Poly1305 needs the plaintext length up front when an
|
|
@@ -113,18 +113,18 @@ export const nodeGitvaultAeadBackend = {
|
|
|
113
113
|
* leaves the `@noble` default untouched — the native path is an optimization,
|
|
114
114
|
* never a correctness dependency.
|
|
115
115
|
*/
|
|
116
|
-
export function
|
|
116
|
+
export function installNodeVaultAeadBackend() {
|
|
117
117
|
try {
|
|
118
118
|
if (!getCiphers().includes(NODE_CIPHER))
|
|
119
119
|
return false;
|
|
120
120
|
// Prove the construction works on THIS build before letting the bulk path
|
|
121
121
|
// depend on it: a cipher that is listed but rejects our parameters must
|
|
122
122
|
// not become a runtime failure on the first real frame.
|
|
123
|
-
const probe =
|
|
124
|
-
const opened =
|
|
123
|
+
const probe = nodeVaultAeadBackend.seal(new Uint8Array(32), new Uint8Array(24), new Uint8Array([1]), new Uint8Array([2, 3]));
|
|
124
|
+
const opened = nodeVaultAeadBackend.open(new Uint8Array(32), new Uint8Array(24), new Uint8Array([1]), probe);
|
|
125
125
|
if (!opened || opened.length !== 2 || opened[0] !== 2 || opened[1] !== 3)
|
|
126
126
|
return false;
|
|
127
|
-
|
|
127
|
+
_setVaultAeadBackend(nodeVaultAeadBackend);
|
|
128
128
|
return true;
|
|
129
129
|
}
|
|
130
130
|
catch {
|
|
@@ -132,15 +132,15 @@ export function installNodeGitvaultAeadBackend() {
|
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
134
|
/**
|
|
135
|
-
* The Node-native protocol-hash backend (
|
|
135
|
+
* The Node-native protocol-hash backend (vault-native-hash). Same seam
|
|
136
136
|
* pattern, second slot: `sha256Hex` is the chokepoint every protocol hash
|
|
137
137
|
* flows through, and on the receipt-verified open/seal paths it hashes whole
|
|
138
138
|
* multi-megabyte frames on pure-JS `@noble/hashes` — the measured leftover
|
|
139
|
-
* after the AEAD moved to OpenSSL. `createHash` is sync (the
|
|
139
|
+
* after the AEAD moved to OpenSSL. `createHash` is sync (the vault crypto
|
|
140
140
|
* surface is sync public API), byte-compatible, and already hashes packs in
|
|
141
|
-
* `
|
|
141
|
+
* `vault-recover.ts`/`vault-mirror.ts`.
|
|
142
142
|
*/
|
|
143
|
-
export const
|
|
143
|
+
export const nodeVaultHashBackend = {
|
|
144
144
|
sha256(bytes) {
|
|
145
145
|
// A digest Buffer can live in Node's shared pool — respect its offset.
|
|
146
146
|
const d = createHash("sha256").update(bytes).digest();
|
|
@@ -153,13 +153,13 @@ export const nodeGitvaultHashBackend = {
|
|
|
153
153
|
*/
|
|
154
154
|
const SHA256_EMPTY_HEX = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";
|
|
155
155
|
/**
|
|
156
|
-
* Install the native hash backend after a live probe (
|
|
156
|
+
* Install the native hash backend after a live probe (vault-native-hash
|
|
157
157
|
* design D3): a backend that does not reproduce the known digest — or throws —
|
|
158
158
|
* registers nothing and the `@noble` default keeps serving. The `backend`
|
|
159
159
|
* parameter exists only so the byte-equality suite can drive the refusing
|
|
160
160
|
* branch; production callers pass nothing.
|
|
161
161
|
*/
|
|
162
|
-
export function
|
|
162
|
+
export function installNodeVaultHashBackend(backend = nodeVaultHashBackend) {
|
|
163
163
|
try {
|
|
164
164
|
const probe = backend.sha256(new Uint8Array(0));
|
|
165
165
|
let hex = "";
|
|
@@ -167,11 +167,11 @@ export function installNodeGitvaultHashBackend(backend = nodeGitvaultHashBackend
|
|
|
167
167
|
hex += b.toString(16).padStart(2, "0");
|
|
168
168
|
if (hex !== SHA256_EMPTY_HEX)
|
|
169
169
|
return false;
|
|
170
|
-
|
|
170
|
+
_setVaultHashBackend(backend);
|
|
171
171
|
return true;
|
|
172
172
|
}
|
|
173
173
|
catch {
|
|
174
174
|
return false;
|
|
175
175
|
}
|
|
176
176
|
}
|
|
177
|
-
//# sourceMappingURL=
|
|
177
|
+
//# sourceMappingURL=vault-native-crypto.js.map
|