@the-ai-company/cbio-node-runtime 0.33.0 → 1.0.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.
Files changed (108) hide show
  1. package/README.md +138 -9
  2. package/dist/clients/agent/client.d.ts +9 -0
  3. package/dist/clients/agent/client.js +72 -0
  4. package/dist/clients/agent/client.js.map +1 -0
  5. package/dist/clients/agent/contracts.d.ts +34 -0
  6. package/dist/clients/agent/contracts.js +2 -0
  7. package/dist/clients/agent/contracts.js.map +1 -0
  8. package/dist/clients/agent/index.d.ts +3 -0
  9. package/dist/clients/agent/index.js +2 -0
  10. package/dist/clients/agent/index.js.map +1 -0
  11. package/dist/clients/owner/client.d.ts +18 -0
  12. package/dist/clients/owner/client.js +169 -0
  13. package/dist/clients/owner/client.js.map +1 -0
  14. package/dist/clients/owner/contracts.d.ts +34 -0
  15. package/dist/clients/owner/contracts.js +2 -0
  16. package/dist/clients/owner/contracts.js.map +1 -0
  17. package/dist/clients/owner/index.d.ts +3 -0
  18. package/dist/clients/owner/index.js +2 -0
  19. package/dist/clients/owner/index.js.map +1 -0
  20. package/dist/errors.d.ts +2 -1
  21. package/dist/errors.js +1 -0
  22. package/dist/errors.js.map +1 -1
  23. package/dist/runtime/index.d.ts +8 -8
  24. package/dist/runtime/index.js +8 -5
  25. package/dist/runtime/index.js.map +1 -1
  26. package/dist/storage/fs.d.ts +1 -0
  27. package/dist/storage/fs.js +28 -0
  28. package/dist/storage/fs.js.map +1 -1
  29. package/dist/storage/memory.d.ts +1 -0
  30. package/dist/storage/memory.js +20 -0
  31. package/dist/storage/memory.js.map +1 -1
  32. package/dist/storage/provider.d.ts +2 -0
  33. package/dist/vault-core/contracts.d.ts +230 -0
  34. package/dist/vault-core/contracts.js +2 -0
  35. package/dist/vault-core/contracts.js.map +1 -0
  36. package/dist/vault-core/core.d.ts +21 -0
  37. package/dist/vault-core/core.js +335 -0
  38. package/dist/vault-core/core.js.map +1 -0
  39. package/dist/vault-core/defaults.d.ts +141 -0
  40. package/dist/vault-core/defaults.js +602 -0
  41. package/dist/vault-core/defaults.js.map +1 -0
  42. package/dist/vault-core/errors.d.ts +4 -0
  43. package/dist/vault-core/errors.js +9 -0
  44. package/dist/vault-core/errors.js.map +1 -0
  45. package/dist/vault-core/index.d.ts +6 -0
  46. package/dist/vault-core/index.js +5 -0
  47. package/dist/vault-core/index.js.map +1 -0
  48. package/dist/vault-core/persistence.d.ts +87 -0
  49. package/dist/vault-core/persistence.js +309 -0
  50. package/dist/vault-core/persistence.js.map +1 -0
  51. package/dist/vault-core/ports.d.ts +101 -0
  52. package/dist/vault-core/ports.js +2 -0
  53. package/dist/vault-core/ports.js.map +1 -0
  54. package/dist/vault-ingress/defaults.d.ts +14 -0
  55. package/dist/vault-ingress/defaults.js +41 -0
  56. package/dist/vault-ingress/defaults.js.map +1 -0
  57. package/dist/vault-ingress/flow-factories.d.ts +24 -0
  58. package/dist/vault-ingress/flow-factories.js +48 -0
  59. package/dist/vault-ingress/flow-factories.js.map +1 -0
  60. package/dist/vault-ingress/index.d.ts +81 -0
  61. package/dist/vault-ingress/index.js +357 -0
  62. package/dist/vault-ingress/index.js.map +1 -0
  63. package/docs/ARCHITECTURE.md +44 -76
  64. package/docs/REFERENCE.md +239 -133
  65. package/docs/WORKS_WITH_CUSTOM_FETCH.md +16 -191
  66. package/docs/es/README.md +8 -24
  67. package/docs/fr/README.md +8 -24
  68. package/docs/ja/README.md +8 -24
  69. package/docs/ko/README.md +8 -24
  70. package/docs/pt/README.md +8 -24
  71. package/docs/zh/README.md +21 -7
  72. package/package.json +2 -10
  73. package/dist/agent/agent.d.ts +0 -234
  74. package/dist/agent/agent.js +0 -565
  75. package/dist/agent/agent.js.map +0 -1
  76. package/dist/audit/ActivityLog.d.ts +0 -25
  77. package/dist/audit/ActivityLog.js +0 -66
  78. package/dist/audit/ActivityLog.js.map +0 -1
  79. package/dist/http/authClient.d.ts +0 -26
  80. package/dist/http/authClient.js +0 -132
  81. package/dist/http/authClient.js.map +0 -1
  82. package/dist/http/localAuthProxy.d.ts +0 -33
  83. package/dist/http/localAuthProxy.js +0 -93
  84. package/dist/http/localAuthProxy.js.map +0 -1
  85. package/dist/http/secretAcquisition.d.ts +0 -54
  86. package/dist/http/secretAcquisition.js +0 -177
  87. package/dist/http/secretAcquisition.js.map +0 -1
  88. package/dist/protocol/childSecretNaming.d.ts +0 -7
  89. package/dist/protocol/childSecretNaming.js +0 -12
  90. package/dist/protocol/childSecretNaming.js.map +0 -1
  91. package/dist/protocol/identity.d.ts +0 -8
  92. package/dist/protocol/identity.js +0 -16
  93. package/dist/protocol/identity.js.map +0 -1
  94. package/dist/sealed/index.d.ts +0 -6
  95. package/dist/sealed/index.js +0 -6
  96. package/dist/sealed/index.js.map +0 -1
  97. package/dist/vault/secretPolicy.d.ts +0 -3
  98. package/dist/vault/secretPolicy.js +0 -14
  99. package/dist/vault/secretPolicy.js.map +0 -1
  100. package/dist/vault/vault.d.ts +0 -91
  101. package/dist/vault/vault.js +0 -534
  102. package/dist/vault/vault.js.map +0 -1
  103. package/docs/TODO-multi-vault.md +0 -29
  104. package/docs/spec/runtime/README.md +0 -27
  105. package/docs/spec/runtime/activity-log.md +0 -67
  106. package/docs/spec/runtime/managed-agent-record.md +0 -52
  107. package/docs/spec/runtime/merge-rules.md +0 -52
  108. package/docs/spec/runtime/secret-origin-policy.md +0 -46
@@ -0,0 +1,6 @@
1
+ export { createVaultCore, DefaultVaultCore } from "./core.js";
2
+ export { VaultCoreError } from "./errors.js";
3
+ export { createDefaultVaultCoreDependencies, type CreateDefaultVaultCoreDependenciesOptions, type DefaultPolicyEngineOptions, DefaultPolicyEngine, HttpDispatchExecutor, InMemoryAgentIdentityRegistry, InMemoryCapabilityRevocationRegistry, InMemoryCustomHttpFlowRegistry, InMemoryRateLimitStore, InMemoryReplayGuard, InMemoryAuditLog, InMemoryOwnerIdentityRegistry, InMemorySecretCustody, InMemorySecretRepository, RandomIdGenerator, SignatureOwnerProofVerifier, type SignatureAgentProofVerifierOptions, SignatureAgentProofVerifier, SystemClock, } from "./defaults.js";
4
+ export { createPersistentVaultCoreDependencies, FileAuditLog as PersistentVaultAuditLog, FileCapabilityRevocationRegistry as PersistentVaultCapabilityRevocationRegistry, FileCustomHttpFlowRegistry as PersistentVaultCustomHttpFlowRegistry, FileRateLimitStore as PersistentVaultRateLimitStore, FileReplayGuard as PersistentVaultReplayGuard, FileSecretCustody as PersistentVaultSecretCustody, FileSecretRepository as PersistentVaultSecretRepository, } from "./persistence.js";
5
+ export type { AgentCapability, AgentIdentityRecord, AgentProof, OwnerAuditRequest, OwnerRegisterAgentIdentityCommand, OwnerRegisterCustomHttpFlowCommand, OwnerRegisterOwnerIdentityCommand, OwnerIdentityRecord, CustomHttpFlowDefinition, OwnerProof, AuditEntry, AuditQuery, DispatchAuthorization, DispatchInstruction, DispatchRequest, DispatchResult, IssuerWriteSecretCommand, OwnerWriteSecretCommand, SecretAlias, SecretId, SecretRecord, SecretVersion, VaultPrincipal, VaultPrincipalKind, VaultTargetBinding, VaultWriteSecretCommand, VaultId, } from "./contracts.js";
6
+ export type { AgentIdentityRegistry, AgentProofVerifier, AuditLog, Clock, IdGenerator, OwnerIdentityRegistry, OwnerProofVerifier, PolicyEngine, RateLimitStore, ReplayGuard, CustomHttpFlowRegistry, SecretRepository, SecretCustody, TrustedExecutor, VaultCore, VaultCoreDependencies, CapabilityRevocationRegistry, } from "./ports.js";
@@ -0,0 +1,5 @@
1
+ export { createVaultCore, DefaultVaultCore } from "./core.js";
2
+ export { VaultCoreError } from "./errors.js";
3
+ export { createDefaultVaultCoreDependencies, DefaultPolicyEngine, HttpDispatchExecutor, InMemoryAgentIdentityRegistry, InMemoryCapabilityRevocationRegistry, InMemoryCustomHttpFlowRegistry, InMemoryRateLimitStore, InMemoryReplayGuard, InMemoryAuditLog, InMemoryOwnerIdentityRegistry, InMemorySecretCustody, InMemorySecretRepository, RandomIdGenerator, SignatureOwnerProofVerifier, SignatureAgentProofVerifier, SystemClock, } from "./defaults.js";
4
+ export { createPersistentVaultCoreDependencies, FileAuditLog as PersistentVaultAuditLog, FileCapabilityRevocationRegistry as PersistentVaultCapabilityRevocationRegistry, FileCustomHttpFlowRegistry as PersistentVaultCustomHttpFlowRegistry, FileRateLimitStore as PersistentVaultRateLimitStore, FileReplayGuard as PersistentVaultReplayGuard, FileSecretCustody as PersistentVaultSecretCustody, FileSecretRepository as PersistentVaultSecretRepository, } from "./persistence.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vault-core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,kCAAkC,EAGlC,mBAAmB,EACnB,oBAAoB,EACpB,6BAA6B,EAC7B,oCAAoC,EACpC,8BAA8B,EAC9B,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,6BAA6B,EAC7B,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EACjB,2BAA2B,EAE3B,2BAA2B,EAC3B,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,qCAAqC,EACrC,YAAY,IAAI,uBAAuB,EACvC,gCAAgC,IAAI,2CAA2C,EAC/E,0BAA0B,IAAI,qCAAqC,EACnE,kBAAkB,IAAI,6BAA6B,EACnD,eAAe,IAAI,0BAA0B,EAC7C,iBAAiB,IAAI,4BAA4B,EACjD,oBAAoB,IAAI,+BAA+B,GACxD,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,87 @@
1
+ import type { IStorageProvider } from "../storage/provider.js";
2
+ import type { AuditEntry, AuditQuery, VaultId, CustomHttpFlowDefinition, SecretAlias, SecretId, SecretRecord } from "./contracts.js";
3
+ import type { AuditLog, CapabilityRevocationRegistry, CustomHttpFlowRegistry, RateLimitStore, ReplayGuard, SecretCustody, SecretRepository } from "./ports.js";
4
+ import { createDefaultVaultCoreDependencies, type CreateDefaultVaultCoreDependenciesOptions } from "./defaults.js";
5
+ import type { DispatchRequest } from "./contracts.js";
6
+ export declare class FileSecretRepository implements SecretRepository {
7
+ private readonly _storage;
8
+ private readonly _key;
9
+ private readonly _lockKey;
10
+ constructor(_storage: IStorageProvider, _key?: string, _lockKey?: string);
11
+ private loadState;
12
+ save(record: SecretRecord): Promise<void>;
13
+ delete(secretId: SecretId): Promise<void>;
14
+ getByAlias(alias: SecretAlias): Promise<SecretRecord | null>;
15
+ getById(secretId: SecretId): Promise<SecretRecord | null>;
16
+ }
17
+ export declare class FileAuditLog implements AuditLog {
18
+ private readonly _storage;
19
+ private readonly _key;
20
+ private readonly _lockKey;
21
+ constructor(_storage: IStorageProvider, _key?: string, _lockKey?: string);
22
+ private hash;
23
+ private verifyEnvelopeChain;
24
+ private loadEntries;
25
+ append(entry: AuditEntry): Promise<void>;
26
+ query(query: AuditQuery): Promise<readonly AuditEntry[]>;
27
+ }
28
+ export declare class FileSecretCustody implements SecretCustody {
29
+ private readonly _storage;
30
+ private readonly _custodyKey;
31
+ private readonly _keyPrefix;
32
+ constructor(_storage: IStorageProvider, _custodyKey: string, _keyPrefix?: string);
33
+ private key;
34
+ store(secretId: SecretId, plaintext: string): Promise<void>;
35
+ load(secretId: SecretId): Promise<string | null>;
36
+ delete(secretId: SecretId): Promise<void>;
37
+ }
38
+ export declare class FileReplayGuard implements ReplayGuard {
39
+ private readonly _storage;
40
+ private readonly _key;
41
+ private readonly _lockKey;
42
+ private readonly _ttlMs;
43
+ constructor(_storage: IStorageProvider, _key?: string, _lockKey?: string, _ttlMs?: number);
44
+ assertNotReplayed(request: DispatchRequest): Promise<void>;
45
+ }
46
+ export declare class FileRateLimitStore implements RateLimitStore {
47
+ private readonly _storage;
48
+ private readonly _key;
49
+ private readonly _lockKey;
50
+ constructor(_storage: IStorageProvider, _key?: string, _lockKey?: string);
51
+ consume(key: string, maxRequests: number, windowMs: number, nowMs: number): Promise<void>;
52
+ }
53
+ export declare class FileCapabilityRevocationRegistry implements CapabilityRevocationRegistry {
54
+ private readonly _storage;
55
+ private readonly _key;
56
+ private readonly _lockKey;
57
+ constructor(_storage: IStorageProvider, _key?: string, _lockKey?: string);
58
+ private compositeKey;
59
+ get(vaultId: VaultId, agentId: string, capabilityId: string): Promise<number>;
60
+ revoke(vaultId: VaultId, agentId: string, capabilityId: string): Promise<number>;
61
+ }
62
+ export declare class FileCustomHttpFlowRegistry implements CustomHttpFlowRegistry {
63
+ private readonly _storage;
64
+ private readonly _key;
65
+ private readonly _lockKey;
66
+ constructor(_storage: IStorageProvider, _key?: string, _lockKey?: string);
67
+ private loadState;
68
+ register(flow: CustomHttpFlowDefinition): Promise<void>;
69
+ get(vaultId: VaultId, flowId: string): Promise<CustomHttpFlowDefinition | null>;
70
+ }
71
+ export declare function createPersistentVaultCoreDependencies(storage: IStorageProvider, options?: CreateDefaultVaultCoreDependenciesOptions): {
72
+ vaultId: ReturnType<typeof createDefaultVaultCoreDependencies>["vaultId"];
73
+ secrets: FileSecretRepository;
74
+ custody: FileSecretCustody;
75
+ policy: ReturnType<typeof createDefaultVaultCoreDependencies>["policy"];
76
+ audit: FileAuditLog;
77
+ executor: ReturnType<typeof createDefaultVaultCoreDependencies>["executor"];
78
+ agentIdentities: ReturnType<typeof createDefaultVaultCoreDependencies>["agentIdentities"];
79
+ ownerIdentities: ReturnType<typeof createDefaultVaultCoreDependencies>["ownerIdentities"];
80
+ proofVerifier: ReturnType<typeof createDefaultVaultCoreDependencies>["proofVerifier"];
81
+ ownerProofVerifier: ReturnType<typeof createDefaultVaultCoreDependencies>["ownerProofVerifier"];
82
+ replayGuard: ReplayGuard;
83
+ capabilityRevocations: CapabilityRevocationRegistry;
84
+ customFlows: CustomHttpFlowRegistry;
85
+ clock: ReturnType<typeof createDefaultVaultCoreDependencies>["clock"];
86
+ ids: ReturnType<typeof createDefaultVaultCoreDependencies>["ids"];
87
+ };
@@ -0,0 +1,309 @@
1
+ import { sealBlob, unsealBlob } from "../sealed/seal.js";
2
+ import { DefaultPolicyEngine, createDefaultVaultCoreDependencies, } from "./defaults.js";
3
+ import { createHash } from "node:crypto";
4
+ import { VaultCoreError } from "./errors.js";
5
+ function serializeJson(value) {
6
+ return Buffer.from(JSON.stringify(value, null, 2), "utf8");
7
+ }
8
+ async function readJson(storage, key, fallback) {
9
+ const payload = await storage.read(key);
10
+ if (!payload) {
11
+ return fallback;
12
+ }
13
+ return JSON.parse(payload.toString("utf8"));
14
+ }
15
+ async function withStorageLock(storage, key, task) {
16
+ if (storage.withLock) {
17
+ return storage.withLock(key, task);
18
+ }
19
+ return task();
20
+ }
21
+ export class FileSecretRepository {
22
+ _storage;
23
+ _key;
24
+ _lockKey;
25
+ constructor(_storage, _key = "vault/secrets.json", _lockKey = "vault/locks/secrets") {
26
+ this._storage = _storage;
27
+ this._key = _key;
28
+ this._lockKey = _lockKey;
29
+ }
30
+ async loadState() {
31
+ return readJson(this._storage, this._key, { records: [] });
32
+ }
33
+ async save(record) {
34
+ await withStorageLock(this._storage, this._lockKey, async () => {
35
+ const state = await this.loadState();
36
+ const next = state.records.filter((candidate) => candidate.secretId.value !== record.secretId.value);
37
+ next.push(record);
38
+ await this._storage.write(this._key, serializeJson({ records: next }));
39
+ });
40
+ }
41
+ async delete(secretId) {
42
+ await withStorageLock(this._storage, this._lockKey, async () => {
43
+ const state = await this.loadState();
44
+ const next = state.records.filter((candidate) => candidate.secretId.value !== secretId.value);
45
+ await this._storage.write(this._key, serializeJson({ records: next }));
46
+ });
47
+ }
48
+ async getByAlias(alias) {
49
+ const state = await this.loadState();
50
+ return state.records.find((record) => record.alias.value === alias.value) ?? null;
51
+ }
52
+ async getById(secretId) {
53
+ const state = await this.loadState();
54
+ return state.records.find((record) => record.secretId.value === secretId.value) ?? null;
55
+ }
56
+ }
57
+ export class FileAuditLog {
58
+ _storage;
59
+ _key;
60
+ _lockKey;
61
+ constructor(_storage, _key = "vault/audit.jsonl", _lockKey = "vault/locks/audit") {
62
+ this._storage = _storage;
63
+ this._key = _key;
64
+ this._lockKey = _lockKey;
65
+ }
66
+ hash(value) {
67
+ return createHash("sha256").update(value).digest("hex");
68
+ }
69
+ verifyEnvelopeChain(lines) {
70
+ const entries = [];
71
+ let previousHash = "GENESIS";
72
+ for (const line of lines) {
73
+ const parsed = JSON.parse(line);
74
+ if (!parsed.entry || typeof parsed.prevHash !== "string" || typeof parsed.hash !== "string") {
75
+ throw new Error("audit chain malformed");
76
+ }
77
+ const payload = JSON.stringify({
78
+ prevHash: parsed.prevHash,
79
+ entry: parsed.entry,
80
+ });
81
+ const expectedHash = this.hash(payload);
82
+ if (parsed.prevHash !== previousHash || parsed.hash !== expectedHash) {
83
+ throw new Error("audit chain verification failed");
84
+ }
85
+ previousHash = parsed.hash;
86
+ entries.push(parsed.entry);
87
+ }
88
+ return entries;
89
+ }
90
+ async loadEntries() {
91
+ const payload = await this._storage.read(this._key);
92
+ if (!payload) {
93
+ return [];
94
+ }
95
+ const lines = payload.toString("utf8").split("\n").filter(Boolean);
96
+ return this.verifyEnvelopeChain(lines);
97
+ }
98
+ async append(entry) {
99
+ await withStorageLock(this._storage, this._lockKey, async () => {
100
+ const payload = await this._storage.read(this._key);
101
+ const lines = payload ? payload.toString("utf8").split("\n").filter(Boolean) : [];
102
+ this.verifyEnvelopeChain(lines);
103
+ const previousHash = lines.length
104
+ ? JSON.parse(lines[lines.length - 1]).hash
105
+ : "GENESIS";
106
+ const nextEnvelope = {
107
+ prevHash: previousHash,
108
+ entry,
109
+ hash: this.hash(JSON.stringify({ prevHash: previousHash, entry })),
110
+ };
111
+ const contents = [...lines, JSON.stringify(nextEnvelope)].join("\n") + "\n";
112
+ await this._storage.write(this._key, Buffer.from(contents, "utf8"));
113
+ });
114
+ }
115
+ async query(query) {
116
+ const entries = await this.loadEntries();
117
+ return entries.filter((entry) => {
118
+ if (query.actorId && entry.actor.id !== query.actorId)
119
+ return false;
120
+ if (query.secretAlias && entry.secretAlias !== query.secretAlias)
121
+ return false;
122
+ if (query.requestId && entry.requestId !== query.requestId)
123
+ return false;
124
+ if (query.since && entry.occurredAt < query.since)
125
+ return false;
126
+ return true;
127
+ });
128
+ }
129
+ }
130
+ export class FileSecretCustody {
131
+ _storage;
132
+ _custodyKey;
133
+ _keyPrefix;
134
+ constructor(_storage, _custodyKey, _keyPrefix = "vault/custody") {
135
+ this._storage = _storage;
136
+ this._custodyKey = _custodyKey;
137
+ this._keyPrefix = _keyPrefix;
138
+ }
139
+ key(secretId) {
140
+ return `${this._keyPrefix}/${secretId.value}.sealed`;
141
+ }
142
+ async store(secretId, plaintext) {
143
+ await withStorageLock(this._storage, `${this.key(secretId)}:lock`, async () => {
144
+ const sealed = sealBlob({
145
+ version: "v1.0",
146
+ secrets: {
147
+ material: plaintext,
148
+ },
149
+ secretMetadata: {
150
+ secretId: secretId.value,
151
+ },
152
+ }, this._custodyKey);
153
+ await this._storage.write(this.key(secretId), Buffer.from(sealed, "utf8"));
154
+ });
155
+ }
156
+ async load(secretId) {
157
+ const payload = await this._storage.read(this.key(secretId));
158
+ if (!payload) {
159
+ return null;
160
+ }
161
+ const unsealed = unsealBlob(payload.toString("utf8"), this._custodyKey);
162
+ return unsealed.secrets.material ?? null;
163
+ }
164
+ async delete(secretId) {
165
+ await withStorageLock(this._storage, `${this.key(secretId)}:lock`, async () => {
166
+ await this._storage.delete(this.key(secretId));
167
+ });
168
+ }
169
+ }
170
+ export class FileReplayGuard {
171
+ _storage;
172
+ _key;
173
+ _lockKey;
174
+ _ttlMs;
175
+ constructor(_storage, _key = "vault/security/replay.json", _lockKey = "vault/locks/replay", _ttlMs = 5 * 60 * 1000) {
176
+ this._storage = _storage;
177
+ this._key = _key;
178
+ this._lockKey = _lockKey;
179
+ this._ttlMs = _ttlMs;
180
+ }
181
+ async assertNotReplayed(request) {
182
+ await withStorageLock(this._storage, this._lockKey, async () => {
183
+ const now = Date.now();
184
+ const state = await readJson(this._storage, this._key, { seen: {} });
185
+ const nextSeen = {};
186
+ for (const [key, seenAt] of Object.entries(state.seen)) {
187
+ if (now - seenAt <= this._ttlMs) {
188
+ nextSeen[key] = seenAt;
189
+ }
190
+ }
191
+ const replayKey = `${request.agent.id}:${request.requestId}`;
192
+ if (replayKey in nextSeen) {
193
+ throw new VaultCoreError("request replay detected", "VAULT_DISPATCH_DENIED");
194
+ }
195
+ nextSeen[replayKey] = now;
196
+ await this._storage.write(this._key, serializeJson({ seen: nextSeen }));
197
+ });
198
+ }
199
+ }
200
+ export class FileRateLimitStore {
201
+ _storage;
202
+ _key;
203
+ _lockKey;
204
+ constructor(_storage, _key = "vault/security/rate-limits.json", _lockKey = "vault/locks/rate-limits") {
205
+ this._storage = _storage;
206
+ this._key = _key;
207
+ this._lockKey = _lockKey;
208
+ }
209
+ async consume(key, maxRequests, windowMs, nowMs) {
210
+ await withStorageLock(this._storage, this._lockKey, async () => {
211
+ const state = await readJson(this._storage, this._key, { buckets: {} });
212
+ const nextBuckets = {};
213
+ for (const [bucketKey, bucket] of Object.entries(state.buckets)) {
214
+ if (nowMs < bucket.resetAt) {
215
+ nextBuckets[bucketKey] = bucket;
216
+ }
217
+ }
218
+ const current = nextBuckets[key];
219
+ if (!current || nowMs >= current.resetAt) {
220
+ nextBuckets[key] = {
221
+ count: 1,
222
+ resetAt: nowMs + windowMs,
223
+ };
224
+ }
225
+ else {
226
+ if (current.count >= maxRequests) {
227
+ throw new VaultCoreError("capability rate limit exceeded", "VAULT_DISPATCH_DENIED");
228
+ }
229
+ current.count += 1;
230
+ }
231
+ await this._storage.write(this._key, serializeJson({ buckets: nextBuckets }));
232
+ });
233
+ }
234
+ }
235
+ export class FileCapabilityRevocationRegistry {
236
+ _storage;
237
+ _key;
238
+ _lockKey;
239
+ constructor(_storage, _key = "vault/security/revocations.json", _lockKey = "vault/locks/revocations") {
240
+ this._storage = _storage;
241
+ this._key = _key;
242
+ this._lockKey = _lockKey;
243
+ }
244
+ compositeKey(vaultId, agentId, capabilityId) {
245
+ return `${vaultId.value}:${agentId}:${capabilityId}`;
246
+ }
247
+ async get(vaultId, agentId, capabilityId) {
248
+ const state = await readJson(this._storage, this._key, { versions: {} });
249
+ return state.versions[this.compositeKey(vaultId, agentId, capabilityId)] ?? 0;
250
+ }
251
+ async revoke(vaultId, agentId, capabilityId) {
252
+ return withStorageLock(this._storage, this._lockKey, async () => {
253
+ const state = await readJson(this._storage, this._key, { versions: {} });
254
+ const key = this.compositeKey(vaultId, agentId, capabilityId);
255
+ const next = (state.versions[key] ?? 0) + 1;
256
+ state.versions[key] = next;
257
+ await this._storage.write(this._key, serializeJson(state));
258
+ return next;
259
+ });
260
+ }
261
+ }
262
+ export class FileCustomHttpFlowRegistry {
263
+ _storage;
264
+ _key;
265
+ _lockKey;
266
+ constructor(_storage, _key = "vault/custom-flows.json", _lockKey = "vault/locks/custom-flows") {
267
+ this._storage = _storage;
268
+ this._key = _key;
269
+ this._lockKey = _lockKey;
270
+ }
271
+ async loadState() {
272
+ return readJson(this._storage, this._key, { flows: [] });
273
+ }
274
+ async register(flow) {
275
+ await withStorageLock(this._storage, this._lockKey, async () => {
276
+ const state = await this.loadState();
277
+ const next = state.flows.filter((candidate) => candidate.flowId !== flow.flowId);
278
+ next.push(flow);
279
+ await this._storage.write(this._key, serializeJson({ flows: next }));
280
+ });
281
+ }
282
+ async get(vaultId, flowId) {
283
+ const state = await this.loadState();
284
+ return state.flows.find((flow) => flow.vaultId.value === vaultId.value && flow.flowId === flowId) ?? null;
285
+ }
286
+ }
287
+ export function createPersistentVaultCoreDependencies(storage, options = {}) {
288
+ if (!options.custodyKey) {
289
+ throw new Error("persistent vault dependencies require custodyKey");
290
+ }
291
+ const defaults = createDefaultVaultCoreDependencies(options);
292
+ const capabilityRevocations = new FileCapabilityRevocationRegistry(storage);
293
+ const customFlows = new FileCustomHttpFlowRegistry(storage);
294
+ return {
295
+ ...defaults,
296
+ secrets: new FileSecretRepository(storage),
297
+ custody: new FileSecretCustody(storage, options.custodyKey),
298
+ audit: new FileAuditLog(storage),
299
+ policy: new DefaultPolicyEngine({
300
+ ...(options.policy ?? {}),
301
+ capabilityRevocationRegistry: capabilityRevocations,
302
+ rateLimitStore: new FileRateLimitStore(storage),
303
+ }),
304
+ replayGuard: new FileReplayGuard(storage, "vault/security/replay.json", "vault/locks/replay", options.proofVerifier?.maxSkewMs ?? (5 * 60 * 1000)),
305
+ capabilityRevocations,
306
+ customFlows,
307
+ };
308
+ }
309
+ //# sourceMappingURL=persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/vault-core/persistence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import type { AuditEntry, AuditQuery, AgentIdentityRecord, OwnerIdentityRecord, OwnerAuditRequest, OwnerRegisterAgentIdentityCommand, OwnerRegisterCustomHttpFlowCommand, OwnerRegisterOwnerIdentityCommand, CustomHttpFlowDefinition, DispatchInstruction, DispatchRequest, DispatchResult, SecretAlias, SecretId, SecretRecord, VaultPrincipal, VaultWriteSecretCommand, VaultId } from "./contracts.js";
2
+ export interface SecretRepository {
3
+ save(record: SecretRecord): Promise<void>;
4
+ delete(secretId: SecretId): Promise<void>;
5
+ getByAlias(alias: SecretAlias): Promise<SecretRecord | null>;
6
+ getById(secretId: SecretId): Promise<SecretRecord | null>;
7
+ }
8
+ export interface SecretCustody {
9
+ store(secretId: SecretId, plaintext: string): Promise<void>;
10
+ load(secretId: SecretId): Promise<string | null>;
11
+ delete(secretId: SecretId): Promise<void>;
12
+ }
13
+ export interface PolicyEngine {
14
+ authorizeWrite(command: VaultWriteSecretCommand): Promise<void>;
15
+ authorizeDispatch(request: DispatchRequest, record?: SecretRecord | null): Promise<void>;
16
+ }
17
+ export interface AuditLog {
18
+ append(entry: AuditEntry): Promise<void>;
19
+ query(query: AuditQuery): Promise<readonly AuditEntry[]>;
20
+ }
21
+ export interface TrustedExecutor {
22
+ dispatch(instruction: DispatchInstruction, secret: {
23
+ record: SecretRecord;
24
+ plaintext: string;
25
+ }): Promise<DispatchResult>;
26
+ }
27
+ export interface Clock {
28
+ nowIso(): string;
29
+ }
30
+ export interface IdGenerator {
31
+ newSecretId(): SecretId;
32
+ newVersion(): {
33
+ value: string;
34
+ };
35
+ newAuditEntryId(): string;
36
+ }
37
+ export interface AgentProofVerifier {
38
+ verify(request: DispatchRequest): Promise<void>;
39
+ }
40
+ export interface AgentIdentityRegistry {
41
+ register(identity: AgentIdentityRecord): Promise<void>;
42
+ get(vaultId: VaultId, agentId: string): Promise<AgentIdentityRecord | null>;
43
+ }
44
+ export interface OwnerIdentityRegistry {
45
+ register(identity: OwnerIdentityRecord): Promise<void>;
46
+ get(vaultId: VaultId, ownerId: string): Promise<OwnerIdentityRecord | null>;
47
+ hasAny(vaultId: VaultId): Promise<boolean>;
48
+ }
49
+ export interface ReplayGuard {
50
+ assertNotReplayed(request: DispatchRequest): Promise<void>;
51
+ }
52
+ export interface RateLimitStore {
53
+ consume(key: string, maxRequests: number, windowMs: number, nowMs: number): Promise<void>;
54
+ }
55
+ export interface CapabilityRevocationRegistry {
56
+ get(vaultId: VaultId, agentId: string, capabilityId: string): Promise<number> | number;
57
+ revoke(vaultId: VaultId, agentId: string, capabilityId: string): Promise<number> | number;
58
+ }
59
+ export interface OwnerProofVerifier {
60
+ verifyWrite(command: Extract<VaultWriteSecretCommand, {
61
+ kind: "owner.write_secret";
62
+ }>): Promise<void>;
63
+ verifyAudit(request: OwnerAuditRequest): Promise<void>;
64
+ verifyRegisterAgentIdentity(command: OwnerRegisterAgentIdentityCommand): Promise<void>;
65
+ verifyRegisterOwnerIdentity(command: OwnerRegisterOwnerIdentityCommand): Promise<void>;
66
+ verifyRegisterCustomFlow(command: OwnerRegisterCustomHttpFlowCommand): Promise<void>;
67
+ }
68
+ export interface CustomHttpFlowRegistry {
69
+ register(flow: CustomHttpFlowDefinition): Promise<void>;
70
+ get(vaultId: VaultId, flowId: string): Promise<CustomHttpFlowDefinition | null>;
71
+ }
72
+ export interface VaultCoreDependencies {
73
+ vaultId: VaultId;
74
+ secrets: SecretRepository;
75
+ custody: SecretCustody;
76
+ policy: PolicyEngine;
77
+ audit: AuditLog;
78
+ executor: TrustedExecutor;
79
+ proofVerifier: AgentProofVerifier;
80
+ agentIdentities: AgentIdentityRegistry;
81
+ ownerProofVerifier: OwnerProofVerifier;
82
+ ownerIdentities: OwnerIdentityRegistry;
83
+ customFlows: CustomHttpFlowRegistry;
84
+ replayGuard: ReplayGuard;
85
+ clock: Clock;
86
+ ids: IdGenerator;
87
+ }
88
+ export interface VaultCore {
89
+ readonly vaultId: VaultId;
90
+ writeSecret(command: VaultWriteSecretCommand): Promise<SecretRecord>;
91
+ authorizeDispatch(request: DispatchRequest): Promise<import("./contracts.js").DispatchAuthorization>;
92
+ dispatchSecret(request: DispatchRequest): Promise<DispatchResult>;
93
+ bootstrapOwnerIdentity(identity: OwnerIdentityRecord): Promise<void>;
94
+ registerAgentIdentity(command: OwnerRegisterAgentIdentityCommand): Promise<void>;
95
+ registerOwnerIdentity(command: OwnerRegisterOwnerIdentityCommand): Promise<void>;
96
+ registerCustomFlow(command: OwnerRegisterCustomHttpFlowCommand): Promise<void>;
97
+ storeCustomFlowSecret(flow: CustomHttpFlowDefinition, alias: string, plaintext: string): Promise<SecretRecord>;
98
+ getAudit(actor: VaultPrincipal & {
99
+ kind: "owner";
100
+ }, query: AuditQuery, request?: Omit<OwnerAuditRequest, "actor" | "query" | "vaultId">): Promise<readonly AuditEntry[]>;
101
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/vault-core/ports.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import type { AgentDispatchTransport } from "../clients/agent/index.js";
2
+ import type { AgentCapability } from "../vault-core/index.js";
3
+ import type { VaultCapabilityResolver, VaultService } from "./index.js";
4
+ export declare class InMemoryVaultCapabilityResolver implements VaultCapabilityResolver {
5
+ private readonly _capabilities;
6
+ set(capability: AgentCapability): void;
7
+ resolve(vaultId: import("../vault-core/index.js").VaultId, agentId: string, capabilityId: string): Promise<AgentCapability>;
8
+ }
9
+ export declare class LocalVaultTransport implements AgentDispatchTransport {
10
+ private readonly _vault;
11
+ private readonly _capabilityId;
12
+ constructor(_vault: VaultService, _capabilityId: string);
13
+ dispatch(request: import("../vault-core/index.js").DispatchRequest): Promise<import("../vault-core/index.js").DispatchResult>;
14
+ }
@@ -0,0 +1,41 @@
1
+ export class InMemoryVaultCapabilityResolver {
2
+ _capabilities = new Map();
3
+ set(capability) {
4
+ this._capabilities.set(`${capability.vaultId.value}:${capability.agentId}:${capability.capabilityId}`, capability);
5
+ }
6
+ async resolve(vaultId, agentId, capabilityId) {
7
+ const capability = this._capabilities.get(`${vaultId.value}:${agentId}:${capabilityId}`);
8
+ if (!capability) {
9
+ throw new Error("VAULT_CAPABILITY_NOT_FOUND");
10
+ }
11
+ return capability;
12
+ }
13
+ }
14
+ export class LocalVaultTransport {
15
+ _vault;
16
+ _capabilityId;
17
+ constructor(_vault, _capabilityId) {
18
+ this._vault = _vault;
19
+ this._capabilityId = _capabilityId;
20
+ }
21
+ async dispatch(request) {
22
+ const response = await this._vault.handleAgentDispatch({
23
+ vaultId: request.vaultId.value,
24
+ requestId: request.requestId,
25
+ requestedAt: request.requestedAt,
26
+ agentId: request.agent.id,
27
+ capabilityId: this._capabilityId,
28
+ secretAlias: request.secretAlias,
29
+ targetUrl: request.targetUrl,
30
+ method: request.method,
31
+ headers: request.headers,
32
+ body: request.body,
33
+ proof: { signature: request.proof.signature },
34
+ });
35
+ if (!response.ok) {
36
+ throw new Error(`${response.error.code}:${response.error.message}`);
37
+ }
38
+ return response.result;
39
+ }
40
+ }
41
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/vault-ingress/defaults.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,+BAA+B;IACzB,aAAa,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEpE,GAAG,CAAC,UAA2B;QAC7B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,YAAY,EAAE,EAAE,UAAU,CAAC,CAAC;IACrH,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAAiD,EACjD,OAAe,EACf,YAAoB;QAEpB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,IAAI,YAAY,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;CACF;AAED,MAAM,OAAO,mBAAmB;IAEX;IACA;IAFnB,YACmB,MAAoB,EACpB,aAAqB;QADrB,WAAM,GAAN,MAAM,CAAc;QACpB,kBAAa,GAAb,aAAa,CAAQ;IACrC,CAAC;IAEJ,KAAK,CAAC,QAAQ,CACZ,OAAyD;QAEzD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC;YACrD,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;YAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;YACzB,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE;SAC9C,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,QAAQ,CAAC,MAAM,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,24 @@
1
+ import type { CustomHttpFlowDefinition } from "../vault-core/index.js";
2
+ export interface OwnerHttpFlowBoundary {
3
+ mode: "acquire_secret" | "send_secret" | "bidirectional_secret";
4
+ targetUrl: string;
5
+ method: string;
6
+ responseVisibility: "passthrough" | "shape_only";
7
+ responseSecret?: {
8
+ kind: "json_field";
9
+ field: string;
10
+ storeAlias: string;
11
+ };
12
+ }
13
+ export declare function createOwnerHttpFlowBoundary(boundary: OwnerHttpFlowBoundary): OwnerHttpFlowBoundary;
14
+ export declare function createStandardAcquireBoundary(input: {
15
+ targetUrl: string;
16
+ method?: string;
17
+ responseField: "access_token" | "refresh_token" | "id_token";
18
+ storeAlias: string;
19
+ }): OwnerHttpFlowBoundary;
20
+ export declare function createStandardDispatchBoundary(input: {
21
+ targetUrl: string;
22
+ method: string;
23
+ }): OwnerHttpFlowBoundary;
24
+ export declare function toOwnerHttpFlowBoundary(flow: Pick<CustomHttpFlowDefinition, "mode" | "targetUrl" | "method" | "responseVisibility" | "responseSecret">): OwnerHttpFlowBoundary;