@vibesdotdev/secrets 0.0.1

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 (208) hide show
  1. package/README.md +59 -0
  2. package/SPEC.md +47 -0
  3. package/dist/cli/check/schemas/check-result.d.ts +9 -0
  4. package/dist/cli/check/schemas/check-result.d.ts.map +1 -0
  5. package/dist/cli/check/schemas/check-result.js +2 -0
  6. package/dist/cli/check/schemas/check-result.js.map +1 -0
  7. package/dist/cli/check/secrets.check.cli-command.descriptor.d.ts +4 -0
  8. package/dist/cli/check/secrets.check.cli-command.descriptor.d.ts.map +1 -0
  9. package/dist/cli/check/secrets.check.cli-command.descriptor.js +19 -0
  10. package/dist/cli/check/secrets.check.cli-command.descriptor.js.map +1 -0
  11. package/dist/cli/check/secrets.check.cli-command.impl.d.ts +5 -0
  12. package/dist/cli/check/secrets.check.cli-command.impl.d.ts.map +1 -0
  13. package/dist/cli/check/secrets.check.cli-command.impl.js +135 -0
  14. package/dist/cli/check/secrets.check.cli-command.impl.js.map +1 -0
  15. package/dist/cli/export/secrets.export.cli-command.descriptor.d.ts +4 -0
  16. package/dist/cli/export/secrets.export.cli-command.descriptor.d.ts.map +1 -0
  17. package/dist/cli/export/secrets.export.cli-command.descriptor.js +20 -0
  18. package/dist/cli/export/secrets.export.cli-command.descriptor.js.map +1 -0
  19. package/dist/cli/export/secrets.export.cli-command.impl.d.ts +5 -0
  20. package/dist/cli/export/secrets.export.cli-command.impl.d.ts.map +1 -0
  21. package/dist/cli/export/secrets.export.cli-command.impl.js +104 -0
  22. package/dist/cli/export/secrets.export.cli-command.impl.js.map +1 -0
  23. package/dist/cli/hooks/pre-commit-secrets.d.ts +2 -0
  24. package/dist/cli/hooks/pre-commit-secrets.d.ts.map +1 -0
  25. package/dist/cli/hooks/pre-commit-secrets.js +68 -0
  26. package/dist/cli/hooks/pre-commit-secrets.js.map +1 -0
  27. package/dist/cli/import/secrets.import.cli-command.descriptor.d.ts +4 -0
  28. package/dist/cli/import/secrets.import.cli-command.descriptor.d.ts.map +1 -0
  29. package/dist/cli/import/secrets.import.cli-command.descriptor.js +19 -0
  30. package/dist/cli/import/secrets.import.cli-command.descriptor.js.map +1 -0
  31. package/dist/cli/import/secrets.import.cli-command.impl.d.ts +5 -0
  32. package/dist/cli/import/secrets.import.cli-command.impl.d.ts.map +1 -0
  33. package/dist/cli/import/secrets.import.cli-command.impl.js +155 -0
  34. package/dist/cli/import/secrets.import.cli-command.impl.js.map +1 -0
  35. package/dist/cli/list/secrets.list.cli-command.descriptor.d.ts +4 -0
  36. package/dist/cli/list/secrets.list.cli-command.descriptor.d.ts.map +1 -0
  37. package/dist/cli/list/secrets.list.cli-command.descriptor.js +18 -0
  38. package/dist/cli/list/secrets.list.cli-command.descriptor.js.map +1 -0
  39. package/dist/cli/list/secrets.list.cli-command.impl.d.ts +5 -0
  40. package/dist/cli/list/secrets.list.cli-command.impl.d.ts.map +1 -0
  41. package/dist/cli/list/secrets.list.cli-command.impl.js +61 -0
  42. package/dist/cli/list/secrets.list.cli-command.impl.js.map +1 -0
  43. package/dist/cli/pre-commit/secrets.pre-commit-check.cli-command.descriptor.d.ts +4 -0
  44. package/dist/cli/pre-commit/secrets.pre-commit-check.cli-command.descriptor.d.ts.map +1 -0
  45. package/dist/cli/pre-commit/secrets.pre-commit-check.cli-command.descriptor.js +16 -0
  46. package/dist/cli/pre-commit/secrets.pre-commit-check.cli-command.descriptor.js.map +1 -0
  47. package/dist/cli/pre-commit/secrets.pre-commit-check.cli-command.impl.d.ts +5 -0
  48. package/dist/cli/pre-commit/secrets.pre-commit-check.cli-command.impl.d.ts.map +1 -0
  49. package/dist/cli/pre-commit/secrets.pre-commit-check.cli-command.impl.js +10 -0
  50. package/dist/cli/pre-commit/secrets.pre-commit-check.cli-command.impl.js.map +1 -0
  51. package/dist/cli/pull/secrets.pull.cli-command.descriptor.d.ts +4 -0
  52. package/dist/cli/pull/secrets.pull.cli-command.descriptor.d.ts.map +1 -0
  53. package/dist/cli/pull/secrets.pull.cli-command.descriptor.js +20 -0
  54. package/dist/cli/pull/secrets.pull.cli-command.descriptor.js.map +1 -0
  55. package/dist/cli/pull/secrets.pull.cli-command.impl.d.ts +5 -0
  56. package/dist/cli/pull/secrets.pull.cli-command.impl.d.ts.map +1 -0
  57. package/dist/cli/pull/secrets.pull.cli-command.impl.js +76 -0
  58. package/dist/cli/pull/secrets.pull.cli-command.impl.js.map +1 -0
  59. package/dist/cli/push/secrets.push.cli-command.descriptor.d.ts +4 -0
  60. package/dist/cli/push/secrets.push.cli-command.descriptor.d.ts.map +1 -0
  61. package/dist/cli/push/secrets.push.cli-command.descriptor.js +22 -0
  62. package/dist/cli/push/secrets.push.cli-command.descriptor.js.map +1 -0
  63. package/dist/cli/push/secrets.push.cli-command.impl.d.ts +5 -0
  64. package/dist/cli/push/secrets.push.cli-command.impl.d.ts.map +1 -0
  65. package/dist/cli/push/secrets.push.cli-command.impl.js +109 -0
  66. package/dist/cli/push/secrets.push.cli-command.impl.js.map +1 -0
  67. package/dist/cli/reveal/secrets.reveal.cli-command.descriptor.d.ts +4 -0
  68. package/dist/cli/reveal/secrets.reveal.cli-command.descriptor.d.ts.map +1 -0
  69. package/dist/cli/reveal/secrets.reveal.cli-command.descriptor.js +19 -0
  70. package/dist/cli/reveal/secrets.reveal.cli-command.descriptor.js.map +1 -0
  71. package/dist/cli/reveal/secrets.reveal.cli-command.impl.d.ts +5 -0
  72. package/dist/cli/reveal/secrets.reveal.cli-command.impl.d.ts.map +1 -0
  73. package/dist/cli/reveal/secrets.reveal.cli-command.impl.js +85 -0
  74. package/dist/cli/reveal/secrets.reveal.cli-command.impl.js.map +1 -0
  75. package/dist/cli/secrets.cli-group.descriptor.d.ts +4 -0
  76. package/dist/cli/secrets.cli-group.descriptor.d.ts.map +1 -0
  77. package/dist/cli/secrets.cli-group.descriptor.js +11 -0
  78. package/dist/cli/secrets.cli-group.descriptor.js.map +1 -0
  79. package/dist/cli/set/secrets.set.cli-command.descriptor.d.ts +4 -0
  80. package/dist/cli/set/secrets.set.cli-command.descriptor.d.ts.map +1 -0
  81. package/dist/cli/set/secrets.set.cli-command.descriptor.js +21 -0
  82. package/dist/cli/set/secrets.set.cli-command.descriptor.js.map +1 -0
  83. package/dist/cli/set/secrets.set.cli-command.impl.d.ts +5 -0
  84. package/dist/cli/set/secrets.set.cli-command.impl.d.ts.map +1 -0
  85. package/dist/cli/set/secrets.set.cli-command.impl.js +59 -0
  86. package/dist/cli/set/secrets.set.cli-command.impl.js.map +1 -0
  87. package/dist/cli/shared/resolve-environment.d.ts +14 -0
  88. package/dist/cli/shared/resolve-environment.d.ts.map +1 -0
  89. package/dist/cli/shared/resolve-environment.js +45 -0
  90. package/dist/cli/shared/resolve-environment.js.map +1 -0
  91. package/dist/cli/unset/secrets.unset.cli-command.descriptor.d.ts +4 -0
  92. package/dist/cli/unset/secrets.unset.cli-command.descriptor.d.ts.map +1 -0
  93. package/dist/cli/unset/secrets.unset.cli-command.descriptor.js +20 -0
  94. package/dist/cli/unset/secrets.unset.cli-command.descriptor.js.map +1 -0
  95. package/dist/cli/unset/secrets.unset.cli-command.impl.d.ts +5 -0
  96. package/dist/cli/unset/secrets.unset.cli-command.impl.d.ts.map +1 -0
  97. package/dist/cli/unset/secrets.unset.cli-command.impl.js +31 -0
  98. package/dist/cli/unset/secrets.unset.cli-command.impl.js.map +1 -0
  99. package/dist/docs/backends.docs.descriptor.d.ts +4 -0
  100. package/dist/docs/backends.docs.descriptor.d.ts.map +1 -0
  101. package/dist/docs/backends.docs.descriptor.js +149 -0
  102. package/dist/docs/backends.docs.descriptor.js.map +1 -0
  103. package/dist/docs/encryption.docs.descriptor.d.ts +4 -0
  104. package/dist/docs/encryption.docs.descriptor.d.ts.map +1 -0
  105. package/dist/docs/encryption.docs.descriptor.js +163 -0
  106. package/dist/docs/encryption.docs.descriptor.js.map +1 -0
  107. package/dist/docs/env-file.docs.descriptor.d.ts +4 -0
  108. package/dist/docs/env-file.docs.descriptor.d.ts.map +1 -0
  109. package/dist/docs/env-file.docs.descriptor.js +207 -0
  110. package/dist/docs/env-file.docs.descriptor.js.map +1 -0
  111. package/dist/index.d.ts +13 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +13 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/kinds/index.d.ts +4 -0
  116. package/dist/kinds/index.d.ts.map +1 -0
  117. package/dist/kinds/index.js +3 -0
  118. package/dist/kinds/index.js.map +1 -0
  119. package/dist/kinds/schemas/store.schema.d.ts +49 -0
  120. package/dist/kinds/schemas/store.schema.d.ts.map +1 -0
  121. package/dist/kinds/schemas/store.schema.js +34 -0
  122. package/dist/kinds/schemas/store.schema.js.map +1 -0
  123. package/dist/kinds/schemas/store.types.d.ts +28 -0
  124. package/dist/kinds/schemas/store.types.d.ts.map +1 -0
  125. package/dist/kinds/schemas/store.types.js +2 -0
  126. package/dist/kinds/schemas/store.types.js.map +1 -0
  127. package/dist/kinds/store.interface.d.ts +2 -0
  128. package/dist/kinds/store.interface.d.ts.map +1 -0
  129. package/dist/kinds/store.interface.js +2 -0
  130. package/dist/kinds/store.interface.js.map +1 -0
  131. package/dist/kinds/store.kind.d.ts +10 -0
  132. package/dist/kinds/store.kind.d.ts.map +1 -0
  133. package/dist/kinds/store.kind.js +36 -0
  134. package/dist/kinds/store.kind.js.map +1 -0
  135. package/dist/kinds/store.schema.d.ts +2 -0
  136. package/dist/kinds/store.schema.d.ts.map +1 -0
  137. package/dist/kinds/store.schema.js +2 -0
  138. package/dist/kinds/store.schema.js.map +1 -0
  139. package/dist/manifest/canonical.d.ts +30 -0
  140. package/dist/manifest/canonical.d.ts.map +1 -0
  141. package/dist/manifest/canonical.js +313 -0
  142. package/dist/manifest/canonical.js.map +1 -0
  143. package/dist/manifest/import-manifest.schema.d.ts +77 -0
  144. package/dist/manifest/import-manifest.schema.d.ts.map +1 -0
  145. package/dist/manifest/import-manifest.schema.js +55 -0
  146. package/dist/manifest/import-manifest.schema.js.map +1 -0
  147. package/dist/manifest/index.d.ts +3 -0
  148. package/dist/manifest/index.d.ts.map +1 -0
  149. package/dist/manifest/index.js +3 -0
  150. package/dist/manifest/index.js.map +1 -0
  151. package/dist/requirements/index.d.ts +2 -0
  152. package/dist/requirements/index.d.ts.map +1 -0
  153. package/dist/requirements/index.js +2 -0
  154. package/dist/requirements/index.js.map +1 -0
  155. package/dist/requirements/resolver.d.ts +52 -0
  156. package/dist/requirements/resolver.d.ts.map +1 -0
  157. package/dist/requirements/resolver.js +196 -0
  158. package/dist/requirements/resolver.js.map +1 -0
  159. package/dist/requirements/schemas/requirements.d.ts +27 -0
  160. package/dist/requirements/schemas/requirements.d.ts.map +1 -0
  161. package/dist/requirements/schemas/requirements.js +2 -0
  162. package/dist/requirements/schemas/requirements.js.map +1 -0
  163. package/dist/secrets.plugin.d.ts +8 -0
  164. package/dist/secrets.plugin.d.ts.map +1 -0
  165. package/dist/secrets.plugin.js +59 -0
  166. package/dist/secrets.plugin.js.map +1 -0
  167. package/package.json +108 -0
  168. package/src/cli/check/schemas/check-result.ts +8 -0
  169. package/src/cli/check/secrets.check.cli-command.descriptor.ts +21 -0
  170. package/src/cli/check/secrets.check.cli-command.impl.ts +163 -0
  171. package/src/cli/export/secrets.export.cli-command.descriptor.ts +22 -0
  172. package/src/cli/export/secrets.export.cli-command.impl.ts +139 -0
  173. package/src/cli/hooks/pre-commit-secrets.ts +73 -0
  174. package/src/cli/import/secrets.import.cli-command.descriptor.ts +21 -0
  175. package/src/cli/import/secrets.import.cli-command.impl.ts +178 -0
  176. package/src/cli/list/secrets.list.cli-command.descriptor.ts +21 -0
  177. package/src/cli/list/secrets.list.cli-command.impl.ts +79 -0
  178. package/src/cli/pre-commit/secrets.pre-commit-check.cli-command.descriptor.ts +18 -0
  179. package/src/cli/pre-commit/secrets.pre-commit-check.cli-command.impl.ts +11 -0
  180. package/src/cli/pull/secrets.pull.cli-command.descriptor.ts +22 -0
  181. package/src/cli/pull/secrets.pull.cli-command.impl.ts +103 -0
  182. package/src/cli/push/secrets.push.cli-command.descriptor.ts +24 -0
  183. package/src/cli/push/secrets.push.cli-command.impl.ts +149 -0
  184. package/src/cli/reveal/secrets.reveal.cli-command.descriptor.ts +21 -0
  185. package/src/cli/reveal/secrets.reveal.cli-command.impl.ts +108 -0
  186. package/src/cli/secrets.cli-group.descriptor.ts +13 -0
  187. package/src/cli/set/secrets.set.cli-command.descriptor.ts +23 -0
  188. package/src/cli/set/secrets.set.cli-command.impl.ts +77 -0
  189. package/src/cli/shared/resolve-environment.ts +57 -0
  190. package/src/cli/unset/secrets.unset.cli-command.descriptor.ts +22 -0
  191. package/src/cli/unset/secrets.unset.cli-command.impl.ts +41 -0
  192. package/src/docs/backends.docs.descriptor.ts +151 -0
  193. package/src/docs/encryption.docs.descriptor.ts +165 -0
  194. package/src/docs/env-file.docs.descriptor.ts +209 -0
  195. package/src/index.ts +35 -0
  196. package/src/kinds/index.ts +12 -0
  197. package/src/kinds/schemas/store.schema.ts +47 -0
  198. package/src/kinds/schemas/store.types.ts +35 -0
  199. package/src/kinds/store.interface.ts +1 -0
  200. package/src/kinds/store.kind.ts +52 -0
  201. package/src/kinds/store.schema.ts +8 -0
  202. package/src/manifest/canonical.ts +324 -0
  203. package/src/manifest/import-manifest.schema.ts +63 -0
  204. package/src/manifest/index.ts +12 -0
  205. package/src/requirements/index.ts +6 -0
  206. package/src/requirements/resolver.ts +216 -0
  207. package/src/requirements/schemas/requirements.ts +29 -0
  208. package/src/secrets.plugin.ts +65 -0
@@ -0,0 +1,109 @@
1
+ import { getVibesRuntime } from '@vibesdotdev/runtime';
2
+ import { resolveSecretRequirements, uniqueSecretKeys } from '../../requirements/resolver';
3
+ import { resolveSecretsEnvironment } from '../shared/resolve-environment';
4
+ const LOCAL_BACKENDS = new Set(['env-file', 'encrypted-local']);
5
+ const REMOTE_BACKENDS = new Set(['cloudflare-api', 'cloudflare-secrets-store', 'vault']);
6
+ // Preferred ordering when picking a backend's primary tier as the default
7
+ // source-env. We pick the lowest tier the backend serves (local > dev >
8
+ // staging > production), since that's where a developer's local `secrets set`
9
+ // writes land. Keeps `push --environment production` reading from the user's
10
+ // machine-local store rather than stale data left in vault.environments.production
11
+ // from a long-ago `vibes secrets import`.
12
+ const TIER_PREFERENCE = ['local', 'dev', 'staging', 'production'];
13
+ function pickPrimaryTier(descriptor) {
14
+ for (const tier of TIER_PREFERENCE) {
15
+ if (descriptor.tiers.includes(tier))
16
+ return tier;
17
+ }
18
+ return descriptor.tiers[0] ?? 'local';
19
+ }
20
+ function findBackend(descriptors, tier, backendId, filter) {
21
+ if (backendId)
22
+ return descriptors.find((d) => d.id === backendId);
23
+ return descriptors
24
+ .filter((d) => d.tiers.includes(tier) && filter.has(d.backend))
25
+ .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))[0];
26
+ }
27
+ function parseKeyFilter(value) {
28
+ const rawValues = Array.isArray(value)
29
+ ? value.filter((entry) => typeof entry === 'string')
30
+ : typeof value === 'string'
31
+ ? [value]
32
+ : [];
33
+ const keys = rawValues
34
+ .flatMap((entry) => entry.split(','))
35
+ .map((entry) => entry.trim())
36
+ .filter((entry) => entry.length > 0);
37
+ return keys.length > 0 ? new Set(keys) : undefined;
38
+ }
39
+ export default {
40
+ async execute(_args, opts) {
41
+ const runtime = getVibesRuntime();
42
+ const ui = (await runtime.context('cli/ui'));
43
+ const options = opts;
44
+ const { name: envName, tier: envTier } = await resolveSecretsEnvironment(ui, options.environment);
45
+ const descriptors = runtime.assets('secrets/store').descriptors();
46
+ // Pick the source backend independently of the target env tier: typical
47
+ // flow is "push from machine-local store to production CF store" and
48
+ // the local store doesn't serve the production tier.
49
+ const source = options.from
50
+ ? descriptors.find((d) => d.id === options.from)
51
+ : descriptors
52
+ .filter((d) => LOCAL_BACKENDS.has(d.backend))
53
+ .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))[0];
54
+ const target = findBackend(descriptors, envTier, options.to, REMOTE_BACKENDS);
55
+ if (!source) {
56
+ ui.error('No local secrets store found. Set secrets with `vibes secrets set` first.');
57
+ process.exit(1);
58
+ }
59
+ if (!target) {
60
+ ui.error('No remote secrets store available for this environment tier.');
61
+ process.exit(1);
62
+ }
63
+ // Source env defaults to the source backend's primary tier (e.g. 'local'
64
+ // for encrypted-local), NOT the target env. Reading from `getAll(envName)`
65
+ // blindly used to pull whatever stale values a prior `vibes secrets import`
66
+ // left in `vault.environments[envName]`, even though developers' day-to-day
67
+ // `vibes secrets set` writes always land in the local-tier namespace.
68
+ // That mismatch would overwrite live prod keys with stale test keys.
69
+ const sourceEnv = options.sourceEnv ?? pickPrimaryTier(source);
70
+ if (sourceEnv !== envName) {
71
+ ui.log(`Reading from [${source.id}] env "${sourceEnv}" (source backend's primary tier); writing to [${target.id}] env "${envName}". Override with --source-env if needed.`);
72
+ }
73
+ const sourceImpl = (await runtime
74
+ .query('secrets/store')
75
+ .withId(source.id)
76
+ .resolve());
77
+ let secrets = await sourceImpl.getAll(sourceEnv);
78
+ if (options.app) {
79
+ const requirements = await resolveSecretRequirements(runtime);
80
+ const appReqs = requirements.filter((r) => r.appId === options.app);
81
+ const appKeys = new Set(uniqueSecretKeys(appReqs));
82
+ secrets = Object.fromEntries(Object.entries(secrets).filter(([k]) => appKeys.has(k)));
83
+ }
84
+ const keyFilter = parseKeyFilter(options.key);
85
+ if (keyFilter) {
86
+ secrets = Object.fromEntries(Object.entries(secrets).filter(([key]) => keyFilter.has(key)));
87
+ }
88
+ const keys = Object.keys(secrets);
89
+ if (keys.length === 0) {
90
+ ui.info('No secrets to push.');
91
+ return;
92
+ }
93
+ if (options.dryRun) {
94
+ ui.log(`\nDry run: would push ${keys.length} secret(s) from [${source.id}] to [${target.id}]\n`);
95
+ for (const key of keys.sort()) {
96
+ ui.log(` ${key}`);
97
+ }
98
+ ui.log('');
99
+ return;
100
+ }
101
+ const targetImpl = (await runtime
102
+ .query('secrets/store')
103
+ .withId(target.id)
104
+ .resolve());
105
+ await targetImpl.setAll(envName, secrets);
106
+ ui.success(`Pushed ${keys.length} secret(s) from [${source.id}] to [${target.id}] for ${envName}`);
107
+ }
108
+ };
109
+ //# sourceMappingURL=secrets.push.cli-command.impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.push.cli-command.impl.js","sourceRoot":"","sources":["../../../src/cli/push/secrets.push.cli-command.impl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { CLICommandAssetDescriptor } from '@vibesdotdev/cli/schemas/types';
2
+ declare const descriptor: CLICommandAssetDescriptor;
3
+ export default descriptor;
4
+ //# sourceMappingURL=secrets.reveal.cli-command.descriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.reveal.cli-command.descriptor.d.ts","sourceRoot":"","sources":["../../../src/cli/reveal/secrets.reveal.cli-command.descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAEhF,QAAA,MAAM,UAAU,EAAE,yBAgBjB,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,19 @@
1
+ const descriptor = {
2
+ kind: 'cli/command',
3
+ id: 'secrets.reveal',
4
+ name: 'reveal',
5
+ description: 'Reveal a secret value (writes to stderr with audit log)',
6
+ group: 'secrets',
7
+ arguments: [{ name: 'key', description: 'Secret key to reveal', required: true }],
8
+ options: [
9
+ { flags: '--environment <name>', description: 'Target environment (default: current)' },
10
+ { flags: '--backend <id>', description: 'Filter to a specific backend' },
11
+ { flags: '--force', description: 'Skip confirmation prompt' }
12
+ ],
13
+ surfaces: ['cli'],
14
+ hardware: ['consumer'],
15
+ enabled: true,
16
+ order: 20
17
+ };
18
+ export default descriptor;
19
+ //# sourceMappingURL=secrets.reveal.cli-command.descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.reveal.cli-command.descriptor.js","sourceRoot":"","sources":["../../../src/cli/reveal/secrets.reveal.cli-command.descriptor.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAA8B;IAC7C,IAAI,EAAE,aAAa;IACnB,EAAE,EAAE,gBAAgB;IACpB,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,yDAAyD;IACtE,KAAK,EAAE,SAAS;IAChB,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjF,OAAO,EAAE;QACR,EAAE,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,uCAAuC,EAAE;QACvF,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,8BAA8B,EAAE;QACxE,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,0BAA0B,EAAE;KAC7D;IACD,QAAQ,EAAE,CAAC,KAAK,CAAC;IACjB,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,EAAE;CACT,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ execute(args: Record<string, unknown>, opts: Record<string, unknown>): Promise<void>;
3
+ };
4
+ export default _default;
5
+ //# sourceMappingURL=secrets.reveal.cli-command.impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.reveal.cli-command.impl.d.ts","sourceRoot":"","sources":["../../../src/cli/reveal/secrets.reveal.cli-command.impl.ts"],"names":[],"mappings":";kBA4BqB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;;AAD3F,wBAgFE"}
@@ -0,0 +1,85 @@
1
+ import { getVibesRuntime } from '@vibesdotdev/runtime';
2
+ import { resolveSecretsEnvironment } from '../shared/resolve-environment';
3
+ function resolveBackend(descriptors, tier, backendId) {
4
+ if (backendId)
5
+ return descriptors.find((d) => d.id === backendId);
6
+ const tierStores = descriptors
7
+ .filter((d) => d.tiers.includes(tier))
8
+ .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
9
+ return tierStores[0];
10
+ }
11
+ function emitAudit(input) {
12
+ process.stderr.write(`[AUDIT] ${JSON.stringify({
13
+ id: crypto.randomUUID(),
14
+ timestamp: new Date().toISOString(),
15
+ ...input
16
+ })}\n`);
17
+ }
18
+ export default {
19
+ async execute(args, opts) {
20
+ const runtime = getVibesRuntime();
21
+ const ui = (await runtime.context('cli/ui'));
22
+ const key = args.key;
23
+ const options = opts;
24
+ if (!key) {
25
+ ui.error('Usage: vibes secrets reveal <KEY>');
26
+ process.exit(1);
27
+ }
28
+ const { name: envName, tier: envTier } = await resolveSecretsEnvironment(ui, options.environment);
29
+ const descriptors = runtime.assets('secrets/store').descriptors();
30
+ const target = resolveBackend(descriptors, envTier, options.backend);
31
+ if (!target) {
32
+ ui.error(`No secrets store available for tier: ${envTier}`);
33
+ process.exit(1);
34
+ }
35
+ const impl = (await runtime
36
+ .query('secrets/store')
37
+ .withId(target.id)
38
+ .resolve());
39
+ const value = await impl.get(envName, key);
40
+ if (value === undefined || value === '') {
41
+ ui.error(`Secret not found: ${key}`);
42
+ process.exit(1);
43
+ }
44
+ // Skip the interactive confirmation when:
45
+ // - explicit --force flag
46
+ // - VIBES_SECRETS_REVEAL_NO_PROMPT=1 set (CI / scripts opt-in)
47
+ // - stdin or stderr is not a TTY (automation context — there's no
48
+ // human to answer the prompt, and blocking on stdin would hang)
49
+ const noPromptEnv = process.env.VIBES_SECRETS_REVEAL_NO_PROMPT === '1';
50
+ const stdinIsTty = Boolean(process.stdin.isTTY);
51
+ const stderrIsTty = Boolean(process.stderr.isTTY);
52
+ const skipPrompt = options.force || noPromptEnv || !stdinIsTty || !stderrIsTty;
53
+ if (!skipPrompt) {
54
+ process.stderr.write(`\n[REVEAL] About to reveal secret "${key}" to terminal.\n`);
55
+ process.stderr.write(`This value will be printed to stderr and logged to the audit trail.\n`);
56
+ process.stderr.write(`Continue? [y/N] `);
57
+ let confirmation = '';
58
+ for await (const chunk of process.stdin) {
59
+ confirmation = chunk.toString('utf-8').trim().toLowerCase();
60
+ break;
61
+ }
62
+ if (confirmation !== 'y' && confirmation !== 'yes') {
63
+ ui.info('Reveal cancelled.');
64
+ process.exit(0);
65
+ }
66
+ }
67
+ emitAudit({
68
+ category: 'data_access',
69
+ severity: 'high',
70
+ action: 'secrets.reveal',
71
+ actor: { id: 'cli', type: 'user', name: 'CLI user' },
72
+ target: { id: key, type: 'secret', name: key },
73
+ outcome: 'success',
74
+ context: {
75
+ environment: envName,
76
+ backend: target.id
77
+ }
78
+ });
79
+ // Value goes to STDOUT so scripts can capture it via `$(vibes secrets reveal X)`.
80
+ // Audit/notice messaging stays on STDERR so a piped consumer gets a clean value.
81
+ process.stdout.write(`${value}\n`);
82
+ process.stderr.write(`\n[REVEAL] ${key} revealed (logged to audit trail).\n`);
83
+ }
84
+ };
85
+ //# sourceMappingURL=secrets.reveal.cli-command.impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.reveal.cli-command.impl.js","sourceRoot":"","sources":["../../../src/cli/reveal/secrets.reveal.cli-command.impl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { CLIGroupAssetDescriptor } from '@vibesdotdev/cli/schemas/types';
2
+ declare const descriptor: CLIGroupAssetDescriptor;
3
+ export default descriptor;
4
+ //# sourceMappingURL=secrets.cli-group.descriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.cli-group.descriptor.d.ts","sourceRoot":"","sources":["../../src/cli/secrets.cli-group.descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE9E,QAAA,MAAM,UAAU,EAAE,uBAQjB,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,11 @@
1
+ const descriptor = {
2
+ kind: 'cli/group',
3
+ id: 'secrets',
4
+ name: 'secrets',
5
+ description: 'Manage environment secrets across backends',
6
+ surfaces: ['cli'],
7
+ hardware: ['consumer'],
8
+ enabled: true
9
+ };
10
+ export default descriptor;
11
+ //# sourceMappingURL=secrets.cli-group.descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.cli-group.descriptor.js","sourceRoot":"","sources":["../../src/cli/secrets.cli-group.descriptor.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAA4B;IAC3C,IAAI,EAAE,WAAW;IACjB,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,4CAA4C;IACzD,QAAQ,EAAE,CAAC,KAAK,CAAC;IACjB,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,OAAO,EAAE,IAAI;CACb,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CLICommandAssetDescriptor } from '@vibesdotdev/cli/schemas/types';
2
+ declare const descriptor: CLICommandAssetDescriptor;
3
+ export default descriptor;
4
+ //# sourceMappingURL=secrets.set.cli-command.descriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.set.cli-command.descriptor.d.ts","sourceRoot":"","sources":["../../../src/cli/set/secrets.set.cli-command.descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAEhF,QAAA,MAAM,UAAU,EAAE,yBAkBjB,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,21 @@
1
+ const descriptor = {
2
+ kind: 'cli/command',
3
+ id: 'secrets.set',
4
+ name: 'set',
5
+ description: 'Set a secret value for the current environment',
6
+ group: 'secrets',
7
+ arguments: [
8
+ { name: 'key', description: 'Secret key name (e.g., VIBES_AUTH_SECRET)', required: true },
9
+ { name: 'value', description: 'Secret value (omit to prompt securely)', required: false }
10
+ ],
11
+ options: [
12
+ { flags: '--environment <name>', description: 'Target environment (default: current)' },
13
+ { flags: '--backend <id>', description: 'Target backend (default: primary for tier)' }
14
+ ],
15
+ surfaces: ['cli'],
16
+ hardware: ['consumer'],
17
+ enabled: true,
18
+ order: 20
19
+ };
20
+ export default descriptor;
21
+ //# sourceMappingURL=secrets.set.cli-command.descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.set.cli-command.descriptor.js","sourceRoot":"","sources":["../../../src/cli/set/secrets.set.cli-command.descriptor.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAA8B;IAC7C,IAAI,EAAE,aAAa;IACnB,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,gDAAgD;IAC7D,KAAK,EAAE,SAAS;IAChB,SAAS,EAAE;QACV,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,2CAA2C,EAAE,QAAQ,EAAE,IAAI,EAAE;QACzF,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,wCAAwC,EAAE,QAAQ,EAAE,KAAK,EAAE;KACzF;IACD,OAAO,EAAE;QACR,EAAE,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,uCAAuC,EAAE;QACvF,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,4CAA4C,EAAE;KACtF;IACD,QAAQ,EAAE,CAAC,KAAK,CAAC;IACjB,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,EAAE;CACT,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ execute(args: Record<string, unknown>, opts: Record<string, unknown>): Promise<void>;
3
+ };
4
+ export default _default;
5
+ //# sourceMappingURL=secrets.set.cli-command.impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.set.cli-command.impl.d.ts","sourceRoot":"","sources":["../../../src/cli/set/secrets.set.cli-command.impl.ts"],"names":[],"mappings":";kBA4BqB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;;AAD3F,wBAiDE"}
@@ -0,0 +1,59 @@
1
+ import { getVibesRuntime } from '@vibesdotdev/runtime';
2
+ import { resolveSecretsEnvironment } from '../shared/resolve-environment';
3
+ // `set` is the write side of the local-development workflow: the user types
4
+ // a value and expects it to land in their machine-local store. Remote
5
+ // backends (vault, cloudflare-secrets-store, ...) are the *deploy* side —
6
+ // reached via `secrets push` after the user explicitly opts in. Default
7
+ // routing therefore restricts to local backend kinds; an explicit
8
+ // `--backend <id>` still wins.
9
+ const LOCAL_BACKEND_KINDS = new Set(['env-file', 'encrypted-local']);
10
+ function resolveBackend(descriptors, tier, backendId) {
11
+ if (backendId)
12
+ return descriptors.find((d) => d.id === backendId);
13
+ const tierStores = descriptors
14
+ .filter((d) => d.tiers.includes(tier))
15
+ .filter((d) => LOCAL_BACKEND_KINDS.has(d.backend))
16
+ .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
17
+ return tierStores[0];
18
+ }
19
+ export default {
20
+ async execute(args, opts) {
21
+ const runtime = getVibesRuntime();
22
+ const ui = (await runtime.context('cli/ui'));
23
+ const key = args.key;
24
+ let value = args.value;
25
+ const options = opts;
26
+ const { name: envName, tier: envTier } = await resolveSecretsEnvironment(ui, options.environment);
27
+ if (!key || !/^[_A-Z0-9]+$/.test(key)) {
28
+ ui.error('Secret key must match pattern: ^[_A-Z0-9]+$');
29
+ process.exit(1);
30
+ }
31
+ if (!value) {
32
+ process.stdout.write(`Enter value for ${key}: `);
33
+ const chunks = [];
34
+ for await (const chunk of process.stdin) {
35
+ chunks.push(chunk);
36
+ if (chunk.includes(10))
37
+ break;
38
+ }
39
+ value = Buffer.concat(chunks).toString('utf-8').trim();
40
+ }
41
+ if (!value) {
42
+ ui.error('No value provided');
43
+ process.exit(1);
44
+ }
45
+ const descriptors = runtime.assets('secrets/store').descriptors();
46
+ const target = resolveBackend(descriptors, envTier, options.backend);
47
+ if (!target) {
48
+ ui.error(`No secrets store available for tier: ${envTier}`);
49
+ process.exit(1);
50
+ }
51
+ const impl = (await runtime
52
+ .query('secrets/store')
53
+ .withId(target.id)
54
+ .resolve());
55
+ await impl.set(envName, key, value);
56
+ ui.success(`Set ${key} in [${target.id}] for environment: ${envName}`);
57
+ }
58
+ };
59
+ //# sourceMappingURL=secrets.set.cli-command.impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.set.cli-command.impl.js","sourceRoot":"","sources":["../../../src/cli/set/secrets.set.cli-command.impl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { UIContext } from '@vibesdotdev/cli/providers';
2
+ import type { EnvironmentTier } from '../../kinds/store.schema';
3
+ export interface ResolvedSecretsEnvironment {
4
+ name: string;
5
+ tier: EnvironmentTier;
6
+ }
7
+ /**
8
+ * Resolve the active environment for secrets commands.
9
+ *
10
+ * Falls back to local when the environment config manifest/plugin graph is
11
+ * unavailable so end-users can still run local secrets workflows.
12
+ */
13
+ export declare function resolveSecretsEnvironment(ui: UIContext, environmentOverride?: string): Promise<ResolvedSecretsEnvironment>;
14
+ //# sourceMappingURL=resolve-environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-environment.d.ts","sourceRoot":"","sources":["../../../src/cli/shared/resolve-environment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE,MAAM,WAAW,0BAA0B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,eAAe,CAAC;CACtB;AASD;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC9C,EAAE,EAAE,SAAS,EACb,mBAAmB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,0BAA0B,CAAC,CA+BrC"}
@@ -0,0 +1,45 @@
1
+ import { resolveCurrentEnvironmentConfig } from '@vibesdotdev/config/environment/current';
2
+ const ENVIRONMENT_TIERS = new Set([
3
+ 'local',
4
+ 'dev',
5
+ 'staging',
6
+ 'production'
7
+ ]);
8
+ /**
9
+ * Resolve the active environment for secrets commands.
10
+ *
11
+ * Falls back to local when the environment config manifest/plugin graph is
12
+ * unavailable so end-users can still run local secrets workflows.
13
+ */
14
+ export async function resolveSecretsEnvironment(ui, environmentOverride) {
15
+ if (environmentOverride && environmentOverride.length > 0) {
16
+ if (ENVIRONMENT_TIERS.has(environmentOverride)) {
17
+ return {
18
+ name: environmentOverride,
19
+ tier: environmentOverride
20
+ };
21
+ }
22
+ try {
23
+ const envConfig = await resolveCurrentEnvironmentConfig();
24
+ return {
25
+ name: environmentOverride,
26
+ tier: (envConfig.tier ?? 'local')
27
+ };
28
+ }
29
+ catch {
30
+ return { name: environmentOverride, tier: 'local' };
31
+ }
32
+ }
33
+ try {
34
+ const envConfig = await resolveCurrentEnvironmentConfig();
35
+ return {
36
+ name: envConfig.name,
37
+ tier: (envConfig.tier ?? 'local')
38
+ };
39
+ }
40
+ catch {
41
+ ui.warn("Environment config manifest is unavailable; defaulting to 'local'. Register @vibesdotdev/config/environment/plugin to enable named environment selection.");
42
+ return { name: 'local', tier: 'local' };
43
+ }
44
+ }
45
+ //# sourceMappingURL=resolve-environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-environment.js","sourceRoot":"","sources":["../../../src/cli/shared/resolve-environment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,+BAA+B,EAAE,MAAM,yCAAyC,CAAC;AAQ1F,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAkB;IAClD,OAAO;IACP,KAAK;IACL,SAAS;IACT,YAAY;CACZ,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC9C,EAAa,EACb,mBAA4B;IAE5B,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3D,IAAI,iBAAiB,CAAC,GAAG,CAAC,mBAAsC,CAAC,EAAE,CAAC;YACnE,OAAO;gBACN,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,mBAAsC;aAC5C,CAAC;QACH,CAAC;QACD,IAAI,CAAC;YACJ,MAAM,SAAS,GAAG,MAAM,+BAA+B,EAAE,CAAC;YAC1D,OAAO;gBACN,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,CAAC,SAAS,CAAC,IAAI,IAAI,OAAO,CAAoB;aACpD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACrD,CAAC;IACF,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,SAAS,GAAG,MAAM,+BAA+B,EAAE,CAAC;QAC1D,OAAO;YACN,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,IAAI,EAAE,CAAC,SAAS,CAAC,IAAI,IAAI,OAAO,CAAoB;SACpD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACR,EAAE,CAAC,IAAI,CACN,2JAA2J,CAC3J,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACzC,CAAC;AACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CLICommandAssetDescriptor } from '@vibesdotdev/cli/schemas/types';
2
+ declare const descriptor: CLICommandAssetDescriptor;
3
+ export default descriptor;
4
+ //# sourceMappingURL=secrets.unset.cli-command.descriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.unset.cli-command.descriptor.d.ts","sourceRoot":"","sources":["../../../src/cli/unset/secrets.unset.cli-command.descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAEhF,QAAA,MAAM,UAAU,EAAE,yBAiBjB,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,20 @@
1
+ const descriptor = {
2
+ kind: 'cli/command',
3
+ id: 'secrets.unset',
4
+ name: 'unset',
5
+ description: 'Remove a secret from the current environment',
6
+ group: 'secrets',
7
+ arguments: [
8
+ { name: 'key', description: 'Secret key name to remove', required: true }
9
+ ],
10
+ options: [
11
+ { flags: '--environment <name>', description: 'Target environment (default: current)' },
12
+ { flags: '--backend <id>', description: 'Target backend (default: primary for tier)' }
13
+ ],
14
+ surfaces: ['cli'],
15
+ hardware: ['consumer'],
16
+ enabled: true,
17
+ order: 30
18
+ };
19
+ export default descriptor;
20
+ //# sourceMappingURL=secrets.unset.cli-command.descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.unset.cli-command.descriptor.js","sourceRoot":"","sources":["../../../src/cli/unset/secrets.unset.cli-command.descriptor.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAA8B;IAC7C,IAAI,EAAE,aAAa;IACnB,EAAE,EAAE,eAAe;IACnB,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,8CAA8C;IAC3D,KAAK,EAAE,SAAS;IAChB,SAAS,EAAE;QACV,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,2BAA2B,EAAE,QAAQ,EAAE,IAAI,EAAE;KACzE;IACD,OAAO,EAAE;QACR,EAAE,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,uCAAuC,EAAE;QACvF,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,4CAA4C,EAAE;KACtF;IACD,QAAQ,EAAE,CAAC,KAAK,CAAC;IACjB,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,EAAE;CACT,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ execute(args: Record<string, unknown>, opts: Record<string, unknown>): Promise<void>;
3
+ };
4
+ export default _default;
5
+ //# sourceMappingURL=secrets.unset.cli-command.impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.unset.cli-command.impl.d.ts","sourceRoot":"","sources":["../../../src/cli/unset/secrets.unset.cli-command.impl.ts"],"names":[],"mappings":";kBAOqB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;;AAD3F,wBAkCE"}
@@ -0,0 +1,31 @@
1
+ import { getVibesRuntime } from '@vibesdotdev/runtime';
2
+ import { resolveSecretsEnvironment } from '../shared/resolve-environment.js';
3
+ export default {
4
+ async execute(args, opts) {
5
+ const runtime = getVibesRuntime();
6
+ const ui = (await runtime.context('cli/ui'));
7
+ const key = args.key;
8
+ const options = opts;
9
+ const { name: envName, tier: envTier } = await resolveSecretsEnvironment(ui, options.environment);
10
+ const descriptors = runtime.assets('secrets/store').descriptors();
11
+ const tierStores = descriptors
12
+ .filter((d) => {
13
+ if (options.backend)
14
+ return d.id === options.backend;
15
+ return d.tiers.includes(envTier);
16
+ })
17
+ .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
18
+ const target = tierStores[0];
19
+ if (!target) {
20
+ ui.error(`No secrets store available for tier: ${envTier}`);
21
+ process.exit(1);
22
+ }
23
+ const impl = (await runtime
24
+ .query('secrets/store')
25
+ .withId(target.id)
26
+ .resolve());
27
+ await impl.unset(envName, key);
28
+ ui.success(`Removed ${key} from [${target.id}] for environment: ${envName}`);
29
+ }
30
+ };
31
+ //# sourceMappingURL=secrets.unset.cli-command.impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.unset.cli-command.impl.js","sourceRoot":"","sources":["../../../src/cli/unset/secrets.unset.cli-command.impl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAE1E,eAAe;IACd,KAAK,CAAC,OAAO,CAAC,IAA6B,EAAE,IAA6B;QACzE,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;QAClC,MAAM,EAAE,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAc,CAAC;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAa,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAkD,CAAC;QAEnE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,yBAAyB,CACvE,EAAE,EACF,OAAO,CAAC,WAAW,CACnB,CAAC;QAEF,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,EAA8B,CAAC;QAC9F,MAAM,UAAU,GAAG,WAAW;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACb,IAAI,OAAO,CAAC,OAAO;gBAAE,OAAO,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC;YACrD,OAAO,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC;QAExD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,EAAE,CAAC,KAAK,CAAC,wCAAwC,OAAO,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO;aACzB,KAAK,CAAC,eAAe,CAAC;aACtB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;aACjB,OAAO,EAAE,CAA+B,CAAC;QAC3C,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAE/B,EAAE,CAAC,OAAO,CAAC,WAAW,GAAG,UAAU,MAAM,CAAC,EAAE,sBAAsB,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC;CACD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { DocsTopicDescriptor } from '@vibesdotdev/docs';
2
+ declare const descriptor: DocsTopicDescriptor;
3
+ export default descriptor;
4
+ //# sourceMappingURL=backends.docs.descriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backends.docs.descriptor.d.ts","sourceRoot":"","sources":["../../src/docs/backends.docs.descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,QAAA,MAAM,UAAU,EAAE,mBAkJjB,CAAC;AAEF,eAAe,UAAU,CAAC"}