@centient/secrets 0.2.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 (57) hide show
  1. package/dist/cli/messages.d.ts +60 -0
  2. package/dist/cli/messages.d.ts.map +1 -0
  3. package/dist/cli/messages.js +63 -0
  4. package/dist/cli/messages.js.map +1 -0
  5. package/dist/cli/secrets-cli.d.ts +38 -0
  6. package/dist/cli/secrets-cli.d.ts.map +1 -0
  7. package/dist/cli/secrets-cli.js +532 -0
  8. package/dist/cli/secrets-cli.js.map +1 -0
  9. package/dist/crypto/vault-common.d.ts +63 -0
  10. package/dist/crypto/vault-common.d.ts.map +1 -0
  11. package/dist/crypto/vault-common.js +180 -0
  12. package/dist/crypto/vault-common.js.map +1 -0
  13. package/dist/environment/EnvironmentManager.d.ts +171 -0
  14. package/dist/environment/EnvironmentManager.d.ts.map +1 -0
  15. package/dist/environment/EnvironmentManager.js +604 -0
  16. package/dist/environment/EnvironmentManager.js.map +1 -0
  17. package/dist/index.d.ts +12 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +17 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/platform/agent-detect.d.ts +15 -0
  22. package/dist/platform/agent-detect.d.ts.map +1 -0
  23. package/dist/platform/agent-detect.js +22 -0
  24. package/dist/platform/agent-detect.js.map +1 -0
  25. package/dist/platform/platform.d.ts +51 -0
  26. package/dist/platform/platform.d.ts.map +1 -0
  27. package/dist/platform/platform.js +141 -0
  28. package/dist/platform/platform.js.map +1 -0
  29. package/dist/vault/types.d.ts +54 -0
  30. package/dist/vault/types.d.ts.map +1 -0
  31. package/dist/vault/types.js +12 -0
  32. package/dist/vault/types.js.map +1 -0
  33. package/dist/vault/vault-env.d.ts +58 -0
  34. package/dist/vault/vault-env.d.ts.map +1 -0
  35. package/dist/vault/vault-env.js +73 -0
  36. package/dist/vault/vault-env.js.map +1 -0
  37. package/dist/vault/vault-gpg.d.ts +40 -0
  38. package/dist/vault/vault-gpg.d.ts.map +1 -0
  39. package/dist/vault/vault-gpg.js +149 -0
  40. package/dist/vault/vault-gpg.js.map +1 -0
  41. package/dist/vault/vault-libsecret.d.ts +51 -0
  42. package/dist/vault/vault-libsecret.d.ts.map +1 -0
  43. package/dist/vault/vault-libsecret.js +115 -0
  44. package/dist/vault/vault-libsecret.js.map +1 -0
  45. package/dist/vault/vault-utils.d.ts +12 -0
  46. package/dist/vault/vault-utils.d.ts.map +1 -0
  47. package/dist/vault/vault-utils.js +16 -0
  48. package/dist/vault/vault-utils.js.map +1 -0
  49. package/dist/vault/vault-windows.d.ts +71 -0
  50. package/dist/vault/vault-windows.d.ts.map +1 -0
  51. package/dist/vault/vault-windows.js +186 -0
  52. package/dist/vault/vault-windows.js.map +1 -0
  53. package/dist/vault/vault.d.ts +53 -0
  54. package/dist/vault/vault.d.ts.map +1 -0
  55. package/dist/vault/vault.js +132 -0
  56. package/dist/vault/vault.js.map +1 -0
  57. package/package.json +37 -0
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Crypto — Vault Common Helpers
3
+ *
4
+ * Shared encryption/decryption utilities and Keychain accessor functions
5
+ * used by both the auth vault and the secrets CLI.
6
+ *
7
+ * Zero duplication rule: encrypt, decrypt, getKeyFromKeychain, and
8
+ * storeKeyInKeychain must NOT be copied into any other file — import from here.
9
+ */
10
+ import { createCipheriv, createDecipheriv, randomBytes, } from "crypto";
11
+ import { execFileSync } from "child_process";
12
+ // =============================================================================
13
+ // Constants
14
+ // =============================================================================
15
+ export const ALGORITHM = "aes-256-gcm";
16
+ export const IV_LENGTH = 12;
17
+ export const AUTH_TAG_LENGTH = 16;
18
+ export const KEY_LENGTH = 32;
19
+ // =============================================================================
20
+ // Encryption / Decryption
21
+ // =============================================================================
22
+ /**
23
+ * Encrypt a string value with AES-256-GCM.
24
+ *
25
+ * The returned Buffer layout is:
26
+ * [IV (12 bytes)] [AuthTag (16 bytes)] [Ciphertext (variable)]
27
+ */
28
+ export function encrypt(plaintext, key) {
29
+ const iv = randomBytes(IV_LENGTH);
30
+ const cipher = createCipheriv(ALGORITHM, key, iv);
31
+ const encrypted = Buffer.concat([
32
+ cipher.update(plaintext, "utf8"),
33
+ cipher.final(),
34
+ ]);
35
+ const authTag = cipher.getAuthTag();
36
+ return Buffer.concat([iv, authTag, encrypted]);
37
+ }
38
+ /**
39
+ * Decrypt a Buffer produced by `encrypt()`.
40
+ * Returns the plaintext string, or null if decryption fails.
41
+ */
42
+ export function decrypt(data, key) {
43
+ try {
44
+ if (data.length < IV_LENGTH + AUTH_TAG_LENGTH)
45
+ return null;
46
+ const iv = data.subarray(0, IV_LENGTH);
47
+ const authTag = data.subarray(IV_LENGTH, IV_LENGTH + AUTH_TAG_LENGTH);
48
+ const ciphertext = data.subarray(IV_LENGTH + AUTH_TAG_LENGTH);
49
+ const decipher = createDecipheriv(ALGORITHM, key, iv);
50
+ decipher.setAuthTag(authTag);
51
+ const decrypted = Buffer.concat([
52
+ decipher.update(ciphertext),
53
+ decipher.final(),
54
+ ]);
55
+ return decrypted.toString("utf8");
56
+ }
57
+ catch {
58
+ return null;
59
+ }
60
+ }
61
+ /**
62
+ * Encrypt a JSON-serializable object. Convenience wrapper over `encrypt()`.
63
+ * Returns null if serialization fails (should not happen with plain objects).
64
+ */
65
+ export function encryptObject(data, key) {
66
+ try {
67
+ return encrypt(JSON.stringify(data), key);
68
+ }
69
+ catch {
70
+ return null;
71
+ }
72
+ }
73
+ /**
74
+ * Decrypt a Buffer to a JSON object. Convenience wrapper over `decrypt()`.
75
+ * Returns null if decryption or parsing fails.
76
+ */
77
+ export function decryptObject(data, key) {
78
+ const plaintext = decrypt(data, key);
79
+ if (plaintext === null)
80
+ return null;
81
+ try {
82
+ const parsed = JSON.parse(plaintext);
83
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
84
+ return null;
85
+ }
86
+ return parsed;
87
+ }
88
+ catch {
89
+ return null;
90
+ }
91
+ }
92
+ // =============================================================================
93
+ // Keychain operations (macOS `security` CLI)
94
+ // =============================================================================
95
+ /**
96
+ * Read a hex-encoded key from the macOS Keychain.
97
+ * Returns the key as a Buffer, or null if not found / command fails.
98
+ */
99
+ export function getKeyFromKeychain(service, account) {
100
+ try {
101
+ const result = execFileSync("security", ["find-generic-password", "-s", service, "-a", account, "-w"], { encoding: "utf8", stdio: ["pipe", "pipe", "pipe"] }).trim();
102
+ if (!result)
103
+ return null;
104
+ return Buffer.from(result, "hex");
105
+ }
106
+ catch {
107
+ return null;
108
+ }
109
+ }
110
+ /**
111
+ * Store a hex-encoded key in the macOS Keychain.
112
+ * Deletes any existing entry first to avoid duplicates.
113
+ * Returns true on success, false on failure.
114
+ */
115
+ export function storeKeyInKeychain(service, account, key) {
116
+ try {
117
+ const keyHex = key.toString("hex");
118
+ // Delete existing entry (ignore errors — it may not exist)
119
+ try {
120
+ execFileSync("security", ["delete-generic-password", "-s", service, "-a", account], { stdio: ["pipe", "pipe", "pipe"] });
121
+ }
122
+ catch {
123
+ // Intentionally ignored
124
+ }
125
+ execFileSync("security", ["add-generic-password", "-s", service, "-a", account, "-w", keyHex, "-T", ""], { stdio: ["pipe", "pipe", "pipe"] });
126
+ return true;
127
+ }
128
+ catch {
129
+ return false;
130
+ }
131
+ }
132
+ /**
133
+ * Store an arbitrary string value directly in the macOS Keychain
134
+ * (not hex-encoded — intended for short credential strings like tokens).
135
+ * Returns true on success, false on failure.
136
+ */
137
+ export function storeStringInKeychain(service, account, value) {
138
+ try {
139
+ // Delete existing entry
140
+ try {
141
+ execFileSync("security", ["delete-generic-password", "-s", service, "-a", account], { stdio: ["pipe", "pipe", "pipe"] });
142
+ }
143
+ catch {
144
+ // Intentionally ignored
145
+ }
146
+ execFileSync("security", ["add-generic-password", "-s", service, "-a", account, "-w", value, "-T", ""], { stdio: ["pipe", "pipe", "pipe"] });
147
+ return true;
148
+ }
149
+ catch {
150
+ return false;
151
+ }
152
+ }
153
+ /**
154
+ * Read an arbitrary string value from the macOS Keychain.
155
+ * Returns the stored string, or null if not found / command fails.
156
+ */
157
+ export function getStringFromKeychain(service, account) {
158
+ try {
159
+ const result = execFileSync("security", ["find-generic-password", "-s", service, "-a", account, "-w"], { encoding: "utf8", stdio: ["pipe", "pipe", "pipe"] }).trim();
160
+ return result || null;
161
+ }
162
+ catch {
163
+ return null;
164
+ }
165
+ }
166
+ /**
167
+ * Delete an entry from the macOS Keychain.
168
+ * Returns true if deleted (or did not exist), false if command fails unexpectedly.
169
+ */
170
+ export function deleteFromKeychain(service, account) {
171
+ try {
172
+ execFileSync("security", ["delete-generic-password", "-s", service, "-a", account], { stdio: ["pipe", "pipe", "pipe"] });
173
+ return true;
174
+ }
175
+ catch {
176
+ // exit 44 = item not found — treat as success
177
+ return true;
178
+ }
179
+ }
180
+ //# sourceMappingURL=vault-common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault-common.js","sourceRoot":"","sources":["../../src/crypto/vault-common.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Environment Manager
3
+ *
4
+ * Manages multi-environment support for the secrets management system.
5
+ * Provides isolated configuration and vault storage per environment.
6
+ *
7
+ * Directory structure:
8
+ * ~/.centient/environments/
9
+ * ├── dev/
10
+ * │ ├── config.json
11
+ * │ └── vault.enc
12
+ * ├── staging/
13
+ * │ ├── config.json
14
+ * │ └── vault.enc
15
+ * └── prod/
16
+ * ├── config.json
17
+ * └── vault.enc
18
+ * ~/.centient/current -> environments/dev/ (symlink)
19
+ *
20
+ * Security:
21
+ * - All operations that modify environments check for AI agent context
22
+ * - Agents can read/list environments but cannot switch or create
23
+ * - This prevents accidental environment changes during AI sessions
24
+ */
25
+ export interface Environment {
26
+ /** Environment name (e.g., "dev", "staging", "prod") */
27
+ name: string;
28
+ /** Absolute path to environment directory */
29
+ path: string;
30
+ /** Whether this is the currently active environment */
31
+ isActive: boolean;
32
+ /** Whether the environment has a config.json */
33
+ hasConfig: boolean;
34
+ /** Whether the environment has a vault.enc */
35
+ hasVault: boolean;
36
+ /** Last modified timestamp of the environment directory */
37
+ lastModified?: Date;
38
+ }
39
+ export interface EnvironmentResult {
40
+ success: boolean;
41
+ message: string;
42
+ environment?: Environment;
43
+ nextAction?: string;
44
+ }
45
+ export interface ListEnvironmentsResult {
46
+ success: boolean;
47
+ environments: Environment[];
48
+ currentEnvironment: string | null;
49
+ message?: string;
50
+ }
51
+ export interface EnvironmentConfig {
52
+ /** Optional description of this environment */
53
+ description?: string;
54
+ /** When this environment was created */
55
+ createdAt: string;
56
+ /** Who created this environment */
57
+ createdBy?: string;
58
+ }
59
+ export declare class EnvironmentManager {
60
+ /**
61
+ * List all available environments
62
+ *
63
+ * Returns information about each environment including:
64
+ * - Name
65
+ * - Path
66
+ * - Whether it's currently active
67
+ * - Whether it has config and vault files
68
+ */
69
+ listEnvironments(): ListEnvironmentsResult;
70
+ /**
71
+ * Get the currently active environment name
72
+ *
73
+ * Returns the name of the environment that the 'current' symlink points to,
74
+ * or null if no environment is set.
75
+ */
76
+ getCurrentEnvironment(): string | null;
77
+ /**
78
+ * Get details about a specific environment
79
+ */
80
+ getEnvironment(name: string): Environment | null;
81
+ /**
82
+ * Switch to a different environment
83
+ *
84
+ * Updates the 'current' symlink to point to the specified environment.
85
+ * This operation is blocked for AI agents to prevent accidental
86
+ * environment changes during automated sessions.
87
+ *
88
+ * @param name - Name of the environment to switch to
89
+ */
90
+ switchEnvironment(name: string): EnvironmentResult;
91
+ /**
92
+ * Create a new environment
93
+ *
94
+ * Creates the environment directory with initial config.json.
95
+ * Optionally sets it as the current environment.
96
+ * This operation is blocked for AI agents.
97
+ *
98
+ * @param name - Name for the new environment
99
+ * @param options - Creation options
100
+ */
101
+ createEnvironment(name: string, options?: {
102
+ /** Set as current environment after creation */
103
+ setAsCurrent?: boolean;
104
+ /** Optional description for the environment */
105
+ description?: string;
106
+ /** Copy config from another environment */
107
+ copyFrom?: string;
108
+ }): EnvironmentResult;
109
+ /**
110
+ * Delete an environment
111
+ *
112
+ * Removes the environment directory and all its contents.
113
+ * Cannot delete the currently active environment.
114
+ * This operation is blocked for AI agents.
115
+ *
116
+ * @param name - Name of the environment to delete
117
+ * @param options - Deletion options
118
+ */
119
+ deleteEnvironment(name: string, options?: {
120
+ /** Force deletion even if environment has vault.enc */
121
+ force?: boolean;
122
+ }): EnvironmentResult;
123
+ /**
124
+ * Initialize the environment system
125
+ *
126
+ * Creates the default 'dev' environment if no environments exist.
127
+ * Sets up the 'current' symlink to point to 'dev'.
128
+ * This operation is blocked for AI agents.
129
+ */
130
+ initialize(): EnvironmentResult;
131
+ /**
132
+ * Get the path to the current environment's directory
133
+ *
134
+ * Returns the resolved path that the 'current' symlink points to,
135
+ * or null if no current environment is set.
136
+ */
137
+ getCurrentEnvironmentPath(): string | null;
138
+ /**
139
+ * Get the path to the current environment's config.json
140
+ */
141
+ getCurrentConfigPath(): string | null;
142
+ /**
143
+ * Get the path to the current environment's vault.enc
144
+ */
145
+ getCurrentVaultPath(): string | null;
146
+ /**
147
+ * Check if the environment system is initialized
148
+ */
149
+ isInitialized(): boolean;
150
+ }
151
+ /**
152
+ * Get the singleton EnvironmentManager instance
153
+ */
154
+ export declare function getEnvironmentManager(): EnvironmentManager;
155
+ /**
156
+ * Reset the singleton instance (for testing)
157
+ */
158
+ export declare function resetEnvironmentManager(): void;
159
+ /**
160
+ * Get the environments directory path
161
+ */
162
+ export declare function getEnvironmentsDir(): string;
163
+ /**
164
+ * Get the current symlink path
165
+ */
166
+ export declare function getCurrentLinkPath(): string;
167
+ /**
168
+ * Get the default environment name
169
+ */
170
+ export declare function getDefaultEnvironmentName(): string;
171
+ //# sourceMappingURL=EnvironmentManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnvironmentManager.d.ts","sourceRoot":"","sources":["../../src/environment/EnvironmentManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAqBH,MAAM,WAAW,WAAW;IAC1B,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,QAAQ,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,QAAQ,EAAE,OAAO,CAAC;IAClB,2DAA2D;IAC3D,YAAY,CAAC,EAAE,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0GD,qBAAa,kBAAkB;IAC7B;;;;;;;;OAQG;IACH,gBAAgB,IAAI,sBAAsB;IAiE1C;;;;;OAKG;IACH,qBAAqB,IAAI,MAAM,GAAG,IAAI;IA4BtC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAiChD;;;;;;;;OAQG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB;IAmElD;;;;;;;;;OASG;IACH,iBAAiB,CACf,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QACR,gDAAgD;QAChD,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,+CAA+C;QAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,2CAA2C;QAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GACA,iBAAiB;IAgHpB;;;;;;;;;OASG;IACH,iBAAiB,CACf,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QACR,uDAAuD;QACvD,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,GACA,iBAAiB;IAmEpB;;;;;;OAMG;IACH,UAAU,IAAI,iBAAiB;IAwC/B;;;;;OAKG;IACH,yBAAyB,IAAI,MAAM,GAAG,IAAI;IAQ1C;;OAEG;IACH,oBAAoB,IAAI,MAAM,GAAG,IAAI;IAQrC;;OAEG;IACH,mBAAmB,IAAI,MAAM,GAAG,IAAI;IAQpC;;OAEG;IACH,aAAa,IAAI,OAAO;CAGzB;AAQD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,kBAAkB,CAK1D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAElD"}