@run402/sdk 4.95.0 → 4.96.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 +24 -24
- package/core-dist/keystore.d.ts +1 -1
- package/core-dist/keystore.js +1 -1
- package/dist/errors.d.ts +4 -4
- package/dist/errors.d.ts.map +1 -1
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/namespaces/deploy.d.ts +5 -5
- package/dist/namespaces/deploy.d.ts.map +1 -1
- package/dist/namespaces/deploy.js +20 -20
- 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/org.d.ts +2 -2
- package/dist/namespaces/org.js +2 -2
- package/dist/namespaces/org.types.d.ts +3 -3
- package/dist/namespaces/pay.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} +451 -459
- package/dist/namespaces/repos.js.map +1 -0
- package/dist/namespaces/rooms.js +2 -2
- 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/http-dispatcher.js +5 -5
- package/dist/node/http-dispatcher.js.map +1 -1
- package/dist/node/index.d.ts +29 -29
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +39 -39
- 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/package.json +1 -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,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* vault — prune (protocol rev 40 §7.3; task 5.12a).
|
|
3
3
|
*
|
|
4
4
|
* The two-phase, ACYCLIC prune the client half owns:
|
|
5
5
|
*
|
|
@@ -33,15 +33,15 @@
|
|
|
33
33
|
* `result: "failed"` (and both booleans as observed) whenever the chain
|
|
34
34
|
* cannot prove the property, rather than a convenient `true`.
|
|
35
35
|
*/
|
|
36
|
-
import {
|
|
37
|
-
import type {
|
|
36
|
+
import { VAULT_FORMAT, VAULT_SUITE } from "../namespaces/vault.crypto.js";
|
|
37
|
+
import type { VaultCheckpointClaimSet, VaultCheckpointManifestReceipt, VaultCheckpointPackReceipt, VaultCheckpointClaimSetReceipt, VaultHead, VaultRefStateReceipt, VaultRetentionRootsReceipt, VaultWalPackReceipt } from "../namespaces/vault.types.js";
|
|
38
38
|
/** §7.3: at most 10 000 candidates per intent; larger prunes chunk into successive intents. */
|
|
39
|
-
export declare const
|
|
39
|
+
export declare const VAULT_MAX_PRUNE_CANDIDATES = 10000;
|
|
40
40
|
/** The CLOSED V0 verifier identity set (`common.json#/$defs/implementation_id`). */
|
|
41
|
-
export declare const
|
|
42
|
-
export type
|
|
41
|
+
export declare const VAULT_VERIFIER_IMPLEMENTATIONS: readonly ["run402-cli", "r402s-verify"];
|
|
42
|
+
export type VaultVerifierImplementation = (typeof VAULT_VERIFIER_IMPLEMENTATIONS)[number];
|
|
43
43
|
/** This SDK's identity when it attests. The other half of the pair is never ours to produce. */
|
|
44
|
-
export declare const
|
|
44
|
+
export declare const VAULT_SDK_VERIFIER_IMPLEMENTATION: VaultVerifierImplementation;
|
|
45
45
|
/**
|
|
46
46
|
* What this lineage calls itself in a receipt's `implementation_version`.
|
|
47
47
|
*
|
|
@@ -50,28 +50,28 @@ export declare const GITVAULT_SDK_VERIFIER_IMPLEMENTATION: GitvaultVerifierImple
|
|
|
50
50
|
* moves for reasons that have nothing to do with either. Bump this when the
|
|
51
51
|
* verification logic or the revision it verifies changes.
|
|
52
52
|
*/
|
|
53
|
-
export declare const
|
|
53
|
+
export declare const VAULT_SDK_VERIFIER_VERSION = "run402-sdk/r402s-v0-rev40";
|
|
54
54
|
/** `common.json#/$defs/receipt_pruneable` — the CLOSED union a delete set may name. */
|
|
55
|
-
export type
|
|
55
|
+
export type VaultPruneableReceipt = VaultWalPackReceipt | VaultRefStateReceipt | VaultRetentionRootsReceipt | VaultCheckpointManifestReceipt | VaultCheckpointPackReceipt | VaultCheckpointClaimSetReceipt;
|
|
56
56
|
/** One verified chain link plus its resolved checkpoint claim set (null when the head bears no checkpoint). */
|
|
57
|
-
export interface
|
|
58
|
-
head:
|
|
57
|
+
export interface VaultChainEntry {
|
|
58
|
+
head: VaultHead;
|
|
59
59
|
head_sha256: string;
|
|
60
|
-
claim_set:
|
|
60
|
+
claim_set: VaultCheckpointClaimSet | null;
|
|
61
61
|
}
|
|
62
62
|
/** `common.json#/$defs/verifier_receipt_ref` — what the intent carries, not the receipt itself. */
|
|
63
|
-
export interface
|
|
63
|
+
export interface VaultVerifierReceiptRef {
|
|
64
64
|
object_id: string;
|
|
65
65
|
object_kind: "verifier_receipt";
|
|
66
66
|
stored_bytes_sha256: string;
|
|
67
67
|
size_bytes: string;
|
|
68
|
-
implementation_id:
|
|
68
|
+
implementation_id: VaultVerifierImplementation;
|
|
69
69
|
}
|
|
70
70
|
/** `verifier_receipt.json` — owner-signed, uploaded, then claimed at the intent's fence. */
|
|
71
|
-
export interface
|
|
72
|
-
format: typeof
|
|
71
|
+
export interface VaultVerifierReceipt {
|
|
72
|
+
format: typeof VAULT_FORMAT;
|
|
73
73
|
object_kind: "verifier_receipt";
|
|
74
|
-
suite: typeof
|
|
74
|
+
suite: typeof VAULT_SUITE;
|
|
75
75
|
repo_id: string;
|
|
76
76
|
object_id: string;
|
|
77
77
|
intent_core_sha256: string;
|
|
@@ -80,16 +80,16 @@ export interface GitvaultVerifierReceipt {
|
|
|
80
80
|
restored_object_set_hmac: string;
|
|
81
81
|
retention_evolution_ok: boolean;
|
|
82
82
|
candidates_outside_roots_ok: boolean;
|
|
83
|
-
implementation_id:
|
|
83
|
+
implementation_id: VaultVerifierImplementation;
|
|
84
84
|
implementation_version: string;
|
|
85
85
|
result: "restored_and_verified" | "failed";
|
|
86
86
|
signature: string;
|
|
87
87
|
}
|
|
88
88
|
/** `prune_intent_core.json` — owner-signed; the acyclic base BOTH receipts sign. */
|
|
89
|
-
export interface
|
|
90
|
-
format: typeof
|
|
89
|
+
export interface VaultPruneIntentCore {
|
|
90
|
+
format: typeof VAULT_FORMAT;
|
|
91
91
|
object_kind: "prune_intent_core";
|
|
92
|
-
suite: typeof
|
|
92
|
+
suite: typeof VAULT_SUITE;
|
|
93
93
|
repo_id: string;
|
|
94
94
|
object_id: string;
|
|
95
95
|
gc_epoch: string;
|
|
@@ -102,29 +102,29 @@ export interface GitvaultPruneIntentCore {
|
|
|
102
102
|
checkpoint_claim_set_sha256: string;
|
|
103
103
|
gc_root_set_hmac: string;
|
|
104
104
|
retention_state_hmac: string;
|
|
105
|
-
delete_set:
|
|
105
|
+
delete_set: VaultPruneableReceipt[];
|
|
106
106
|
nonce: string;
|
|
107
107
|
signature: string;
|
|
108
108
|
}
|
|
109
109
|
/** `prune_intent.json` — the wrapper the gateway publishes create-only under `prune/`. */
|
|
110
|
-
export interface
|
|
111
|
-
format: typeof
|
|
110
|
+
export interface VaultPruneIntent {
|
|
111
|
+
format: typeof VAULT_FORMAT;
|
|
112
112
|
object_kind: "prune_intent";
|
|
113
|
-
suite: typeof
|
|
113
|
+
suite: typeof VAULT_SUITE;
|
|
114
114
|
repo_id: string;
|
|
115
115
|
object_id: string;
|
|
116
|
-
core:
|
|
116
|
+
core: VaultPruneIntentCore;
|
|
117
117
|
intent_core_sha256: string;
|
|
118
|
-
verifier_receipts:
|
|
118
|
+
verifier_receipts: VaultVerifierReceiptRef[];
|
|
119
119
|
signature: string;
|
|
120
120
|
}
|
|
121
121
|
/** One entry of the completion's three-valued vector. */
|
|
122
|
-
export interface
|
|
122
|
+
export interface VaultPruneOutcome {
|
|
123
123
|
object_id: string;
|
|
124
124
|
result: "deleted" | "present_not_attempted" | "present_after_attempt";
|
|
125
125
|
}
|
|
126
126
|
/** `GET …/prune-intents/:id` — the gateway's secret-free public view (`toPublicIntent`). */
|
|
127
|
-
export interface
|
|
127
|
+
export interface VaultPruneIntentRecord {
|
|
128
128
|
object_id: string;
|
|
129
129
|
repo_id: string;
|
|
130
130
|
state: string;
|
|
@@ -141,7 +141,7 @@ export interface GitvaultPruneIntentRecord {
|
|
|
141
141
|
completion: {
|
|
142
142
|
object_id: string | null;
|
|
143
143
|
sha256: string | null;
|
|
144
|
-
per_object:
|
|
144
|
+
per_object: VaultPruneOutcome[] | null;
|
|
145
145
|
deleted_count: number;
|
|
146
146
|
present_after_attempt_count: number;
|
|
147
147
|
present_not_attempted_count: number;
|
|
@@ -160,18 +160,18 @@ export interface GitvaultPruneIntentRecord {
|
|
|
160
160
|
* A bundle missing its carriers is not a recovery path, so the carriers are
|
|
161
161
|
* part of the protection, not adjacent to it.
|
|
162
162
|
*/
|
|
163
|
-
export declare function checkpointRecoveryBundle(entry:
|
|
163
|
+
export declare function checkpointRecoveryBundle(entry: VaultChainEntry): VaultPruneableReceipt[];
|
|
164
164
|
/** Every pruneable object the chain has ever named, sorted by `object_id`, deduplicated. */
|
|
165
|
-
export declare function collectPruneUniverse(entries: readonly
|
|
165
|
+
export declare function collectPruneUniverse(entries: readonly VaultChainEntry[]): VaultPruneableReceipt[];
|
|
166
166
|
/** Pairwise-distinct, sorted by `object_id` — the schema's canonical order, not an incidental one. */
|
|
167
|
-
export declare function sortPruneReceipts(receipts: readonly
|
|
168
|
-
export interface
|
|
167
|
+
export declare function sortPruneReceipts(receipts: readonly VaultPruneableReceipt[]): VaultPruneableReceipt[];
|
|
168
|
+
export interface VaultGcRootSet {
|
|
169
169
|
/** The protected receipts, sorted — the `gcrootset` commitment's preimage content. */
|
|
170
|
-
receipts:
|
|
170
|
+
receipts: VaultPruneableReceipt[];
|
|
171
171
|
/** The newest checkpoint-bearing entry, or `null` when the chain has none. */
|
|
172
|
-
latest_checkpoint:
|
|
172
|
+
latest_checkpoint: VaultChainEntry | null;
|
|
173
173
|
/** The one before it, or `null`. */
|
|
174
|
-
prior_checkpoint:
|
|
174
|
+
prior_checkpoint: VaultChainEntry | null;
|
|
175
175
|
/**
|
|
176
176
|
* Why nothing may be pruned yet, or `null` when a prune is structurally
|
|
177
177
|
* possible. Stated rather than left to be inferred from an empty candidate
|
|
@@ -196,18 +196,18 @@ export interface GitvaultGcRootSet {
|
|
|
196
196
|
* expiry is measured against a server-signed ticket this client cannot
|
|
197
197
|
* evaluate, so it never guesses a carrier is dead.
|
|
198
198
|
*/
|
|
199
|
-
export declare function computeGcRootSet(entries: readonly
|
|
200
|
-
export interface
|
|
201
|
-
/** Candidates in canonical order, capped at {@link
|
|
202
|
-
candidates:
|
|
199
|
+
export declare function computeGcRootSet(entries: readonly VaultChainEntry[]): VaultGcRootSet;
|
|
200
|
+
export interface VaultPrunePlan {
|
|
201
|
+
/** Candidates in canonical order, capped at {@link VAULT_MAX_PRUNE_CANDIDATES}. */
|
|
202
|
+
candidates: VaultPruneableReceipt[];
|
|
203
203
|
/** How many pruneable objects were left out by the per-intent cap (chunk into a later intent). */
|
|
204
204
|
deferred_count: number;
|
|
205
|
-
root_set:
|
|
205
|
+
root_set: VaultGcRootSet;
|
|
206
206
|
universe_count: number;
|
|
207
207
|
}
|
|
208
208
|
/** universe − GC root set, canonical order, capped. Never mutates its inputs. */
|
|
209
|
-
export declare function planPruneCandidates(entries: readonly
|
|
210
|
-
export interface
|
|
209
|
+
export declare function planPruneCandidates(entries: readonly VaultChainEntry[]): VaultPrunePlan;
|
|
210
|
+
export interface VaultRetentionEvolutionCheck {
|
|
211
211
|
ok: boolean;
|
|
212
212
|
/** Every departure this client could not justify from the chain alone. */
|
|
213
213
|
unproven: Array<{
|
|
@@ -226,19 +226,19 @@ export interface GitvaultRetentionEvolutionCheck {
|
|
|
226
226
|
* a failure of THIS CLIENT to prove the departure, and the check reports `ok:
|
|
227
227
|
* false` so the receipt attests `false` rather than a convenient `true`.
|
|
228
228
|
*/
|
|
229
|
-
export declare function checkRetentionEvolution(entries: readonly
|
|
229
|
+
export declare function checkRetentionEvolution(entries: readonly VaultChainEntry[], roots: (entry: VaultChainEntry) => Array<{
|
|
230
230
|
ref: string;
|
|
231
231
|
oid: string;
|
|
232
232
|
dropped_at_generation: string;
|
|
233
|
-
}>, effectiveAdmittedAt: (droppedAtGeneration: string) => string | null, isEligible: (effectiveAdmittedAtIso: string, cutoffAtIso: string) => boolean):
|
|
234
|
-
export interface
|
|
233
|
+
}>, effectiveAdmittedAt: (droppedAtGeneration: string) => string | null, isEligible: (effectiveAdmittedAtIso: string, cutoffAtIso: string) => boolean): VaultRetentionEvolutionCheck;
|
|
234
|
+
export interface VaultBuildPruneCoreInput {
|
|
235
235
|
repo_id: string;
|
|
236
236
|
gc_epoch: string;
|
|
237
237
|
authorizing_head_sha256: string;
|
|
238
238
|
checkpoint_claim_set_sha256: string;
|
|
239
239
|
gc_root_set_hmac: string;
|
|
240
240
|
retention_state_hmac: string;
|
|
241
|
-
delete_set: readonly
|
|
241
|
+
delete_set: readonly VaultPruneableReceipt[];
|
|
242
242
|
/** All five cycle fields are non-null together iff the prune advances a maintenance cycle (§7.2). */
|
|
243
243
|
cycle?: {
|
|
244
244
|
maintenance_cycle_id: string;
|
|
@@ -256,10 +256,10 @@ export interface GitvaultBuildPruneCoreInput {
|
|
|
256
256
|
* the stored-bytes hash of the COMPLETE signed core, which is why the core must
|
|
257
257
|
* be finished before either verifier can attest anything about it.
|
|
258
258
|
*/
|
|
259
|
-
export declare function buildPruneIntentCore(input:
|
|
259
|
+
export declare function buildPruneIntentCore(input: VaultBuildPruneCoreInput, signingSeed: Uint8Array): VaultPruneIntentCore;
|
|
260
260
|
/** The stored-bytes hash of the complete signed core — what BOTH verifier receipts sign. */
|
|
261
|
-
export declare function pruneIntentCoreSha256(core:
|
|
262
|
-
export interface
|
|
261
|
+
export declare function pruneIntentCoreSha256(core: VaultPruneIntentCore): string;
|
|
262
|
+
export interface VaultBuildVerifierReceiptInput {
|
|
263
263
|
repo_id: string;
|
|
264
264
|
intent_core_sha256: string;
|
|
265
265
|
checkpoint_head_sha256: string;
|
|
@@ -267,7 +267,7 @@ export interface GitvaultBuildVerifierReceiptInput {
|
|
|
267
267
|
restored_object_set_hmac: string;
|
|
268
268
|
retention_evolution_ok: boolean;
|
|
269
269
|
candidates_outside_roots_ok: boolean;
|
|
270
|
-
implementation_id:
|
|
270
|
+
implementation_id: VaultVerifierImplementation;
|
|
271
271
|
implementation_version: string;
|
|
272
272
|
object_id?: string;
|
|
273
273
|
}
|
|
@@ -278,9 +278,9 @@ export interface GitvaultBuildVerifierReceiptInput {
|
|
|
278
278
|
* exactly when both attestation booleans are true, and `failed` otherwise. A
|
|
279
279
|
* caller cannot hand this function `failed` booleans and a passing result.
|
|
280
280
|
*/
|
|
281
|
-
export declare function buildVerifierReceipt(input:
|
|
281
|
+
export declare function buildVerifierReceipt(input: VaultBuildVerifierReceiptInput, signingSeed: Uint8Array): VaultVerifierReceipt;
|
|
282
282
|
/** The `verifier_receipt_ref` an intent carries for an uploaded receipt. */
|
|
283
|
-
export declare function verifierReceiptRef(receipt:
|
|
283
|
+
export declare function verifierReceiptRef(receipt: VaultVerifierReceipt): VaultVerifierReceiptRef;
|
|
284
284
|
/**
|
|
285
285
|
* Wrap + sign the intent.
|
|
286
286
|
*
|
|
@@ -290,7 +290,7 @@ export declare function verifierReceiptRef(receipt: GitvaultVerifierReceipt): Gi
|
|
|
290
290
|
* hashes, each attesting `restored_and_verified` with both booleans true, and
|
|
291
291
|
* each signing THIS core.
|
|
292
292
|
*/
|
|
293
|
-
export declare function buildPruneIntent(core:
|
|
293
|
+
export declare function buildPruneIntent(core: VaultPruneIntentCore, receipts: readonly VaultVerifierReceipt[], signingSeed: Uint8Array): VaultPruneIntent;
|
|
294
294
|
/**
|
|
295
295
|
* Refuse a supplied core that the chain has moved past — BEFORE the receipts
|
|
296
296
|
* are uploaded.
|
|
@@ -302,7 +302,7 @@ export declare function buildPruneIntent(core: GitvaultPruneIntentCore, receipts
|
|
|
302
302
|
* submission burns evidence for nothing. Same registry codes the gateway uses,
|
|
303
303
|
* raised one step earlier.
|
|
304
304
|
*/
|
|
305
|
-
export declare function assertPruneCoreStillCurrent(core:
|
|
305
|
+
export declare function assertPruneCoreStillCurrent(core: VaultPruneIntentCore, current: {
|
|
306
306
|
repo_id: string;
|
|
307
307
|
gc_epoch: string;
|
|
308
308
|
checkpoint_claim_set_sha256: string;
|
|
@@ -315,14 +315,14 @@ export declare function assertPruneCoreStillCurrent(core: GitvaultPruneIntentCor
|
|
|
315
315
|
* re-serializes the object between here and the socket — a JSON body helper, a
|
|
316
316
|
* proxy that reformats — changes what was signed. Send exactly this.
|
|
317
317
|
*/
|
|
318
|
-
export declare function pruneIntentBytes(intent:
|
|
319
|
-
export interface
|
|
318
|
+
export declare function pruneIntentBytes(intent: VaultPruneIntent): Uint8Array;
|
|
319
|
+
export interface VaultPruneConfirmation {
|
|
320
320
|
/** `null` until the control-plane-signed completion exists. */
|
|
321
321
|
outcome: "completed" | "superseded_no_delete" | "superseded_partial_delete" | null;
|
|
322
322
|
/** Object ids the completion confirms are GONE. Only `deleted` qualifies. */
|
|
323
323
|
deleted: string[];
|
|
324
324
|
/** Still present — attempted or not. Never reported as removed. */
|
|
325
|
-
present:
|
|
325
|
+
present: VaultPruneOutcome[];
|
|
326
326
|
/** Candidates the completion did not adjudicate at all (a defect; reported, never assumed deleted). */
|
|
327
327
|
unadjudicated: string[];
|
|
328
328
|
}
|
|
@@ -335,7 +335,7 @@ export interface GitvaultPruneConfirmation {
|
|
|
335
335
|
* treating it as one is how a client reports history removed that is still
|
|
336
336
|
* there. A candidate with no entry is `unadjudicated`, never inferred.
|
|
337
337
|
*/
|
|
338
|
-
export declare function summarizePruneCompletion(candidateIds: readonly string[], record:
|
|
338
|
+
export declare function summarizePruneCompletion(candidateIds: readonly string[], record: VaultPruneIntentRecord | null): VaultPruneConfirmation;
|
|
339
339
|
/** Run `fn` in a fresh temp directory and always remove it, even on refusal. */
|
|
340
340
|
export declare function withScratchDir<T>(prefix: string, fn: (dir: string) => Promise<T>): Promise<T>;
|
|
341
|
-
//# sourceMappingURL=
|
|
341
|
+
//# sourceMappingURL=vault-prune.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-prune.d.ts","sourceRoot":"","sources":["../../src/node/vault-prune.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* vault — prune (protocol rev 40 §7.3; task 5.12a).
|
|
3
3
|
*
|
|
4
4
|
* The two-phase, ACYCLIC prune the client half owns:
|
|
5
5
|
*
|
|
@@ -37,16 +37,16 @@ import { mkdtempSync, rmSync } from "node:fs";
|
|
|
37
37
|
import { tmpdir } from "node:os";
|
|
38
38
|
import { join } from "node:path";
|
|
39
39
|
import { LocalError } from "../errors.js";
|
|
40
|
-
import {
|
|
40
|
+
import { VAULT_FORMAT, VAULT_SUITE, newVaultId, newHex32, signVaultObject, storedBytes, storedBytesSha256, } from "../namespaces/vault.crypto.js";
|
|
41
41
|
function fail(code, message, context, details, nextActions) {
|
|
42
42
|
throw new LocalError(message, context, { code, details, ...(nextActions ? { next_actions: nextActions } : {}) });
|
|
43
43
|
}
|
|
44
44
|
/** §7.3: at most 10 000 candidates per intent; larger prunes chunk into successive intents. */
|
|
45
|
-
export const
|
|
45
|
+
export const VAULT_MAX_PRUNE_CANDIDATES = 10_000;
|
|
46
46
|
/** The CLOSED V0 verifier identity set (`common.json#/$defs/implementation_id`). */
|
|
47
|
-
export const
|
|
47
|
+
export const VAULT_VERIFIER_IMPLEMENTATIONS = ["run402-cli", "r402s-verify"];
|
|
48
48
|
/** This SDK's identity when it attests. The other half of the pair is never ours to produce. */
|
|
49
|
-
export const
|
|
49
|
+
export const VAULT_SDK_VERIFIER_IMPLEMENTATION = "run402-cli";
|
|
50
50
|
/**
|
|
51
51
|
* What this lineage calls itself in a receipt's `implementation_version`.
|
|
52
52
|
*
|
|
@@ -55,7 +55,7 @@ export const GITVAULT_SDK_VERIFIER_IMPLEMENTATION = "run402-cli";
|
|
|
55
55
|
* moves for reasons that have nothing to do with either. Bump this when the
|
|
56
56
|
* verification logic or the revision it verifies changes.
|
|
57
57
|
*/
|
|
58
|
-
export const
|
|
58
|
+
export const VAULT_SDK_VERIFIER_VERSION = "run402-sdk/r402s-v0-rev40";
|
|
59
59
|
// ─── The GC root set + the pruneable universe (§7.3 step 1) ──────────────────
|
|
60
60
|
function receiptsOfHead(head) {
|
|
61
61
|
return [...head.wal_entries, head.ref_state, head.retention_roots];
|
|
@@ -145,8 +145,8 @@ export function planPruneCandidates(entries) {
|
|
|
145
145
|
const universe = collectPruneUniverse(entries);
|
|
146
146
|
const eligible = universe.filter((r) => !protectedIds.has(r.object_id));
|
|
147
147
|
return {
|
|
148
|
-
candidates: eligible.slice(0,
|
|
149
|
-
deferred_count: Math.max(0, eligible.length -
|
|
148
|
+
candidates: eligible.slice(0, VAULT_MAX_PRUNE_CANDIDATES),
|
|
149
|
+
deferred_count: Math.max(0, eligible.length - VAULT_MAX_PRUNE_CANDIDATES),
|
|
150
150
|
root_set: rootSet,
|
|
151
151
|
universe_count: universe.length,
|
|
152
152
|
};
|
|
@@ -201,22 +201,22 @@ export function checkRetentionEvolution(entries, roots, effectiveAdmittedAt, isE
|
|
|
201
201
|
export function buildPruneIntentCore(input, signingSeed) {
|
|
202
202
|
const deleteSet = sortPruneReceipts(input.delete_set);
|
|
203
203
|
if (deleteSet.length === 0)
|
|
204
|
-
fail("UPGRADE_REQUIRED", "a prune intent must name at least one candidate", "building the
|
|
205
|
-
if (deleteSet.length >
|
|
206
|
-
fail("UPGRADE_REQUIRED", `${deleteSet.length} candidates exceed the ${
|
|
204
|
+
fail("UPGRADE_REQUIRED", "a prune intent must name at least one candidate", "building the vault prune intent");
|
|
205
|
+
if (deleteSet.length > VAULT_MAX_PRUNE_CANDIDATES) {
|
|
206
|
+
fail("UPGRADE_REQUIRED", `${deleteSet.length} candidates exceed the ${VAULT_MAX_PRUNE_CANDIDATES} per-intent maximum; chunk into successive intents`, "building the vault prune intent", { candidates: deleteSet.length });
|
|
207
207
|
}
|
|
208
208
|
for (let i = 1; i < deleteSet.length; i++) {
|
|
209
209
|
if (!(deleteSet[i - 1].object_id < deleteSet[i].object_id)) {
|
|
210
|
-
fail("UPGRADE_REQUIRED", `delete_set is not sorted and pairwise-distinct at index ${i}`, "building the
|
|
210
|
+
fail("UPGRADE_REQUIRED", `delete_set is not sorted and pairwise-distinct at index ${i}`, "building the vault prune intent", { object_id: deleteSet[i].object_id });
|
|
211
211
|
}
|
|
212
212
|
}
|
|
213
213
|
const cycle = input.cycle ?? null;
|
|
214
214
|
const unsigned = {
|
|
215
|
-
format:
|
|
215
|
+
format: VAULT_FORMAT,
|
|
216
216
|
object_kind: "prune_intent_core",
|
|
217
|
-
suite:
|
|
217
|
+
suite: VAULT_SUITE,
|
|
218
218
|
repo_id: input.repo_id,
|
|
219
|
-
object_id: input.object_id ??
|
|
219
|
+
object_id: input.object_id ?? newVaultId("pi"),
|
|
220
220
|
gc_epoch: input.gc_epoch,
|
|
221
221
|
maintenance_cycle_id: cycle ? cycle.maintenance_cycle_id : null,
|
|
222
222
|
maintenance_prune_role: cycle ? cycle.maintenance_prune_role : null,
|
|
@@ -230,7 +230,7 @@ export function buildPruneIntentCore(input, signingSeed) {
|
|
|
230
230
|
delete_set: deleteSet,
|
|
231
231
|
nonce: input.nonce ?? newHex32(),
|
|
232
232
|
};
|
|
233
|
-
return
|
|
233
|
+
return signVaultObject(unsigned, signingSeed);
|
|
234
234
|
}
|
|
235
235
|
/** The stored-bytes hash of the complete signed core — what BOTH verifier receipts sign. */
|
|
236
236
|
export function pruneIntentCoreSha256(core) {
|
|
@@ -245,11 +245,11 @@ export function pruneIntentCoreSha256(core) {
|
|
|
245
245
|
*/
|
|
246
246
|
export function buildVerifierReceipt(input, signingSeed) {
|
|
247
247
|
const unsigned = {
|
|
248
|
-
format:
|
|
248
|
+
format: VAULT_FORMAT,
|
|
249
249
|
object_kind: "verifier_receipt",
|
|
250
|
-
suite:
|
|
250
|
+
suite: VAULT_SUITE,
|
|
251
251
|
repo_id: input.repo_id,
|
|
252
|
-
object_id: input.object_id ??
|
|
252
|
+
object_id: input.object_id ?? newVaultId("vr"),
|
|
253
253
|
intent_core_sha256: input.intent_core_sha256,
|
|
254
254
|
checkpoint_head_sha256: input.checkpoint_head_sha256,
|
|
255
255
|
cutoff_ticket_sha256: input.cutoff_ticket_sha256,
|
|
@@ -260,7 +260,7 @@ export function buildVerifierReceipt(input, signingSeed) {
|
|
|
260
260
|
implementation_version: input.implementation_version,
|
|
261
261
|
result: (input.retention_evolution_ok && input.candidates_outside_roots_ok ? "restored_and_verified" : "failed"),
|
|
262
262
|
};
|
|
263
|
-
return
|
|
263
|
+
return signVaultObject(unsigned, signingSeed);
|
|
264
264
|
}
|
|
265
265
|
/** The `verifier_receipt_ref` an intent carries for an uploaded receipt. */
|
|
266
266
|
export function verifierReceiptRef(receipt) {
|
|
@@ -285,27 +285,27 @@ export function verifierReceiptRef(receipt) {
|
|
|
285
285
|
export function buildPruneIntent(core, receipts, signingSeed) {
|
|
286
286
|
const coreSha = pruneIntentCoreSha256(core);
|
|
287
287
|
if (receipts.length !== 2) {
|
|
288
|
-
fail("UPGRADE_REQUIRED", `a prune intent carries exactly two verifier receipts, one per implementation (${
|
|
288
|
+
fail("UPGRADE_REQUIRED", `a prune intent carries exactly two verifier receipts, one per implementation (${VAULT_VERIFIER_IMPLEMENTATIONS.join(", ")}); got ${receipts.length}`, "building the vault prune intent", { supplied: receipts.map((r) => r.implementation_id) }, [{ action: "run r402s-verify against this intent core and pass its receipt alongside the SDK's own" }]);
|
|
289
289
|
}
|
|
290
|
-
for (const id of
|
|
290
|
+
for (const id of VAULT_VERIFIER_IMPLEMENTATIONS) {
|
|
291
291
|
const matching = receipts.filter((r) => r.implementation_id === id);
|
|
292
292
|
if (matching.length !== 1) {
|
|
293
|
-
fail("UPGRADE_REQUIRED", `exactly one verifier receipt per implementation is required; ${id} has ${matching.length}`, "building the
|
|
293
|
+
fail("UPGRADE_REQUIRED", `exactly one verifier receipt per implementation is required; ${id} has ${matching.length}`, "building the vault prune intent", { implementation_id: id });
|
|
294
294
|
}
|
|
295
295
|
}
|
|
296
296
|
const [a, b] = receipts;
|
|
297
297
|
const refs = receipts.map(verifierReceiptRef);
|
|
298
298
|
if (a.object_id === b.object_id || refs[0].stored_bytes_sha256 === refs[1].stored_bytes_sha256) {
|
|
299
|
-
fail("UPGRADE_REQUIRED", "the two verifier receipts must be distinct objects with distinct hashes", "building the
|
|
299
|
+
fail("UPGRADE_REQUIRED", "the two verifier receipts must be distinct objects with distinct hashes", "building the vault prune intent");
|
|
300
300
|
}
|
|
301
301
|
for (const r of receipts) {
|
|
302
302
|
if (r.repo_id !== core.repo_id)
|
|
303
|
-
fail("
|
|
303
|
+
fail("VAULT_ACCESS_DENIED", `verifier receipt ${r.object_id} attests a different vault`, "building the vault prune intent", { repo_id: r.repo_id });
|
|
304
304
|
if (r.intent_core_sha256 !== coreSha) {
|
|
305
|
-
fail("UPGRADE_REQUIRED", `verifier receipt ${r.object_id} signs a different intent core (${r.intent_core_sha256} ≠ ${coreSha})`, "building the
|
|
305
|
+
fail("UPGRADE_REQUIRED", `verifier receipt ${r.object_id} signs a different intent core (${r.intent_core_sha256} ≠ ${coreSha})`, "building the vault prune intent", { object_id: r.object_id });
|
|
306
306
|
}
|
|
307
307
|
if (r.result !== "restored_and_verified" || r.retention_evolution_ok !== true || r.candidates_outside_roots_ok !== true) {
|
|
308
|
-
fail("UPGRADE_REQUIRED", `verifier receipt ${r.object_id} does not attest restored_and_verified with both attestations true`, "building the
|
|
308
|
+
fail("UPGRADE_REQUIRED", `verifier receipt ${r.object_id} does not attest restored_and_verified with both attestations true`, "building the vault prune intent", {
|
|
309
309
|
object_id: r.object_id,
|
|
310
310
|
result: r.result,
|
|
311
311
|
retention_evolution_ok: r.retention_evolution_ok,
|
|
@@ -316,16 +316,16 @@ export function buildPruneIntent(core, receipts, signingSeed) {
|
|
|
316
316
|
// The two refs ride in the receipts' given order; the schema's `uniqueItems`
|
|
317
317
|
// is satisfied by the distinctness gate above, not by sorting.
|
|
318
318
|
const unsigned = {
|
|
319
|
-
format:
|
|
319
|
+
format: VAULT_FORMAT,
|
|
320
320
|
object_kind: "prune_intent",
|
|
321
|
-
suite:
|
|
321
|
+
suite: VAULT_SUITE,
|
|
322
322
|
repo_id: core.repo_id,
|
|
323
323
|
object_id: core.object_id,
|
|
324
324
|
core,
|
|
325
325
|
intent_core_sha256: coreSha,
|
|
326
326
|
verifier_receipts: refs,
|
|
327
327
|
};
|
|
328
|
-
return
|
|
328
|
+
return signVaultObject(unsigned, signingSeed);
|
|
329
329
|
}
|
|
330
330
|
/**
|
|
331
331
|
* Refuse a supplied core that the chain has moved past — BEFORE the receipts
|
|
@@ -340,13 +340,13 @@ export function buildPruneIntent(core, receipts, signingSeed) {
|
|
|
340
340
|
*/
|
|
341
341
|
export function assertPruneCoreStillCurrent(core, current) {
|
|
342
342
|
if (core.repo_id !== current.repo_id) {
|
|
343
|
-
fail("
|
|
343
|
+
fail("VAULT_ACCESS_DENIED", `the supplied intent core belongs to ${core.repo_id}, not ${current.repo_id}`, "submitting the vault prune intent", { repo_id: core.repo_id });
|
|
344
344
|
}
|
|
345
345
|
if (core.gc_epoch !== current.gc_epoch) {
|
|
346
|
-
fail("GC_EPOCH_STALE", `the supplied intent core was planned at gc_epoch ${core.gc_epoch}; the vault is at ${current.gc_epoch}`, "submitting the
|
|
346
|
+
fail("GC_EPOCH_STALE", `the supplied intent core was planned at gc_epoch ${core.gc_epoch}; the vault is at ${current.gc_epoch}`, "submitting the vault prune intent", { planned: core.gc_epoch, current: current.gc_epoch }, [{ action: "refetch the vault state and rebuild the intent at the current epoch" }]);
|
|
347
347
|
}
|
|
348
348
|
if (core.checkpoint_claim_set_sha256 !== current.checkpoint_claim_set_sha256) {
|
|
349
|
-
fail("GC_EPOCH_STALE", "the supplied intent core names a checkpoint that is no longer the latest; a fresh checkpoint landed after the plan", "submitting the
|
|
349
|
+
fail("GC_EPOCH_STALE", "the supplied intent core names a checkpoint that is no longer the latest; a fresh checkpoint landed after the plan", "submitting the vault prune intent", { planned: core.checkpoint_claim_set_sha256, current: current.checkpoint_claim_set_sha256 }, [{ action: "refetch the vault state and rebuild the intent at the current epoch" }]);
|
|
350
350
|
}
|
|
351
351
|
}
|
|
352
352
|
/**
|
|
@@ -407,4 +407,4 @@ export async function withScratchDir(prefix, fn) {
|
|
|
407
407
|
rmSync(dir, { recursive: true, force: true });
|
|
408
408
|
}
|
|
409
409
|
}
|
|
410
|
-
//# sourceMappingURL=
|
|
410
|
+
//# sourceMappingURL=vault-prune.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-prune.js","sourceRoot":"","sources":["../../src/node/vault-prune.ts"],"names":[],"mappings":"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"}
|