@dotenvx/dotenvx 1.69.1 → 1.69.2

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.
package/CHANGELOG.md CHANGED
@@ -2,7 +2,13 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
- [Unreleased](https://github.com/dotenvx/dotenvx/compare/v1.69.1...main)
5
+ [Unreleased](https://github.com/dotenvx/dotenvx/compare/v1.69.2...main)
6
+
7
+ ## [1.69.2](https://github.com/dotenvx/dotenvx/compare/v1.69.1...v1.69.2) (2026-05-29)
8
+
9
+ ### Changed
10
+
11
+ * Minor messaging improvements, especially if using armored keys ([#825](https://github.com/dotenvx/dotenvx/pull/825))
6
12
 
7
13
  ## [1.69.1](https://github.com/dotenvx/dotenvx/compare/v1.69.0...v1.69.1) (2026-05-25)
8
14
 
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![dotenvx](https://dotenvx.com/banner.png)](https://dotenvx.com)
1
+ [![dotenvx](https://dotenvx.com/banner.png?v2)](https://dotenvx.com)
2
2
 
3
3
  *a secure dotenv*–from the creator of [`dotenv`](https://github.com/motdotla/dotenv).
4
4
 
@@ -1289,7 +1289,7 @@ $ dotenvx run -fk .env.keys -f apps/app1/.env -- yourcommand
1289
1289
  </details>
1290
1290
  <details><summary>`run --no-vlt`</summary><br>
1291
1291
 
1292
- Turn off [Dotenvx Vlt Ops](https://dotenvx.com/vlt) features.
1292
+ Turn off [Dotenvx VLT ](https://dotenvx.com/vlt) features.
1293
1293
 
1294
1294
  ```sh
1295
1295
  $ dotenvx run --no-vlt -- yourcommand
@@ -1624,7 +1624,7 @@ $ dotenvx encrypt -f .env.production
1624
1624
  </details>
1625
1625
  <details><summary>`encrypt --no-vlt`</summary><br>
1626
1626
 
1627
- Turn off [Dotenvx Vlt Ops](https://dotenvx.com/vlt) features for encrypt.
1627
+ Turn off [Dotenvx VLT ](https://dotenvx.com/vlt) features for encrypt.
1628
1628
 
1629
1629
  ```sh
1630
1630
  $ dotenvx encrypt --no-vlt
@@ -2550,7 +2550,7 @@ $ dotenvx run --convention=nextjs -- node index.js
2550
2550
  </details>
2551
2551
  <details><summary>`config(noVlt:)` - noVlt</summary><br>
2552
2552
 
2553
- Turn off [Dotenvx Vlt Ops](https://dotenvx.com/vlt) features.
2553
+ Turn off [Dotenvx VLT ](https://dotenvx.com/vlt) features.
2554
2554
 
2555
2555
  ```js
2556
2556
  // index.js
@@ -2650,14 +2650,14 @@ This is known as *Decryption at Access* and is written about in [the whitepaper]
2650
2650
 
2651
2651
  &nbsp;
2652
2652
 
2653
- ## Vlt Ops
2653
+ ## VLT
2654
2654
 
2655
- [![dotenvx-vlt](https://dotenvx.com/dotenvx-vlt-banner.png)](https://dotenvx.com/vlt)
2655
+ [![dotenvx-vlt](https://dotenvx.com/dotenvx-vlt-banner.png?v2)](https://dotenvx.com/vlt)
2656
2656
 
2657
2657
  ```
2658
2658
  ⛨ ARMORED KEYS: Harden your private keys.
2659
2659
  ⮕ install [curl -sfS https://dotenvx.sh/vlt | sh]
2660
- ⮕ then run [dotenvx-vlt login]
2660
+ ⮕ then run [dotenvx vlt login]
2661
2661
  ```
2662
2662
 
2663
2663
  [Learn more](https://dotenvx.com/vlt)
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.69.1",
2
+ "version": "1.69.2",
3
3
  "name": "@dotenvx/dotenvx",
4
4
  "description": "secrets for agents–from the creator of `dotenv`",
5
5
  "author": "@motdotla",
@@ -63,8 +63,10 @@ async function decrypt () {
63
63
  }
64
64
 
65
65
  if (spinner) spinner.stop()
66
+ const armoredPrivateKeyUsed = processedEnvs.some((processedEnv) => processedEnv.armoredPrivateKeyUsed)
67
+ const keyUsedSuffix = armoredPrivateKeyUsed ? ' · armored ⛨' : ''
66
68
  if (changedFilepaths.length > 0) {
67
- logger.success(`◇ decrypted (${changedFilepaths.join(',')})`)
69
+ logger.success(`◇ decrypted (${changedFilepaths.join(',')})${keyUsedSuffix}`)
68
70
  } else if (unchangedFilepaths.length > 0) {
69
71
  logger.info(`○ no change (${unchangedFilepaths})`)
70
72
  } else {
@@ -4,7 +4,6 @@ const { logger } = require('./../../shared/logger')
4
4
  const Encrypt = require('./../../lib/services/encrypt')
5
5
 
6
6
  const catchAndLog = require('../../lib/helpers/catchAndLog')
7
- const localDisplayPath = require('../../lib/helpers/localDisplayPath')
8
7
  const createSpinner = require('../../lib/helpers/createSpinner')
9
8
  const prompts = require('../../lib/helpers/prompts')
10
9
  const Session = require('../../db/session')
@@ -37,10 +36,10 @@ function keyStorageSelector (spinner) {
37
36
 
38
37
  if (spinner) spinner.stop()
39
38
  selected = await prompts.select({
40
- message: 'Select key storage',
39
+ message: 'Choose private key storage',
41
40
  choices: [
42
- { name: 'Local (.env.keys)', value: 'local' },
43
- { name: 'Armored ', value: 'armored' }
41
+ { name: ' File (.env.keys)', value: 'file' },
42
+ { name: ' Armor (vlt.dotenvx.com)', value: 'armored' }
44
43
  ]
45
44
  }, {
46
45
  input: process.stdin,
@@ -108,15 +107,10 @@ async function encrypt () {
108
107
 
109
108
  if (spinner) spinner.stop()
110
109
  if (changedFilepaths.length > 0) {
111
- const localKeyAddedEnv = processedEnvs.find((processedEnv) => processedEnv.localPrivateKeyAdded)
112
110
  const remoteKeyAddedEnv = processedEnvs.find((processedEnv) => processedEnv.remotePrivateKeyAdded)
113
111
  let msg = `◈ encrypted (${changedFilepaths.join(',')})`
114
- if (localKeyAddedEnv) {
115
- const envKeysFilepath = localDisplayPath(localKeyAddedEnv.envKeysFilepath)
116
- msg += ` + local key (${envKeysFilepath})`
117
- }
118
112
  if (remoteKeyAddedEnv) {
119
- msg += ' + armored key ⛨'
113
+ msg += ' · armored ⛨'
120
114
  }
121
115
  logger.success(msg)
122
116
  } else if (unchangedFilepaths.length > 0) {
@@ -5,7 +5,6 @@ const Rotate = require('./../../lib/services/rotate')
5
5
 
6
6
  const catchAndLog = require('../../lib/helpers/catchAndLog')
7
7
  const createSpinner = require('../../lib/helpers/createSpinner')
8
- const localDisplayPath = require('../../lib/helpers/localDisplayPath')
9
8
  const Session = require('../../db/session')
10
9
  const normalizeVltOptions = require('./normalizeVltOptions')
11
10
 
@@ -59,16 +58,11 @@ async function rotate () {
59
58
 
60
59
  if (spinner) spinner.stop()
61
60
  if (changedFilepaths.length > 0) {
62
- const localKeyAddedEnv = processedEnvs.find((processedEnv) => processedEnv.localPrivateKeyAdded)
63
61
  const remoteKeyAddedEnv = processedEnvs.find((processedEnv) => processedEnv.remotePrivateKeyAdded)
64
62
 
65
63
  let msg = `⟳ rotated (${changedFilepaths.join(',')})`
66
- if (localKeyAddedEnv) {
67
- const envKeysFilepath = localDisplayPath(localKeyAddedEnv.envKeysFilepath)
68
- msg += ` + local key (${envKeysFilepath})`
69
- }
70
64
  if (remoteKeyAddedEnv) {
71
- msg += ' + armored key ⛨'
65
+ msg += ' · armored ⛨'
72
66
  }
73
67
  logger.success(msg)
74
68
  } else if (unchangedFilepaths.length > 0) {
@@ -56,9 +56,6 @@ async function run () {
56
56
  uniqueInjectedKeys
57
57
  } = await new Run(envs, options.overload, process.env, options.envKeysFile, noVlt, {
58
58
  keypairHooks: {
59
- before: () => {
60
- if (spinner) spinner.start('retrieving')
61
- },
62
59
  after: () => {
63
60
  if (spinner) spinner.start('injecting')
64
61
  }
@@ -114,8 +111,11 @@ async function run () {
114
111
  msg += ` from --env flag${readableStrings.length > 1 ? 's' : ''}`
115
112
  }
116
113
 
114
+ const armoredPrivateKeyUsed = processedEnvs.some((processedEnv) => processedEnv.armoredPrivateKeyUsed)
115
+ const keyUsedSuffix = armoredPrivateKeyUsed ? ' · armored ⛨' : ''
116
+
117
117
  if (spinner) spinner.stop()
118
- logger.successv(msg)
118
+ logger.success(`⟐ ${msg}${keyUsedSuffix}`)
119
119
  } catch (error) {
120
120
  if (spinner) spinner.stop()
121
121
  catchAndLog(error)
@@ -3,7 +3,6 @@ const { logger } = require('./../../shared/logger')
3
3
 
4
4
  const catchAndLog = require('../../lib/helpers/catchAndLog')
5
5
  const createSpinner = require('../../lib/helpers/createSpinner')
6
- const localDisplayPath = require('../../lib/helpers/localDisplayPath')
7
6
  const Session = require('../../db/session')
8
7
  const Sets = require('./../../lib/services/sets')
9
8
  const normalizeVltOptions = require('./normalizeVltOptions')
@@ -59,11 +58,8 @@ async function set (key, value) {
59
58
  const localKeyAddedEnv = processedEnvs.find((processedEnv) => processedEnv.localPrivateKeyAdded)
60
59
  const remoteKeyAddedEnv = processedEnvs.find((processedEnv) => processedEnv.remotePrivateKeyAdded)
61
60
  let keyAddedSuffix = ''
62
- if (localKeyAddedEnv) {
63
- keyAddedSuffix = ` + local key (${localDisplayPath(localKeyAddedEnv.envKeysFilepath)})`
64
- }
65
61
  if (remoteKeyAddedEnv) {
66
- keyAddedSuffix = ' + armored key ⛨'
62
+ keyAddedSuffix = ' · armored ⛨'
67
63
  }
68
64
 
69
65
  if (spinner) spinner.stop()
@@ -73,7 +69,7 @@ async function set (key, value) {
73
69
  } else {
74
70
  logger.success(`◇ set ${key} (${changedFilepaths.join(',')})`)
75
71
  }
76
- } else if (encrypt && localKeyAddedEnv) { // TODO: this needs to take into account remoteKeyAddedEnv
72
+ } else if (encrypt && localKeyAddedEnv) {
77
73
  const localKeyAddedEnvFilepath = localKeyAddedEnv.envFilepath || changedFilepaths[0] || '.env'
78
74
  logger.success(`◈ encrypted ${key} (${localKeyAddedEnvFilepath})${keyAddedSuffix}`)
79
75
  } else if (unchangedFilepaths.length > 0) {
@@ -202,12 +202,12 @@ program.command('doctor', { hidden: true })
202
202
  })
203
203
 
204
204
  // dotenvx login
205
- program.command('login')
206
- .description('log in to unlock ⛨ ARMORED KEYS ✦ BETA')
205
+ program.command('login', { hidden: true })
206
+ .description('')
207
207
  .allowUnknownOption()
208
208
  .action(() => {
209
- const rawArgs = ['ops', 'login', ...process.argv.slice(3)]
210
- executeDynamic(program, 'ops', rawArgs)
209
+ const rawArgs = ['vlt', 'login', ...process.argv.slice(3)]
210
+ executeDynamic(program, 'vlt', rawArgs)
211
211
  })
212
212
 
213
213
  // dotenvx logout
@@ -215,8 +215,8 @@ program.command('logout', { hidden: true })
215
215
  .description('log out of your dotenvx account')
216
216
  .allowUnknownOption()
217
217
  .action(() => {
218
- const rawArgs = ['ops', 'logout', ...process.argv.slice(3)]
219
- executeDynamic(program, 'ops', rawArgs)
218
+ const rawArgs = ['vlt', 'logout', ...process.argv.slice(3)]
219
+ executeDynamic(program, 'vlt', rawArgs)
220
220
  })
221
221
 
222
222
  // dotenvx armor
@@ -224,8 +224,8 @@ program.command('armor', { hidden: true })
224
224
  .description('ARMORED KEYS ⛨')
225
225
  .allowUnknownOption()
226
226
  .action((args) => {
227
- const rawArgs = ['ops', 'armor', ...process.argv.slice(3)]
228
- executeDynamic(program, 'ops', rawArgs)
227
+ const rawArgs = ['vlt', 'armor', ...process.argv.slice(3)]
228
+ executeDynamic(program, 'vlt', rawArgs)
229
229
  })
230
230
 
231
231
  // dotenvx help
@@ -247,8 +247,9 @@ program.command('help [command]')
247
247
  // dotenvx vlt ops
248
248
  program.addHelpText('after', ' ')
249
249
  program.addHelpText('after', 'Advanced: ')
250
- program.addHelpText('after', ' vlt ⛨ Vlt Ops [www.dotenvx.com/vlt]')
251
- program.addHelpText('after', ' ext 🔌 extensions')
250
+ program.addHelpText('after', ' login')
251
+ program.addHelpText('after', ' vlt ⛨ ARMORED KEYS [www.dotenvx.com/vlt]')
252
+ program.addHelpText('after', ' ext ⊕ extensions')
252
253
 
253
254
  // dotenvx ext
254
255
  program.addCommand(require('./commands/ext'))
@@ -2,7 +2,7 @@ const FIRST_TIME_KEYS_SRC = [
2
2
  '#/------------------!DOTENV_PRIVATE_KEYS!-------------------/',
3
3
  '#/ private decryption keys. DO NOT commit to source control /',
4
4
  '#/ [how it works](https://dotenvx.com/encryption) /',
5
- '#/ harden private keys: `dotenvx armor up` /',
5
+ '#/ ARMORED KEYS: `dotenvx armor up` /',
6
6
  '#/----------------------------------------------------------/'
7
7
  ].join('\n')
8
8
 
@@ -2,7 +2,7 @@ const FIRST_TIME_KEYS_SRC = [
2
2
  '#/------------------!DOTENV_PRIVATE_KEYS!-------------------/',
3
3
  '#/ private decryption keys. DO NOT commit to source control /',
4
4
  '#/ [how it works](https://dotenvx.com/encryption) /',
5
- '#/ harden private keys: `dotenvx armor up` /',
5
+ '#/ ARMORED KEYS: `dotenvx armor up` /',
6
6
  '#/----------------------------------------------------------/'
7
7
  ].join('\n')
8
8
 
@@ -2,23 +2,28 @@ const path = require('path')
2
2
  const childProcess = require('child_process')
3
3
  const { logger } = require('../../shared/logger')
4
4
 
5
- function installCommandForVlt () {
6
- return 'curl -sfS https://dotenvx.sh/vlt | sh'
7
- }
8
-
9
- function vltBanner (installCommand) {
5
+ function vltBanner () {
10
6
  const lines = [
7
+ ' [www.dotenvx.com/vlt]',
8
+ '–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––',
9
+ '',
10
+ ' Dotenvx + VLT ⛨',
11
+ '',
12
+ ' ARMORED KEYS',
13
+ ' Private keys. Off device. Under guard.',
11
14
  '',
12
- ' ██╗ ██╗██╗ ████████╗',
13
- ' ██║ ██║██║ ╚══██╔══╝',
14
- ' ██║ ██║██║ ██║ ',
15
- ' ╚██╗ ██╔╝██║ ██║ [www.dotenvx.com/vlt]',
16
- ' ╚████╔╝ ███████╗██║ ',
17
- ' ╚═══╝ ╚══════╝╚═╝ ',
15
+ ' -',
18
16
  '',
19
- ' ⛨ ARMORED KEYS: Harden your private keys.',
20
- ` ⮕ install [${installCommand}]`,
21
- ' ⮕ then run [dotenvx-vlt login]'
17
+ ' Install one',
18
+ ' [curl -sfS https://dotenvx.sh/vlt | sh]',
19
+ ' [npm i @dotenvx/dotenvx --save]',
20
+ '',
21
+ ' -',
22
+ '',
23
+ ' Then',
24
+ ' [dotenvx armor up]',
25
+ ' (sign in when prompted)',
26
+ ''
22
27
  ]
23
28
 
24
29
  const innerWidth = Math.max(67, ...lines.map((line) => line.length))
@@ -47,14 +52,18 @@ function executeDynamic (program, command, rawArgs) {
47
52
  const newPath = `${binPath}:${process.env.PATH}`
48
53
  const env = { ...process.env, PATH: newPath }
49
54
 
50
- const result = childProcess.spawnSync(`dotenvx-${command}`, forwardedArgs, { stdio: 'inherit', env })
55
+ let spawnCommand = `dotenvx-${command}`
56
+ let result = childProcess.spawnSync(spawnCommand, forwardedArgs, { stdio: 'inherit', env })
57
+ if (command === 'ops' && result.error) {
58
+ spawnCommand = 'dotenvx-vlt'
59
+ result = childProcess.spawnSync(spawnCommand, forwardedArgs, { stdio: 'inherit', env })
60
+ }
61
+
51
62
  if (result.error) {
52
63
  if (command === 'vlt') {
53
- const installCommand = installCommandForVlt()
54
- console.log(vltBanner(installCommand))
64
+ console.log(vltBanner())
55
65
  } else if (command === 'ops') {
56
- const installCommand = installCommandForVlt()
57
- console.log(vltBanner(installCommand))
66
+ console.log(vltBanner())
58
67
  } else {
59
68
  logger.info(`error: unknown command '${command}'`)
60
69
  }
@@ -41,6 +41,7 @@ async function keyValues (filepath, opts = {}) {
41
41
 
42
42
  let publicKey = null
43
43
  let privateKey = null
44
+ let privateKeySource = null
44
45
 
45
46
  // public key: process.env first, then .env*
46
47
  publicKey = readProcessKey(publicKeyName)
@@ -74,12 +75,18 @@ async function keyValues (filepath, opts = {}) {
74
75
  if (!noVlt && !privateKey && publicKey && publicKey.length > 0) {
75
76
  const kp = await vltKeypair(publicKey, { envFilepath: filepath, hooks: opts.keypairHooks })
76
77
  privateKey = kp.privateKey
78
+ privateKeySource = 'vlt'
77
79
  }
78
80
 
79
- return {
81
+ const result = {
80
82
  publicKeyValue: publicKey || null, // important to make sure name is rendered
81
83
  privateKeyValue: privateKey || null // important to make sure name is rendered
82
84
  }
85
+ if (privateKeySource) {
86
+ result.privateKeySource = privateKeySource
87
+ }
88
+
89
+ return result
83
90
  }
84
91
 
85
92
  module.exports = keyValues
@@ -37,6 +37,7 @@ function keyValuesFromEnvSrc (src, privateKeyName = null, opts = {}) {
37
37
  }
38
38
 
39
39
  let privateKeyValue = null
40
+ let privateKeySource = null
40
41
  if (privateKeyName) {
41
42
  privateKeyValue = readProcessKey(processEnv, privateKeyName)
42
43
 
@@ -54,13 +55,19 @@ function keyValuesFromEnvSrc (src, privateKeyName = null, opts = {}) {
54
55
  if (!noVlt && !privateKeyValue && publicKeyValue && publicKeyValue.length > 0) {
55
56
  const kp = vltKeypairSync(publicKeyValue)
56
57
  privateKeyValue = kp.privateKey
58
+ privateKeySource = 'vlt'
57
59
  }
58
60
 
59
- return {
61
+ const result = {
60
62
  publicKeyValue: publicKeyValue || null,
61
63
  privateKeyValue: privateKeyValue || null,
62
64
  privateKeyName: privateKeyName || null
63
65
  }
66
+ if (privateKeySource) {
67
+ result.privateKeySource = privateKeySource
68
+ }
69
+
70
+ return result
64
71
  }
65
72
 
66
73
  module.exports = keyValuesFromEnvSrc
@@ -41,6 +41,7 @@ function keyValuesSync (filepath, opts = {}) {
41
41
 
42
42
  let publicKey = null
43
43
  let privateKey = null
44
+ let privateKeySource = null
44
45
 
45
46
  // public key: process.env first, then .env*
46
47
  publicKey = readProcessKey(publicKeyName)
@@ -79,12 +80,18 @@ function keyValuesSync (filepath, opts = {}) {
79
80
 
80
81
  const kp = vltKeypairSync(publicKey, vltOptions)
81
82
  privateKey = kp.privateKey
83
+ privateKeySource = 'vlt'
82
84
  }
83
85
 
84
- return {
86
+ const result = {
85
87
  publicKeyValue: publicKey || null, // important to make sure name is rendered
86
88
  privateKeyValue: privateKey || null // important to make sure name is rendered
87
89
  }
90
+ if (privateKeySource) {
91
+ result.privateKeySource = privateKeySource
92
+ }
93
+
94
+ return result
88
95
  }
89
96
 
90
97
  module.exports = keyValuesSync
package/src/lib/main.js CHANGED
@@ -20,7 +20,6 @@ const buildEnvs = require('./helpers/buildEnvs')
20
20
  const { determine } = require('./helpers/envResolution')
21
21
  const Parse = require('./helpers/parse')
22
22
  const fsx = require('./helpers/fsx')
23
- const localDisplayPath = require('./helpers/localDisplayPath')
24
23
 
25
24
  /** @type {import('./main').config} */
26
25
  const config = function (options = {}) {
@@ -213,11 +212,8 @@ const set = function (key, value, options = {}) {
213
212
  const localKeyAddedEnv = processedEnvs.find((processedEnv) => processedEnv.localPrivateKeyAdded)
214
213
  const remoteKeyAddedEnv = processedEnvs.find((processedEnv) => processedEnv.remotePrivateKeyAdded)
215
214
 
216
- if (localKeyAddedEnv) {
217
- keyAddedSuffix = ` + local key (${localDisplayPath(localKeyAddedEnv.envKeysFilepath)})`
218
- }
219
215
  if (remoteKeyAddedEnv) {
220
- keyAddedSuffix = ' + armored key ⛨'
216
+ keyAddedSuffix = ' · armored ⛨'
221
217
  }
222
218
 
223
219
  if (changedFilepaths.length > 0) {
@@ -77,9 +77,11 @@ class Decrypt {
77
77
  const envParsed = dotenvParse(envSrc, false, false, true)
78
78
 
79
79
  const { privateKeyName } = keyNames(envFilepath)
80
- const { privateKeyValue } = await keyValues(envFilepath, { keysFilepath: this.envKeysFilepath, noVlt: this.noVlt })
80
+ const { privateKeyValue, privateKeySource } = await keyValues(envFilepath, { keysFilepath: this.envKeysFilepath, noVlt: this.noVlt })
81
81
 
82
82
  row.privateKey = privateKeyValue
83
+ row.privateKeySource = privateKeySource
84
+ row.armoredPrivateKeyUsed = privateKeySource === 'vlt'
83
85
  row.privateKeyName = privateKeyName
84
86
  row.changed = false // track possible changes
85
87
 
@@ -93,7 +93,8 @@ class Run {
93
93
  try {
94
94
  const {
95
95
  privateKeyName: resolvedPrivateKeyName,
96
- privateKeyValue
96
+ privateKeyValue,
97
+ privateKeySource
97
98
  } = keyValuesFromEnvSrc(env, privateKeyName, { keysFilepath: this.envKeysFilepath, noVlt: this.noVlt, processEnv: this.processEnv })
98
99
 
99
100
  const {
@@ -105,6 +106,10 @@ class Run {
105
106
 
106
107
  row.privateKeyName = resolvedPrivateKeyName
107
108
  row.privateKey = privateKeyValue
109
+ if (privateKeySource) {
110
+ row.privateKeySource = privateKeySource
111
+ row.armoredPrivateKeyUsed = privateKeySource === 'vlt'
112
+ }
108
113
  row.parsed = parsed
109
114
  row.errors = errors
110
115
  row.injected = injected
@@ -136,7 +141,7 @@ class Run {
136
141
  this.readableFilepaths.add(envFilepath)
137
142
 
138
143
  const { privateKeyName } = keyNames(filepath)
139
- const { privateKeyValue } = keyValuesSync(filepath, {
144
+ const { privateKeyValue, privateKeySource } = keyValuesSync(filepath, {
140
145
  keysFilepath: this.envKeysFilepath,
141
146
  noVlt: this.noVlt,
142
147
  noSpinner: this.noSpinner
@@ -151,6 +156,10 @@ class Run {
151
156
 
152
157
  row.privateKeyName = privateKeyName
153
158
  row.privateKey = privateKeyValue
159
+ if (privateKeySource) {
160
+ row.privateKeySource = privateKeySource
161
+ row.armoredPrivateKeyUsed = privateKeySource === 'vlt'
162
+ }
154
163
  row.src = src
155
164
  row.parsed = parsed
156
165
  row.errors = errors
@@ -185,7 +194,7 @@ class Run {
185
194
  this.readableFilepaths.add(envFilepath)
186
195
 
187
196
  const { privateKeyName } = keyNames(filepath)
188
- const { privateKeyValue } = await keyValues(filepath, {
197
+ const { privateKeyValue, privateKeySource } = await keyValues(filepath, {
189
198
  keysFilepath: this.envKeysFilepath,
190
199
  noVlt: this.noVlt,
191
200
  keypairHooks: this.keypairHooks
@@ -200,6 +209,10 @@ class Run {
200
209
 
201
210
  row.privateKeyName = privateKeyName
202
211
  row.privateKey = privateKeyValue
212
+ if (privateKeySource) {
213
+ row.privateKeySource = privateKeySource
214
+ row.armoredPrivateKeyUsed = privateKeySource === 'vlt'
215
+ }
203
216
  row.src = src
204
217
  row.parsed = parsed
205
218
  row.errors = errors