@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,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* vault — the principal keystore (protocol rev 41 §5.1; task 5.2).
|
|
3
3
|
*
|
|
4
4
|
* Layout (under the active profile's config dir, beside the project-key cache
|
|
5
5
|
* `core/src/keystore.ts` manages — `RUN402_CONFIG_DIR` / `RUN402_WALLET` aware):
|
|
6
6
|
*
|
|
7
|
-
* <config>/
|
|
7
|
+
* <config>/vault/
|
|
8
8
|
* identity.json Ed25519 seed + X25519 private key (0600)
|
|
9
9
|
* repos/<repo_id>.json K_repo, trust pin, dual pins, last ref transaction (0600)
|
|
10
10
|
* repos/<repo_id>.lock/ per-repo lock (mkdir-atomic, 0700)
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* is a named finding, never silent.
|
|
20
20
|
*
|
|
21
21
|
* Transitions (protocol §5.1 partial-loss table) are DERIVED by
|
|
22
|
-
* {@link
|
|
22
|
+
* {@link VaultKeystore.assess} and acted on by explicit methods — the
|
|
23
23
|
* keystore never guesses:
|
|
24
24
|
* - repo file lost + identity intact → `restoreRepoFromEnvelope` (own envelope)
|
|
25
25
|
* - signing key lost, K_repo held → `read_only` (clear report)
|
|
@@ -30,7 +30,7 @@ import { closeSync, constants, existsSync, fsyncSync, lstatSync, mkdirSync, open
|
|
|
30
30
|
import { dirname, join } from "node:path";
|
|
31
31
|
import { getConfigDir } from "../../core-dist/config.js";
|
|
32
32
|
import { LocalError } from "../errors.js";
|
|
33
|
-
import {
|
|
33
|
+
import { VAULT_EK_RE, VAULT_SRC_RE, VAULT_TERMINAL_LOSS_DOCTOR_TEXT, VAULT_TERMINAL_LOSS_STATEMENT, VAULT_VK_RE, bytesToHex, checkGenesisKeyBindings, checkRecoveryReceipt, ekFingerprint, fromBase64url, formatVaultTimestamp, generateEncryptionKeypair, generateSigningKeypair, hexToBytes, openKeyEnvelope, storedBytesSha256, toBase64url, verifyVaultObject, vkFingerprint, } from "../namespaces/vault.crypto.js";
|
|
34
34
|
function fail(code, message, context, details) {
|
|
35
35
|
throw new LocalError(message, context, { code, details });
|
|
36
36
|
}
|
|
@@ -38,10 +38,10 @@ const O_NOFOLLOW = constants.O_NOFOLLOW ?? 0;
|
|
|
38
38
|
const DIR_MODE = 0o700;
|
|
39
39
|
const FILE_MODE = 0o600;
|
|
40
40
|
/** The local object cache's recency window (design D3: "genesis + newest N=8 heads + newest carriers"). */
|
|
41
|
-
export const
|
|
42
|
-
/**
|
|
43
|
-
export const
|
|
44
|
-
/** Bare hex16 generation comparison for cache eviction — deliberately NOT `generationToBigInt` (
|
|
41
|
+
export const VAULT_OBJECT_CACHE_WINDOW = 8;
|
|
42
|
+
/** vault-object-host-predial (design D1): the max persisted object-store origins per repo — small on purpose, this is a predial hint, not an inventory. */
|
|
43
|
+
export const VAULT_OBJECT_STORE_ORIGINS_CAP = 4;
|
|
44
|
+
/** Bare hex16 generation comparison for cache eviction — deliberately NOT `generationToBigInt` (vault-publication.ts), which this lower-level module must not import (publication already imports FROM here). Malformed input sorts as "evict" rather than throwing: a corrupt cache entry should never block eviction of everything else. */
|
|
45
45
|
function genToBigInt(generation) {
|
|
46
46
|
try {
|
|
47
47
|
return /^[0-9a-f]{16}$/.test(generation) ? BigInt(`0x${generation}`) : -1n;
|
|
@@ -50,9 +50,46 @@ function genToBigInt(generation) {
|
|
|
50
50
|
return -1n;
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
/**
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
/** The keystore directory's earlier name under the same config dir. */
|
|
54
|
+
const FORMER_KEYSTORE_DIRNAME = "gitvault";
|
|
55
|
+
/**
|
|
56
|
+
* Default keystore root: `<active profile config dir>/vault`.
|
|
57
|
+
*
|
|
58
|
+
* This is the one place the keystore path is first resolved, so it is also
|
|
59
|
+
* where a keystore still at `<config>/gitvault` moves to `<config>/vault`:
|
|
60
|
+
* one same-directory `rename`, which is atomic, and only when `vault` does
|
|
61
|
+
* not exist yet. Nothing reads the earlier path after that. A move another
|
|
62
|
+
* process already made is not an error; any other refusal throws
|
|
63
|
+
* `VAULT_KEYSTORE_MOVE_FAILED` naming both paths, because answering with an
|
|
64
|
+
* empty `vault` directory would make a live keystore look lost.
|
|
65
|
+
*/
|
|
66
|
+
export function getVaultKeystoreRoot() {
|
|
67
|
+
const configDir = getConfigDir();
|
|
68
|
+
const root = join(configDir, "vault");
|
|
69
|
+
moveFormerKeystoreDir(join(configDir, FORMER_KEYSTORE_DIRNAME), root);
|
|
70
|
+
return root;
|
|
71
|
+
}
|
|
72
|
+
function moveFormerKeystoreDir(former, root) {
|
|
73
|
+
if (existsSync(root))
|
|
74
|
+
return;
|
|
75
|
+
let stat;
|
|
76
|
+
try {
|
|
77
|
+
stat = lstatSync(former);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return; // nothing to move
|
|
81
|
+
}
|
|
82
|
+
if (!stat.isDirectory() && !stat.isSymbolicLink())
|
|
83
|
+
return;
|
|
84
|
+
try {
|
|
85
|
+
renameSync(former, root);
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
const code = e.code;
|
|
89
|
+
if (existsSync(root) || code === "ENOENT")
|
|
90
|
+
return; // another process moved it first
|
|
91
|
+
throw new LocalError(`could not move the vault keystore from ${former} to ${root}: ${e instanceof Error ? e.message : String(e)}`, "resolving the vault keystore", { code: "VAULT_KEYSTORE_MOVE_FAILED", details: { from: former, to: root }, cause: e });
|
|
92
|
+
}
|
|
56
93
|
}
|
|
57
94
|
function mkdir0700(path) {
|
|
58
95
|
mkdirSync(path, { recursive: true, mode: DIR_MODE });
|
|
@@ -79,7 +116,7 @@ export function writeFileAtomic0600(path, text) {
|
|
|
79
116
|
const dir = dirname(path);
|
|
80
117
|
mkdir0700(dir);
|
|
81
118
|
if (existsSync(path) && lstatSync(path).isSymbolicLink()) {
|
|
82
|
-
fail("
|
|
119
|
+
fail("VAULT_KEYSTORE_SYMLINK", `refusing to write through a symlink: ${path}`, "writing vault keystore file", { path });
|
|
83
120
|
}
|
|
84
121
|
const tmp = join(dir, `.${String(process.pid)}.${bytesToHex(globalThis.crypto.getRandomValues(new Uint8Array(6)))}.tmp`);
|
|
85
122
|
const fd = openSync(tmp, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | O_NOFOLLOW, FILE_MODE);
|
|
@@ -103,7 +140,7 @@ export function readFileNoFollow(path) {
|
|
|
103
140
|
return null;
|
|
104
141
|
}
|
|
105
142
|
if (st.isSymbolicLink()) {
|
|
106
|
-
fail("
|
|
143
|
+
fail("VAULT_KEYSTORE_SYMLINK", `refusing to read through a symlink: ${path}`, "reading vault keystore file", { path });
|
|
107
144
|
}
|
|
108
145
|
const fd = openSync(path, constants.O_RDONLY | O_NOFOLLOW);
|
|
109
146
|
try {
|
|
@@ -135,24 +172,24 @@ function auditPath(path, expectDir) {
|
|
|
135
172
|
return findings;
|
|
136
173
|
}
|
|
137
174
|
// ─── The keystore ────────────────────────────────────────────────────────────
|
|
138
|
-
export class
|
|
175
|
+
export class VaultKeystore {
|
|
139
176
|
rootDir;
|
|
140
177
|
now;
|
|
141
178
|
strictPermissions;
|
|
142
179
|
constructor(options = {}) {
|
|
143
|
-
this.rootDir = options.rootDir ??
|
|
180
|
+
this.rootDir = options.rootDir ?? getVaultKeystoreRoot();
|
|
144
181
|
this.now = options.now ?? (() => new Date());
|
|
145
182
|
this.strictPermissions = options.strictPermissions ?? false;
|
|
146
183
|
}
|
|
147
184
|
/** Open (creating the directory skeleton) and run the permission audit. */
|
|
148
185
|
static open(options = {}) {
|
|
149
|
-
const ks = new
|
|
186
|
+
const ks = new VaultKeystore(options);
|
|
150
187
|
for (const dir of [ks.rootDir, ks.reposDir, ks.receiptsDir, ks.journalDir])
|
|
151
188
|
mkdir0700(dir);
|
|
152
189
|
const findings = ks.auditPermissions();
|
|
153
190
|
ks.audit("keystore_opened", undefined, { findings: findings.length });
|
|
154
191
|
if (findings.length > 0 && ks.strictPermissions) {
|
|
155
|
-
fail("
|
|
192
|
+
fail("VAULT_KEYSTORE_PERMISSIONS", "vault keystore permission audit failed", "opening vault keystore", { findings });
|
|
156
193
|
}
|
|
157
194
|
return ks;
|
|
158
195
|
}
|
|
@@ -162,13 +199,13 @@ export class GitvaultKeystore {
|
|
|
162
199
|
get journalDir() { return join(this.rootDir, "journal"); }
|
|
163
200
|
get auditLogPath() { return join(this.rootDir, "audit.log"); }
|
|
164
201
|
repoPath(repoId) {
|
|
165
|
-
if (!
|
|
166
|
-
fail("
|
|
202
|
+
if (!VAULT_SRC_RE.test(repoId))
|
|
203
|
+
fail("VAULT_BAD_REPO_ID", `not a src_ id: ${repoId}`, "resolving vault repo path");
|
|
167
204
|
return join(this.reposDir, `${repoId}.json`);
|
|
168
205
|
}
|
|
169
206
|
recoveryReceiptPath(repoId) {
|
|
170
|
-
if (!
|
|
171
|
-
fail("
|
|
207
|
+
if (!VAULT_SRC_RE.test(repoId))
|
|
208
|
+
fail("VAULT_BAD_REPO_ID", `not a src_ id: ${repoId}`, "resolving vault receipt path");
|
|
172
209
|
return join(this.receiptsDir, `${repoId}.recovery_receipt.json`);
|
|
173
210
|
}
|
|
174
211
|
// ── permission audit ──
|
|
@@ -201,10 +238,10 @@ export class GitvaultKeystore {
|
|
|
201
238
|
// ── audit log ──
|
|
202
239
|
/** Append one JSON line to `audit.log` (0600, created no-follow). */
|
|
203
240
|
audit(event, repoId, details) {
|
|
204
|
-
const entry = { at:
|
|
241
|
+
const entry = { at: formatVaultTimestamp(this.now()), event, ...(repoId ? { repo_id: repoId } : {}), ...(details ? { details } : {}) };
|
|
205
242
|
mkdir0700(this.rootDir);
|
|
206
243
|
if (isSymlink(this.auditLogPath)) {
|
|
207
|
-
fail("
|
|
244
|
+
fail("VAULT_KEYSTORE_SYMLINK", "refusing to append through a symlinked audit.log", "appending vault audit log");
|
|
208
245
|
}
|
|
209
246
|
const fd = openSync(this.auditLogPath, constants.O_WRONLY | constants.O_CREAT | constants.O_APPEND | O_NOFOLLOW, FILE_MODE);
|
|
210
247
|
try {
|
|
@@ -229,7 +266,7 @@ export class GitvaultKeystore {
|
|
|
229
266
|
return null;
|
|
230
267
|
const parsed = JSON.parse(text);
|
|
231
268
|
if (parsed.version !== 1 || typeof parsed.signing_pubkey !== "string" || typeof parsed.encryption_pubkey !== "string") {
|
|
232
|
-
fail("
|
|
269
|
+
fail("VAULT_KEYSTORE_CORRUPT", "identity.json is not a version-1 vault identity", "reading vault identity");
|
|
233
270
|
}
|
|
234
271
|
return parsed;
|
|
235
272
|
}
|
|
@@ -248,10 +285,10 @@ export class GitvaultKeystore {
|
|
|
248
285
|
encryption_private_key_hex: bytesToHex(encryption.private_key),
|
|
249
286
|
encryption_pubkey: toBase64url(encryption.public_key),
|
|
250
287
|
encryption_fingerprint: ekFingerprint(encryption.public_key),
|
|
251
|
-
created_at:
|
|
288
|
+
created_at: formatVaultTimestamp(this.now()),
|
|
252
289
|
};
|
|
253
290
|
if (existsSync(this.identityPath)) {
|
|
254
|
-
fail("
|
|
291
|
+
fail("VAULT_KEYSTORE_CONFLICT", "identity.json appeared concurrently; refusing to overwrite", "creating vault identity");
|
|
255
292
|
}
|
|
256
293
|
writeFileAtomic0600(this.identityPath, JSON.stringify(identity, null, 2));
|
|
257
294
|
this.audit("identity_created", undefined, { signing_fingerprint: identity.signing_fingerprint, encryption_fingerprint: identity.encryption_fingerprint });
|
|
@@ -267,7 +304,7 @@ export class GitvaultKeystore {
|
|
|
267
304
|
if (identity.enrolled_principal_id === principalId)
|
|
268
305
|
return;
|
|
269
306
|
if (identity.enrolled_principal_id) {
|
|
270
|
-
fail("
|
|
307
|
+
fail("VAULT_IDENTITY_PROFILE_MISMATCH", `this keystore identity enrolled as principal ${identity.enrolled_principal_id}, not ${principalId} — refusing cross-profile reuse`, "binding vault identity", { enrolled_principal_id: identity.enrolled_principal_id, principal_id: principalId });
|
|
271
308
|
}
|
|
272
309
|
writeFileAtomic0600(this.identityPath, JSON.stringify({ ...identity, enrolled_principal_id: principalId }, null, 2));
|
|
273
310
|
this.audit("identity_principal_bound", undefined, { principal_id: principalId });
|
|
@@ -278,7 +315,7 @@ export class GitvaultKeystore {
|
|
|
278
315
|
return null;
|
|
279
316
|
const kp = generateSigningKeypair(hexToBytes(identity.signing_seed_hex));
|
|
280
317
|
if (vkFingerprint(kp.public_key) !== identity.signing_fingerprint) {
|
|
281
|
-
fail("
|
|
318
|
+
fail("VAULT_KEYSTORE_CORRUPT", "identity signing seed does not derive the recorded fingerprint", "loading vault signing key");
|
|
282
319
|
}
|
|
283
320
|
return kp;
|
|
284
321
|
}
|
|
@@ -288,14 +325,14 @@ export class GitvaultKeystore {
|
|
|
288
325
|
return null;
|
|
289
326
|
const kp = generateEncryptionKeypair(hexToBytes(identity.encryption_private_key_hex));
|
|
290
327
|
if (ekFingerprint(kp.public_key) !== identity.encryption_fingerprint) {
|
|
291
|
-
fail("
|
|
328
|
+
fail("VAULT_KEYSTORE_CORRUPT", "identity encryption key does not derive the recorded fingerprint", "loading vault encryption key");
|
|
292
329
|
}
|
|
293
330
|
return kp;
|
|
294
331
|
}
|
|
295
332
|
requireIdentity() {
|
|
296
333
|
const id = this.readIdentity();
|
|
297
334
|
if (!id)
|
|
298
|
-
fail("VAULT_UNRECOVERABLE",
|
|
335
|
+
fail("VAULT_UNRECOVERABLE", VAULT_TERMINAL_LOSS_DOCTOR_TEXT, "loading vault identity", { statement: VAULT_TERMINAL_LOSS_STATEMENT });
|
|
299
336
|
return id;
|
|
300
337
|
}
|
|
301
338
|
// ── repo files ──
|
|
@@ -305,19 +342,19 @@ export class GitvaultKeystore {
|
|
|
305
342
|
return null;
|
|
306
343
|
const parsed = JSON.parse(text);
|
|
307
344
|
if (parsed.version !== 1 || parsed.repo_id !== repoId || typeof parsed.k_repo_hex !== "string") {
|
|
308
|
-
fail("
|
|
345
|
+
fail("VAULT_KEYSTORE_CORRUPT", `repos/${repoId}.json is not a version-1 vault repo file`, "reading vault repo file", { repo_id: repoId });
|
|
309
346
|
}
|
|
310
347
|
return parsed;
|
|
311
348
|
}
|
|
312
349
|
listRepoIds() {
|
|
313
350
|
if (!existsSync(this.reposDir))
|
|
314
351
|
return [];
|
|
315
|
-
return readdirSync(this.reposDir).filter((n) => n.endsWith(".json")).map((n) => n.slice(0, -5)).filter((id) =>
|
|
352
|
+
return readdirSync(this.reposDir).filter((n) => n.endsWith(".json")).map((n) => n.slice(0, -5)).filter((id) => VAULT_SRC_RE.test(id)).sort();
|
|
316
353
|
}
|
|
317
354
|
/**
|
|
318
|
-
*
|
|
319
|
-
* keystore's project→repo lookup that lets {@link
|
|
320
|
-
* (`
|
|
355
|
+
* vault-offline-clone-resolve (design D1/D2/D6, task 1.1): the
|
|
356
|
+
* keystore's project→repo lookup that lets {@link resolveVaultAddress}
|
|
357
|
+
* (`vault-address.ts`) answer an id-form address WITHOUT the network
|
|
321
358
|
* `findVaultByProject` round trip. D2's completeness argument: decrypting
|
|
322
359
|
* anything requires exactly this repo file (`k_repo_hex`), so "this
|
|
323
360
|
* keystore holds a matching file" is exactly the set of clones that can
|
|
@@ -335,7 +372,7 @@ export class GitvaultKeystore {
|
|
|
335
372
|
* old `repo_id` on THIS machine. D3: the most-recently-modified file (by
|
|
336
373
|
* filesystem mtime — D6 rules out a maintained on-disk index for v1) wins;
|
|
337
374
|
* a wrong pick is indistinguishable from an ordinary stale pin and heals
|
|
338
|
-
* through the same {@link
|
|
375
|
+
* through the same {@link recoverStaleVaultPin} first-use-refusal path.
|
|
339
376
|
*
|
|
340
377
|
* Cheap by construction (D6): one directory listing plus one JSON read per
|
|
341
378
|
* candidate — no maintained project→repo index. NEVER throws: a corrupt,
|
|
@@ -373,7 +410,7 @@ export class GitvaultKeystore {
|
|
|
373
410
|
}
|
|
374
411
|
/** Save (create or replace) a repo file under the per-repo lock. */
|
|
375
412
|
saveRepo(repo) {
|
|
376
|
-
const full = { version: 1, ...repo, updated_at:
|
|
413
|
+
const full = { version: 1, ...repo, updated_at: formatVaultTimestamp(this.now()) };
|
|
377
414
|
this.withRepoLock(repo.repo_id, () => {
|
|
378
415
|
writeFileAtomic0600(this.repoPath(repo.repo_id), JSON.stringify(full, null, 2));
|
|
379
416
|
});
|
|
@@ -385,18 +422,18 @@ export class GitvaultKeystore {
|
|
|
385
422
|
return this.withRepoLock(repoId, () => {
|
|
386
423
|
const existing = this.readRepo(repoId);
|
|
387
424
|
if (!existing)
|
|
388
|
-
fail("
|
|
389
|
-
const full = { ...existing, ...patch, updated_at:
|
|
425
|
+
fail("VAULT_REPO_STATE_MISSING", `no repo file for ${repoId}`, "updating vault repo file", { repo_id: repoId });
|
|
426
|
+
const full = { ...existing, ...patch, updated_at: formatVaultTimestamp(this.now()) };
|
|
390
427
|
writeFileAtomic0600(this.repoPath(repoId), JSON.stringify(full, null, 2));
|
|
391
428
|
return full;
|
|
392
429
|
});
|
|
393
430
|
}
|
|
394
431
|
/**
|
|
395
|
-
*
|
|
432
|
+
* vault-object-host-predial (design D1/D4, task 1.2): record that
|
|
396
433
|
* `origins` (already-normalized `scheme://host` strings) were observed
|
|
397
434
|
* serving THIS repo's objects — the transport's write-through-on-change
|
|
398
435
|
* hook. Most-recently-observed wins ties over anything already recorded;
|
|
399
|
-
* deduped; capped at {@link
|
|
436
|
+
* deduped; capped at {@link VAULT_OBJECT_STORE_ORIGINS_CAP}. A true
|
|
400
437
|
* no-op (no lock taken, no write, `updated_at` untouched) when the
|
|
401
438
|
* resulting set is IDENTICAL — in order — to what is already on disk, so
|
|
402
439
|
* the steady state (every session re-observes the same one or two
|
|
@@ -418,12 +455,12 @@ export class GitvaultKeystore {
|
|
|
418
455
|
if (!next.includes(o))
|
|
419
456
|
next.push(o);
|
|
420
457
|
for (const o of current) {
|
|
421
|
-
if (next.length >=
|
|
458
|
+
if (next.length >= VAULT_OBJECT_STORE_ORIGINS_CAP)
|
|
422
459
|
break;
|
|
423
460
|
if (!next.includes(o))
|
|
424
461
|
next.push(o);
|
|
425
462
|
}
|
|
426
|
-
const capped = next.slice(0,
|
|
463
|
+
const capped = next.slice(0, VAULT_OBJECT_STORE_ORIGINS_CAP);
|
|
427
464
|
if (capped.length === current.length && capped.every((o, i) => o === current[i]))
|
|
428
465
|
return;
|
|
429
466
|
this.updateRepo(repoId, { object_store_origins: capped });
|
|
@@ -432,7 +469,7 @@ export class GitvaultKeystore {
|
|
|
432
469
|
/* best-effort learning only — never surfaces into an object read */
|
|
433
470
|
}
|
|
434
471
|
}
|
|
435
|
-
// ── local immutable-object cache (
|
|
472
|
+
// ── local immutable-object cache (vault-client-round-trips design D3) ──
|
|
436
473
|
//
|
|
437
474
|
// `<rootDir>/<repo_id>/objects/` — beside the repo file above, NOT inside
|
|
438
475
|
// it: genesis bytes, admitted head bytes, and carrier (ref_state /
|
|
@@ -440,7 +477,7 @@ export class GitvaultKeystore {
|
|
|
440
477
|
// verified once. Holds ONLY ciphertext and signed public objects — never
|
|
441
478
|
// decrypted plaintext, key material, or key envelopes. This class stores
|
|
442
479
|
// and retrieves bytes alongside the sha256 they were verified against; it
|
|
443
|
-
// does not itself re-verify anything — every caller (`
|
|
480
|
+
// does not itself re-verify anything — every caller (`Vault`)
|
|
444
481
|
// re-checks a cache hit against the SAME pin/receipt it would check
|
|
445
482
|
// network bytes against before trusting it, so a stale or tampered entry
|
|
446
483
|
// can only ever be discarded and refetched, never silently trusted. A
|
|
@@ -448,8 +485,8 @@ export class GitvaultKeystore {
|
|
|
448
485
|
// never a thrown error — the cache is a pure accelerator, and its absence
|
|
449
486
|
// degrades to exactly today's network-fetch behavior.
|
|
450
487
|
objectsRepoDir(repoId) {
|
|
451
|
-
if (!
|
|
452
|
-
fail("
|
|
488
|
+
if (!VAULT_SRC_RE.test(repoId))
|
|
489
|
+
fail("VAULT_BAD_REPO_ID", `not a src_ id: ${repoId}`, "resolving vault object cache path");
|
|
453
490
|
return join(this.rootDir, repoId, "objects");
|
|
454
491
|
}
|
|
455
492
|
objectsGenesisPath(repoId) { return join(this.objectsRepoDir(repoId), "genesis.json"); }
|
|
@@ -492,7 +529,7 @@ export class GitvaultKeystore {
|
|
|
492
529
|
readCachedHead(repoId, generation) {
|
|
493
530
|
return this.decodeCachedBytes(this.readCachedFile(this.objectsHeadPath(repoId, generation)));
|
|
494
531
|
}
|
|
495
|
-
/** Writes the head, then evicts anything more than {@link
|
|
532
|
+
/** Writes the head, then evicts anything more than {@link VAULT_OBJECT_CACHE_WINDOW} generations behind it. */
|
|
496
533
|
writeCachedHead(repoId, generation, sha256, bytes) {
|
|
497
534
|
this.writeCachedFile(this.objectsHeadPath(repoId, generation), { sha256, bytes_base64: Buffer.from(bytes).toString("base64") });
|
|
498
535
|
this.evictObjectCache(repoId, generation);
|
|
@@ -510,7 +547,7 @@ export class GitvaultKeystore {
|
|
|
510
547
|
this.evictObjectCache(repoId, generation);
|
|
511
548
|
}
|
|
512
549
|
/**
|
|
513
|
-
* Drop heads and carriers more than {@link
|
|
550
|
+
* Drop heads and carriers more than {@link VAULT_OBJECT_CACHE_WINDOW}
|
|
514
551
|
* generations behind `latestGeneration` — genesis is exempt (kept
|
|
515
552
|
* forever). Runs inline on every cache write; also callable directly
|
|
516
553
|
* (`sweepObjectCache`, wired into `repos gc`) as a periodic backstop that
|
|
@@ -519,7 +556,7 @@ export class GitvaultKeystore {
|
|
|
519
556
|
* cache's own "a miss just refetches" posture.
|
|
520
557
|
*/
|
|
521
558
|
evictObjectCache(repoId, latestGeneration) {
|
|
522
|
-
const cutoff = genToBigInt(latestGeneration) - BigInt(
|
|
559
|
+
const cutoff = genToBigInt(latestGeneration) - BigInt(VAULT_OBJECT_CACHE_WINDOW - 1);
|
|
523
560
|
const pruneDir = (dir, generationOf) => {
|
|
524
561
|
if (!existsSync(dir))
|
|
525
562
|
return;
|
|
@@ -563,9 +600,9 @@ export class GitvaultKeystore {
|
|
|
563
600
|
return this.withRepoLock(repoId, () => {
|
|
564
601
|
const existing = this.readRepo(repoId);
|
|
565
602
|
if (!existing)
|
|
566
|
-
fail("
|
|
603
|
+
fail("VAULT_REPO_STATE_MISSING", `no repo file for ${repoId}`, "recording vault epoch rotation", { repo_id: repoId });
|
|
567
604
|
const epochKeys = { ...(existing.epoch_keys ?? {}), [existing.epoch]: existing.k_repo_hex, [input.new_epoch]: input.new_k_repo_hex };
|
|
568
|
-
const full = { ...existing, epoch: input.new_epoch, k_repo_hex: input.new_k_repo_hex, epoch_keys: epochKeys, updated_at:
|
|
605
|
+
const full = { ...existing, epoch: input.new_epoch, k_repo_hex: input.new_k_repo_hex, epoch_keys: epochKeys, updated_at: formatVaultTimestamp(this.now()) };
|
|
569
606
|
writeFileAtomic0600(this.repoPath(repoId), JSON.stringify(full, null, 2));
|
|
570
607
|
this.audit("epoch_rotation_recorded", repoId, { new_epoch: input.new_epoch, known_epoch_count: Object.keys(epochKeys).length });
|
|
571
608
|
return full;
|
|
@@ -607,14 +644,14 @@ export class GitvaultKeystore {
|
|
|
607
644
|
if (this.reclaimStaleLock(lockDir, repoId, staleAfterMs))
|
|
608
645
|
continue;
|
|
609
646
|
if (Date.now() >= deadline) {
|
|
610
|
-
fail("
|
|
647
|
+
fail("VAULT_KEYSTORE_LOCKED", `another process holds the lock for ${repoId}`, "acquiring vault repo lock", { repo_id: repoId, lock: lockDir });
|
|
611
648
|
}
|
|
612
649
|
const until = Date.now() + 25;
|
|
613
650
|
while (Date.now() < until) { /* spin */ }
|
|
614
651
|
}
|
|
615
652
|
}
|
|
616
653
|
try {
|
|
617
|
-
writeFileAtomic0600(join(lockDir, "owner.json"), JSON.stringify({ pid: process.pid, at:
|
|
654
|
+
writeFileAtomic0600(join(lockDir, "owner.json"), JSON.stringify({ pid: process.pid, at: formatVaultTimestamp(this.now()) }));
|
|
618
655
|
}
|
|
619
656
|
catch {
|
|
620
657
|
/* owner record is advisory */
|
|
@@ -670,7 +707,7 @@ export class GitvaultKeystore {
|
|
|
670
707
|
const repo = this.readRepo(repoId);
|
|
671
708
|
let state;
|
|
672
709
|
if (!identity && !repo) {
|
|
673
|
-
state = { state: "unrecoverable", code: "VAULT_UNRECOVERABLE", statement:
|
|
710
|
+
state = { state: "unrecoverable", code: "VAULT_UNRECOVERABLE", statement: VAULT_TERMINAL_LOSS_STATEMENT, doctor_text: VAULT_TERMINAL_LOSS_DOCTOR_TEXT };
|
|
674
711
|
}
|
|
675
712
|
else if (!identity && repo) {
|
|
676
713
|
// K_repo survives but no key can sign or open anything new: the history
|
|
@@ -680,7 +717,7 @@ export class GitvaultKeystore {
|
|
|
680
717
|
else if (identity && !repo) {
|
|
681
718
|
state = identity.encryption_private_key_hex
|
|
682
719
|
? { state: "repo_state_lost_identity_intact", next_action: "restore_from_envelope" }
|
|
683
|
-
: { state: "unrecoverable", code: "VAULT_UNRECOVERABLE", statement:
|
|
720
|
+
: { state: "unrecoverable", code: "VAULT_UNRECOVERABLE", statement: VAULT_TERMINAL_LOSS_STATEMENT, doctor_text: VAULT_TERMINAL_LOSS_DOCTOR_TEXT };
|
|
684
721
|
}
|
|
685
722
|
else if (identity && repo && !identity.signing_seed_hex) {
|
|
686
723
|
state = { state: "read_only", repo, reason: "signing_key_lost" };
|
|
@@ -703,17 +740,17 @@ export class GitvaultKeystore {
|
|
|
703
740
|
async restoreRepoFromEnvelope(input) {
|
|
704
741
|
const identity = this.readIdentity();
|
|
705
742
|
if (!identity)
|
|
706
|
-
fail("VAULT_UNRECOVERABLE",
|
|
743
|
+
fail("VAULT_UNRECOVERABLE", VAULT_TERMINAL_LOSS_DOCTOR_TEXT, "restoring vault repo state", { statement: VAULT_TERMINAL_LOSS_STATEMENT });
|
|
707
744
|
const recipient = this.encryptionKeypair(identity);
|
|
708
745
|
if (!recipient)
|
|
709
|
-
fail("VAULT_UNRECOVERABLE",
|
|
746
|
+
fail("VAULT_UNRECOVERABLE", VAULT_TERMINAL_LOSS_DOCTOR_TEXT, "restoring vault repo state", { statement: VAULT_TERMINAL_LOSS_STATEMENT });
|
|
710
747
|
const { genesis, envelope } = input;
|
|
711
|
-
if (!
|
|
712
|
-
fail("
|
|
748
|
+
if (!verifyVaultObject(genesis, genesis.creator_signing_pubkey)) {
|
|
749
|
+
fail("VAULT_SIGNATURE_INVALID", "vault_genesis signature does not verify", "restoring vault repo state", { repo_id: genesis.repo_id });
|
|
713
750
|
}
|
|
714
751
|
// The creator's OWN genesis envelope is bound to genesis byte-for-byte
|
|
715
752
|
// (hash + size + recipient). Any OTHER recipient's envelope (a member
|
|
716
|
-
// wrapped post-genesis —
|
|
753
|
+
// wrapped post-genesis — vault-agent-envelopes D4's cold open) is
|
|
717
754
|
// not in genesis at all: for it, check genesis's own structural bindings
|
|
718
755
|
// plus the envelope's addressing (this vault, this epoch, written under
|
|
719
756
|
// the registered writer key); `openKeyEnvelope` then verifies the
|
|
@@ -738,7 +775,7 @@ export class GitvaultKeystore {
|
|
|
738
775
|
}
|
|
739
776
|
}
|
|
740
777
|
if (bindings.length > 0) {
|
|
741
|
-
fail("VAULT_CREATION_CONFLICT", "genesis key bindings do not hold for the stored envelope", "restoring
|
|
778
|
+
fail("VAULT_CREATION_CONFLICT", "genesis key bindings do not hold for the stored envelope", "restoring vault repo state", { repo_id: genesis.repo_id, problems: bindings });
|
|
742
779
|
}
|
|
743
780
|
const genesisSha = storedBytesSha256(genesis);
|
|
744
781
|
// First-open pin (agent-envelopes D4): a genesis this keystore already
|
|
@@ -747,7 +784,7 @@ export class GitvaultKeystore {
|
|
|
747
784
|
const priorRepo = this.readRepo(genesis.repo_id);
|
|
748
785
|
const priorPin = priorRepo?.genesis_sha256 ?? this.readCachedGenesis(genesis.repo_id)?.sha256 ?? null;
|
|
749
786
|
if (priorPin && priorPin !== genesisSha) {
|
|
750
|
-
fail("VAULT_CREATION_CONFLICT", `the admitted genesis (${genesisSha}) is not the one this keystore pinned (${priorPin}); refusing a substituted vault`, "restoring
|
|
787
|
+
fail("VAULT_CREATION_CONFLICT", `the admitted genesis (${genesisSha}) is not the one this keystore pinned (${priorPin}); refusing a substituted vault`, "restoring vault repo state", { repo_id: genesis.repo_id, admitted: genesisSha, pinned: priorPin });
|
|
751
788
|
}
|
|
752
789
|
const continuity = priorPin ? "pinned" : "first_seen";
|
|
753
790
|
const receipt = input.recovery_receipt ?? this.readRecoveryReceipt(genesis.repo_id);
|
|
@@ -755,12 +792,12 @@ export class GitvaultKeystore {
|
|
|
755
792
|
if (receipt) {
|
|
756
793
|
const problems = checkRecoveryReceipt(receipt, genesis);
|
|
757
794
|
if (problems.length > 0) {
|
|
758
|
-
fail("VAULT_CREATION_CONFLICT", "recovery receipt does not pin this genesis (substituted vault?)", "restoring
|
|
795
|
+
fail("VAULT_CREATION_CONFLICT", "recovery receipt does not pin this genesis (substituted vault?)", "restoring vault repo state", { repo_id: genesis.repo_id, problems });
|
|
759
796
|
}
|
|
760
797
|
trust = "receipt";
|
|
761
798
|
}
|
|
762
799
|
if (envelope.recipient_fingerprint !== identity.encryption_fingerprint) {
|
|
763
|
-
fail("
|
|
800
|
+
fail("VAULT_ENVELOPE_NOT_FOR_RECIPIENT", "the stored envelope is addressed to another principal", "restoring vault repo state", { recipient_fingerprint: envelope.recipient_fingerprint });
|
|
764
801
|
}
|
|
765
802
|
const kRepo = await openKeyEnvelope({ envelope, recipient, signer_public_key: envelopeSignerPubkey });
|
|
766
803
|
const repo = this.saveRepo({
|
|
@@ -782,8 +819,8 @@ export class GitvaultKeystore {
|
|
|
782
819
|
const id = this.readIdentity();
|
|
783
820
|
if (!id)
|
|
784
821
|
return null;
|
|
785
|
-
if (!
|
|
786
|
-
fail("
|
|
822
|
+
if (!VAULT_VK_RE.test(id.signing_fingerprint) || !VAULT_EK_RE.test(id.encryption_fingerprint)) {
|
|
823
|
+
fail("VAULT_KEYSTORE_CORRUPT", "identity fingerprints are malformed", "reading vault identity");
|
|
787
824
|
}
|
|
788
825
|
return {
|
|
789
826
|
signing_fingerprint: id.signing_fingerprint,
|
|
@@ -825,4 +862,4 @@ function safeRemoveLock(lockDir) {
|
|
|
825
862
|
unlinkSync(owner);
|
|
826
863
|
rmdirSync(lockDir);
|
|
827
864
|
}
|
|
828
|
-
//# sourceMappingURL=
|
|
865
|
+
//# sourceMappingURL=vault-keystore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-keystore.js","sourceRoot":"","sources":["../../src/node/vault-keystore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const
|
|
1
|
+
import type { VaultMirrorBackend } from "./vault-mirror-backend.js";
|
|
2
|
+
export declare const VAULT_MEMBER_BUNDLE_FORMAT: "r402s-member-recovery-bundle/v1";
|
|
3
3
|
/** The mirrored-prefix sidecar directory recovery/verify scan for bundles. */
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const VAULT_MEMBER_BUNDLE_MIRROR_PREFIX: "member-recovery-bundles/";
|
|
5
5
|
/**
|
|
6
6
|
* The seal-time ceremony host every wrapper in existence was sealed under
|
|
7
7
|
* (`location.hostname` of the sealing console page). Used only when neither
|
|
@@ -9,8 +9,8 @@ export declare const GITVAULT_MEMBER_BUNDLE_MIRROR_PREFIX: "member-recovery-bund
|
|
|
9
9
|
* wrong value fails closed as `WRAPPER_DID_NOT_OPEN`, never a silent
|
|
10
10
|
* wrong-key open.
|
|
11
11
|
*/
|
|
12
|
-
export declare const
|
|
13
|
-
export interface
|
|
12
|
+
export declare const VAULT_DEFAULT_SOURCE_WRAPPER_RP_ID: "console.run402.com";
|
|
13
|
+
export interface VaultMemberBundleWrapper {
|
|
14
14
|
wrapper_id: string;
|
|
15
15
|
kind: "webauthn_prf" | "recovery_code";
|
|
16
16
|
format_version: string;
|
|
@@ -21,8 +21,8 @@ export interface GitvaultMemberBundleWrapper {
|
|
|
21
21
|
created_at: string;
|
|
22
22
|
}
|
|
23
23
|
/** `r402s-member-recovery-bundle/v1` — exactly what the gateway export returns (plus the console download's client-stamped `rp_id`, when present). */
|
|
24
|
-
export interface
|
|
25
|
-
format: typeof
|
|
24
|
+
export interface VaultMemberRecoveryBundle {
|
|
25
|
+
format: typeof VAULT_MEMBER_BUNDLE_FORMAT;
|
|
26
26
|
exported_at?: string;
|
|
27
27
|
principal_id: string;
|
|
28
28
|
encryption_key_id: string;
|
|
@@ -31,14 +31,14 @@ export interface GitvaultMemberRecoveryBundle {
|
|
|
31
31
|
public_key: string;
|
|
32
32
|
suite: string;
|
|
33
33
|
custody_scheme: string;
|
|
34
|
-
wrappers:
|
|
34
|
+
wrappers: VaultMemberBundleWrapper[];
|
|
35
35
|
/** Seal-time ceremony host, when the exporting surface knew it (the console download stamps `location.hostname`). */
|
|
36
36
|
rp_id?: string;
|
|
37
37
|
note?: string;
|
|
38
38
|
}
|
|
39
39
|
/** Parse + shape-check a member recovery bundle (a JSON string or an already-parsed value). Typed refusal, never a silent partial. */
|
|
40
|
-
export declare function parseMemberRecoveryBundle(input: unknown, context?: string):
|
|
41
|
-
export interface
|
|
40
|
+
export declare function parseMemberRecoveryBundle(input: unknown, context?: string): VaultMemberRecoveryBundle;
|
|
41
|
+
export interface VaultMemberUnwrapResult {
|
|
42
42
|
/** X25519 private scalar, lowercase hex — feed straight into the recovery identity. */
|
|
43
43
|
private_key_hex: string;
|
|
44
44
|
/** Raw 32-byte member public key (derived from the scalar and verified against the bundle). */
|
|
@@ -62,13 +62,13 @@ export interface GitvaultMemberUnwrapResult {
|
|
|
62
62
|
* material.
|
|
63
63
|
*/
|
|
64
64
|
export declare function unwrapMemberRecoveryBundle(input: {
|
|
65
|
-
bundle:
|
|
65
|
+
bundle: VaultMemberRecoveryBundle;
|
|
66
66
|
source_recovery_code: string;
|
|
67
|
-
/** Seal-time ceremony host override; default = bundle.rp_id, then {@link
|
|
67
|
+
/** Seal-time ceremony host override; default = bundle.rp_id, then {@link VAULT_DEFAULT_SOURCE_WRAPPER_RP_ID}. */
|
|
68
68
|
rp_id?: string;
|
|
69
|
-
}):
|
|
69
|
+
}): VaultMemberUnwrapResult;
|
|
70
70
|
/** One mirrored bundle sidecar, reported keylessly — an UNVERIFIED availability hint (nothing about it is authenticated). */
|
|
71
|
-
export interface
|
|
71
|
+
export interface VaultMemberBundleHint {
|
|
72
72
|
key: string;
|
|
73
73
|
/** Parsed identity when the sidecar is readable; null when it exists but does not parse as a v1 bundle. */
|
|
74
74
|
ek_fingerprint: string | null;
|
|
@@ -82,7 +82,7 @@ export interface GitvaultMemberBundleHint {
|
|
|
82
82
|
* bundle auto-discovery both read this. Never throws: an unreadable or
|
|
83
83
|
* malformed sidecar is reported with its parse error, not skipped silently.
|
|
84
84
|
*/
|
|
85
|
-
export declare function discoverMemberBundles(backend:
|
|
86
|
-
bundle:
|
|
85
|
+
export declare function discoverMemberBundles(backend: VaultMirrorBackend): Promise<Array<VaultMemberBundleHint & {
|
|
86
|
+
bundle: VaultMemberRecoveryBundle | null;
|
|
87
87
|
}>>;
|
|
88
|
-
//# sourceMappingURL=
|
|
88
|
+
//# sourceMappingURL=vault-member-bundle.d.ts.map
|