@dotenvx/dotenvx 2.7.1 → 2.7.3

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,19 @@
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/v2.7.1...main)
5
+ [Unreleased](https://github.com/dotenvx/dotenvx/compare/v2.7.3...main)
6
+
7
+ ## [2.7.3](https://github.com/dotenvx/dotenvx/compare/v2.7.2...v2.7.3) (2026-07-13)
8
+
9
+ ### Changed
10
+
11
+ * Fix: `--quiet` should not display the spinner and its stderr messages ([#889](https://github.com/dotenvx/dotenvx/pull/889))
12
+
13
+ ## [2.7.2](https://github.com/dotenvx/dotenvx/compare/v2.7.1...v2.7.2) (2026-07-13)
14
+
15
+ ### Added
16
+
17
+ * Include `dotenvx armor status` command.
6
18
 
7
19
  ## [2.7.1](https://github.com/dotenvx/dotenvx/compare/v2.7.0...v2.7.1) (2026-07-13)
8
20
 
package/README.md CHANGED
@@ -2648,6 +2648,8 @@ Log in to Dotenvx Armor.
2648
2648
  $ dotenvx armor login
2649
2649
  ```
2650
2650
 
2651
+ After authentication, dotenvx first attempts to store your access token in your operating system's native secret store: macOS Keychain, Windows Credential Manager, or Linux Secret Service. If native secure storage is unavailable, dotenvx falls back to its settings file. This follows a common CLI credential-storage pattern: prefer protected OS storage when available while remaining usable in headless or minimal environments.
2652
+
2651
2653
  </details>
2652
2654
  <details><summary>`armor logout`</summary><br>
2653
2655
 
@@ -2657,6 +2659,38 @@ Log out of Dotenvx Armor.
2657
2659
  $ dotenvx armor logout
2658
2660
  ```
2659
2661
 
2662
+ </details>
2663
+ <details><summary>`armor status`</summary><br>
2664
+
2665
+ Print the current Armor status. It returns `on` when you are logged in and Armor is enabled; otherwise it returns `off`.
2666
+
2667
+ ```sh
2668
+ $ dotenvx armor status
2669
+ on
2670
+ ```
2671
+
2672
+ </details>
2673
+ <details><summary>`armor settings`</summary><br>
2674
+
2675
+ Inspect and manage your local Armor settings.
2676
+
2677
+ ```sh
2678
+ $ dotenvx armor settings username
2679
+ $ dotenvx armor settings token
2680
+ $ dotenvx armor settings device
2681
+ $ dotenvx armor settings hostname
2682
+ $ dotenvx armor settings path
2683
+ $ dotenvx armor settings on
2684
+ $ dotenvx armor settings off
2685
+ ```
2686
+
2687
+ Access tokens and device public keys are masked by default. Reveal the complete value only when you explicitly need it.
2688
+
2689
+ ```sh
2690
+ $ dotenvx armor settings token --unmask
2691
+ $ dotenvx armor settings device --unmask
2692
+ ```
2693
+
2660
2694
  </details>
2661
2695
  <details><summary>`help`</summary><br>
2662
2696
 
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.7.1",
2
+ "version": "2.7.3",
3
3
  "name": "@dotenvx/dotenvx",
4
4
  "description": "a secure dotenv–from the creator of `dotenv`",
5
5
  "author": "@motdotla",
@@ -6,7 +6,8 @@ const armoredKeyDisplay = require('../../../lib/helpers/armoredKeyDisplay')
6
6
 
7
7
  async function down () {
8
8
  const options = this.opts()
9
- const spinner = await createSpinner({ ...options, text: 'dearmoring' })
9
+ const spinnerOptions = typeof this.optsWithGlobals === 'function' ? this.optsWithGlobals() : options
10
+ const spinner = await createSpinner({ ...spinnerOptions, ...options, text: 'dearmoring' })
10
11
 
11
12
  logger.debug(`options: ${JSON.stringify(options)}`)
12
13
 
@@ -6,7 +6,8 @@ const armoredKeyDisplay = require('../../../lib/helpers/armoredKeyDisplay')
6
6
 
7
7
  async function move () {
8
8
  const options = this.opts()
9
- const spinner = await createSpinner({ ...options, text: 'moving' })
9
+ const spinnerOptions = typeof this.optsWithGlobals === 'function' ? this.optsWithGlobals() : options
10
+ const spinner = await createSpinner({ ...spinnerOptions, ...options, text: 'moving' })
10
11
 
11
12
  logger.debug(`options: ${JSON.stringify(options)}`)
12
13
 
@@ -6,7 +6,8 @@ const armoredKeyDisplay = require('../../../lib/helpers/armoredKeyDisplay')
6
6
 
7
7
  async function pull () {
8
8
  const options = this.opts()
9
- const spinner = await createSpinner({ ...options, text: 'pulling' })
9
+ const spinnerOptions = typeof this.optsWithGlobals === 'function' ? this.optsWithGlobals() : options
10
+ const spinner = await createSpinner({ ...spinnerOptions, ...options, text: 'pulling' })
10
11
 
11
12
  logger.debug(`options: ${JSON.stringify(options)}`)
12
13
 
@@ -6,7 +6,8 @@ const armoredKeyDisplay = require('../../../lib/helpers/armoredKeyDisplay')
6
6
 
7
7
  async function push () {
8
8
  const options = this.opts()
9
- const spinner = await createSpinner({ ...options, text: 'pushing' })
9
+ const spinnerOptions = typeof this.optsWithGlobals === 'function' ? this.optsWithGlobals() : options
10
+ const spinner = await createSpinner({ ...spinnerOptions, ...options, text: 'pushing' })
10
11
 
11
12
  logger.debug(`options: ${JSON.stringify(options)}`)
12
13
 
@@ -0,0 +1,7 @@
1
+ const Session = require('../../../db/session')
2
+
3
+ function status () {
4
+ console.log(new Session().status())
5
+ }
6
+
7
+ module.exports = status
@@ -6,7 +6,8 @@ const armoredKeyDisplay = require('../../../lib/helpers/armoredKeyDisplay')
6
6
 
7
7
  async function up () {
8
8
  const options = this.opts()
9
- const spinner = await createSpinner({ ...options, text: 'armoring' })
9
+ const spinnerOptions = typeof this.optsWithGlobals === 'function' ? this.optsWithGlobals() : options
10
+ const spinner = await createSpinner({ ...spinnerOptions, ...options, text: 'armoring' })
10
11
 
11
12
  logger.debug(`options: ${JSON.stringify(options)}`)
12
13
 
@@ -10,7 +10,8 @@ const maskEnvSrc = require('../../lib/helpers/maskEnvSrc')
10
10
 
11
11
  async function decrypt () {
12
12
  const options = this.opts()
13
- const spinner = await createSpinner({ ...options, text: 'decrypting' })
13
+ const spinnerOptions = typeof this.optsWithGlobals === 'function' ? this.optsWithGlobals() : options
14
+ const spinner = await createSpinner({ ...spinnerOptions, ...options, text: 'decrypting' })
14
15
 
15
16
  logger.debug(`options: ${JSON.stringify(options)}`)
16
17
 
@@ -9,7 +9,8 @@ const Session = require('../../db/session')
9
9
 
10
10
  async function encryptAction () {
11
11
  const options = this.opts()
12
- const spinner = await createSpinner({ ...options, text: 'encrypting' })
12
+ const spinnerOptions = typeof this.optsWithGlobals === 'function' ? this.optsWithGlobals() : options
13
+ const spinner = await createSpinner({ ...spinnerOptions, ...options, text: 'encrypting' })
13
14
  const sesh = new Session()
14
15
 
15
16
  logger.debug(`options: ${JSON.stringify(options)}`)
@@ -12,7 +12,8 @@ const mask = require('../../lib/helpers/mask')
12
12
 
13
13
  async function get (key) {
14
14
  const options = normalizeDotenvConfigConvention(this.opts())
15
- const spinner = await createSpinner({ ...options, text: 'decrypting' })
15
+ const spinnerOptions = typeof this.optsWithGlobals === 'function' ? this.optsWithGlobals() : options
16
+ const spinner = await createSpinner({ ...spinnerOptions, ...options, text: 'decrypting' })
16
17
 
17
18
  logger.debug(`options: ${JSON.stringify(options)}`)
18
19
  if (key) {
@@ -5,7 +5,8 @@ const armoredKeyDisplay = require('../../../lib/helpers/armoredKeyDisplay')
5
5
 
6
6
  async function down () {
7
7
  const options = this.opts()
8
- const spinner = await createSpinner({ ...options, text: 'unkeychaining' })
8
+ const spinnerOptions = typeof this.optsWithGlobals === 'function' ? this.optsWithGlobals() : options
9
+ const spinner = await createSpinner({ ...spinnerOptions, ...options, text: 'unkeychaining' })
9
10
 
10
11
  logger.debug(`options: ${JSON.stringify(options)}`)
11
12
 
@@ -5,7 +5,8 @@ const armoredKeyDisplay = require('../../../lib/helpers/armoredKeyDisplay')
5
5
 
6
6
  async function pull () {
7
7
  const options = this.opts()
8
- const spinner = await createSpinner({ ...options, text: 'pulling' })
8
+ const spinnerOptions = typeof this.optsWithGlobals === 'function' ? this.optsWithGlobals() : options
9
+ const spinner = await createSpinner({ ...spinnerOptions, ...options, text: 'pulling' })
9
10
 
10
11
  logger.debug(`options: ${JSON.stringify(options)}`)
11
12
 
@@ -5,7 +5,8 @@ const armoredKeyDisplay = require('../../../lib/helpers/armoredKeyDisplay')
5
5
 
6
6
  async function push () {
7
7
  const options = this.opts()
8
- const spinner = await createSpinner({ ...options, text: 'pushing' })
8
+ const spinnerOptions = typeof this.optsWithGlobals === 'function' ? this.optsWithGlobals() : options
9
+ const spinner = await createSpinner({ ...spinnerOptions, ...options, text: 'pushing' })
9
10
 
10
11
  logger.debug(`options: ${JSON.stringify(options)}`)
11
12
 
@@ -5,7 +5,8 @@ const armoredKeyDisplay = require('../../../lib/helpers/armoredKeyDisplay')
5
5
 
6
6
  async function up () {
7
7
  const options = this.opts()
8
- const spinner = await createSpinner({ ...options, text: 'storing' })
8
+ const spinnerOptions = typeof this.optsWithGlobals === 'function' ? this.optsWithGlobals() : options
9
+ const spinner = await createSpinner({ ...spinnerOptions, ...options, text: 'storing' })
9
10
 
10
11
  logger.debug(`options: ${JSON.stringify(options)}`)
11
12
 
@@ -6,7 +6,8 @@ const createSpinner = require('../../lib/helpers/createSpinner')
6
6
 
7
7
  async function keypair (key) {
8
8
  const options = this.opts()
9
- const spinner = await createSpinner({ ...options, text: 'retrieving' })
9
+ const spinnerOptions = typeof this.optsWithGlobals === 'function' ? this.optsWithGlobals() : options
10
+ const spinner = await createSpinner({ ...spinnerOptions, ...options, text: 'retrieving' })
10
11
 
11
12
  logger.debug(`options: ${JSON.stringify(options)}`)
12
13
  if (key) {
@@ -12,7 +12,8 @@ const FRAMES = ['◐', '◓', '◑', '◒']
12
12
 
13
13
  async function login () {
14
14
  const options = this.opts()
15
- const spinner = await createSpinner({ ...options, text: 'logging in', frames: FRAMES })
15
+ const spinnerOptions = typeof this.optsWithGlobals === 'function' ? this.optsWithGlobals() : options
16
+ const spinner = await createSpinner({ ...spinnerOptions, ...options, text: 'logging in', frames: FRAMES })
16
17
 
17
18
  logger.debug(`options: ${JSON.stringify(options)}`)
18
19
 
@@ -8,7 +8,8 @@ const FRAMES = ['◐', '◓', '◑', '◒']
8
8
 
9
9
  async function logout () {
10
10
  const options = this.opts()
11
- const spinner = await createSpinner({ ...options, text: 'logging out', frames: FRAMES })
11
+ const spinnerOptions = typeof this.optsWithGlobals === 'function' ? this.optsWithGlobals() : options
12
+ const spinner = await createSpinner({ ...spinnerOptions, ...options, text: 'logging out', frames: FRAMES })
12
13
 
13
14
  logger.debug(`options: ${JSON.stringify(options)}`)
14
15
 
@@ -51,6 +51,7 @@ function uniqueInjectedKeys (processedEnvs) {
51
51
 
52
52
  async function run () {
53
53
  const options = normalizeDotenvConfigConvention(normalizeDotenvConfigQuiet(this.opts()))
54
+ const spinnerOptions = typeof this.optsWithGlobals === 'function' ? this.optsWithGlobals() : options
54
55
  const maskEnabled = options.mask !== undefined
55
56
  let showChar = options.mask
56
57
  if (options.mask === true) {
@@ -63,7 +64,7 @@ async function run () {
63
64
  commandArgs = inferCommandArgsFromProcessArgv(process.argv)
64
65
  }
65
66
 
66
- const spinner = await createSpinner({ ...options, text: 'injecting' })
67
+ const spinner = await createSpinner({ ...spinnerOptions, ...options, text: 'injecting' })
67
68
 
68
69
  let debugOptions = options
69
70
  if (maskEnabled) {
@@ -11,6 +11,7 @@ const Session = require('../../db/session')
11
11
 
12
12
  async function set (key, value) {
13
13
  const options = this.opts()
14
+ const spinnerOptions = typeof this.optsWithGlobals === 'function' ? this.optsWithGlobals() : options
14
15
 
15
16
  let encrypt = true
16
17
  let settingMessage = 'encrypting'
@@ -47,7 +48,7 @@ async function set (key, value) {
47
48
  }
48
49
  }
49
50
 
50
- const spinner = await createSpinner({ ...options, text: settingMessage })
51
+ const spinner = await createSpinner({ ...spinnerOptions, ...options, text: settingMessage })
51
52
  const sesh = new Session()
52
53
 
53
54
  logger.debug(`key: ${key}`)
@@ -91,6 +91,14 @@ function configureArmorCommand (armor) {
91
91
  return require('./../actions/logout').apply(this, args)
92
92
  })
93
93
 
94
+ // dotenvx armor status
95
+ armor
96
+ .command('status')
97
+ .description('print armor status')
98
+ .action(function (...args) {
99
+ return require('./../actions/armor/status').apply(this, args)
100
+ })
101
+
94
102
  // dotenvx armor settings
95
103
  require('./settings')(armor.command('settings'))
96
104