aquaman-proxy 0.6.0 → 0.7.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 (72) hide show
  1. package/README.md +10 -9
  2. package/dist/cli/index.js +104 -87
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/core/audit/index.d.ts +5 -0
  5. package/dist/core/audit/index.d.ts.map +1 -0
  6. package/dist/core/audit/index.js +5 -0
  7. package/dist/core/audit/index.js.map +1 -0
  8. package/dist/core/audit/logger.d.ts +53 -0
  9. package/dist/core/audit/logger.d.ts.map +1 -0
  10. package/dist/core/audit/logger.js +262 -0
  11. package/dist/core/audit/logger.js.map +1 -0
  12. package/dist/core/credentials/backends/keepassxc.d.ts +45 -0
  13. package/dist/core/credentials/backends/keepassxc.d.ts.map +1 -0
  14. package/dist/core/credentials/backends/keepassxc.js +229 -0
  15. package/dist/core/credentials/backends/keepassxc.js.map +1 -0
  16. package/dist/core/credentials/backends/onepassword.d.ts +38 -0
  17. package/dist/core/credentials/backends/onepassword.d.ts.map +1 -0
  18. package/dist/core/credentials/backends/onepassword.js +218 -0
  19. package/dist/core/credentials/backends/onepassword.js.map +1 -0
  20. package/dist/core/credentials/backends/vault.d.ts +56 -0
  21. package/dist/core/credentials/backends/vault.d.ts.map +1 -0
  22. package/dist/core/credentials/backends/vault.js +206 -0
  23. package/dist/core/credentials/backends/vault.js.map +1 -0
  24. package/dist/core/credentials/index.d.ts +8 -0
  25. package/dist/core/credentials/index.d.ts.map +1 -0
  26. package/dist/core/credentials/index.js +8 -0
  27. package/dist/core/credentials/index.js.map +1 -0
  28. package/dist/core/credentials/store.d.ts +102 -0
  29. package/dist/core/credentials/store.d.ts.map +1 -0
  30. package/dist/core/credentials/store.js +289 -0
  31. package/dist/core/credentials/store.js.map +1 -0
  32. package/dist/core/index.d.ts +14 -0
  33. package/dist/core/index.d.ts.map +1 -0
  34. package/dist/core/index.js +18 -0
  35. package/dist/core/index.js.map +1 -0
  36. package/dist/core/types.d.ts +81 -0
  37. package/dist/core/types.d.ts.map +1 -0
  38. package/dist/core/types.js +11 -0
  39. package/dist/core/types.js.map +1 -0
  40. package/dist/core/utils/config.d.ts +19 -0
  41. package/dist/core/utils/config.d.ts.map +1 -0
  42. package/dist/core/utils/config.js +136 -0
  43. package/dist/core/utils/config.js.map +1 -0
  44. package/dist/core/utils/hash.d.ts +27 -0
  45. package/dist/core/utils/hash.d.ts.map +1 -0
  46. package/dist/core/utils/hash.js +348 -0
  47. package/dist/core/utils/hash.js.map +1 -0
  48. package/dist/core/utils/index.d.ts +6 -0
  49. package/dist/core/utils/index.d.ts.map +1 -0
  50. package/dist/core/utils/index.js +6 -0
  51. package/dist/core/utils/index.js.map +1 -0
  52. package/dist/daemon.d.ts +4 -19
  53. package/dist/daemon.d.ts.map +1 -1
  54. package/dist/daemon.js +24 -101
  55. package/dist/daemon.js.map +1 -1
  56. package/dist/index.d.ts +2 -1
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +2 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/migration/openclaw-migrator.d.ts +1 -1
  61. package/dist/migration/openclaw-migrator.d.ts.map +1 -1
  62. package/dist/oauth-token-cache.d.ts +1 -1
  63. package/dist/oauth-token-cache.d.ts.map +1 -1
  64. package/dist/openclaw/env-writer.d.ts +7 -7
  65. package/dist/openclaw/env-writer.d.ts.map +1 -1
  66. package/dist/openclaw/env-writer.js +8 -13
  67. package/dist/openclaw/env-writer.js.map +1 -1
  68. package/dist/openclaw/integration.d.ts +5 -3
  69. package/dist/openclaw/integration.d.ts.map +1 -1
  70. package/dist/openclaw/integration.js +7 -14
  71. package/dist/openclaw/integration.js.map +1 -1
  72. package/package.json +7 -3
@@ -0,0 +1,289 @@
1
+ /**
2
+ * Credential storage interface with multiple backend support
3
+ * Supports: macOS Keychain, 1Password, HashiCorp Vault, encrypted file
4
+ */
5
+ import * as fs from 'node:fs';
6
+ import * as path from 'node:path';
7
+ import * as os from 'node:os';
8
+ import { encryptWithPassword, decryptWithPassword } from '../utils/hash.js';
9
+ import { getConfigDir } from '../utils/config.js';
10
+ import { KeePassXCStore } from './backends/keepassxc.js';
11
+ /**
12
+ * macOS Keychain backend using the keytar library
13
+ */
14
+ export class KeychainStore {
15
+ keytar = null;
16
+ servicePrefix = 'aquaman';
17
+ indexService = 'aquaman/_index';
18
+ indexAccount = 'services';
19
+ async getKeytar() {
20
+ if (!this.keytar) {
21
+ try {
22
+ const mod = await import('keytar');
23
+ this.keytar = mod.default || mod;
24
+ }
25
+ catch {
26
+ throw new Error('keytar not available - install with: npm install keytar');
27
+ }
28
+ }
29
+ return this.keytar;
30
+ }
31
+ getServiceName(service) {
32
+ return `${this.servicePrefix}/${service}`;
33
+ }
34
+ async getIndex() {
35
+ const keytar = await this.getKeytar();
36
+ const raw = await keytar.getPassword(this.indexService, this.indexAccount);
37
+ if (!raw)
38
+ return [];
39
+ try {
40
+ return JSON.parse(raw);
41
+ }
42
+ catch {
43
+ return [];
44
+ }
45
+ }
46
+ async updateIndex(services) {
47
+ const keytar = await this.getKeytar();
48
+ await keytar.setPassword(this.indexService, this.indexAccount, JSON.stringify(services));
49
+ }
50
+ async get(service, key) {
51
+ const keytar = await this.getKeytar();
52
+ return keytar.getPassword(this.getServiceName(service), key);
53
+ }
54
+ async set(service, key, value) {
55
+ const keytar = await this.getKeytar();
56
+ await keytar.setPassword(this.getServiceName(service), key, value);
57
+ const index = await this.getIndex();
58
+ if (!index.includes(service)) {
59
+ index.push(service);
60
+ await this.updateIndex(index);
61
+ }
62
+ }
63
+ async delete(service, key) {
64
+ const keytar = await this.getKeytar();
65
+ const deleted = await keytar.deletePassword(this.getServiceName(service), key);
66
+ if (deleted) {
67
+ const remaining = await keytar.findCredentials(this.getServiceName(service));
68
+ if (remaining.length === 0) {
69
+ const index = await this.getIndex();
70
+ const updated = index.filter((s) => s !== service);
71
+ await this.updateIndex(updated);
72
+ }
73
+ }
74
+ return deleted;
75
+ }
76
+ async list() {
77
+ const keytar = await this.getKeytar();
78
+ const index = await this.getIndex();
79
+ const results = [];
80
+ for (const service of index) {
81
+ const creds = await keytar.findCredentials(this.getServiceName(service));
82
+ for (const cred of creds) {
83
+ results.push({ service, key: cred.account });
84
+ }
85
+ }
86
+ return results;
87
+ }
88
+ async exists(service, key) {
89
+ const value = await this.get(service, key);
90
+ return value !== null;
91
+ }
92
+ }
93
+ /**
94
+ * Encrypted file backend - fallback option
95
+ */
96
+ export class EncryptedFileStore {
97
+ filePath;
98
+ password;
99
+ cache = null;
100
+ constructor(password, filePath) {
101
+ this.password = password;
102
+ this.filePath = filePath || path.join(os.homedir(), '.aquaman', 'credentials.enc');
103
+ }
104
+ getKey(service, key) {
105
+ return `${service}:${key}`;
106
+ }
107
+ async load() {
108
+ if (this.cache) {
109
+ return this.cache;
110
+ }
111
+ if (!fs.existsSync(this.filePath)) {
112
+ this.cache = new Map();
113
+ return this.cache;
114
+ }
115
+ try {
116
+ const encrypted = fs.readFileSync(this.filePath, 'utf-8');
117
+ const decrypted = decryptWithPassword(encrypted, this.password);
118
+ const data = JSON.parse(decrypted);
119
+ this.cache = new Map(Object.entries(data));
120
+ return this.cache;
121
+ }
122
+ catch {
123
+ throw new Error('Failed to decrypt credentials file - wrong password?');
124
+ }
125
+ }
126
+ async save() {
127
+ if (!this.cache)
128
+ return;
129
+ const data = {};
130
+ for (const [key, cred] of this.cache.entries()) {
131
+ data[key] = cred;
132
+ }
133
+ const json = JSON.stringify(data, null, 2);
134
+ const encrypted = encryptWithPassword(json, this.password);
135
+ const dir = path.dirname(this.filePath);
136
+ if (!fs.existsSync(dir)) {
137
+ fs.mkdirSync(dir, { recursive: true });
138
+ }
139
+ fs.writeFileSync(this.filePath, encrypted, { mode: 0o600 });
140
+ }
141
+ async get(service, key) {
142
+ const store = await this.load();
143
+ const cred = store.get(this.getKey(service, key));
144
+ return cred?.value ?? null;
145
+ }
146
+ async set(service, key, value, metadata) {
147
+ const store = await this.load();
148
+ const credential = {
149
+ service,
150
+ key,
151
+ value,
152
+ metadata,
153
+ createdAt: new Date()
154
+ };
155
+ store.set(this.getKey(service, key), credential);
156
+ await this.save();
157
+ }
158
+ async delete(service, key) {
159
+ const store = await this.load();
160
+ const deleted = store.delete(this.getKey(service, key));
161
+ if (deleted) {
162
+ await this.save();
163
+ }
164
+ return deleted;
165
+ }
166
+ async list(service) {
167
+ const store = await this.load();
168
+ const results = [];
169
+ for (const cred of store.values()) {
170
+ if (!service || cred.service === service) {
171
+ results.push({ service: cred.service, key: cred.key });
172
+ }
173
+ }
174
+ return results;
175
+ }
176
+ async exists(service, key) {
177
+ const store = await this.load();
178
+ return store.has(this.getKey(service, key));
179
+ }
180
+ }
181
+ /**
182
+ * In-memory store for testing
183
+ */
184
+ export class MemoryStore {
185
+ store = new Map();
186
+ getKey(service, key) {
187
+ return `${service}:${key}`;
188
+ }
189
+ async get(service, key) {
190
+ return this.store.get(this.getKey(service, key))?.value ?? null;
191
+ }
192
+ async set(service, key, value, metadata) {
193
+ this.store.set(this.getKey(service, key), {
194
+ service,
195
+ key,
196
+ value,
197
+ metadata,
198
+ createdAt: new Date()
199
+ });
200
+ }
201
+ async delete(service, key) {
202
+ return this.store.delete(this.getKey(service, key));
203
+ }
204
+ async list(service) {
205
+ const results = [];
206
+ for (const cred of this.store.values()) {
207
+ if (!service || cred.service === service) {
208
+ results.push({ service: cred.service, key: cred.key });
209
+ }
210
+ }
211
+ return results;
212
+ }
213
+ async exists(service, key) {
214
+ return this.store.has(this.getKey(service, key));
215
+ }
216
+ clear() {
217
+ this.store.clear();
218
+ }
219
+ }
220
+ /**
221
+ * Validate encryption password strength for encrypted-file backend.
222
+ */
223
+ export function validatePasswordStrength(password) {
224
+ const errors = [];
225
+ if (!password) {
226
+ errors.push('Password must not be empty');
227
+ }
228
+ else if (password.length < 12) {
229
+ errors.push(`Password must be at least 12 characters (got ${password.length})`);
230
+ }
231
+ return { valid: errors.length === 0, errors };
232
+ }
233
+ export function createCredentialStore(options) {
234
+ switch (options.backend) {
235
+ case 'keychain':
236
+ return new KeychainStore();
237
+ case 'encrypted-file':
238
+ if (!options.encryptionPassword) {
239
+ throw new Error('encryptionPassword required for encrypted-file backend');
240
+ }
241
+ {
242
+ const strength = validatePasswordStrength(options.encryptionPassword);
243
+ if (!strength.valid) {
244
+ throw new Error(`Weak encryption password: ${strength.errors.join('; ')}`);
245
+ }
246
+ }
247
+ return new EncryptedFileStore(options.encryptionPassword, path.join(getConfigDir(), 'credentials.enc'));
248
+ case '1password': {
249
+ // Dynamically import to avoid loading if not used
250
+ const { OnePasswordStore } = require('./backends/onepassword.js');
251
+ return new OnePasswordStore({
252
+ vault: options.onePasswordVault,
253
+ account: options.onePasswordAccount
254
+ });
255
+ }
256
+ case 'vault': {
257
+ if (!options.vaultAddress) {
258
+ // Try env var
259
+ const envAddress = process.env['VAULT_ADDR'];
260
+ if (!envAddress) {
261
+ throw new Error('vaultAddress required for vault backend. Set via config or VAULT_ADDR env var.');
262
+ }
263
+ options.vaultAddress = envAddress;
264
+ }
265
+ // Dynamically import to avoid loading if not used
266
+ const { VaultStore } = require('./backends/vault.js');
267
+ return new VaultStore({
268
+ address: options.vaultAddress,
269
+ token: options.vaultToken,
270
+ namespace: options.vaultNamespace,
271
+ mountPath: options.vaultMountPath
272
+ });
273
+ }
274
+ case 'keepassxc': {
275
+ const dbPath = options.keepassxcDatabasePath
276
+ || path.join(getConfigDir(), 'credentials.kdbx');
277
+ const password = options.encryptionPassword
278
+ || process.env['AQUAMAN_KEEPASS_PASSWORD'];
279
+ const keyFile = options.keepassxcKeyFilePath;
280
+ if (!password && !keyFile) {
281
+ throw new Error('KeePassXC backend requires a master password (AQUAMAN_KEEPASS_PASSWORD) or key file (keepassxcKeyFilePath)');
282
+ }
283
+ return new KeePassXCStore({ dbPath, password, keyFilePath: keyFile });
284
+ }
285
+ default:
286
+ throw new Error(`Unknown credential backend: ${options.backend}`);
287
+ }
288
+ }
289
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/core/credentials/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * aquaman-core - Core credential storage, audit logging, and utilities
3
+ *
4
+ * This package provides the shared functionality for:
5
+ * - Credential storage backends (Keychain, 1Password, Vault, encrypted file)
6
+ * - Hash-chained tamper-evident audit logs
7
+ * - Cryptographic utilities
8
+ * - Configuration management
9
+ */
10
+ export * from './types.js';
11
+ export { type Credential, type CredentialStore, type CredentialStoreOptions, KeychainStore, EncryptedFileStore, MemoryStore, createCredentialStore, validatePasswordStrength, type OnePasswordStoreOptions, OnePasswordStore, createOnePasswordStore, type VaultStoreOptions, VaultStore, createVaultStore, type KeePassXCStoreOptions, KeePassXCStore, createKeePassXCStore } from './credentials/index.js';
12
+ export { type AuditLoggerOptions, AuditLogger, createAuditLogger, redactSensitiveParams } from './audit/index.js';
13
+ export { computeHash, computeChainedHash, generateId, generateNonce, generateSigningKeyPair, sign, verify, encryptWithPassword, decryptWithPassword, generateSelfSignedCert, type SigningKeyPair, type SelfSignedCert, getConfigDir, getConfigPath, expandPath, getDefaultConfig, loadConfig, ensureConfigDir, saveConfig, applyEnvOverrides } from './utils/index.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,qBAAqB,EACrB,wBAAwB,EACxB,KAAK,uBAAuB,EAC5B,gBAAgB,EAChB,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,UAAU,EACV,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,cAAc,EACd,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,KAAK,kBAAkB,EACvB,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,IAAI,EACJ,MAAM,EACN,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,YAAY,EACZ,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,UAAU,EACV,iBAAiB,EAClB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * aquaman-core - Core credential storage, audit logging, and utilities
3
+ *
4
+ * This package provides the shared functionality for:
5
+ * - Credential storage backends (Keychain, 1Password, Vault, encrypted file)
6
+ * - Hash-chained tamper-evident audit logs
7
+ * - Cryptographic utilities
8
+ * - Configuration management
9
+ */
10
+ // Types
11
+ export * from './types.js';
12
+ // Credentials
13
+ export { KeychainStore, EncryptedFileStore, MemoryStore, createCredentialStore, validatePasswordStrength, OnePasswordStore, createOnePasswordStore, VaultStore, createVaultStore, KeePassXCStore, createKeePassXCStore } from './credentials/index.js';
14
+ // Audit
15
+ export { AuditLogger, createAuditLogger, redactSensitiveParams } from './audit/index.js';
16
+ // Utils
17
+ export { computeHash, computeChainedHash, generateId, generateNonce, generateSigningKeyPair, sign, verify, encryptWithPassword, decryptWithPassword, generateSelfSignedCert, getConfigDir, getConfigPath, expandPath, getDefaultConfig, loadConfig, ensureConfigDir, saveConfig, applyEnvOverrides } from './utils/index.js';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,cAAc;AACd,OAAO,EAIL,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,qBAAqB,EACrB,wBAAwB,EAExB,gBAAgB,EAChB,sBAAsB,EAEtB,UAAU,EACV,gBAAgB,EAEhB,cAAc,EACd,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAEhC,QAAQ;AACR,OAAO,EAEL,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,QAAQ;AACR,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,IAAI,EACJ,MAAM,EACN,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EAGtB,YAAY,EACZ,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,UAAU,EACV,iBAAiB,EAClB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Core types for aquaman credential isolation layer
3
+ *
4
+ * This module focuses on unique features NOT in OpenClaw:
5
+ * - Credential proxy via Unix domain socket
6
+ * - Enterprise backends (1Password, Vault)
7
+ * - Hash-chained tamper-evident audit logs
8
+ * - Dynamic service registry
9
+ */
10
+ export interface ToolCall {
11
+ id: string;
12
+ sessionId: string;
13
+ agentId: string;
14
+ tool: string;
15
+ params: Record<string, unknown>;
16
+ timestamp: Date;
17
+ }
18
+ export interface ToolResult {
19
+ id: string;
20
+ toolCallId: string;
21
+ result: unknown;
22
+ error?: string;
23
+ timestamp: Date;
24
+ }
25
+ export interface AuditEntry {
26
+ id: string;
27
+ timestamp: Date;
28
+ type: 'tool_call' | 'tool_result' | 'credential_access';
29
+ sessionId: string;
30
+ agentId: string;
31
+ data: ToolCall | ToolResult | CredentialAccess;
32
+ previousHash: string;
33
+ hash: string;
34
+ }
35
+ export interface CredentialAccess {
36
+ service: string;
37
+ operation: 'read' | 'use' | 'rotate';
38
+ success: boolean;
39
+ error?: string;
40
+ }
41
+ export interface ServiceConfig {
42
+ name: string;
43
+ upstream: string;
44
+ authHeader: string;
45
+ authPrefix?: string;
46
+ credentialKey: string;
47
+ description?: string;
48
+ }
49
+ export interface CredentialsConfig {
50
+ backend: 'keychain' | '1password' | 'vault' | 'encrypted-file' | 'keepassxc';
51
+ proxiedServices: string[];
52
+ encryptionPassword?: string;
53
+ onePasswordVault?: string;
54
+ onePasswordAccount?: string;
55
+ vaultAddress?: string;
56
+ vaultToken?: string;
57
+ vaultNamespace?: string;
58
+ vaultMountPath?: string;
59
+ keepassxcDatabasePath?: string;
60
+ keepassxcKeyFilePath?: string;
61
+ }
62
+ export interface AuditConfig {
63
+ enabled: boolean;
64
+ logDir: string;
65
+ }
66
+ export interface ServicesConfig {
67
+ configPath: string;
68
+ }
69
+ export interface OpenClawConfig {
70
+ autoLaunch: boolean;
71
+ configMethod: 'env' | 'dotenv' | 'shell-rc';
72
+ binaryPath?: string;
73
+ }
74
+ export interface WrapperConfig {
75
+ credentials: CredentialsConfig;
76
+ audit: AuditConfig;
77
+ services: ServicesConfig;
78
+ openclaw: OpenClawConfig;
79
+ }
80
+ export type CredentialBackend = 'keychain' | '1password' | 'vault' | 'encrypted-file' | 'keepassxc';
81
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,WAAW,GAAG,aAAa,GAAG,mBAAmB,CAAC;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,gBAAgB,CAAC;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,UAAU,GAAG,WAAW,GAAG,OAAO,GAAG,gBAAgB,GAAG,WAAW,CAAC;IAC7E,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,KAAK,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,iBAAiB,CAAC;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,GAAG,gBAAgB,GAAG,WAAW,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Core types for aquaman credential isolation layer
3
+ *
4
+ * This module focuses on unique features NOT in OpenClaw:
5
+ * - Credential proxy via Unix domain socket
6
+ * - Enterprise backends (1Password, Vault)
7
+ * - Hash-chained tamper-evident audit logs
8
+ * - Dynamic service registry
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Configuration loader and validator for aquaman
3
+ *
4
+ * Focused on credential isolation features:
5
+ * - Credential proxy settings
6
+ * - Enterprise backend configuration
7
+ * - Audit logging configuration
8
+ * - OpenClaw integration settings
9
+ */
10
+ import type { WrapperConfig } from '../types.js';
11
+ export declare function getConfigDir(): string;
12
+ export declare function getConfigPath(): string;
13
+ export declare function expandPath(p: string): string;
14
+ export declare function getDefaultConfig(): WrapperConfig;
15
+ export declare function loadConfig(): WrapperConfig;
16
+ export declare function applyEnvOverrides(config: WrapperConfig): WrapperConfig;
17
+ export declare function ensureConfigDir(): void;
18
+ export declare function saveConfig(config: WrapperConfig): void;
19
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/utils/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKjD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ5C;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAmBhD;AAED,wBAAgB,UAAU,IAAI,aAAa,CAmB1C;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAmCtE;AAiCD,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAItD"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Configuration loader and validator for aquaman
3
+ *
4
+ * Focused on credential isolation features:
5
+ * - Credential proxy settings
6
+ * - Enterprise backend configuration
7
+ * - Audit logging configuration
8
+ * - OpenClaw integration settings
9
+ */
10
+ import * as fs from 'node:fs';
11
+ import * as path from 'node:path';
12
+ import * as os from 'node:os';
13
+ import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
14
+ const DEFAULT_CONFIG_DIR = path.join(os.homedir(), '.aquaman');
15
+ const CONFIG_FILE = 'config.yaml';
16
+ export function getConfigDir() {
17
+ return process.env['AQUAMAN_CONFIG_DIR'] || DEFAULT_CONFIG_DIR;
18
+ }
19
+ export function getConfigPath() {
20
+ return path.join(getConfigDir(), CONFIG_FILE);
21
+ }
22
+ export function expandPath(p) {
23
+ if (p.startsWith('~')) {
24
+ return path.join(os.homedir(), p.slice(1));
25
+ }
26
+ if (p.includes('${HOME}')) {
27
+ return p.replace('${HOME}', os.homedir());
28
+ }
29
+ return p;
30
+ }
31
+ export function getDefaultConfig() {
32
+ return {
33
+ credentials: {
34
+ backend: 'keychain',
35
+ proxiedServices: ['anthropic', 'openai', 'slack', 'discord', 'github'],
36
+ vaultMountPath: 'secret'
37
+ },
38
+ audit: {
39
+ enabled: true,
40
+ logDir: path.join(getConfigDir(), 'audit')
41
+ },
42
+ services: {
43
+ configPath: path.join(getConfigDir(), 'services.yaml')
44
+ },
45
+ openclaw: {
46
+ autoLaunch: true,
47
+ configMethod: 'env'
48
+ }
49
+ };
50
+ }
51
+ export function loadConfig() {
52
+ const configPath = getConfigPath();
53
+ const defaultConfig = getDefaultConfig();
54
+ let config;
55
+ if (!fs.existsSync(configPath)) {
56
+ config = defaultConfig;
57
+ }
58
+ else {
59
+ try {
60
+ const content = fs.readFileSync(configPath, 'utf-8');
61
+ const userConfig = parseYaml(content);
62
+ config = mergeConfig(defaultConfig, userConfig);
63
+ }
64
+ catch (error) {
65
+ console.error(`Warning: Failed to load config from ${configPath}, using defaults`);
66
+ config = defaultConfig;
67
+ }
68
+ }
69
+ return applyEnvOverrides(config);
70
+ }
71
+ export function applyEnvOverrides(config) {
72
+ const env = process.env;
73
+ if (env['AQUAMAN_BACKEND']) {
74
+ const b = env['AQUAMAN_BACKEND'];
75
+ if (['keychain', '1password', 'vault', 'encrypted-file', 'keepassxc'].includes(b)) {
76
+ config.credentials.backend = b;
77
+ }
78
+ }
79
+ if (env['AQUAMAN_SERVICES']) {
80
+ config.credentials.proxiedServices = env['AQUAMAN_SERVICES'].split(',').map(s => s.trim()).filter(Boolean);
81
+ }
82
+ if (env['AQUAMAN_ENCRYPTION_PASSWORD']) {
83
+ config.credentials.encryptionPassword = env['AQUAMAN_ENCRYPTION_PASSWORD'];
84
+ }
85
+ if (env['AQUAMAN_AUDIT_ENABLED']) {
86
+ config.audit.enabled = env['AQUAMAN_AUDIT_ENABLED'] === 'true';
87
+ }
88
+ if (env['VAULT_ADDR']) {
89
+ config.credentials.vaultAddress = env['VAULT_ADDR'];
90
+ }
91
+ if (env['VAULT_TOKEN']) {
92
+ config.credentials.vaultToken = env['VAULT_TOKEN'];
93
+ }
94
+ if (env['VAULT_NAMESPACE']) {
95
+ config.credentials.vaultNamespace = env['VAULT_NAMESPACE'];
96
+ }
97
+ return config;
98
+ }
99
+ function mergeConfig(base, override) {
100
+ // Deprecation: ignore encryptionPassword from YAML config (env-var only)
101
+ if (override.credentials && 'encryptionPassword' in override.credentials) {
102
+ console.warn('Warning: credentials.encryptionPassword in config.yaml is deprecated and ignored. Use AQUAMAN_ENCRYPTION_PASSWORD env var instead.');
103
+ const { encryptionPassword: _, ...restCreds } = override.credentials;
104
+ override = { ...override, credentials: restCreds };
105
+ }
106
+ return {
107
+ credentials: {
108
+ ...base.credentials,
109
+ ...override.credentials,
110
+ },
111
+ audit: {
112
+ ...base.audit,
113
+ ...override.audit
114
+ },
115
+ services: {
116
+ ...base.services,
117
+ ...override.services
118
+ },
119
+ openclaw: {
120
+ ...base.openclaw,
121
+ ...override.openclaw
122
+ }
123
+ };
124
+ }
125
+ export function ensureConfigDir() {
126
+ const configDir = getConfigDir();
127
+ if (!fs.existsSync(configDir)) {
128
+ fs.mkdirSync(configDir, { recursive: true });
129
+ }
130
+ }
131
+ export function saveConfig(config) {
132
+ ensureConfigDir();
133
+ const configPath = getConfigPath();
134
+ fs.writeFileSync(configPath, stringifyYaml(config), 'utf-8');
135
+ }
136
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/utils/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Cryptographic utilities for hash chains and integrity verification
3
+ */
4
+ export declare function computeHash(data: string): string;
5
+ export declare function computeChainedHash(data: string, previousHash: string): string;
6
+ export declare function generateId(): string;
7
+ export declare function generateNonce(): string;
8
+ export interface SigningKeyPair {
9
+ publicKey: string;
10
+ privateKey: string;
11
+ }
12
+ export declare function generateSigningKeyPair(): SigningKeyPair;
13
+ export declare function sign(data: string, privateKey: string): string;
14
+ export declare function verify(data: string, signature: string, publicKey: string): boolean;
15
+ export declare function encryptWithPassword(data: string, password: string): string;
16
+ export declare function decryptWithPassword(encryptedData: string, password: string): string;
17
+ export interface SelfSignedCert {
18
+ cert: string;
19
+ key: string;
20
+ }
21
+ /**
22
+ * Generate a self-signed TLS certificate.
23
+ * Prefers openssl CLI (correct DER encoding on all platforms),
24
+ * falls back to manual ASN.1 DER encoding if openssl is unavailable.
25
+ */
26
+ export declare function generateSelfSignedCert(commonName: string, days?: number): SelfSignedCert;
27
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../src/core/utils/hash.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,sBAAsB,IAAI,cAAc,CAMvD;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAWlF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgB1E;AAED,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAmBnF;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,SAAM,GAAG,cAAc,CA+BrF"}