@dotenvx/dotenvx 2.2.1 → 2.2.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 +7 -1
- package/README.md +24 -34
- package/package.json +2 -2
- package/src/cli/commands/armor.js +18 -0
- package/src/cli/dotenvx.js +2 -4
- package/src/db/session.js +7 -7
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/v2.2.
|
|
5
|
+
[Unreleased](https://github.com/dotenvx/dotenvx/compare/v2.2.2...main)
|
|
6
|
+
|
|
7
|
+
## [2.2.2](https://github.com/dotenvx/dotenvx/compare/v2.2.1...v2.2.2) (2026-07-08)
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
* Move `login` and `logout` under armor ([#874](https://github.com/dotenvx/dotenvx/pull/874))
|
|
6
12
|
|
|
7
13
|
## [2.2.1](https://github.com/dotenvx/dotenvx/compare/v2.2.0...v2.2.1) (2026-07-08)
|
|
8
14
|
|
package/README.md
CHANGED
|
@@ -2382,7 +2382,7 @@ Move private keys into [Dotenvx Armor ⛨](https://dotenvx.com/armor) for off-de
|
|
|
2382
2382
|
Move a private key from `.env.keys` into Dotenvx Armor.
|
|
2383
2383
|
|
|
2384
2384
|
```sh
|
|
2385
|
-
$ dotenvx login
|
|
2385
|
+
$ dotenvx armor login
|
|
2386
2386
|
$ dotenvx armor up
|
|
2387
2387
|
```
|
|
2388
2388
|
|
|
@@ -2434,6 +2434,24 @@ Move an armored key to another team.
|
|
|
2434
2434
|
$ dotenvx armor move --team acme
|
|
2435
2435
|
```
|
|
2436
2436
|
|
|
2437
|
+
</details>
|
|
2438
|
+
<details><summary>`armor login`</summary><br>
|
|
2439
|
+
|
|
2440
|
+
Log in to Dotenvx Armor.
|
|
2441
|
+
|
|
2442
|
+
```sh
|
|
2443
|
+
$ dotenvx armor login
|
|
2444
|
+
```
|
|
2445
|
+
|
|
2446
|
+
</details>
|
|
2447
|
+
<details><summary>`armor logout`</summary><br>
|
|
2448
|
+
|
|
2449
|
+
Log out of Dotenvx Armor.
|
|
2450
|
+
|
|
2451
|
+
```sh
|
|
2452
|
+
$ dotenvx armor logout
|
|
2453
|
+
```
|
|
2454
|
+
|
|
2437
2455
|
</details>
|
|
2438
2456
|
<details><summary>`help`</summary><br>
|
|
2439
2457
|
|
|
@@ -2470,9 +2488,8 @@ Commands:
|
|
|
2470
2488
|
prevent including .env files in docker
|
|
2471
2489
|
|
|
2472
2490
|
Professional Security:
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
armor ⛨ move private keys off-device [www.dotenvx.com/armor]
|
|
2491
|
+
keychain ⌥ move private keys into macOS Keychain
|
|
2492
|
+
armor ⛨ move private keys into Dotenvx Armor [www.dotenvx.com/armor]
|
|
2476
2493
|
```
|
|
2477
2494
|
|
|
2478
2495
|
You can get more detailed help per command with `dotenvx help COMMAND`.
|
|
@@ -2520,24 +2537,6 @@ X.X.X
|
|
|
2520
2537
|
|
|
2521
2538
|
</details>
|
|
2522
2539
|
|
|
2523
|
-
### Utilities
|
|
2524
|
-
|
|
2525
|
-
Additional workflow helpers.
|
|
2526
|
-
|
|
2527
|
-
<details><summary>`ext scan`</summary><br>
|
|
2528
|
-
|
|
2529
|
-
Scan for leaked secrets.
|
|
2530
|
-
|
|
2531
|
-
```sh
|
|
2532
|
-
$ dotenvx ext scan
|
|
2533
|
-
100 commits scanned.
|
|
2534
|
-
no leaks found
|
|
2535
|
-
```
|
|
2536
|
-
|
|
2537
|
-
Uses [gitleaks](https://gitleaks.io) under the hood.
|
|
2538
|
-
|
|
2539
|
-
</details>
|
|
2540
|
-
|
|
2541
2540
|
### Library 📦
|
|
2542
2541
|
|
|
2543
2542
|
Use dotenvx directly in code.
|
|
@@ -2888,18 +2887,6 @@ This is known as *Decryption at Access* and is written about in [the whitepaper]
|
|
|
2888
2887
|
|
|
2889
2888
|
|
|
2890
2889
|
|
|
2891
|
-
## Whitepaper
|
|
2892
|
-
|
|
2893
|
-
> **Dotenvx: Reducing Secrets Risk with Cryptographic Separation**
|
|
2894
|
-
>
|
|
2895
|
-
> Abstract. An ideal secrets solution would not only centralize secrets but also contain the fallout of a breach. While secrets managers offer centralized storage and distribution, their design creates a large blast radius, risking exposure of thousands or even millions of secrets. We propose a solution that reduces the blast radius by splitting secrets management into two distinct components: an encrypted secrets file and a separate decryption key.
|
|
2896
|
-
>
|
|
2897
|
-
> ...
|
|
2898
|
-
>
|
|
2899
|
-
> [Read the whitepaper](https://dotenvx.com/dotenvx.pdf)
|
|
2900
|
-
|
|
2901
|
-
|
|
2902
|
-
|
|
2903
2890
|
## Guides
|
|
2904
2891
|
|
|
2905
2892
|
> Go deeper with `dotenvx` – detailed framework and platform guides.
|
|
@@ -2931,6 +2918,9 @@ This is known as *Decryption at Access* and is written about in [the whitepaper]
|
|
|
2931
2918
|
* [Render](https://dotenvx.com/docs/platforms/render)
|
|
2932
2919
|
* [CI/CDs](https://dotenvx.com/docs#cis)
|
|
2933
2920
|
* [GitHub Actions](https://dotenvx.com/docs/cis/github-actions)
|
|
2921
|
+
* [Password Managers](https://dotenvx.com/docs#password-managers)
|
|
2922
|
+
* [1Password](https://dotenvx.com/docs/guides/1password)
|
|
2923
|
+
* [Bitwarden](https://dotenvx.com/docs/guides/bitwarden)
|
|
2934
2924
|
* [Background Jobs](https://dotenvx.com/docs#background-jobs)
|
|
2935
2925
|
* [Trigger.dev](https://dotenvx.com/docs/background-jobs/triggerdotdev)
|
|
2936
2926
|
* [Package Managers](https://dotenvx.com/docs#package-managers)
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2.2.
|
|
2
|
+
"version": "2.2.2",
|
|
3
3
|
"name": "@dotenvx/dotenvx",
|
|
4
4
|
"description": "a secure dotenv–from the creator of `dotenv`",
|
|
5
5
|
"author": "@motdotla",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"standard": "standard",
|
|
37
37
|
"standard:fix": "standard --fix",
|
|
38
38
|
"test": "tap run --test-env=DOTENVX_NO_ARMOR=true --allow-empty-coverage --disable-coverage --timeout=60000",
|
|
39
|
-
"testshell": "bash
|
|
39
|
+
"testshell": "shellspec --shell /bin/bash",
|
|
40
40
|
"release:check": "npm test && npm run testshell",
|
|
41
41
|
"prerelease": "npm run release:check",
|
|
42
42
|
"release": "npm run release:check && standard-version"
|
|
@@ -66,6 +66,24 @@ function configureArmorCommand (armor) {
|
|
|
66
66
|
.option('--token <token>', 'set token')
|
|
67
67
|
.action(moveAction)
|
|
68
68
|
|
|
69
|
+
// dotenvx armor login
|
|
70
|
+
const loginAction = require('./../actions/login')
|
|
71
|
+
armor
|
|
72
|
+
.command('login')
|
|
73
|
+
.description('log in to Dotenvx Armor')
|
|
74
|
+
.allowUnknownOption()
|
|
75
|
+
.option('--hostname <hostname>', 'set Armor ⛨ hostname')
|
|
76
|
+
.action(loginAction)
|
|
77
|
+
|
|
78
|
+
// dotenvx armor logout
|
|
79
|
+
const logoutAction = require('./../actions/logout')
|
|
80
|
+
armor
|
|
81
|
+
.command('logout')
|
|
82
|
+
.description('log out of Dotenvx Armor')
|
|
83
|
+
.allowUnknownOption()
|
|
84
|
+
.option('--hostname <hostname>', 'set Armor ⛨ hostname')
|
|
85
|
+
.action(logoutAction)
|
|
86
|
+
|
|
69
87
|
return armor
|
|
70
88
|
}
|
|
71
89
|
|
package/src/cli/dotenvx.js
CHANGED
|
@@ -231,7 +231,7 @@ program.command('doctor', { hidden: true })
|
|
|
231
231
|
return require('./actions/doctor').apply(this, args)
|
|
232
232
|
})
|
|
233
233
|
|
|
234
|
-
// dotenvx login
|
|
234
|
+
// dotenvx login (compatibility alias for dotenvx armor login)
|
|
235
235
|
program.command('login', { hidden: true })
|
|
236
236
|
.description('log in to move keys off-device, share with your team, and audit access')
|
|
237
237
|
.allowUnknownOption()
|
|
@@ -240,7 +240,7 @@ program.command('login', { hidden: true })
|
|
|
240
240
|
return require('./actions/login').apply(this, args)
|
|
241
241
|
})
|
|
242
242
|
|
|
243
|
-
// dotenvx logout
|
|
243
|
+
// dotenvx logout (compatibility alias for dotenvx armor logout)
|
|
244
244
|
program.command('logout', { hidden: true })
|
|
245
245
|
.description('log out of connected security features')
|
|
246
246
|
.allowUnknownOption()
|
|
@@ -268,8 +268,6 @@ program.command('help [command]')
|
|
|
268
268
|
// dotenvx armor
|
|
269
269
|
program.addHelpText('after', ' ')
|
|
270
270
|
program.addHelpText('after', 'Professional Security: ')
|
|
271
|
-
program.addHelpText('after', ' login log in to move keys off-device, share with your team, and audit access')
|
|
272
|
-
program.addHelpText('after', ' logout log out of connected security features')
|
|
273
271
|
program.addHelpText('after', ' keychain ⌥ move private keys into macOS Keychain')
|
|
274
272
|
program.addHelpText('after', ' armor ⛨ move private keys into Dotenvx Armor [www.dotenvx.com/armor]')
|
|
275
273
|
|
package/src/db/session.js
CHANGED
|
@@ -226,19 +226,19 @@ class Session {
|
|
|
226
226
|
//
|
|
227
227
|
login (hostname, id, username, accessToken) {
|
|
228
228
|
if (!hostname) {
|
|
229
|
-
throw new Error('DOTENVX_ARMOR_HOSTNAME not set. Run [dotenvx login]')
|
|
229
|
+
throw new Error('DOTENVX_ARMOR_HOSTNAME not set. Run [dotenvx armor login]')
|
|
230
230
|
}
|
|
231
231
|
|
|
232
232
|
if (!id) {
|
|
233
|
-
throw new Error('DOTENVX_ARMOR_USER not set. Run [dotenvx login]')
|
|
233
|
+
throw new Error('DOTENVX_ARMOR_USER not set. Run [dotenvx armor login]')
|
|
234
234
|
}
|
|
235
235
|
|
|
236
236
|
if (!username) {
|
|
237
|
-
throw new Error('DOTENVX_ARMOR_USERNAME not set. Run [dotenvx login]')
|
|
237
|
+
throw new Error('DOTENVX_ARMOR_USERNAME not set. Run [dotenvx armor login]')
|
|
238
238
|
}
|
|
239
239
|
|
|
240
240
|
if (!accessToken) {
|
|
241
|
-
throw new Error('DOTENVX_ARMOR_TOKEN not set. Run [dotenvx login]')
|
|
241
|
+
throw new Error('DOTENVX_ARMOR_TOKEN not set. Run [dotenvx armor login]')
|
|
242
242
|
}
|
|
243
243
|
|
|
244
244
|
const store = this.createStore()
|
|
@@ -252,15 +252,15 @@ class Session {
|
|
|
252
252
|
|
|
253
253
|
logout (hostname, id, accessToken) {
|
|
254
254
|
if (!hostname) {
|
|
255
|
-
throw new Error('DOTENVX_ARMOR_HOSTNAME not set. Run [dotenvx login]')
|
|
255
|
+
throw new Error('DOTENVX_ARMOR_HOSTNAME not set. Run [dotenvx armor login]')
|
|
256
256
|
}
|
|
257
257
|
|
|
258
258
|
if (!id) {
|
|
259
|
-
throw new Error('DOTENVX_ARMOR_USER not set. Run [dotenvx login]')
|
|
259
|
+
throw new Error('DOTENVX_ARMOR_USER not set. Run [dotenvx armor login]')
|
|
260
260
|
}
|
|
261
261
|
|
|
262
262
|
if (!accessToken) {
|
|
263
|
-
throw new Error('DOTENVX_ARMOR_TOKEN not set. Run [dotenvx login]')
|
|
263
|
+
throw new Error('DOTENVX_ARMOR_TOKEN not set. Run [dotenvx armor login]')
|
|
264
264
|
}
|
|
265
265
|
|
|
266
266
|
const store = this.openStore()
|