@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 +13 -1
- package/README.md +34 -0
- package/package.json +1 -1
- package/src/cli/actions/armor/down.js +2 -1
- package/src/cli/actions/armor/move.js +2 -1
- package/src/cli/actions/armor/pull.js +2 -1
- package/src/cli/actions/armor/push.js +2 -1
- package/src/cli/actions/armor/status.js +7 -0
- package/src/cli/actions/armor/up.js +2 -1
- package/src/cli/actions/decrypt.js +2 -1
- package/src/cli/actions/encrypt.js +2 -1
- package/src/cli/actions/get.js +2 -1
- package/src/cli/actions/keychain/down.js +2 -1
- package/src/cli/actions/keychain/pull.js +2 -1
- package/src/cli/actions/keychain/push.js +2 -1
- package/src/cli/actions/keychain/up.js +2 -1
- package/src/cli/actions/keypair.js +2 -1
- package/src/cli/actions/login.js +2 -1
- package/src/cli/actions/logout.js +2 -1
- package/src/cli/actions/run.js +2 -1
- package/src/cli/actions/set.js +2 -1
- package/src/cli/commands/armor.js +8 -0
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.
|
|
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
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
|
@@ -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
|
|
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
|
|
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
|
|
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)}`)
|
package/src/cli/actions/get.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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) {
|
package/src/cli/actions/login.js
CHANGED
|
@@ -12,7 +12,8 @@ const FRAMES = ['◐', '◓', '◑', '◒']
|
|
|
12
12
|
|
|
13
13
|
async function login () {
|
|
14
14
|
const options = this.opts()
|
|
15
|
-
const
|
|
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
|
|
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
|
|
package/src/cli/actions/run.js
CHANGED
|
@@ -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) {
|
package/src/cli/actions/set.js
CHANGED
|
@@ -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
|
|