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,218 @@
1
+ /**
2
+ * 1Password credential backend using the `op` CLI
3
+ * Requires: 1Password CLI installed and signed in
4
+ */
5
+ import { spawnSync } from 'node:child_process';
6
+ const DEFAULT_VAULT = 'aquaman';
7
+ const ITEM_PREFIX = 'aquaman';
8
+ export class OnePasswordStore {
9
+ vault;
10
+ account;
11
+ opPath = null;
12
+ constructor(options) {
13
+ this.vault = options?.vault || DEFAULT_VAULT;
14
+ this.account = options?.account;
15
+ this.validateOpCli();
16
+ }
17
+ validateOpCli() {
18
+ // Check if op CLI is installed
19
+ try {
20
+ const result = spawnSync('which', ['op'], { encoding: 'utf-8' });
21
+ if (result.status !== 0) {
22
+ throw new Error('1Password CLI (op) not found. Install from: https://1password.com/downloads/command-line/');
23
+ }
24
+ this.opPath = result.stdout.trim();
25
+ }
26
+ catch {
27
+ throw new Error('1Password CLI (op) not found. Install from: https://1password.com/downloads/command-line/');
28
+ }
29
+ // Check if signed in
30
+ try {
31
+ this.runOp(['account', 'get']);
32
+ }
33
+ catch (error) {
34
+ throw new Error('Not signed in to 1Password. Run: op signin');
35
+ }
36
+ }
37
+ runOp(args, input) {
38
+ const accountArgs = this.account ? ['--account', this.account] : [];
39
+ const fullArgs = [...args, ...accountArgs];
40
+ try {
41
+ const result = spawnSync('op', fullArgs, {
42
+ encoding: 'utf-8',
43
+ input,
44
+ maxBuffer: 10 * 1024 * 1024
45
+ });
46
+ if (result.status !== 0) {
47
+ const error = result.stderr || result.stdout || 'Unknown error';
48
+ throw new Error(`op command failed: ${error}`);
49
+ }
50
+ return result.stdout;
51
+ }
52
+ catch (error) {
53
+ if (error instanceof Error && error.message.includes('op command failed')) {
54
+ throw error;
55
+ }
56
+ throw new Error(`Failed to run op command: ${error}`);
57
+ }
58
+ }
59
+ getItemName(service, key) {
60
+ return `${ITEM_PREFIX}-${service}-${key}`;
61
+ }
62
+ parseItemName(itemName) {
63
+ if (!itemName.startsWith(`${ITEM_PREFIX}-`)) {
64
+ return null;
65
+ }
66
+ const parts = itemName.slice(ITEM_PREFIX.length + 1).split('-');
67
+ if (parts.length < 2) {
68
+ return null;
69
+ }
70
+ // Handle service names with dashes by taking first part as service
71
+ const service = parts[0];
72
+ const key = parts.slice(1).join('-');
73
+ return { service, key };
74
+ }
75
+ ensureVaultExists() {
76
+ try {
77
+ this.runOp(['vault', 'get', this.vault]);
78
+ }
79
+ catch {
80
+ // Vault doesn't exist, create it
81
+ try {
82
+ this.runOp(['vault', 'create', this.vault]);
83
+ console.log(`Created 1Password vault: ${this.vault}`);
84
+ }
85
+ catch (createError) {
86
+ throw new Error(`Failed to create vault "${this.vault}": ${createError}`);
87
+ }
88
+ }
89
+ }
90
+ async get(service, key) {
91
+ const itemName = this.getItemName(service, key);
92
+ try {
93
+ const result = this.runOp([
94
+ 'item', 'get', itemName,
95
+ '--vault', this.vault,
96
+ '--fields', 'credential',
97
+ '--format', 'json'
98
+ ]);
99
+ const parsed = JSON.parse(result);
100
+ return parsed.value || null;
101
+ }
102
+ catch (error) {
103
+ // Item not found is not an error
104
+ if (error instanceof Error && error.message.includes('not found')) {
105
+ return null;
106
+ }
107
+ throw error;
108
+ }
109
+ }
110
+ async set(service, key, value, metadata) {
111
+ this.ensureVaultExists();
112
+ const itemName = this.getItemName(service, key);
113
+ const tags = [ITEM_PREFIX, service];
114
+ // Check if item already exists
115
+ const existing = await this.get(service, key);
116
+ if (existing !== null) {
117
+ // Update existing item — pipe credential via stdin to avoid /proc/cmdline exposure
118
+ this.runOp([
119
+ 'item', 'edit', itemName,
120
+ '--vault', this.vault,
121
+ 'credential=-'
122
+ ], value);
123
+ }
124
+ else {
125
+ // Create new item — pipe credential via stdin to avoid /proc/cmdline exposure
126
+ const createArgs = [
127
+ 'item', 'create',
128
+ '--category', 'API Credential',
129
+ '--vault', this.vault,
130
+ '--title', itemName,
131
+ 'credential=-',
132
+ '--tags', tags.join(',')
133
+ ];
134
+ // Add metadata as fields
135
+ if (metadata) {
136
+ for (const [k, v] of Object.entries(metadata)) {
137
+ createArgs.push(`${k}=${v}`);
138
+ }
139
+ }
140
+ this.runOp(createArgs, value);
141
+ }
142
+ }
143
+ async delete(service, key) {
144
+ const itemName = this.getItemName(service, key);
145
+ try {
146
+ this.runOp([
147
+ 'item', 'delete', itemName,
148
+ '--vault', this.vault
149
+ ]);
150
+ return true;
151
+ }
152
+ catch (error) {
153
+ if (error instanceof Error && error.message.includes('not found')) {
154
+ return false;
155
+ }
156
+ throw error;
157
+ }
158
+ }
159
+ async list(service) {
160
+ try {
161
+ const listArgs = [
162
+ 'item', 'list',
163
+ '--vault', this.vault,
164
+ '--tags', service ? `${ITEM_PREFIX},${service}` : ITEM_PREFIX,
165
+ '--format', 'json'
166
+ ];
167
+ const result = this.runOp(listArgs);
168
+ const items = JSON.parse(result);
169
+ const credentials = [];
170
+ for (const item of items) {
171
+ const parsed = this.parseItemName(item.title);
172
+ if (parsed) {
173
+ if (!service || parsed.service === service) {
174
+ credentials.push(parsed);
175
+ }
176
+ }
177
+ }
178
+ return credentials;
179
+ }
180
+ catch (error) {
181
+ // Vault might not exist yet
182
+ if (error instanceof Error && error.message.includes('not found')) {
183
+ return [];
184
+ }
185
+ throw error;
186
+ }
187
+ }
188
+ async exists(service, key) {
189
+ const value = await this.get(service, key);
190
+ return value !== null;
191
+ }
192
+ /**
193
+ * Get the vault name being used
194
+ */
195
+ getVault() {
196
+ return this.vault;
197
+ }
198
+ /**
199
+ * Check if 1Password CLI is available and signed in
200
+ */
201
+ static isAvailable() {
202
+ try {
203
+ const whichResult = spawnSync('which', ['op'], { encoding: 'utf-8' });
204
+ if (whichResult.status !== 0) {
205
+ return false;
206
+ }
207
+ const accountResult = spawnSync('op', ['account', 'get'], { encoding: 'utf-8' });
208
+ return accountResult.status === 0;
209
+ }
210
+ catch {
211
+ return false;
212
+ }
213
+ }
214
+ }
215
+ export function createOnePasswordStore(options) {
216
+ return new OnePasswordStore(options);
217
+ }
218
+ //# sourceMappingURL=onepassword.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onepassword.js","sourceRoot":"","sources":["../../../../src/core/credentials/backends/onepassword.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * HashiCorp Vault credential backend using KV v2 API
3
+ * Requires: Vault server accessible and valid token
4
+ */
5
+ import type { CredentialStore } from '../store.js';
6
+ export interface VaultStoreOptions {
7
+ address: string;
8
+ token?: string;
9
+ namespace?: string;
10
+ mountPath?: string;
11
+ }
12
+ export declare class VaultStore implements CredentialStore {
13
+ private address;
14
+ private token;
15
+ private namespace?;
16
+ private mountPath;
17
+ constructor(options: VaultStoreOptions);
18
+ private getPath;
19
+ private getHeaders;
20
+ private request;
21
+ /**
22
+ * KV v2 uses data/ prefix for read/write and metadata/ prefix for metadata
23
+ */
24
+ private getDataPath;
25
+ private getMetadataPath;
26
+ private getListPath;
27
+ get(service: string, key: string): Promise<string | null>;
28
+ set(service: string, key: string, value: string, metadata?: Record<string, string>): Promise<void>;
29
+ delete(service: string, key: string): Promise<boolean>;
30
+ list(service?: string): Promise<Array<{
31
+ service: string;
32
+ key: string;
33
+ }>>;
34
+ exists(service: string, key: string): Promise<boolean>;
35
+ /**
36
+ * Get the Vault address being used
37
+ */
38
+ getAddress(): string;
39
+ /**
40
+ * Get the mount path being used
41
+ */
42
+ getMountPath(): string;
43
+ /**
44
+ * Check if Vault is reachable and token is valid
45
+ */
46
+ healthCheck(): Promise<{
47
+ healthy: boolean;
48
+ error?: string;
49
+ }>;
50
+ /**
51
+ * Check if Vault is available with given options
52
+ */
53
+ static isAvailable(options: VaultStoreOptions): Promise<boolean>;
54
+ }
55
+ export declare function createVaultStore(options: VaultStoreOptions): VaultStore;
56
+ //# sourceMappingURL=vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../../../src/core/credentials/backends/vault.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD,qBAAa,UAAW,YAAW,eAAe;IAChD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;gBAEd,OAAO,EAAE,iBAAiB;IAetC,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,UAAU;YAaJ,OAAO;IA+BrB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,WAAW;IAOb,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAmBzD,GAAG,CACP,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IAiBV,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAatD,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA0CxE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK5D;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAiBlE;;OAEG;WACU,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;CASvE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAEvE"}
@@ -0,0 +1,206 @@
1
+ /**
2
+ * HashiCorp Vault credential backend using KV v2 API
3
+ * Requires: Vault server accessible and valid token
4
+ */
5
+ const DEFAULT_MOUNT_PATH = 'secret';
6
+ const AQUAMAN_PATH_PREFIX = 'aquaman';
7
+ export class VaultStore {
8
+ address;
9
+ token;
10
+ namespace;
11
+ mountPath;
12
+ constructor(options) {
13
+ this.address = options.address.replace(/\/$/, ''); // Remove trailing slash
14
+ this.token = options.token || process.env['VAULT_TOKEN'] || '';
15
+ this.namespace = options.namespace || process.env['VAULT_NAMESPACE'];
16
+ this.mountPath = options.mountPath || DEFAULT_MOUNT_PATH;
17
+ if (!this.token) {
18
+ throw new Error('Vault token required. Provide via options.token or VAULT_TOKEN env var.');
19
+ }
20
+ if (!this.address) {
21
+ throw new Error('Vault address required. Provide via options.address or VAULT_ADDR env var.');
22
+ }
23
+ }
24
+ getPath(service, key) {
25
+ return `${AQUAMAN_PATH_PREFIX}/${service}/${key}`;
26
+ }
27
+ getHeaders() {
28
+ const headers = {
29
+ 'X-Vault-Token': this.token,
30
+ 'Content-Type': 'application/json'
31
+ };
32
+ if (this.namespace) {
33
+ headers['X-Vault-Namespace'] = this.namespace;
34
+ }
35
+ return headers;
36
+ }
37
+ async request(method, path, body) {
38
+ const url = `${this.address}/v1/${path}`;
39
+ const headers = this.getHeaders();
40
+ const response = await fetch(url, {
41
+ method,
42
+ headers,
43
+ body: body ? JSON.stringify(body) : undefined
44
+ });
45
+ if (response.status === 404) {
46
+ return { status: 404 };
47
+ }
48
+ if (!response.ok && response.status !== 204) {
49
+ const errorText = await response.text();
50
+ throw new Error(`Vault API error (${response.status}): ${errorText}`);
51
+ }
52
+ if (response.status === 204) {
53
+ return { status: 204 };
54
+ }
55
+ const data = await response.json();
56
+ return { data: data.data, status: response.status };
57
+ }
58
+ /**
59
+ * KV v2 uses data/ prefix for read/write and metadata/ prefix for metadata
60
+ */
61
+ getDataPath(service, key) {
62
+ return `${this.mountPath}/data/${this.getPath(service, key)}`;
63
+ }
64
+ getMetadataPath(service, key) {
65
+ return `${this.mountPath}/metadata/${this.getPath(service, key)}`;
66
+ }
67
+ getListPath(service) {
68
+ if (service) {
69
+ return `${this.mountPath}/metadata/${AQUAMAN_PATH_PREFIX}/${service}`;
70
+ }
71
+ return `${this.mountPath}/metadata/${AQUAMAN_PATH_PREFIX}`;
72
+ }
73
+ async get(service, key) {
74
+ try {
75
+ const result = await this.request('GET', this.getDataPath(service, key));
76
+ if (result.status === 404) {
77
+ return null;
78
+ }
79
+ // KV v2 wraps data in another data object
80
+ const kvData = result.data;
81
+ return kvData?.data?.credential || null;
82
+ }
83
+ catch (error) {
84
+ if (error instanceof Error && error.message.includes('404')) {
85
+ return null;
86
+ }
87
+ throw error;
88
+ }
89
+ }
90
+ async set(service, key, value, metadata) {
91
+ const data = {
92
+ credential: value
93
+ };
94
+ // Add metadata to the secret data (Vault stores metadata separately but we can include it in data too)
95
+ if (metadata) {
96
+ for (const [k, v] of Object.entries(metadata)) {
97
+ data[`meta_${k}`] = v;
98
+ }
99
+ }
100
+ await this.request('POST', this.getDataPath(service, key), {
101
+ data
102
+ });
103
+ }
104
+ async delete(service, key) {
105
+ try {
106
+ // For KV v2, we need to delete the metadata to fully remove the secret
107
+ const result = await this.request('DELETE', this.getMetadataPath(service, key));
108
+ return result.status === 204 || result.status === 200;
109
+ }
110
+ catch (error) {
111
+ if (error instanceof Error && error.message.includes('404')) {
112
+ return false;
113
+ }
114
+ throw error;
115
+ }
116
+ }
117
+ async list(service) {
118
+ const credentials = [];
119
+ try {
120
+ if (service) {
121
+ // List keys for a specific service
122
+ const result = await this.request('LIST', this.getListPath(service));
123
+ if (result.status === 404) {
124
+ return [];
125
+ }
126
+ const keys = result.data?.keys || [];
127
+ for (const key of keys) {
128
+ // Remove trailing slash if present (indicates directory)
129
+ const cleanKey = key.replace(/\/$/, '');
130
+ credentials.push({ service, key: cleanKey });
131
+ }
132
+ }
133
+ else {
134
+ // List all services first, then keys for each
135
+ const servicesResult = await this.request('LIST', this.getListPath());
136
+ if (servicesResult.status === 404) {
137
+ return [];
138
+ }
139
+ const services = servicesResult.data?.keys || [];
140
+ for (const svc of services) {
141
+ const cleanService = svc.replace(/\/$/, '');
142
+ const serviceCredentials = await this.list(cleanService);
143
+ credentials.push(...serviceCredentials);
144
+ }
145
+ }
146
+ return credentials;
147
+ }
148
+ catch (error) {
149
+ if (error instanceof Error && error.message.includes('404')) {
150
+ return [];
151
+ }
152
+ throw error;
153
+ }
154
+ }
155
+ async exists(service, key) {
156
+ const value = await this.get(service, key);
157
+ return value !== null;
158
+ }
159
+ /**
160
+ * Get the Vault address being used
161
+ */
162
+ getAddress() {
163
+ return this.address;
164
+ }
165
+ /**
166
+ * Get the mount path being used
167
+ */
168
+ getMountPath() {
169
+ return this.mountPath;
170
+ }
171
+ /**
172
+ * Check if Vault is reachable and token is valid
173
+ */
174
+ async healthCheck() {
175
+ try {
176
+ // Check token validity by looking up self
177
+ const response = await fetch(`${this.address}/v1/auth/token/lookup-self`, {
178
+ headers: this.getHeaders()
179
+ });
180
+ if (response.ok) {
181
+ return { healthy: true };
182
+ }
183
+ return { healthy: false, error: `Token lookup failed: ${response.status}` };
184
+ }
185
+ catch (error) {
186
+ return { healthy: false, error: `Connection failed: ${error}` };
187
+ }
188
+ }
189
+ /**
190
+ * Check if Vault is available with given options
191
+ */
192
+ static async isAvailable(options) {
193
+ try {
194
+ const store = new VaultStore(options);
195
+ const health = await store.healthCheck();
196
+ return health.healthy;
197
+ }
198
+ catch {
199
+ return false;
200
+ }
201
+ }
202
+ }
203
+ export function createVaultStore(options) {
204
+ return new VaultStore(options);
205
+ }
206
+ //# sourceMappingURL=vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../../../src/core/credentials/backends/vault.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Credential storage module
3
+ */
4
+ export { type Credential, type CredentialStore, type CredentialStoreOptions, KeychainStore, EncryptedFileStore, MemoryStore, createCredentialStore, validatePasswordStrength } from './store.js';
5
+ export { type OnePasswordStoreOptions, OnePasswordStore, createOnePasswordStore } from './backends/onepassword.js';
6
+ export { type VaultStoreOptions, VaultStore, createVaultStore } from './backends/vault.js';
7
+ export { type KeePassXCStoreOptions, KeePassXCStore, createKeePassXCStore } from './backends/keepassxc.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/credentials/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,KAAK,uBAAuB,EAC5B,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,KAAK,iBAAiB,EACtB,UAAU,EACV,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,KAAK,qBAAqB,EAC1B,cAAc,EACd,oBAAoB,EACrB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Credential storage module
3
+ */
4
+ export { KeychainStore, EncryptedFileStore, MemoryStore, createCredentialStore, validatePasswordStrength } from './store.js';
5
+ export { OnePasswordStore, createOnePasswordStore } from './backends/onepassword.js';
6
+ export { VaultStore, createVaultStore } from './backends/vault.js';
7
+ export { KeePassXCStore, createKeePassXCStore } from './backends/keepassxc.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/credentials/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAIL,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAEL,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAEL,UAAU,EACV,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAEL,cAAc,EACd,oBAAoB,EACrB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Credential storage interface with multiple backend support
3
+ * Supports: macOS Keychain, 1Password, HashiCorp Vault, encrypted file
4
+ */
5
+ import type { CredentialBackend } from '../types.js';
6
+ export interface Credential {
7
+ service: string;
8
+ key: string;
9
+ value: string;
10
+ metadata?: Record<string, string>;
11
+ createdAt: Date;
12
+ lastUsed?: Date;
13
+ rotateAfter?: Date;
14
+ }
15
+ export interface CredentialStore {
16
+ get(service: string, key: string): Promise<string | null>;
17
+ set(service: string, key: string, value: string, metadata?: Record<string, string>): Promise<void>;
18
+ delete(service: string, key: string): Promise<boolean>;
19
+ list(service?: string): Promise<Array<{
20
+ service: string;
21
+ key: string;
22
+ }>>;
23
+ exists(service: string, key: string): Promise<boolean>;
24
+ }
25
+ export interface CredentialStoreOptions {
26
+ backend: CredentialBackend;
27
+ encryptionPassword?: string;
28
+ vaultAddress?: string;
29
+ vaultToken?: string;
30
+ vaultNamespace?: string;
31
+ vaultMountPath?: string;
32
+ onePasswordVault?: string;
33
+ onePasswordAccount?: string;
34
+ keepassxcDatabasePath?: string;
35
+ keepassxcKeyFilePath?: string;
36
+ }
37
+ /**
38
+ * macOS Keychain backend using the keytar library
39
+ */
40
+ export declare class KeychainStore implements CredentialStore {
41
+ private keytar;
42
+ private servicePrefix;
43
+ private indexService;
44
+ private indexAccount;
45
+ private getKeytar;
46
+ private getServiceName;
47
+ private getIndex;
48
+ private updateIndex;
49
+ get(service: string, key: string): Promise<string | null>;
50
+ set(service: string, key: string, value: string): Promise<void>;
51
+ delete(service: string, key: string): Promise<boolean>;
52
+ list(): Promise<Array<{
53
+ service: string;
54
+ key: string;
55
+ }>>;
56
+ exists(service: string, key: string): Promise<boolean>;
57
+ }
58
+ /**
59
+ * Encrypted file backend - fallback option
60
+ */
61
+ export declare class EncryptedFileStore implements CredentialStore {
62
+ private filePath;
63
+ private password;
64
+ private cache;
65
+ constructor(password: string, filePath?: string);
66
+ private getKey;
67
+ private load;
68
+ private save;
69
+ get(service: string, key: string): Promise<string | null>;
70
+ set(service: string, key: string, value: string, metadata?: Record<string, string>): Promise<void>;
71
+ delete(service: string, key: string): Promise<boolean>;
72
+ list(service?: string): Promise<Array<{
73
+ service: string;
74
+ key: string;
75
+ }>>;
76
+ exists(service: string, key: string): Promise<boolean>;
77
+ }
78
+ /**
79
+ * In-memory store for testing
80
+ */
81
+ export declare class MemoryStore implements CredentialStore {
82
+ private store;
83
+ private getKey;
84
+ get(service: string, key: string): Promise<string | null>;
85
+ set(service: string, key: string, value: string, metadata?: Record<string, string>): Promise<void>;
86
+ delete(service: string, key: string): Promise<boolean>;
87
+ list(service?: string): Promise<Array<{
88
+ service: string;
89
+ key: string;
90
+ }>>;
91
+ exists(service: string, key: string): Promise<boolean>;
92
+ clear(): void;
93
+ }
94
+ /**
95
+ * Validate encryption password strength for encrypted-file backend.
96
+ */
97
+ export declare function validatePasswordStrength(password: string): {
98
+ valid: boolean;
99
+ errors: string[];
100
+ };
101
+ export declare function createCredentialStore(options: CredentialStoreOptions): CredentialStore;
102
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/core/credentials/store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1D,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACzE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,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,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,aAAc,YAAW,eAAe;IACnD,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,YAAY,CAAc;YAEpB,SAAS;IAYvB,OAAO,CAAC,cAAc;YAIR,QAAQ;YAOR,WAAW;IAKnB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKzD,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/D,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBtD,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAexD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAI7D;AAED;;GAEG;AACH,qBAAa,kBAAmB,YAAW,eAAe;IACxD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAwC;gBAEzC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAK/C,OAAO,CAAC,MAAM;YAIA,IAAI;YAsBJ,IAAI;IAmBZ,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAMzD,GAAG,CACP,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IAaV,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAStD,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAaxE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAI7D;AAED;;GAEG;AACH,qBAAa,WAAY,YAAW,eAAe;IACjD,OAAO,CAAC,KAAK,CAAiC;IAE9C,OAAO,CAAC,MAAM;IAIR,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIzD,GAAG,CACP,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IAUV,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAItD,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAUxE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI5D,KAAK,IAAI,IAAI;CAGd;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAQ/F;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,eAAe,CAgEtF"}