run402 4.24.0 → 4.25.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/cli.mjs +6 -6
- package/git-remote-run402.mjs +270 -0
- package/lib/command-manifest.mjs +11 -1
- package/lib/credentials.mjs +4 -0
- package/lib/domains.mjs +0 -14
- package/lib/gitvault.mjs +370 -0
- package/lib/init.mjs +143 -1
- package/lib/pay.test.mjs +0 -4
- package/package.json +8 -2
- package/sdk/dist/index.d.ts +20 -3
- package/sdk/dist/index.d.ts.map +1 -1
- package/sdk/dist/index.js +22 -3
- package/sdk/dist/index.js.map +1 -1
- package/sdk/dist/namespaces/admin.d.ts +0 -5
- package/sdk/dist/namespaces/admin.d.ts.map +1 -1
- package/sdk/dist/namespaces/admin.js +0 -9
- package/sdk/dist/namespaces/admin.js.map +1 -1
- package/sdk/dist/namespaces/assets.d.ts +1 -20
- package/sdk/dist/namespaces/assets.d.ts.map +1 -1
- package/sdk/dist/namespaces/assets.js +0 -27
- package/sdk/dist/namespaces/assets.js.map +1 -1
- package/sdk/dist/namespaces/auth.js +1 -1
- package/sdk/dist/namespaces/auth.js.map +1 -1
- package/sdk/dist/namespaces/domains.d.ts +0 -19
- package/sdk/dist/namespaces/domains.d.ts.map +1 -1
- package/sdk/dist/namespaces/domains.js +0 -19
- package/sdk/dist/namespaces/domains.js.map +1 -1
- package/sdk/dist/namespaces/gitvault.crypto.d.ts +319 -0
- package/sdk/dist/namespaces/gitvault.crypto.d.ts.map +1 -0
- package/sdk/dist/namespaces/gitvault.crypto.js +690 -0
- package/sdk/dist/namespaces/gitvault.crypto.js.map +1 -0
- package/sdk/dist/namespaces/gitvault.d.ts +473 -0
- package/sdk/dist/namespaces/gitvault.d.ts.map +1 -0
- package/sdk/dist/namespaces/gitvault.js +714 -0
- package/sdk/dist/namespaces/gitvault.js.map +1 -0
- package/sdk/dist/namespaces/gitvault.types.d.ts +481 -0
- package/sdk/dist/namespaces/gitvault.types.d.ts.map +1 -0
- package/sdk/dist/namespaces/gitvault.types.js +19 -0
- package/sdk/dist/namespaces/gitvault.types.js.map +1 -0
- package/sdk/dist/namespaces/org.d.ts +1 -3
- package/sdk/dist/namespaces/org.d.ts.map +1 -1
- package/sdk/dist/namespaces/org.js +6 -10
- package/sdk/dist/namespaces/org.js.map +1 -1
- package/sdk/dist/namespaces/pay.d.ts +0 -8
- package/sdk/dist/namespaces/pay.d.ts.map +1 -1
- package/sdk/dist/namespaces/pay.js.map +1 -1
- package/sdk/dist/namespaces/projects.d.ts +2 -2
- package/sdk/dist/namespaces/projects.d.ts.map +1 -1
- package/sdk/dist/namespaces/projects.js +4 -12
- package/sdk/dist/namespaces/projects.js.map +1 -1
- package/sdk/dist/namespaces/secrets.d.ts +0 -2
- package/sdk/dist/namespaces/secrets.d.ts.map +1 -1
- package/sdk/dist/namespaces/secrets.js +3 -10
- package/sdk/dist/namespaces/secrets.js.map +1 -1
- package/sdk/dist/namespaces/subdomains.d.ts +0 -2
- package/sdk/dist/namespaces/subdomains.d.ts.map +1 -1
- package/sdk/dist/namespaces/subdomains.js +5 -16
- package/sdk/dist/namespaces/subdomains.js.map +1 -1
- package/sdk/dist/namespaces/transfers.d.ts +0 -2
- package/sdk/dist/namespaces/transfers.d.ts.map +1 -1
- package/sdk/dist/namespaces/transfers.js +8 -10
- package/sdk/dist/namespaces/transfers.js.map +1 -1
- package/sdk/dist/namespaces/wallets.d.ts +0 -12
- package/sdk/dist/namespaces/wallets.d.ts.map +1 -1
- package/sdk/dist/namespaces/wallets.js +0 -14
- package/sdk/dist/namespaces/wallets.js.map +1 -1
- package/sdk/dist/node/gitvault-creation-journal.d.ts +222 -0
- package/sdk/dist/node/gitvault-creation-journal.d.ts.map +1 -0
- package/sdk/dist/node/gitvault-creation-journal.js +365 -0
- package/sdk/dist/node/gitvault-creation-journal.js.map +1 -0
- package/sdk/dist/node/gitvault-deploy.d.ts +211 -0
- package/sdk/dist/node/gitvault-deploy.d.ts.map +1 -0
- package/sdk/dist/node/gitvault-deploy.js +292 -0
- package/sdk/dist/node/gitvault-deploy.js.map +1 -0
- package/sdk/dist/node/gitvault-keystore.d.ts +207 -0
- package/sdk/dist/node/gitvault-keystore.d.ts.map +1 -0
- package/sdk/dist/node/gitvault-keystore.js +529 -0
- package/sdk/dist/node/gitvault-keystore.js.map +1 -0
- package/sdk/dist/node/gitvault-prune.d.ts +341 -0
- package/sdk/dist/node/gitvault-prune.d.ts.map +1 -0
- package/sdk/dist/node/gitvault-prune.js +410 -0
- package/sdk/dist/node/gitvault-prune.js.map +1 -0
- package/sdk/dist/node/gitvault-publication.d.ts +730 -0
- package/sdk/dist/node/gitvault-publication.d.ts.map +1 -0
- package/sdk/dist/node/gitvault-publication.js +1475 -0
- package/sdk/dist/node/gitvault-publication.js.map +1 -0
- package/sdk/dist/node/gitvault-snapshot.d.ts +190 -0
- package/sdk/dist/node/gitvault-snapshot.d.ts.map +1 -0
- package/sdk/dist/node/gitvault-snapshot.js +505 -0
- package/sdk/dist/node/gitvault-snapshot.js.map +1 -0
- package/sdk/dist/node/index.d.ts +11 -0
- package/sdk/dist/node/index.d.ts.map +1 -1
- package/sdk/dist/node/index.js +9 -0
- package/sdk/dist/node/index.js.map +1 -1
- package/sdk/dist/node/paid-fetch.d.ts.map +1 -1
- package/sdk/dist/node/paid-fetch.js +0 -4
- package/sdk/dist/node/paid-fetch.js.map +1 -1
- package/sdk/dist/node/sites-node.d.ts +1 -8
- package/sdk/dist/node/sites-node.d.ts.map +1 -1
- package/sdk/dist/node/sites-node.js +1 -7
- package/sdk/dist/node/sites-node.js.map +1 -1
- package/sdk/dist/scoped.d.ts +4 -35
- package/sdk/dist/scoped.d.ts.map +1 -1
- package/sdk/dist/scoped.js +9 -74
- package/sdk/dist/scoped.js.map +1 -1
- package/lib/sender-domain.mjs +0 -36
- package/sdk/dist/deprecate.d.ts +0 -23
- package/sdk/dist/deprecate.d.ts.map +0 -1
- package/sdk/dist/deprecate.js +0 -42
- package/sdk/dist/deprecate.js.map +0 -1
- package/sdk/dist/namespaces/sender-domain.d.ts +0 -47
- package/sdk/dist/namespaces/sender-domain.d.ts.map +0 -1
- package/sdk/dist/namespaces/sender-domain.js +0 -45
- package/sdk/dist/namespaces/sender-domain.js.map +0 -1
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* gitvault — the principal keystore (protocol rev 40 §5.1; task 5.2).
|
|
3
|
+
*
|
|
4
|
+
* Layout (under the active profile's config dir, beside the project-key cache
|
|
5
|
+
* `core/src/keystore.ts` manages — `RUN402_CONFIG_DIR` / `RUN402_WALLET` aware):
|
|
6
|
+
*
|
|
7
|
+
* <config>/gitvault/
|
|
8
|
+
* identity.json Ed25519 seed + X25519 private key (0600)
|
|
9
|
+
* repos/<repo_id>.json K_repo, trust pin, dual pins, last ref transaction (0600)
|
|
10
|
+
* repos/<repo_id>.lock/ per-repo lock (mkdir-atomic, 0700)
|
|
11
|
+
* receipts/<repo_id>.recovery_receipt.json the recovery receipt (NOT a secret; more copies better)
|
|
12
|
+
* journal/<client_creation_id>.json six-stage creation journals (task 5.3)
|
|
13
|
+
* audit.log append-only JSON lines (0600)
|
|
14
|
+
*
|
|
15
|
+
* Discipline (spec: "Writes SHALL be atomic with per-repo locks, no-follow
|
|
16
|
+
* creation, and permission audits"): directories 0700, files 0600, every
|
|
17
|
+
* write = temp file (O_NOFOLLOW|O_EXCL) + fsync + rename + directory fsync,
|
|
18
|
+
* and `auditKeystorePermissions()` runs at open so a world-readable identity
|
|
19
|
+
* is a named finding, never silent.
|
|
20
|
+
*
|
|
21
|
+
* Transitions (protocol §5.1 partial-loss table) are DERIVED by
|
|
22
|
+
* {@link GitvaultKeystore.assess} and acted on by explicit methods — the
|
|
23
|
+
* keystore never guesses:
|
|
24
|
+
* - repo file lost + identity intact → `restoreRepoFromEnvelope` (own envelope)
|
|
25
|
+
* - signing key lost, K_repo held → `read_only` (clear report)
|
|
26
|
+
* - stale pin → `stale_pin` (re-verify from genesis; 5.4)
|
|
27
|
+
* - whole keystore lost → `VAULT_UNRECOVERABLE` (§0, verbatim)
|
|
28
|
+
*/
|
|
29
|
+
import type { GitvaultEncryptionKeypair, GitvaultKeyEnvelope, GitvaultRecoveryReceipt, GitvaultSigningKeypair, GitvaultVaultGenesis } from "../namespaces/gitvault.types.js";
|
|
30
|
+
/** `identity.json` — the principal's two private keys. Either half MAY be absent after partial loss. */
|
|
31
|
+
export interface GitvaultIdentityFile {
|
|
32
|
+
version: 1;
|
|
33
|
+
/** Ed25519 32-byte seed, lowercase hex. Absent ⇒ the signing key is lost (read-only principal). */
|
|
34
|
+
signing_seed_hex?: string;
|
|
35
|
+
/** Raw Ed25519 public key, base64url. */
|
|
36
|
+
signing_pubkey: string;
|
|
37
|
+
/** `vk_` fingerprint. */
|
|
38
|
+
signing_fingerprint: string;
|
|
39
|
+
/** X25519 32-byte private key, lowercase hex. Absent ⇒ no envelope can be opened. */
|
|
40
|
+
encryption_private_key_hex?: string;
|
|
41
|
+
/** Raw X25519 public key, base64url. */
|
|
42
|
+
encryption_pubkey: string;
|
|
43
|
+
/** `ek_` fingerprint. */
|
|
44
|
+
encryption_fingerprint: string;
|
|
45
|
+
created_at: string;
|
|
46
|
+
}
|
|
47
|
+
/** The dual pins (protocol §6.4): the newest authenticated head and its generation. */
|
|
48
|
+
export interface GitvaultHeadPin {
|
|
49
|
+
generation: string;
|
|
50
|
+
head_sha256: string;
|
|
51
|
+
pinned_at: string;
|
|
52
|
+
}
|
|
53
|
+
/** `repos/<repo_id>.json` — everything per-vault the principal must not lose. */
|
|
54
|
+
export interface GitvaultRepoFile {
|
|
55
|
+
version: 1;
|
|
56
|
+
repo_id: string;
|
|
57
|
+
org_id: string;
|
|
58
|
+
project_id: string;
|
|
59
|
+
/** Raw 32-byte K_repo, lowercase hex. */
|
|
60
|
+
k_repo_hex: string;
|
|
61
|
+
/** The current epoch (V0: always `0000000000000001`). */
|
|
62
|
+
epoch: string;
|
|
63
|
+
/** Trust pin: the admitted genesis stored-bytes hash. */
|
|
64
|
+
genesis_sha256: string;
|
|
65
|
+
/** `highest_authenticated` (§6.4): chain-verified; a listing below it is `GENERATION_REGRESSION`. `null` until the first head is authenticated. */
|
|
66
|
+
head_pin: GitvaultHeadPin | null;
|
|
67
|
+
/** `highest_materialized` (§6.4): decrypted + applied — the ONLY push base. Absent/`null` ⇒ never materialized. */
|
|
68
|
+
materialized_pin?: GitvaultHeadPin | null;
|
|
69
|
+
/** The verified-prefix watermark of a budget-interrupted verification (§9.3 — resumable). Absent/`null` when none is pending. */
|
|
70
|
+
verified_prefix?: GitvaultHeadPin | null;
|
|
71
|
+
/** The last ref transaction this principal published (5.4 fills it). */
|
|
72
|
+
last_ref_transaction: Record<string, unknown> | null;
|
|
73
|
+
/** How this file came to exist — creation, or a §5.1 restore from the principal's own envelope. */
|
|
74
|
+
provenance: "created" | "restored_from_envelope";
|
|
75
|
+
updated_at: string;
|
|
76
|
+
}
|
|
77
|
+
/** One `audit.log` line. */
|
|
78
|
+
export interface GitvaultAuditEntry {
|
|
79
|
+
at: string;
|
|
80
|
+
event: GitvaultAuditEvent;
|
|
81
|
+
repo_id?: string;
|
|
82
|
+
details?: Record<string, unknown>;
|
|
83
|
+
}
|
|
84
|
+
export type GitvaultAuditEvent = "keystore_opened" | "identity_created" | "repo_saved" | "repo_restored_from_envelope" | "recovery_receipt_stored" | "permission_finding" | "lock_acquired" | "lock_released" | "lock_stale_reclaimed" | "transition_assessed" | "journal_stage";
|
|
85
|
+
/** A permission-audit finding (never fatal by default; surfaced to doctor). */
|
|
86
|
+
export interface GitvaultPermissionFinding {
|
|
87
|
+
path: string;
|
|
88
|
+
problem: "world_or_group_accessible" | "symlink" | "not_owned_by_user" | "missing";
|
|
89
|
+
mode?: string;
|
|
90
|
+
}
|
|
91
|
+
/** The §5.1 partial-loss transition the keystore is in for one vault. */
|
|
92
|
+
export type GitvaultKeystoreState = {
|
|
93
|
+
state: "ready";
|
|
94
|
+
repo: GitvaultRepoFile;
|
|
95
|
+
} | {
|
|
96
|
+
state: "repo_state_lost_identity_intact";
|
|
97
|
+
next_action: "restore_from_envelope";
|
|
98
|
+
} | {
|
|
99
|
+
state: "read_only";
|
|
100
|
+
repo: GitvaultRepoFile;
|
|
101
|
+
reason: "signing_key_lost";
|
|
102
|
+
} | {
|
|
103
|
+
state: "stale_pin";
|
|
104
|
+
repo: GitvaultRepoFile;
|
|
105
|
+
next_action: "reverify_from_genesis";
|
|
106
|
+
} | {
|
|
107
|
+
state: "unrecoverable";
|
|
108
|
+
code: "VAULT_UNRECOVERABLE";
|
|
109
|
+
statement: string;
|
|
110
|
+
doctor_text: string;
|
|
111
|
+
};
|
|
112
|
+
export interface GitvaultKeystoreOptions {
|
|
113
|
+
/** Override the keystore root (tests). Defaults to `<config dir>/gitvault`. */
|
|
114
|
+
rootDir?: string;
|
|
115
|
+
/** Clock injection (tests). */
|
|
116
|
+
now?: () => Date;
|
|
117
|
+
/** When true, a permission finding on open throws `GITVAULT_KEYSTORE_PERMISSIONS` instead of only auditing. */
|
|
118
|
+
strictPermissions?: boolean;
|
|
119
|
+
}
|
|
120
|
+
export interface GitvaultLockOptions {
|
|
121
|
+
/** How long a lock is considered live before it is reclaimed as stale (ms). Default 10 min. */
|
|
122
|
+
staleAfterMs?: number;
|
|
123
|
+
/** Total wait budget before `GITVAULT_KEYSTORE_LOCKED` (ms). Default 30 s. */
|
|
124
|
+
timeoutMs?: number;
|
|
125
|
+
}
|
|
126
|
+
/** Default keystore root: `<active profile config dir>/gitvault`. */
|
|
127
|
+
export declare function getGitvaultKeystoreRoot(): string;
|
|
128
|
+
/**
|
|
129
|
+
* Atomic, no-follow, fsynced write: `O_WRONLY|O_CREAT|O_EXCL|O_NOFOLLOW` on a
|
|
130
|
+
* temp sibling, fsync, rename over the target, fsync the directory.
|
|
131
|
+
*/
|
|
132
|
+
export declare function writeFileAtomic0600(path: string, text: string): void;
|
|
133
|
+
/** No-follow read: a symlinked keystore file is a refusal, not a read. */
|
|
134
|
+
export declare function readFileNoFollow(path: string): string | null;
|
|
135
|
+
export declare class GitvaultKeystore {
|
|
136
|
+
readonly rootDir: string;
|
|
137
|
+
private readonly now;
|
|
138
|
+
private readonly strictPermissions;
|
|
139
|
+
constructor(options?: GitvaultKeystoreOptions);
|
|
140
|
+
/** Open (creating the directory skeleton) and run the permission audit. */
|
|
141
|
+
static open(options?: GitvaultKeystoreOptions): GitvaultKeystore;
|
|
142
|
+
get identityPath(): string;
|
|
143
|
+
get reposDir(): string;
|
|
144
|
+
get receiptsDir(): string;
|
|
145
|
+
get journalDir(): string;
|
|
146
|
+
get auditLogPath(): string;
|
|
147
|
+
repoPath(repoId: string): string;
|
|
148
|
+
recoveryReceiptPath(repoId: string): string;
|
|
149
|
+
/** Audit every keystore path that exists; findings are recorded in `audit.log` and returned. */
|
|
150
|
+
auditPermissions(): GitvaultPermissionFinding[];
|
|
151
|
+
/** Append one JSON line to `audit.log` (0600, created no-follow). */
|
|
152
|
+
audit(event: GitvaultAuditEvent, repoId?: string, details?: Record<string, unknown>): void;
|
|
153
|
+
/** Read the audit log (newest last). */
|
|
154
|
+
readAuditLog(): GitvaultAuditEntry[];
|
|
155
|
+
readIdentity(): GitvaultIdentityFile | null;
|
|
156
|
+
/** Create the identity if absent; never overwrites an existing one. */
|
|
157
|
+
ensureIdentity(): GitvaultIdentityFile;
|
|
158
|
+
/** The signing keypair, or `null` when the signing seed is lost (read-only principal). */
|
|
159
|
+
signingKeypair(identity?: GitvaultIdentityFile): GitvaultSigningKeypair | null;
|
|
160
|
+
/** The encryption keypair, or `null` when the X25519 private key is lost. */
|
|
161
|
+
encryptionKeypair(identity?: GitvaultIdentityFile): GitvaultEncryptionKeypair | null;
|
|
162
|
+
private requireIdentity;
|
|
163
|
+
readRepo(repoId: string): GitvaultRepoFile | null;
|
|
164
|
+
listRepoIds(): string[];
|
|
165
|
+
/** Save (create or replace) a repo file under the per-repo lock. */
|
|
166
|
+
saveRepo(repo: Omit<GitvaultRepoFile, "version" | "updated_at">): GitvaultRepoFile;
|
|
167
|
+
/** Update the dual pins / last ref transaction without touching key material. */
|
|
168
|
+
updateRepo(repoId: string, patch: Partial<Pick<GitvaultRepoFile, "head_pin" | "materialized_pin" | "verified_prefix" | "last_ref_transaction" | "epoch">>): GitvaultRepoFile;
|
|
169
|
+
saveRecoveryReceipt(receipt: GitvaultRecoveryReceipt): void;
|
|
170
|
+
readRecoveryReceipt(repoId: string): GitvaultRecoveryReceipt | null;
|
|
171
|
+
/**
|
|
172
|
+
* Run `fn` holding the per-repo lock (`repos/<repo_id>.lock/`, mkdir-atomic).
|
|
173
|
+
* A lock older than `staleAfterMs` whose recorded pid is dead is reclaimed
|
|
174
|
+
* (audited). Re-entrant for the same process+repo.
|
|
175
|
+
*/
|
|
176
|
+
withRepoLock<T>(repoId: string, fn: () => T, options?: GitvaultLockOptions): T;
|
|
177
|
+
private readonly held;
|
|
178
|
+
private reclaimStaleLock;
|
|
179
|
+
/**
|
|
180
|
+
* Derive the partial-loss transition for one vault. `expectedGenesisSha256`
|
|
181
|
+
* (from a freshly listed genesis, 5.4) turns a pin mismatch into `stale_pin`.
|
|
182
|
+
*/
|
|
183
|
+
assess(repoId: string, expectedGenesisSha256?: string): GitvaultKeystoreState;
|
|
184
|
+
/**
|
|
185
|
+
* §5.1 "repo file lost + identity intact → restore K_repo from own envelope".
|
|
186
|
+
* The genesis is checked (signature + key bindings against the stored
|
|
187
|
+
* envelope + the recovery receipt/pin when one survives) BEFORE the envelope
|
|
188
|
+
* is opened; the restored file is marked `restored_from_envelope`.
|
|
189
|
+
*/
|
|
190
|
+
restoreRepoFromEnvelope(input: {
|
|
191
|
+
genesis: GitvaultVaultGenesis;
|
|
192
|
+
envelope: GitvaultKeyEnvelope;
|
|
193
|
+
/** A surviving receipt (on disk or supplied) authenticates the genesis; without one the restore is labeled unauthenticated salvage. */
|
|
194
|
+
recovery_receipt?: GitvaultRecoveryReceipt | null;
|
|
195
|
+
}): Promise<{
|
|
196
|
+
repo: GitvaultRepoFile;
|
|
197
|
+
trust: "receipt" | "unauthenticated_salvage";
|
|
198
|
+
}>;
|
|
199
|
+
/** Identity fingerprints for display/doctor (never key material). */
|
|
200
|
+
identitySummary(): {
|
|
201
|
+
signing_fingerprint: string;
|
|
202
|
+
encryption_fingerprint: string;
|
|
203
|
+
signing_key_present: boolean;
|
|
204
|
+
encryption_key_present: boolean;
|
|
205
|
+
} | null;
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=gitvault-keystore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitvault-keystore.d.ts","sourceRoot":"","sources":["../../src/node/gitvault-keystore.ts"],"names":[],"mappings":"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"}
|